繁体   English   中英

使用verilog的Quartus RTL Viewer中的奇怪组件

[英]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当然已经搞砸了,但是考虑到这一点也就不足为奇了。 问题:

  1. 不要在此处使用阻止分配-使用<=
  2. 整理您的beginend 凝视点是,除非有必要,否则请不要在代码中添加任何begin / end 它很冗长,并且隐藏了这样的错误。 仅在您明确需要制作多阶段块时才使用begin / end 注意aux=aux+1在您的时钟if / else语句之外-什么时候执行?
  3. 整理您希望aux增加的位置和时间。
  4. 在收到诸如aux=aux+1类的反馈时,请务必小心。 如果您不小心,则实际的硬件会振荡。
  5. 不要写这样的链接逻辑-开始并行思考。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM