我有一个带有case语句的设计模块(一个部分实现的七段显示),如下所示。然而,看起来就好像,如果没有为BCD值提供case语句,则先前分配的段值将作为BCD值的段值返回,而该BCD值在switch语句中没有被满足。
为什么会这样呢?假设我不想使用默认语句。
我打印出了bcd、段和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
endmodulebcd 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发布于 2019-05-22 04:31:43
segment是一个变量。就像在任何其他(软件)语言中一样,变量会记住它们的值,直到您用其他值覆盖它们的值。
您的第一个输入(bcd)是4'b0000。case语句的一个分支与该值匹配,因此将7'b1111110的值赋给变量segment。然后将bcd的值更改为4'b0001。没有与该值匹配的分支,因此不会将新值分配给变量segment。因此,它保留了原有的价值。
https://stackoverflow.com/questions/56245867
复制相似问题