Systemverilog alwaysとalways_ffの違い はじめに Verilogではalwaysを使用してフロップフロップと組み合わせ回路の両方を作成しますが、 SystemVerilogではフリップフロップ用にalways_ff、組み合わせ回路用にalways_combが追加され... 2023.01.23 Systemverilog
Systemverilog randcase 重み付きランダムセレクタ SystemVerilog はじめに randcaseは重み付きのランダムセレクタを作成できます。 使い方 randcase w1 : x = 1; w2 : x = 2; endcase 上記は、x がw1/(w1 + w2) の確... 2023.01.19 Systemverilog
Systemverilog 制約をON/OFFする constraint_mode SystemVerilog はじめに 同じランダム変数で複数パターンのconstraintを定義したいことがあります。 しかし、constraintが競合しているとrandomize()がFailします。そこで、constraint_modeを使用するこ... 2023.01.18 Systemverilog
Systemverilog 比較演算でワイルドカード =?=/!?= SystemVerilog はじめに SystemVerilog 3.1では比較演算でワイルドカードを使用できます。 =?=/!?=でワイルドカードを用いた比較演算を行えます。 =?=は右辺と左辺が等しいときに真、!?=は右辺と左辺が等しくないとき... 2023.01.18 Systemverilog
Systemverilog always@*とalways_combの違い SystemVerilog はじめに always@*とalways_combは一見同じ動作をしそうですが、小さな違いがあります。 両者の違いについてまとめました。 always@*とalways_combの違い always@*はマルチドラ... 2023.01.12 Systemverilog
Systemverilog SystemVerilog softでconstraintを上書きする はじめに rand変数で定義した変数はrandomizeで値が確定します。 withを付けることで、インラインで制約を付けることができますが、class内に宣言した制約とconflictするとrandomizeが失敗します。 ... 2022.12.14 Systemverilog
Systemverilog Verilog defineマクロで「”」を使う はじめに VerilogのDefineマクロでダブルクォーテーション「"」を使用します。 やり方 「`」バッククォートでエスケープできます。 `define DISPLAY(a) $display(`"a... 2022.12.06 Systemverilog
Systemverilog UVM driver/sequencerはマクロで作成しよう はじめに UVMを久しぶりに書くと、Driver, Sequencerの書き方を忘れます。 なので、Defineマクロを使って簡単に作成できるようにしましょう。 マクロを作成する Sequencer uvm_... 2022.12.01 SystemverilogUVM
Systemverilog parameter port listとparameterを宣言すると上書きできない SystemVerilog はじめに VerilogではParameterは以下のように宣言できます。 parameter module sample1(); parameter A = 1; parameter B = 2; ... 2022.11.26 Systemverilog
Systemverilog class内のtask/functionはautomaticになる SystemVerilog はじめに task/functionはデフォルトでstaticで宣言されるので注意が必要です。 しかし、LRM 11.9よりclass内のtask/functionはautomaticで宣言されます。 解説 ... 2022.11.21 Systemverilog