【发布时间】:2021-09-23 02:36:06
【问题描述】:
我正在尝试一个简单的代码来将输入与某个值(阈值)进行比较,并尝试使用 if 和 else 条件语句将变量分配给 0 或 1,具体取决于变量是否超过阈值。但是,在这种情况下,我总是为不同的输入获得相同的单个值。我是 verilog 的新手,正在尝试为不同的应用程序编写算法,这是我的第一步。提前致谢。
module makebig(a,z);
input signed [15:0] a;
output reg z;
initial
begin
if (a<16'b0000000000000000) begin
z<=1;
end
else begin
z<=0;
end
end
endmodule
现在是它的测试平台。
module makebig_tb();
reg signed [15:0] a;
wire z;
makebig uut(.a(a),.z(z));
initial
begin
a=16'b0100000000000000;
#5 a=16'b000000000000101;
#5 a=-2;
end
initial
begin
$monitor("a=%b,z=%b",a,z);
end
end module
我不明白为什么它不起作用。这个的输出是这样的......
a=0100000000000000,z=0;
a=0000000000000101,z=0;
a=1111111111111110,z=0;
【问题讨论】:
-
不是我的区域,但是....您确定
if中的常量已签名吗?尽管有input signed声明,但可能以无符号数字评估比较...... -
是的,在变量a的赋值中,我提到了'signed'。我什至尝试将 2^16 的一半作为阈值,但仍然不是预期的结果。
-
您的
if语句仅在时间 0 执行一次。 -
@dave_59 我不明白。你能详细说明一下吗?
标签: if-statement verilog