【问题标题】:test bench is no working. z and x states in modelsim测试台不工作。 modelsim 中的 z 和 x 状态
【发布时间】:2021-06-25 13:13:01
【问题描述】:

我在verilog 上实现了冒泡排序代码。没有任何综合错误,但测试台在 modelsim 中不起作用。它显示 x 和 z 状态

module sort #(
    parameter NUM_VALS = 5,
    parameter SIZE     = 16
)(  input  wire clk,
    input  wire [NUM_VALS*SIZE-1:0] in,
    output reg  [NUM_VALS*SIZE-1:0] out
);
    reg [NUM_VALS*SIZE-1:0] sorted_bus;
    always @(posedge clk) begin
        out <= sorted_bus;
    end

    integer i, j;
    reg [SIZE-1:0] temp;
    reg [SIZE-1:0] array [1:NUM_VALS];
    always @* begin
        for (i = 0; i < NUM_VALS; i = i + 1) begin
            array[i+1] = in[i*SIZE +: SIZE];
        end

        for (i = NUM_VALS; i > 0; i = i - 1) begin
            for (j = 1 ; j < i; j = j + 1) begin
                if (array[j] < array[j + 1]) begin
                    temp         = array[j];
                    array[j]     = array[j + 1];
                    array[j + 1] = temp;
                end 
            end
        end

       for (i = 0; i < NUM_VALS; i = i + 1) begin
            sorted_bus[i*SIZE +: SIZE] = array[i+1];
       end
    end
endmodule

测试台

module sort_tb;
    reg clk;
    reg  [16-1:0] in1,  in2,  in3,  in4,  in5;
    wire [16-1:0] out1, out2, out3, out4, out5;

    sort #(.NUM_VALS(5), .SIZE(16)) dut (
        .clk(clk),
        .in ({in1,  in2,  in3,  in4,  in5}),
        .out({out1, out2, out3, out4, out5})
    );

    always @(posedge clk) begin
        in1 <= 1;
        in2 <= 5;
        in3 <= 8;
        in4 <= 3;
        in5 <= 2;
    end

    always @(posedge clk) begin
        $display("In:  %0d %0d %0d %0d %0d", in1,  in2,  in3,  in4,  in5);
        $display("Out: %0d %0d %0d %0d %0d", out1, out2, out3, out4, out5);
    end

    initial begin
        #100;
        $finish;
    end

    always begin
        clk = 1'b0; #5;
        clk = 1'b1; #5;
    end
endmodule

【问题讨论】:

    标签: sorting verilog fpga modelsim quartus


    【解决方案1】:

    @dduy_le,我只是看着你的 ModelSim 屏幕,在我看来你还没有真正开始模拟。我认为这是在说,一切都已成功编译并且它位于时间 = 0。如果您将时钟放在波形上,(右键单击时钟并发送到 Waves)您将能够验证是否是这种情况或不是。如果它确实表明你还没有脉冲时钟,你可以点击运行(在 0 PS 时间框旁边),这应该会启动 sim。然后你需要确保你运行它足够长的时间来看到时钟的上升沿。该时钟边沿应根据测试台中的 posedge 时钟语句将您的 IN 值设置为有效值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 2013-10-01
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      相关资源
      最近更新 更多