verilog中的参数化周期延迟数?
我必须根据管道中的级数来延迟我设计的管道中的一些控制信号。这显然是非常直接的——在输入信号和输出信号之间放置N个触发器。我想知道是否有一种方法可以参数化N。如果我改变管道中的阶段数,我必须返回并添加/删除触发器,这有点烦人。我曾考虑编写一个脚本来读取某个地方的define并生成模块,但这似乎有些过头了。在这里使用genvar循环正确吗 您可以使用参数化移位寄存器来执行此操作。比如:verilog中的参数化周期延迟数?,verilog,Verilog,我必须根据管道中的级数来延迟我设计的管道中的一些控制信号。这显然是非常直接的——在输入信号和输出信号之间放置N个触发器。我想知道是否有一种方法可以参数化N。如果我改变管道中的阶段数,我必须返回并添加/删除触发器,这有点烦人。我曾考虑编写一个脚本来读取某个地方的define并生成模块,但这似乎有些过头了。在这里使用genvar循环正确吗 您可以使用参数化移位寄存器来执行此操作。比如: module shift ( input clk, input data_in, output dat
module shift
(
input clk,
input data_in,
output data_out
);
parameter DEPTH = 3;
reg [DEPTH-1:0] holding_register;
always @ (posedge clk) begin
holding_register <= {holding_register[DEPTH-2:0], data_in};
end
assign data_out = holding_register[DEPTH-1];
endmodule
模块移位
(
输入时钟,
将数据_输入,
输出数据输出
);
参数深度=3;
reg[DEPTH-1:0]保持寄存器;
始终@(posedge clk)开始
这里是如何使用生成块和DFF模块创建参数化移位寄存器。它甚至可以在深度为0和深度为1的情况下工作
module shift
(
input clk,
input reset,
input data_in,
output data_out
);
parameter DEPTH = 3;
wire [DEPTH:0] connect_wire;
assign data_out = connect_wire[DEPTH];
assign connect_wire[0] = data_in;
genvar i;
generate
for (i=1; i <= DEPTH; i=i+1) begin
dff DFF(clk, reset,
connect_wire[i-1], connect_wire[i]);
end
endgenerate
endmodule
模块移位
(
输入时钟,
输入复位,
将数据_输入,
输出数据输出
);
参数深度=3;
线[深度:0]连接线;
分配数据输出=连接线[深度];
分配connect_wire[0]=数据_in;
genvar i;
生成
对于(i=1;i)这里是EDA操场上的工作代码和测试:是否可以将其推广到动态数据_宽度?(而不仅仅是单位DFF)genvar似乎很麻烦。是的,您可以使用另一个参数DATA\u WIDTH。dff模块需要支持它。对于shift模块,您可以使用多维数组进行连接wire[DATA\u WIDTH-1:0]connect\u wire[DEPTH:0];