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

Slides:



Advertisements
Similar presentations
1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
Advertisements

Quartus Ⅱの簡単な使い方 Combinatorial Logic (組み合わせ論理回路)( P.19 ~ 23 ) ① Implementing Boolean Expressions&Equations (ブール表現とブール式の書き方) ② Declaring Nodes (ノードの宣言)
論理回路 第 4 回 TkGate 実習 - 組み合わせ論理回路 38 号館 4 階 N-411 内線 5459
論理回路 第 12 回 TkGate 実習 - 順序回路 38 号館 4 階 N-411 内線 5459
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
計算機工学特論A 10/17  テキスト内容 1.1~1.4.
UNIX利用法.
UNIX利用法 情報ネットワーク特論資料.
VLSI設計論第4回 アキュムレータマシンと 仮遅延シミュレーション
京都大学情報学研究科 通信情報システム専攻 湯淺研究室 M2 平石 拓
コンピュータリテラシー 第3回授業の復習 基本的なUNIXコマンド
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
計算機システムⅡ 主記憶装置とALU,レジスタの制御
5.3 各種カウンタ 平木.
数値計算及び実習 第3回 プログラミングの基礎(1).
Handel-C基礎 および 7セグとマウスのハンドリング
Verilog HDL 12月21日(月).
プログラミング基礎I(再) 山元進.
コンピュータと情報 第3回 補遺 ファイルとフォルダ.
条件式 (Conditional Expressions)
Fire Tom Wada IE dept. Univ. of the Ryukyus
4.2.2 4to1セレクタ.
初年次セミナー 第2回 文字の出力.
スクリプト言語を用いたPHITSの連続実行
2005年11月2日(木) 計算機工学論A 修士1年 No, 堀江準.
計算機工学特論A 第4回 論理合成 山越研究室 増山 知東 2007年11月7日 .
VLSI設計論 慶應義塾大学 理工学部 情報工学科 山﨑 信行
基幹理工学研究科 情報理工学専攻 後藤研究室 修士1年 魏 元
ハードウェア記述言語による 論理回路設計とFPGAへの実装 2
計算機構成 第1回 ガイダンス VerilogHDLのシミュレーション環境
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
高速剰余算アルゴリズムとそのハードウェア実装についての研究
PCPU物理設計 ~マクロレベルの配置配線~
プログラミング演習(2組) 第8回
京都大学情報学研究科 通信情報システム専攻 湯淺研究室 D1 平石 拓 2005/10/18
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
第二部  回路記述編 第3章 文法概略と基本記述スタイル 3.1 文法を少々 3.1.1~3.1.3.
ディジタル回路の設計と CADによるシステム設計
計算機構成 第2回 ALUと組み合わせ回路の記述
地域情報学 C言語プログラミング 第1回 導入、変数、型変換、printf関数 2016年11月11日
計算機構成 第3回 データパス:計算をするところ テキスト14‐19、29‐35
計算機構成 第4回 アキュムレータマシン テキスト第3章
VLSI設計論第3回 順序回路の記述と論理合成
計算機構成 第8回 POCOの構造とVerilog記述 テキスト第5章-第6章
計算機構成 第11回 マルチサイクルCPU 慶應大学 天野英晴.
7. 機能的な組み合わせ回路 五島 正裕.
B演習(言語処理系演習)第2回 田浦.
Fire Tom Wada IE dept. Univ. of the Ryukyus
C言語 はじめに 2016年 吉田研究室.
基礎プログラミング演習 第6回.
計算機工学特論 スライド 電気電子工学専攻 修士1年 弓仲研究室 河西良介
基礎プログラミング演習 第3回.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報基礎演習I(プログラミング) 6月8日 水曜5限 江草由佳
ウェブデザイン演習 第6回.
C言語講座 制御(選択) 2006年 計算技術研究会.
精密工学科プログラミング基礎 第7回資料 (11/27実施)
情報処理Ⅱ 2005年10月28日(金).
標準入出力、変数、演算子、エスケープシーケンス
ca-9. 数の扱い (コンピュータアーキテクチャとプロセッサ)
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
コンパイラ 2012年10月11日
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
情報処理Ⅱ 第3回 2004年10月19日(火).
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
Presentation transcript:

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

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

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

ビット切り出しと連結 ビット切り出し 連結 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}} → 10101010 assign a = {16{x[15]}, x};

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

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

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

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

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

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

なぜ選択的な構文が書けないか? 出力が複数になると、値が定義されなくなるから 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は基本的に出力一つに対してその論理を入力の組み合わせとして考え、データパスと制御を分離する方法であり、これはこれで優れていると言える

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

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

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

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の場合は表示された後もシミュレーションは続く。例のように範囲外の信号を参照している場合、その部分はハイインピーダンスとして扱われる。

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

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

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

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

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

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

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

simvision:波形表示

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

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

演習 4bit ALUを設計 comを3ビットとし、ADD,SUB,AND,OR等適当な機能を装備せよ。ただし、ADD,SUB,Through A, Through Bは必須 alu.vをコピーして拡張してもOK テストベンチはalu_test.vを改造のこと シミュレーションして結果を確認の上、天野(hunga@am.ics.keio.ac.jp)までalu.vをメールのこと