Presentation is loading. Please wait.

Presentation is loading. Please wait.

VLSI設計論第2回 組み合わせ回路の記述と 論理シミュレーション

Similar presentations


Presentation on theme: "VLSI設計論第2回 組み合わせ回路の記述と 論理シミュレーション"— Presentation transcript:

1 VLSI設計論第2回 組み合わせ回路の記述と 論理シミュレーション
慶應義塾大学 理工学部 情報工学科 天野

2 変数と定数 変数 定数 プリプロセッサ wire宣言:信号に名前を付ける reg宣言:データを記憶できるレジスタが生成
wire sign; wire [3:0] data1; reg宣言:データを記憶できるレジスタが生成 reg dff; reg [3:0] acc; 両方ともバスの宣言が可能 [最大:最小] 最小は通常0にすることが多い 定数 <ビット幅> ′<基数><数値> 基数は2進b,16進h、何もつかなければ10進数(32ビット) 16’b 16’hca プリプロセッサ  `defineでマジックナンバーを定義しておく  アクティブLの信号にはアンダースコアをつけるのがお勧め

3 assign文と論理演算 assign文 二つのassign文は同時並行的に実行される 継続的な代入:配線が繋がっていていつでも出力される
左辺はwireのみ assign y = a + b; assign y = a & b|~a&~b; 普通の論理演算素子が使える(坂本マニュアル参照) ちゃんとまともな優先順位がある(SFLとは違う) 加減乗除が書ける(しかし、乗算器、除算器などは大きいので注意) リダクション演算はその演算記号を変数の前に付けるだけ &aなど 二つのassign文は同時並行的に実行される 同じ出力に対して2つの文でassignするのはエラー

4 ビット切り出しと連結 ビット切り出し 連結 wire [15:0] a; wire [7:0] x,y;
assign x = a[15:8] & a[7:0]; 連結 assign a = {x,y}; assign {c, y} = ina+inb; {4{2’b10}} →  assign a = {16{x[15]}, x};

5 一時期FPGAベンダが推奨した方法、やまさき先生は大嫌いでふんがも好きでない
選択的な記述 Verilogは二つの文を書くと並列に動く では、ある条件でAの文、別の条件でBの文を動かす選択的記述(SFLのalt文)は? 三つの方法がある assign文を使う  assign y = com ? ina + inb : ina – inb; function文を使う always文を使う ふんがが好きだが一般には推奨されない やまさき先生ご推薦の方法、落とし穴あり 一時期FPGAベンダが推奨した方法、やまさき先生は大嫌いでふんがも好きでない

6 assign文を使う方法 assign y = (com==`ADD) ? a + b: (com== `SUB) ? a - b:
(com== `AND) ? a & b: a | b; なんとなくCASE文っぽく見えるんじゃない? 余計な宣言が不要で面倒が一番少ない 欠点: 条件が単純なcase文的な場合はうまく書けるが、条件構造が複雑だと読みにくい 不要な優先順位が付いて合成系を制約する可能性がある

7 function文 -if文の利用- assign y = alu(a,b,com);
function [3:0] alu (ina,inb,com); input [3:0] ina,inb; input [2:0] com; begin if (com==`ADD) alu = a + b ; else if (com==`SUB) alu = a –b ; else if (com==`AND) alu = a & b ; else alu = a | b; end endfunction

8 function文 –case文の利用- assign y = alu(a,b,com);
function [3:0] alu (ina,inb,com); input [3:0] ina,inb; input [2:0] com; begin   case(com) `ADD: alu = a + b ; `SUB: alu = a –b ; `AND: alu = a & b ; default: alu = a | b; endcase end endfunction

9 function文の問題点 出力が複数の場合はどうするの? そもそもfunctionって複数個所で呼ぶことに意味があるのでは???
意味的に関係があるものは出力の連結を利用 意味的に関係の薄い出力を一つのfunction文に指定してはいけない→分けること! 代入時のビット幅、割付に注意→あまりたくさんの出力をfunction文で指定することはお勧めできない そもそもfunctionって複数個所で呼ぶことに意味があるのでは??? ま、いいじゃん

10 function文の複数出力指定 assign {c,y} = alu(a,b,com);
function [4:0] alu (ina,inb,com); input [3:0] ina,inb; input [2:0] com; begin   case(com) `ADD: alu = a + b ; `SUB: alu = a –b ; `AND: alu = {1’b0,a & b} ; default: alu = {1’b0,a | b}; endcase end endfunction

11 なぜ選択的な構文が書けないか? 出力が複数になると、値が定義されなくなるから
begin if (com==`ADD)  {c,y}= a + b ; else if (com==`AND) y = a & b ; else y = a | b; end と書かれると、cはADD以外では何を出して良いかわからなくなってしまう。 SFLは、この時cを不定にして合成系に任せるが、Verilogはこれを許さず、何とか値を入れようとする Verilogは基本的に出力一つに対してその論理を入力の組み合わせとして考え、データパスと制御を分離する方法であり、これはこれで優れていると言える

12 alu.vのシミュレーション テストベンチは多少なぞの文があるが、今日の所は深く理解しないで使って欲しい サブモジュールの呼び出し方
  alu alu0( .ina(a), .inb(b), .com(com), .y(y)); alu alu0(a,b,com,y); 後者の書き方は、サブモジュールの宣言の順番で入出力が決まる。しかし前者の書き方をお勧めする。 モジュール入出力 モジュール名 インスタンス名 上位階層で与える名前

13 Verilog-XL:使い方 pico.vというファイルのシミュレーション コマンドラインに以下を入力 コマンド名 ファイル名
  % verilog pico.v コマンド名 ファイル名

14 Verilog-XL:正常終了の場合 問題がない場合 正常終了
シミュレーションを実行して画面に表示される結果などは、カレントディレクトリのverilog.logというログファイルに上書きされる。

15 Verilog-XL:ErrorとWarning
文法を間違えていたりするとエラーとなり終了 Warnigが出てもシミュレーションはできるが… Error:例では、pico.vの20行目に現れたtmという名前の信号が、ポートやネット、レジスタで宣言されておらず不正に参照されていることを示している。 またverilogを使用する時にはVDECのサーバでライセンスの認証を行うため、それに失敗するとライセンスエラーとなって終了する。 Errorが多量に発生した場合は全ての表示が画面に入りきらなくなる。その場合はカレントディレクトリのverilog.logファイルをless等を使って見れば良い。ただしログファイルは上書きされていくので、他のファイルのシミュレーションを実行してしまうと前の結果を見ることはできなくなる。 Warning:例では、pico.vの20行目で参照されているtmpという信号線の7から4ビット目が、宣言されているビット幅の範囲外を参照していることを示している。Errorの場合はそれを表示するとすぐに実行が終了してしまうが、Warningの場合は表示された後もシミュレーションは続く。例のように範囲外の信号を参照している場合、その部分はハイインピーダンスとして扱われる。

16 Verilog-XL:テストベクトル テストベクトルを用いて動作確認をする テストベクトルを記述したファイル名
  % verilog test.v pico.v テストベクトルを記述したファイル名 テストベクトルを用いる場合は、それを記述したファイル名を最初に指定する。モジュールの階層構造としてはテストファイルが最上位として扱われる。

17 Verilog-XL:動作の検証 テストベクトルに記述した信号によって 設計した回路の動作を検証する EX) 入力と出力の信号値を表示させ
テストファイルもverilogで記述されているため、扱いとしては他のファイルと同じである。例を見ても分かるように、普通にコンパイルされている(1行目)。勿論、テストファイル内に文法の間違いがあればErrorとなりシミュレーションは終了する。 例では$display分を用いて入力として与えた信号と出力の信号の値を2進数で表示させるようにしている。信号の変化の表示は、他に波形ファイルを作成するように指定して波形表示ツール(signalscan:後述)を用いて観察することもできる。 EX) 入力と出力の信号値を表示させ 設計通りに動作しているかを検証

18 Verilog-XL:複数モジュール 階層構造をした複数モジュールのシミュレーション 上位モジュール 下位モジュール
  % verilog pico.v if_stage.v 上位モジュール 下位モジュール 大きな回路を1つのモジュールで記述することは、不可能ではないが避けるべきである。また1つのファイルに複数のモジュールを記述することもできるが、モジュールや機能ごとに1つのファイルを用いた方が管理もしやすい。 一方多くのファイルを同時にシミュレーションに使用する場合は、毎回1つづつコマンドラインに指定するのは大変である。そのような場合はエイリアスを作ったりスクリプトファイルを作ると便利である。

19 波形ツール:simvisionの起動 コマンドラインに以下のように入力   % simvision & これもライセンスの認証が必要である。

20 simvision:波形ファイルを開く File → Open Simulation を指定して波形ファイルの読み込み

21 simvision:波形ファイルを開く 波形ファイルがある ディレクトリの選択 次に波形ファイルの選択

22 simvision:波形の表示 波形ファイルを読み込んだ後、 左の窓でモジュール、右の窓で信号線を選択し、 右上のアイコンをクリック

23 simvision:波形表示

24 simvision:波形の再表示 File → Reload Database を選択すると波形ファイルを読み込んで波形を再表示

25 simvision:終了 File → Exit SimVision を選択すると終了

26 演習 4bit ALUを設計 comを3ビットとし、ADD,SUB,AND,OR等適当な機能を装備せよ。ただし、ADD,SUB,Through A, Through Bは必須 alu.vをコピーして拡張してもOK テストベンチはalu_test.vを改造のこと


Download ppt "VLSI設計論第2回 組み合わせ回路の記述と 論理シミュレーション"

Similar presentations


Ads by Google