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

时间:2015-05-13 01:31:11

标签: case 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

正如你所看到的,我正在弄乱不同的语法,但它似乎不喜欢我尝试过的任何东西。如果我像其他3一样建模第一个案例,则案例在选择器之间切换,但不会改变BCD等于的值。如果我切换顺序,BCD会更改,但选择器不会。有谁知道这样做的正确方法?感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:3)

看起来你没有试过的唯一事情是使用block statement,这正是你需要的东西:

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

答案 1 :(得分:2)

使用begin - end

always @* begin
  case(sel_state)
    2'b00: begin //1st digit
      selector = 3'b000;
      BCD = BCD1;
    end
    2'b01: begin //2nd digit
      selector = 3'b100; 
      BCD = BCD2;
    end
    // ... others ...
  endcase
end