Verilog 阵列移位器在仿真中的不同行为
我试图调试我的设计中一个非常奇怪的行为。我正在调试以下Systemverilog代码:Verilog 阵列移位器在仿真中的不同行为,verilog,system-verilog,register-transfer-level,Verilog,System Verilog,Register Transfer Level,我试图调试我的设计中一个非常奇怪的行为。我正在调试以下Systemverilog代码: module ff_array #( parameter INPUT_WIDTH = 16, parameter OUTPUT_WIDTH = INPUT_WIDTH*2, parameter ARRAY_SIZE = 3 ) ( input logic clk, input logic rst,
module ff_array
#(
parameter INPUT_WIDTH = 16,
parameter OUTPUT_WIDTH = INPUT_WIDTH*2,
parameter ARRAY_SIZE = 3
)
(
input logic clk,
input logic rst,
input logic signed [INPUT_WIDTH-1 : 0 ]x_in,
output logic signed [OUTPUT_WIDTH-1 : 0 ]y_out
);
logic signed [INPUT_WIDTH-1 : 0 ] sh_in [ARRAY_SIZE-1:0];
always_ff @(posedge clk) begin
if(~rst) begin
for (int i=0; i< ARRAY_SIZE; i++) begin
sh_in[i] <= {OUTPUT_WIDTH{1'b0}};
end
end else begin
sh_in[0] <= x_in;
for (int i=1; i< ARRAY_SIZE; i++) begin
sh_in[i] <= sh_in[i-1];
end
end
end
assign y_out = sh_in[ARRAY_SIZE-1];
endmodule
模块ff\u阵列
#(
参数输入_宽度=16,
参数输出宽度=输入宽度*2,
参数数组_SIZE=3
)
(
输入逻辑时钟,
输入逻辑rst,
输入逻辑符号[input_WIDTH-1:0]x_in,
输出逻辑已签名[output_WIDTH-1:0]y_out
);
逻辑符号[INPUT_WIDTH-1:0]sh_在[ARRAY_SIZE-1:0]中;
始终_ff@(posedge clk)开始
如果(~rst)开始
对于(int i=0;i [i]中的sh_问题不在于ff_阵列
,而在于RAM输出或互连。查看简单的波形对您没有帮助,因为它们不显示“增量”延迟,它们只显示时间步长的最终值。您需要显示生成RAM输出的代码。如果它的结构类似于这里的始终\u ff
块,那么人们会期望它在一个时钟周期之后出现。是什么在中产生x\u?它是否与您的时钟同步?
?是的,所有内容都与时钟同步,系统中只有一个时钟。x_in是一个输入流。它直接连接到RAM的输出
sh_in[0] <= x_in;