2

私は Verilog 開発に不慣れで、比較的単純なカウンターとトリガー出力タイプの設計でどこが間違っているのかを理解するのに苦労しています。

verilog コード は次のとおりです。reg が internal_output_buffer なしで output_signal で宣言されているかどうかに関係なく、コードは同じ結果を返すことに注意してください。

    `timescale 1ns / 1ps

module testcounter(
        input wire clk,
        input wire resetn,
        input wire [31:0] num_to_count,
        output reg [7:0] output_signal
    );

    reg [31:0] counter;

    initial begin
        output_signal = 0;
    end

    always@(negedge resetn) begin
        counter = 0;
    end

    always@(posedge clk) begin
        if (counter == num_to_count) begin
            counter = 0;
            if (output_signal == 0) begin
                output_signal = 8'hff;
            end
            else begin
                output_signal = 8'h00;
            end
        end
        else begin
            counter = counter + 1;
        end 


    end
    assign output_signal = internal_output_buffer;

endmodule

そして、コードはによってテストされます

 `timescale 1ns / 1ps

module testcounter_testbench(

    );
    reg clk;
    reg resetn;
    reg [31:0] num_to_count;
    wire [7:0] output_signal;

    initial begin
        clk = 0;
        forever #1 clk = ~clk;
    end

    initial begin
        num_to_count = 20;
    end

    initial begin
        #7 resetn = 1;
        #35 resetn = 0;
    end

    testcounter A1(.clk(clk),.resetn(resetn),.num_to_count(num_to_count),.output_signal(output_signal));
endmodule

ビヘイビア シミュレーションは期待どおりに見えます

行動シミュレーション

しかし、タイミングシミュレーションは爆発します

タイミングシミュレーション

そして、おまけとして、実際にプローブされた実行は爆発し、次のようになります

実際にプローブされた出力

ヒントをいただければ幸いです。皆さんありがとう。

4

3 に答える 3