gpt4 book ai didi

verilog - Verilog : output reg vs assign reg to wire output 中的模块

转载 作者:行者123 更新时间:2023-12-02 07:24:16 34 4
gpt4 key购买 nike

假设module_a里面有register_a,它需要链接到module_bregister_a 是否应该单独声明并分配给 module_a 的输出:

reg register_a;
assign output_a = register_a;

或者我们应该在模块声明中使用 reg 内联声明 output_a 并在代码中使用它?

最佳答案

我想你是在问以下之间的区别:

module my_dff (output reg q, input clk, d); //None Blocking style
always @(posedge clk) begin
q <= d;
end
endmodule

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

两者之间没有功能上的区别。这主要是一种编码偏好。有很多模拟器不强制输入和输出的方向,所以如果意外有两个模块驱动同一个网络,那些模拟器 X 可以使用 output reg 将 X 传播到寄存器.这是一种罕见的情况,大多数模拟器(尤其是主流模拟器)都没有这个问题。

我个人更喜欢 output reg 主要是因为它的代码行数更少。

不管输出类型如何声明,当你实例化模块时,输出需要连接到一个网络类型(例如wire),而不是一个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

关于verilog - Verilog : output reg vs assign reg to wire output 中的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35653964/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com