使用verilog的quartus RTL查看器中的奇怪组件
我正在学习verilog,当我不知道一个电路如何工作时,只要查看verilog代码,我就会去RTL查看器查看数字逻辑。但是在这段代码中出现了一个奇怪的组件,我不知道这个组件是什么。是触发器、多路复用器还是逻辑端口? 下面是代码和图像,在图像中,组件是红色三角形 守则:使用verilog的quartus RTL查看器中的奇怪组件,verilog,digital-logic,register-transfer-level,Verilog,Digital Logic,Register Transfer Level,我正在学习verilog,当我不知道一个电路如何工作时,只要查看verilog代码,我就会去RTL查看器查看数字逻辑。但是在这段代码中出现了一个奇怪的组件,我不知道这个组件是什么。是触发器、多路复用器还是逻辑端口? 下面是代码和图像,在图像中,组件是红色三角形 守则: module testesoma(clock,reset,in, out,aux); input wire reset, clock, in ; output reg [3:0] out,aux; always @(pos
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
该符号只是一个缓冲区,用于驱动与输入相等的输出。至于它为什么会出现在数字逻辑原理图中,我不确定 缓冲器对电路的数字功能没有任何影响,当网络电容太大,驱动单元无法有效驱动时,它们由合成器插入。你几乎可以忽略它
另外,我对这个示意图有点怀疑,它似乎与您的RTL不匹配。rtl在每个posedge时钟上递增aux,但这显示了通过加法器的组合反馈回路,这似乎根本不起作用 多么好的示意图:+1,感谢您不辞辛劳地生成它。您的代码有多个问题,这是一个很好的例子,说明了使用阻塞分配、反馈、不使用合成模板等的危险。夸特斯确实搞砸了,但考虑到他的投入,这并不奇怪。问题:
好答案,但必须在第2点添加注意事项。begin
和end
相当于C
中的大括号,最重要的是,在一行程序中省略这些大括号更有可能导致意外错误。OP中的一个错误就是这样一个例子-未能begin/end
else
子句。谢谢,现在我看到了“else”后面的“begin”和“end”错误,经过更正,电路变成了一个可理解的电路。我将需要组合逻辑的“=”,例如:code
a=b+c;d=a+e;f=d+acode
您建议我如何分离sequential的组合逻辑?谢谢,现在我知道quartus上的这个组件是什么了
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;