SystemVerilogの+演算子について

SystemVerilogでは(複数)ビットの加算を+演算子によって行う事ができる.
しかし,この+演算子が最終的にどのようなゲート表現となるのか,確認したことがなかったため,今回はその確認を行う.
また,加算器は全加算器(半加算器)を用いることでも作成することができる.よって,+演算子と自作の加算器の性能比較も行う.

 

加算器の自作

加算器は全加算器から成り,全加算器は半加算器2つとORゲートから成る.
そのため,最初に半加算器を作成する.今回はSystemVerilogで作成した.
 

 
半加算器2つとORゲートにより,全加算器を作成する.
 

 
そして,全加算器を組み合わせることで複数ビットの加算器を作成する.
 

 

+演算子による加算器作成

加算器の自作が終わったため,次に+演算子を用いた加算器のモジュールを作成する.
 

 

比較用モジュールの作成

作成した2つの加算器を比較するためのモジュールを作成する.
 

 

測定

ADDER_CMPの作成が終わったため,このモジュールに対応するシンボルを作成する(ADDER_CMP.svを開いた状態で[File]->[Create/Update]->[Create Symbol Files for Current File]).
次に回路図の記述を行う.回路図を作成([File]->[New]->[Block Diagram/Schematic File)し,ADDER_CMPのシンボルにinput/outputピンを接続する.
 

 
コンパイルを行い,成功したらテスト用の入力波形を作成する.
波形ファイルを新規作成([File]->[New]->[University Program VWF])し,適当な入力波形を作成する.
今回は160[ns]毎に乱数で生成したデータを使用する.
Timing Simulationを行った結果,以下のようになった.
 

 
out1,out2でハザードが発生していることがわかる.この部分を拡大すると
 

 
となるため,0.4[ns](=5.677-5.277)自作した加算器の方が遅延が大きいことが分かる.
 

ゲート表現の確認

実際に生成されたゲート表現は[Tools]->[Netlist Viewer]で確認することが可能となっている.
確認したところ,全加算器の表現が自作と+演算子で異なっており,これが遅延の差の原因であるとわかった.
 
自作
 
 
+演算子

F0

F1

 
 

結論

今回は半加算器から加算器を自作し,SystemVerilogの+演算子との比較を行った.
比較の結果,+演算子の方が遅延が少ないことがわかった.