2016-06-16 3 views
0

Я создаю панель 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

+0

Предлагаю вам начать с одного светодиода. Затем с одним переключателем. Затем со светодиодом и выключателем. После того, как вы почувствуете себя комфортно, попробуйте что-то более сложное. –

+0

Я сделал это, но до сих пор не понял, как добавить больше. Я пробовал разные вещи, но не могу заставить его работать – user6754289

ответ

0

вы сигнализировать БТН определяется как 4-бит означает, что сазе должен представлять все 16 возможностей от 0 до F. Подумайте о том, что должно произойти, когда более одна кнопка нажата в то же время. Если вы только заботитесь о случаях, когда одна из кнопок нажата, то ваши значения case должны быть равны 0,1,2,4, поскольку каждая битовая позиция представляет другое значение 2^n.

Смежные вопросы