这个verilog代码有什么问题?

What is wrong in this verilog code?

我正在学习 verilog 并尝试在我的 fpga 中应用这些概念。 它应该以这种方式工作: 当开关 1 打开时,所有红色 LED 都会亮起。 当开关 2 打开时,所有绿色 LED 都会亮起。 当开关 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. 对于这种情况最好使用非阻塞分配。说明 12

  2. 您正在使用 case(SW[2]) 语句重新分配 LEDRLEDG

  3. 您正在切换每个 posedge(CLOCK_50) 上的 LEDGLEDR 的值。这就是您看到 LED 强度低的原因。

小贴士:

  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:
            ...