2015-05-25 3 views
0

Я изучаю verilog и пытаюсь применить концепции в своей fpga. Он должен работать таким образом: Когда переключатель 1 включен, все красные светодиоды включаются. Когда переключатель 2 включен, все зеленые светодиоды включаются. Когда переключатель 3 включен, все светодиоды включаются. Проблема в том, когда я положил ее в свой переключатель fpga. Может ли кто-нибудь сказать мне, почему? Вот мой код:Что не так в этом коде Verilog?

module LED (

    input CLOCK_50, 
    input [17:0] SW, 
    output reg [17:0] LEDR, 
    output reg [9:0] LEDG 
); 

[email protected](posedge(CLOCK_50)) 

    begin 
     case(SW[0]) 
      0: 
       LEDR = 0; 
      1: 
       LEDR = ~LEDR; 
     endcase 

     case(SW[1]) 
      0: 
       LEDG = 0; 
      1: 
       LEDG = ~LEDG; 
     endcase 
     case(SW[2]) 
      0: 
       begin 
        LEDR = 0; 
        LEDG = 0; 
       end 
      1: 
       begin 
        LEDR = ~LEDR; 
        LEDG = ~LEDG; 
       end 
     endcase 

    end 
endmodule 
+0

Вы должны проанализировать все случаи. что происходит, если sw 1 и sw 2 включен? и sw1 sw2 и sw3 включен? и в другом случае? – inye

+0

Почему вы используете SW длиной 18 бит, если используете только 3? – inye

+0

Я просто делаю простые примеры, чтобы понять концепцию. – Bruno

ответ

1

Некоторых проблемы в коде:

  1. для этой ситуации лучше всего с неблокирующим назначить. Экспликация 12

  2. вы переназначение LEDR и LEDG с case(SW[2]) заявлением

  3. Вы переключая значения LEDG и LEDR на каждом posedge(CLOCK_50). это причина, по которой вы видите низкую интенсивность в светодиодах.

советов:

  1. вы можете использовать битовое обозначение (также шестигранный) как LEDG = 10'b1111111111; или LEDG = 10'b1111_1111_11; (Hex: 10'h3AA)

  2. вы можете использовать case для SW как :

    case(SW) 
        3'b000: 
         ... 
        3'b001: 
         ... 
        3'b010: 
         ... 
        3'b100: 
         ... 
        default: 
         ...