0

テストベンチまたは次のコードの入力コードを作成するのを手伝ってくれる人はいますか? 私はザイリンクスを使用しています。

module fsmb (input rst,clk,a,
             output reg x);

parameter sta = 2'b00, stb = 2'b01, stc = 2'b10,
          std = 2'b11;

reg[1:0] st, nst;

always @(posedge clk)
begin 
    if (rst)
        st <= 2'b00;
    else
        st <= nst;
end

always @*
begin
    st = nst; x =0'b0;
    case (st)
        sta: if(a) nst = stb;
             else nst = sta;
        stb: if(a) nst = stc;
             else nst = stb; 
        stc: begin 
             if(a) nst = stc;
             else nst = std; 
             x =1'b1;
             end
        std: begin
             if(a) nst = stc;
             else nst = sta;
             x = 1'b1;
             end
        default: nst = sta;
    endcase 
end
endmodule
4

2 に答える 2

10

テストベンチ 101

  1. 新しいモジュールを作成します (tb)。
  2. DUT の入力ごとに reg を作成します。
  3. DUT の出力ごとにワイヤを作成します。
  4. DUT のインスタンスを作成します。
  5. レジスタとワイヤを DUT に接続します。
  6. クロックを生成する
  7. 他の入力を駆動する
  8. 出力用のチェッカーを作成します (これはあなたに任せます)。

例:

module tb;

reg rst,clk,a;
wire x;

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

initial begin
    rst = 1;
    a = 0;
    #50 rst = 0;
    #50 $finish;
end

fsmb fsmb (
    .clk    (clk),
    .rst    (rst),
    .a      (a),
    .x      (x)
);

endmodule

その他の簡単なテストベンチの例は、EDA playgoundで提供されています。無料アカウントにサインアップして、次のようなサンプルを見ることができます:公開された Playgounds -> D フリップフロップ

于 2013-11-19T13:46:11.080 に答える