一个verilog里在case中赋值的问题, 求大家帮帮助, 如下例, 谢谢先.

module try (S, pbit);
input S;

output reg pbit;

parameter zero = 1'b0;
parameter one = 1'b1;

always @ (*)
begin
case(S)
0: pbit = zero;
1: pbit = zero;
2: pbit = one;
3: pbit = one;
endcase
end
endmodule

下面是我的testbench:
`timescale 1ns/100ps
module testbench ();

reg S;
wire pbit;

try DUT (
.S(S),
.pbit(pbit)
);

initial begin
S = 0;
#10
S = 1;
#10
S = 2;
#10
S = 3;

end

结果仿真出来, pbit永远不会跟据S的改变而变化. 实是不知道怎么办了. 求大神帮帮我. 谢谢

第1个回答  2015-02-26
当然不会变化,你的S信号位宽是1bit,它永远不可能等于2或者3,所以不可能变化,位宽加大本回答被提问者采纳
第2个回答  推荐于2017-09-30
把阻塞赋值都改为非阻塞赋值试一试,还有就是不要这样把try和testbench分开写,直接把它们写在一起,也就是一个module和endmodule之间,而且是一个.V文件,试一试本回答被网友采纳
第3个回答  2017-09-30
当然不会变化,你的S信号位宽是1bit,它永远不可能等于2或者3,所以不可能变化,位宽加大
相似回答