Verilog Coding

3640 ワード

モデリング

  • Gate Levelモデリング
  • データストリームモデリング
  • 動作モデリング
  • 作成
  • Testbench
  • 基本


    数表


    何名様ですか.|何進数ですか.|対応する数量
    リファレンス
    x->自動32"dを表示(32ビット+10進+該当数)

    ろんりち


    0、1、x(不明)、z(オフ-アウト状態)

    スチールワイヤ

    wire <이름>; wire <이름> = 값;

    レジスタ

    reg <이름>; integer <이름>;(32ビットreg)
    リファレンス

  • ビームwireregの束:<reg또는 wire> [0:7] <이름>*ex) reg [0:10] = busA;

  • 切り裂く
    ハーネスを切り離すことも可能です.
    *ex) wire [0:30] = busA byte1= busA[0:5]

  • それ以外は

  • #<数値>
    n単位時間後に実行するコードを示す.
  • Gate Levelモデリング


    ゲートウェイを使用したモジュールのモデリング

    モジュール


    ブラックボックスの内部を定義する
    module <module_name>(<input port/ output port>);
        input/output port선언 (wire와 같은 느낌)
        reg 선언
        wire 선언
        parameter 선언
        
        // 구성요소 선언 
        
        always, initial
        function, task 정의
        assign
        function, task 호출
        
        // 구성요소 연결
    endmodule
    *ex)入力a,bでsum,coutの加算器を出力
    module half_add(a,b,sum,cout)
        input a, b;
        output sum. cout;
        wire cout_bar;
    
        xor(sum, a, b);
        nand(cout_bar, a, b);
        not(cout, cout_bar);
    endmodule

  • 順序は関係ありません(プログラミング言語ではありません)子供たちの仲さえよければいい.
  • モジュールの使用
    作成されたモジュール/関数の使用
    パラメータに
  • の順序で渡す方法
  • ex)
  • xor(sum, a, b)     //함수(출력,입력)
    and(cout, a, b, c)    // 기본함수의 출력은 1개임
    nand(cout, a, b)

  • ロケーションの提供方法(.해당포트(넣을 값))
    ex)
  • fulladder(.c_out(a), .sum(b))

    データストリームモデリング


    ゲートウェイの代わりに연산자할당を使用

  • 演算子


  • わりあてassign 출력 = 입력 + 연산자ex) assign out = i1 & i2;
  • *を参照
  • assign:wireは指定する必要があります
    ex) wire i1, i2, out; assign out = i1 & i2;
  • write:regはwriteで格納可能
    ex) real a,b,c; c = a - b ;*
  • 動作モデリング


    条件文

  • ifelse構文:条件が真である場合にのみ実行されます.
    if()
        ~;
    else
        ~;
  • case構文:caseの値参照~の
  • を実行する.
    case()
        ~;
    case()
        ~;
    endcase

    構文


    ハードウェアが常に実行しなければならない動作について説明します.
    always @(in1, in2, a, b) begin
        if (in1 ==0)
            out = a;
        else
            out = b;
  • always ~ begin ~ endプログラミング言語のカッコ({})はbegin endとして表される.
  • @(~)これは、カッコ(~)の値を常にチェックしているが、変更した場合にのみチェックすることを意味します.
    (すべての入力は*で表示)
  • 補助関数:シミュレーション時に結果に参照できる関数.$display();->Cに類似したprintf構文$time

    testbenchの作成


    シミュレーションモジュールのテスト

  • 入出力ポートが存在するX
    (wireで表示)

  • 刺激を加えて反応を観察する

  • 初期構文:testbenchでのみ使用され、1回のみ実行され、主に刺激を追加するために使用されます.
  • ex)
    module test_Fix();
        reg A, B, C;
        
        circuit c1(A, B, C, Out);
        
        initial begin
                A=0; B=1; C=0;
            #50 A=1;
            #50 A=0; C=1;
            #50      C=0;
            #50 $finish;