[英]Strange component in quartus RTL viewer using verilog
我正在学习Verilog,当我不知道仅通过Verilog代码就能看到电路如何工作时,我就去RTL浏览器查看数字逻辑。 但是在这段代码中,出现了一个奇怪的组件,我不知道这个组件是什么。 是触发器,复用器还是逻辑端口? 下面是代码和图像,在图像中,组件是红色三角形。
编码 :
module testesoma(clock,reset,in, out,aux);
input wire reset, clock, in ;
output reg [3:0] out,aux;
always @(posedge clock or posedge reset)
begin
if(reset)
begin
out = 0;
end
else
out = aux;
aux = aux + 1;
end
endmodule
多么棒的原理图:+1麻烦去生成它。 您的代码有多个问题,这是使用阻塞分配,反馈,不使用综合模板等危险的一个很好的例子。 Quartus当然已经搞砸了,但是考虑到这一点也就不足为奇了。 问题:
<=
begin
和end
。 凝视点是,除非有必要,否则请不要在代码中添加任何begin
/ end
; 它很冗长,并且隐藏了这样的错误。 仅在您明确需要制作多阶段块时才使用begin
/ end
。 注意aux=aux+1
在您的时钟if
/ else
语句之外-什么时候执行? aux
增加的位置和时间。 aux=aux+1
类的反馈时,请务必小心。 如果您不小心,则实际的硬件会振荡。 Quartus的运行相当不错,但是它产生的电路只会振荡,而aux
输出不会被计时,这大概是您的意图。 Quartus放入了红色缓冲器,因为它可以看到它产生了不稳定的反馈电路,并且在断开它方面也全力以赴。 它应该对此发出警告。
1-重写您的代码; 就像是
always @(posedge clock or posedge reset)
if(reset)
out <= 0;
else
out <= aux;
always @(posedge clock or posedge reset)
if(reset)
aux <= 0;
else
aux <= aux + 1'b1;
2-请勿always
分配时钟中的多个变量,除非/直到您了解问题出在哪里(提示:检查所有分支/执行路径,确认在所有可能的路径中分配给所有变量的逻辑发生了变化)
3 -找一本关于VHDL,阅读三角洲延迟/分配的章节,和你的Verilog会好很多 。
该符号只是一个缓冲区,其驱动输出等于输入。 至于为什么它会出现在数字逻辑原理图中,我不确定。
缓冲器对电路的数字功能没有任何影响,当网络的电容太大而无法有效驱动驱动器时,它们会由合成器插入。 您几乎可以忽略它。
另外,我对该示意图有点怀疑,它似乎与您的RTL不匹配。 rtl在每个posege时钟上增加aux,但这表明通过加法器的组合反馈回路似乎根本无法工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.