SystemVerilog言語の革新

画像



この記事では、言語の合成されたサブセットのVerilog-2001と比較した、データ編成の分野におけるSystemVerilogの革新のいくつかを示します。



SystemVerilogの歴史は、長さと霧のコンテンツです。 Verilog-95標準の採用に始まり、Verilog-2001で頂点に達しました。 ただし、この言語は検証にあまり適していませんでした。「E」ファミリーの言語を使用するエンジニア-VERA、Testbuider。 SystemVerilogは、2005年以降、最新の形で登場しました。 現在、Quartus II、ISE、ModelSim / QuestaSimなどの合成ツールとモデリングがSystemVerilogを自信を持ってサポートしています。 標準はIEEE 1800-2012と呼ばれます。



ご注意 この記事は長い間書かれていますが、公開されていません。 初心者に役立つことを願っています。





SystemVerilogは、多くの新しい興味深いデザインをVerilogの世界にもたらしました。





ユニバーサル型ロジック。



現在、regとwireを選択する必要はありません。ロジックはどこでも使用されています。 シンセサイザーが何をする必要があるかを決定します(VHDLからのhi信号)。



タイプの初期化



SystemVerilogは、改善された型初期化機能を提供します。 今書く必要はありません

reg [63:0] data = 64'hFFFFFFFFFFFFFFFF;
      
      







これだけができます:

 reg [63:0] data = '1;
      
      







data = '0を書き込むと、ベクトルはゼロで初期化され、data =' bzは3番目の状態で初期化されます



列挙型。



最後に、ステートマシンは次のように記述できます。

 enum {WAITE, LOAD, STORE} State, NextState; always_ff @(posedge clock, negedge resetN) if (!resetN) State <= WAITE; else State <= NextState; always_comb begin case (State) WAITE: NextState = LOAD; LOAD: NextState = STORE; STORE: NextState = WAITE; endcase end
      
      







さらに、列挙型に値を割り当てることができます。

 enum {ONE = 1,FIVE = 5,TEN = 10 } state;
      
      







デフォルトでは、列挙型にはint値が割り当てられます。 ただし、このように書くことができます

//幅が1ビットの列挙型。

// 2つの状態のみを受け入れることができます

 enum bit {TRUE, FALSE} Boolean; //     2 . //     enum logic [1:0] {WAITE, LOAD, READY} state;
      
      







列挙型の名前の値を出力するには、次の構成が使用されます。

 $display("\nCurrent state is %s (%b)", State.name);
      
      







構造



次の方法で構造を宣言します。

 struct { int a, b; // 32-bit variables opcode_t opcode; // user-defined type logic [23:0] address; // 24-bit variable bit error; // 1-bit 2-state var. } Instruction_Word;
      
      







構造体でサポートされるTypedef宣言

 typedef struct { // structure definition logic [31:0] a, b; logic [ 7:0] opcode; logic [23:0] address; } instruction_word_t; instruction_word_t IW; // structure allocation
      
      







デフォルトでは、構造は展開された状態で表示されます。 packキーワードを使用すると、構造をパックできます。

 struct packed { logic valid; logic [ 7:0] tag; logic [31:0] data; } data_word;
      
      







この形式では、ベクトルとして表されます。 したがって、そのような構成が可能です。

画像

 data_word.tag = 8'hf0; data_word[39:32] = 8'hf0; //   
      
      







連合



ユニオンは、さまざまな種類のデータを格納できるメモリ値ですが、一度に1つだけです。

構文は完全にCに似ています。

 union { int i; int unsigned u; } data; ... data.i = -5; $display("data is %d", data.i); data.u = -5; $display("now data is %d", data.u);
      
      







実用的な最大の関心事は、パックドユニオンです。 固定タイプのビットを使用して、さまざまなタイプを表します。

あるタイプで記録された情報は、別のフォーム(別のタイプ)で読み取ることができます。 例:

 typedef struct packed { logic [15:0] source_address; logic [15:0] destination_address; logic [23:0] data; logic [ 7:0] opcode; } data_packet_t; union packed { data_packet_t packet; // packed structure logic [7:0][7:0] bytes; // packed array } dreg;
      
      







画像

ユニオンはパッケージ化されているため、情報は調整され、ロジック[7:0]を介して記録されたデータはdata_packet_tを介して読み取ることができます。

 initial begin logic [15:0] src, dst; for (i = 0; i <= N; i = i + 1) begin dreg.bytes[i] <= byte_in; //store as bytes end src = dreg.source_address; dst = dreg.destination_address; end
      
      







パックドアレイ



SystemVerilogを使用すると、多次元パック配列を作成できます

 logic [3:0][7:0] data; // 2-D packed array logic [1:0][3:0][7:0] data; // 3-D packed array
      
      







IEEE標準では、これらの要素をメモリに保存する方法を定義しています。 たとえば、

 logic [3:0][7:0] data; // 2-D packed array
      
      







画像

配列はベクトルとしてメモリに保存されるため、ベクトルと同じ操作をすべて使用できます

 logic [3:0][15:0] a, b, result; // packed arrays result = (a << 1) + b;
      
      







ベクターへのアクセスは、要素単位で行うことも、次元全体を含めることもできます。 いわゆるスライス配列。

 logic [1:0][1:0][7:0] a; // 3-D packed array a[1][1][0] = 1'b0; //     a = 32'hF1A3C5E7; //     a[1][0][3:0] = 4'hF; //     a[0] = 16'hFACE; //   
      
      







直接アクセスまたはスライスを使用して、ある配列の内容を別の配列にコピーできます

 bit [1:0][15:0] a; //32  ,  bit  0  1 logic [3:0][7:0] b; //32  ,  logic O,1,Z,X logic [15:0] c; // 16   logic [39:0] d; // 40   b = a; //  32   32   c = a; //  16    d = a; //  8   
      
      







参照資料



1.www.asic-world.com/systemverilog

2. Stuart Sutherlandによる「SystemVerilog For Design Second Edition」



All Articles