Я создаю панель basys2 в verilog для семисегментного дисплея, который будет отображаться в двоичном формате. Я использую переключатели 0-3 и хочу использовать 4 кнопки, чтобы при нажатии кнопки [0] выводилось двоичное число переключателей (вверх для 1, вниз для 0). Тем не менее, я зациклился на том, как интегрировать кнопки с двоичным и светодиодным. Я новичок в verilog и испытываю некоторые проблемы. Какие-либо предложения?Объединение светодиодов, переключателей и кнопок в verilog
module final(btn,clk,sw,cathodes,anodes,led,rst);
input clk,rst;
output [6:0] cathodes;
output [7:0] led;
output [3:0] anodes;
input [3:0] sw;
input [3:0] btn;
reg [6:0] cathodes;
reg [15:0] dig;
reg [3:0] anodes;
reg slow_clock;
integer count;
reg [7:0] led;
always @ (posedge clk)
create_slow_clock(clk, slow_clock);
Застрял здесь, как назначить во главе:
always @(posedge clk)
begin
if (btn[0:3]);
begin
led[0]
led[1]
led[2]
led[3]
Также не уверен, что это правильно:
always @ (posedge slow_clock)
begin
led=~led;
if (rst == 0) anodes = 4'b1111;
else
begin
case (btn)
0: anodes = 4'b0111;
1: anodes = 4'b1011;
2: anodes = 4'b1101;
3: anodes = 4'b1110;
default: anodes = 4'b1111;
endcase
cathodes = calc_cathode_value(dig);
end
end
.
function[6:0] calc_cathode_value;
input [15:0] dig;
begin
case (dig)
0: calc_cathode_value = 8'b00000011;
1: calc_cathode_value = 8'b10011111;
2: calc_cathode_value = 8'b00100101;
3: calc_cathode_value = 8'b00001101;
4: calc_cathode_value = 8'b10011001;
5: calc_cathode_value = 8'b01001001;
6: calc_cathode_value = 8'b01000001;
7: calc_cathode_value = 8'b00011111;
8: calc_cathode_value = 8'b00000001;
9: calc_cathode_value = 8'b00001001;
'hA: calc_cathode_value = 8'b00010001;
'hb: calc_cathode_value = 8'b11000001;
'hC: calc_cathode_value = 8'b01100011;
'hd: calc_cathode_value = 8'b10000101;
'hE: calc_cathode_value = 8'b01100001;
'hF: calc_cathode_value = 8'b01110001;
default: calc_cathode_value = 8'b0000001;
endcase
end
endfunction
task create_slow_clock;
input clock;
inout slow_clock;
integer count;
begin
if (count > 250000)
begin
count = 0;
slow_clock = ~slow_clock;
end
count = count + 1;
end
endtask
endmodule
Предлагаю вам начать с одного светодиода. Затем с одним переключателем. Затем со светодиодом и выключателем. После того, как вы почувствуете себя комфортно, попробуйте что-то более сложное. –
Я сделал это, но до сих пор не понял, как добавить больше. Я пробовал разные вещи, но не могу заставить его работать – user6754289