这个verilog代码有什么问题?

时间:2015-05-25 00:55:53

标签: verilog fpga

我正在学习verilog并试图在我的fpga中应用这些概念。 它以这种方式工作: 当Switch 1打开时,所有红色指示灯都会亮起。 当Switch 2打开时,所有绿色LED指示灯都会亮起。 当Switch 3打开时,所有LED指示灯都会亮起。 问题是当我把它放在我的fpga开关中时。 有人能告诉我为什么吗? 这是我的代码:

module LED (

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

always@(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

1 个答案:

答案 0 :(得分:1)

代码中的一些问题是:

  1. 对于这种情况最好是非阻塞分配。说明1 2

  2. 您正在使用LEDR声明重新分配LEDGcase(SW[2])

  3. 您正在切换每个LEDGLEDRposedge(CLOCK_50)的值。这就是为什么你看到低强度的原因。

  4. 提示:

    1. 您可以使用位符号(也是十六进制),例如LEDG = 10'b1111111111;LEDG = 10'b1111_1111_11;(十六进制:10' h3AA)

    2. 您可以case使用SW,例如:

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