""don'不要在意案例陈述中的价值



我正试图在case语句中使用"?"不在乎说明符。我也试过使用6'b00001xx和6'b0001zz。我很困惑,因为我引用了Pong Chu通过Verilog进行FPGA原型设计的例子,而且他似乎也是这样做的。当我运行模拟时,当"state"为0,"in"为4(3'b000(时,case语句将变为默认值,而不是预期的第一种情况(6'b0001??(。如果有人能向我解释或指出正确的方向,我将不胜感激。

always @(*)
begin
case({state, in})
//state0, start is high >> loadA = 1 (s1)
6'b0001??: {nstate, nout} = {3'b001, {1'b0, 1'b1, 1'b0, pass}};
//state1, start is high >> loadD = 1 (s2)
6'b0011??: {nstate, nout} = {3'b010, {1'b0, 1'b0, 1'b1, pass}};
//state2, start is high >> we = 1 (s3)
6'b0101??: {nstate, nout} = {3'b011, {1'b1, 1'b0, 1'b0, pass}};
//state3, done is high >> loadA = 1 (s4), done is low >> loadA = 1 (s1)
6'b01111?: {nstate, nout} = {3'b100, {1'b0, 1'b1, 1'b0, pass}};
6'b0111??: {nstate, nout} = {3'b001, {1'b0, 1'b1, 1'b0, pass}};
//state4, start is high >> loadD = 1 (s5)
6'b1001??: {nstate, nout} = {3'b101, {1'b0, 1'b0, 1'b1, pass}};
//state5, start is high >> (s6)
6'b1011??: nstate = 3'b110;
//state6, done is low >> loadA = 1 (s4), done is high >> (s7)
6'b1101??: {nstate, nout} = {3'b100, {1'b0, 1'b1, 1'b0, pass}};
6'b11011?: nstate = 3'b111;
//state7, finish is low >> increment pass, loadA = 1 (s1), finsih is high >> pass = 0 loadA = 1 (s1)
6'b1111??: {nstate, nout} = {3'b001, {1'b0, 1'b0, 1'b0, (pass+1)}};
6'b1111?1: {nstate, nout} = {3'b001, {1'b0, 1'b0, 1'b0, 3'b0}};
default:
{nstate, nout} = {3'b0, 6'b0};
endcase

verilog中有3种不同的case语句:casecasexcasez。他们对待他人的方式各不相同。不在乎。

一般来说,case不应该有"不在乎",并且它的行为在不在乎的情况下是不可合成的。原因是它确实实现了===运算符来比较条件。因此,它精确地匹配x和z。

不必在意,您应该使用casexcasez。两者都进行对称比较,这意味着?与任何东西都匹配,但任何东西也与"?"匹配。因此,如果您的案例中的statein包含x或z,则可能存在误报。

casez的假阳性池较小,因为它只匹配"z",无论casex是否同时匹配"x"one_answers"z"。因此,我建议您使用casez

最新更新