让我们说它module_a有register_a,它需要链接到module_b.应register_a单独声明并分配给以下输出module_a:
reg register_a;
assign output_a = register_a;
Run Code Online (Sandbox Code Playgroud)
还是应该只宣布output_a了reg在模块声明内联和使用的代码?
我想你问的是以下几点之间的区别:
module my_dff (output reg q, input clk, d); //None Blocking style
always @(posedge clk) begin
q <= d;
end
endmodule
Run Code Online (Sandbox Code Playgroud)
VS
module my_dff (output q, input clk, d);
reg reg_q;
assign q = reg_q; // Blocking style
always @(posedge clk) begin
reg_q <= d;
end
endmodule
Run Code Online (Sandbox Code Playgroud)
两者之间没有功能差异.它主要是编码偏好.有一个充满模拟器的手不强制输入和输出的方向,所以如果有意外的两个模块驱动相同的网络,那些模拟器X可以将X传播到寄存器output reg.这是一种罕见的情况,大多数模拟器(尤其是主流模拟器)都没有这个问题.
我个人更喜欢output reg主要是因为代码行数较少.
无论如何声明输出类型,当您实例化模块时,输出都需要连接到网络类型(例如wire),而不是a reg.输入可以是任何一种类型.
module fifo(output out, input clk, in);
wire q0;
reg q1;
my_dff dff0 ( q0, clk, in );
always @(posedge clk) begin
q1 <= q0;
end
my_dff dff1 ( out, clk, q1 );
endmodule
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5681 次 |
| 最近记录: |