请教高手if(c)和if(b-a)为什么会不同?(其中c=b-a)
……reg a, b;
regflag;
wire c;
assign c = b - a;
always@(posedge rst or posedge clk)
if(rst)
begin
a <= 0;
b <= 0;
flag <= 0;
end
else
begin
if(b-a==8)/////////////////////////////////////////////////////////////////////////////
flag <= 1;
else
begin
a <= a + 1;
b <= b + 2;
end
end
endmodule
关键在if(b-a==8)这一句
上面写法的仿真结果显示flag无法按照设计发生跳变。
如果写成if(b-a==4'b1000),则flag可以正常按设计跳变
或者另外指定一个变量 assign c=b-a ,再写成if(c==8),也可以
请问为什么会出现上述结果?b-a的数据类型变化了么? "关键在if(b-a==8)这一句 "
when in doubt, always use brackets. 这是C++吗?看上去不像C啊 顶一楼,改掉坏习惯。二楼很幽默。 回复【2楼】.........
-----------------------------------------------------------------------
VerilogHDL FPGA用到。。C变来的。。。 回复【4楼】myqiang1990小松鼠
-----------------------------------------------------------------------
呵呵,这是第一次见到VerilogHDL的代码啊.以前据说这是天书级的,不过看上去还好啊. 回复【2楼】.........
这是c++吗?看上去不像c啊
-----------------------------------------------------------------------
verilog 回复【1楼】millwood0
"关键在if(b-a==8)这一句 "
when in doubt, always use brackets.
-----------------------------------------------------------------------
用了
if((b-a)==8)
一样的 回复【7楼】lanpad
-----------------------------------------------------------------------
我也很好奇到底是为什么。。。。。囧 还是不太明白,谁能解释一下!! 谈一个问题,a <= a + 1; b <= b + 2;两句,执行到(b-a==8)的时候是b=16,a=8;而lz的程序中a和b都是4位的reg,b=16已经溢出了吧? 将flag在另一个always进程中赋值,没有此类问题 11L说得很好,一般1个always里面最好只给一个变量赋值。
我奇怪的是,reg a, b;b <= b + 2;
b最大是14然后溢出,要做到b-a == 8,这不太好吧.. 回复【11楼】p.nicholas
将flag在另一个always进程中赋值,没有此类问题
-----------------------------------------------------------------------
没用的
试了一下,还是不行
always@(posedge rst or posedge clk)
if(rst)
begin
a <= 0;
b <= 0;
end
else
begin
a <= a + 1;
b <= b + 2;
end
always@(posedge rst or posedge clk)
if(rst)
begin
flag <= 0;
end
else
begin
if(b-a==4'b1010)
flag <= 1;
else
flag <= 0;
end if(b-a==4'b1010)
括号呢?有没有问题
if((b-a)==4'b1010) 回复【13楼】lanpad
回复【11楼】p.nicholas
将flag在另一个always进程中赋值,没有此类问题
-----------------------------------------------------------------------
没用的
试了一下,还是不行
always@(posedge rst or posedge clk)
if(rst)
begin
a <= 0;
b <= 0;
end
else
begin
a <= a + 1;
b <= b + 2;
end
always@(posedge rst or posedge clk)
if(rst)
begin
flag <= 0;
end
else
begin
if(b-a==4......
-----------------------------------------------------------------------
我仿过,没任何问题
点击此处下载 ourdev_666341FRG1M9.rar(文件大小:319字节) (原文件名:AAA.rar) 这简单的语法有问题,只能跟你的综合器与仿真器有关了。请问你的开发环境是什么 路过看看 学习了~
页:
[1]