案例陈述和值分配在system-verilog / verilog中如何工作?

时间:2019-05-21 20:25:01

标签: verilog system-verilog

我有一个带有事例陈述的设计模块(部分实现的七段显示),如下所示。但是,如果没有为bcd值提供case语句,则看起来好像以前分配的段值作为switch语句中未满足的bcd值的段值返回。

为什么会这样?假设我不想使用默认语句。

我打印了bcd,segment和ExpectedOutput的值,并观察了我上面刚刚写的内容。

module seven_segment_display(output logic[6:0] segment, input logic[3:0] bcd);
    always@(*)
        begin
            case (bcd)
                4'b0011 : begin segment = 7'b1011011; end
                4'b1000 : begin segment = 7'b1111011; end
                4'b1010 : begin segment = 7'b0000000; end
                4'b0000 : begin segment = 7'b1111110; end
            endcase
        end
endmodule
bcd  segment expectedOutput
0000 1111110 1111110
0001 1111110 0110000
0010 1111110 1101101
0011 1011011 1111001
0100 1011011 0110011
0101 1011011 1011011
0110 1011011 1011111
0111 1011011 1110000
1000 1111011 1111111
1001 1111011 1111011
1010 0000000 0000000
1011 0000000 0000000
1100 0000000 0000000
1101 0000000 0000000
1110 0000000 0000000
1111 0000000 0000000

1 个答案:

答案 0 :(得分:0)

segment是一个变量。与任何其他(软件)语言一样,变量会记住它们的值,直到您用其他值覆盖它们的值为止。

您的第一个输入(bcd)是4'b0000。 case语句的一个分支与此值匹配,因此7'b1111110的值已分配给变量segment。然后,将bcd的值更改为4'b0001。没有与该值匹配的分支,因此没有新值分配给变量segment。因此,它保留了其旧值。