Verilog 阵列移位器在仿真中的不同行为

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,

我试图调试我的设计中一个非常奇怪的行为。我正在调试以下Systemverilog代码:

    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;