为每个案例声明定义两件事

Gig*_*lus 1 verilog

我正在使用case语句来确定要打开的七段 LED 数字。我还尝试使用相同的case语句来确定要在该数字上显示的实际数字。我损坏的代码:

always @(*)
begin
    case(sel_state)

        2'b00: selector = 3'b000; //1st digit
               BCD = BCD1;
               
        2'b01: selector = 3'b100; //2nd digit
        2'b01: BCD = BCD2;
        2'b10: selector = 3'b110;  //3rd digit
        2'b10: BCD = BCD3;
        2'b11: selector = 3'b001;  //4th digit
        2'b11: BCD = BCD4;
        
        
        default: selector = 3'b000;
    endcase
end
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在使用不同的语法,但它似乎不喜欢我尝试过的任何东西。如果我case像其他 3 个一样模拟第一个,case选择器之间的切换但不会改变 BCD 等于什么。如果我切换顺序,BCD 会改变但选择器不会。有谁知道这样做的正确方法吗?

pax*_*blo 5

看起来您唯一没有尝试过的是使用block statement,这正是您需要的:

case(sel_state)
    2'b00: begin
        selector = 3'b000;
        BCD = BCD1;
    end
    2'b01: begin
        selector = 3'b100;
        BCD = BCD2;
    end
    : :
endcase
Run Code Online (Sandbox Code Playgroud)