1 / 30

2011/4/25 ディジタル情報回路 講義資料

2011/4/25 ディジタル情報回路 講義資料. Verilog-HDL を用いた ハードウェア設計 第1回レポート出題. 1. Introduction 2. Features of Verilog-HDL 3. Syntax Guide 4. Description Style 5. Test Bench Description 6. Assignment 7. Conclusion. Outline. 教. 1 . Introduction. LSI 設計における HDL. < LSI 設計フロー>. システム LSI. 仕様.

Download Presentation

2011/4/25 ディジタル情報回路 講義資料

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2011/4/25 ディジタル情報回路 講義資料 Verilog-HDLを用いた ハードウェア設計 第1回レポート出題

  2. 1. Introduction 2. Features of Verilog-HDL 3. Syntax Guide 4. Description Style 5. Test Bench Description 6. Assignment 7. Conclusion Outline

  3. 1.Introduction LSI設計におけるHDL <LSI設計フロー> システムLSI 仕様 ゲート数: 億単位 回路図による設計は困難 言語ベースの設計が主流 システム設計 RTL† 記述 RTL† 記述 RTL記述 HDL*(ハードウェア記述言語) 論理合成 代表例 ネットリスト ・ Verilog-HDL ・ Verilog-HDL レイアウト ・ VHDL p. 112 マスクパターン †Register Transfer Level 製造へ * Hardware Description Language

  4. 2.Features of Verilog-HDL Verilog-HDLの特徴 ・ 文法がC言語に似ている C言語と対比させて説明 ・ シミュレーション環境が充実している iverilog,Verilog-XL,VeriLogger Pro ・ 抽象度が低い(VHDLと比べて) 回路をイメージできる必要がある ・ 並列的な命令の記述が可能 ノンブロッキング代入文

  5. 2.Features of Verilog-HDL ・ ブロッキング代入文とノンブロッキング代入文 ブロッキング代入文 (順次処理) initial begin a = 3 ; b = 5 ; #10 a = b + 1 ; b = a + 1 ; end ノンブロッキング代入文 (並列転送) initial begin a <= 3 ; b <= 5 ; #10 a <= b + 1 ; b <= a + 1 ; end a = 3 に続いて b = 5 同時刻に行う代入文の 右辺評価終了後に代入 a = b + 1 (= 6) に続いて b = a + 1 (= 7) を代入 右辺のみ先に評価: b + 1 = 6,a + 1 = 4 a = 6 と b = 4 の同時代入 a = 6 の後で b = 7 を代入 シフトレジスタのような 並列転送を記述可能 p. 252, 260, 317

  6. 3.Syntax Guide 識別子 : ・ 英字もしくはアンダスコア( _ )で始める文字列 ・ 文字列中には,英字,数字,アンダスコア( _ ), ドル記号($)を含むことができる ・ 大文字と小文字は区別される <記述例> ・ 正しい識別子 cnt4,_reset,TEN$,INPUT(予約語のinputとは区別) ・ 誤った識別子 74LS00(先頭が数字),$test(先頭が$),xor(予約語)

  7. 3.Syntax Guide 数値表現形式 : ss’f nnn. ..n ・ ss : 定数の ビット幅 を表す10進数値 ・ f  : 基数 を表す文字 d (decimal :10進),h (hexadecimal : 16進) o (octal :8進),b (binary :2進) ・ nnn. ..n : 定数値 各基数で許される値,x,z が記述可能 途中のアンダースコア _ は無視: 区切りに使える <記述例> 数値定数 →2進数表現 8’haa →1010_1010 4’b0100 →0100 10 →00…01010

  8. LSI : NUMA-01 教 4.Description Style ・ Verilog-HDLの記述スタイル pp. 113-115 ・ 構造記述(ゲート・レベル記述) ネットリストと等価 人手で書くことは少ない (ツール間インターフェース用) ・ RTL記述(ブロック図レベル記述) “Module” モジュール:回路を記述する基本構造 keyin cntblk disp ctrl clkgen

  9. 4.Description Style ・ モジュール構造 pp. 116-117 modulecounter(clk, res, out); C言語(旧K&R)と対比 モジュール名 ポート・リスト intfunc(a, b, c); 入出力ポート宣言 inta,b,c レジスタ宣言 ネット宣言 パラメータ宣言 { intx x = a + b; c = x *a; モジュール構成要素  下位モジュール呼び出し always文 assign文 など } endmodule

  10. input clk, res; input [7:0]bus1, bus2; output busy; inout [15:0] dbus; // 入力 // 入力 バス信号 // 出力 // 双方向バス信号 4.Description Style ・ ポート宣言 ポート宣言例 ビット幅の指定 C言語における配列のイメージ [MSB,LSB] として扱う あまり使わないが[16:1]や[0:15]でも可能 1ビットのときは特に指定しない

  11. wireenb1; wire[7:0]bus; wire#3000trig; // バス信号 // 遅延付加ネット regff1, ff2; reg[3:0]cnt4; reg[7:0]mem[0:255]; //4bit レジスタ //256 byteメモリ 4.Description Style ・ ネット宣言,レジスタ宣言 ネット宣言例 レジスタ宣言例

  12. 4.Description Style ・ パラメータ宣言 パラメータ宣言例 parameterSTEP=1000; parameterMEMSIZE=1024; reg[7:0]mem[0:MEMSIZE-1] //1クロック周期 // 使用例 C言語における定義(define)文 #definePAI3.14// 円周率 #defineN20 // 配列の箱の数

  13. 4.Description Style モジュール構成要素 ・ 手続きブロック initialブロック or alwaysブロック 手続き代入文 : 手続きブロック中の代入文 左辺 : reg型の信号 ・ 継続的代入文 assign文 : wireが他の信号の影響を受けて常時伝搬 左辺 : wire型の信号 手続きブロック外に記述

  14. alwaysを使って,組合せ回路の動作を手続き的に記述可能だが,条件列挙(else)を忘れるとラッチにalwaysを使って,組合せ回路の動作を手続き的に記述可能だが,条件列挙(else)を忘れるとラッチに 教 4.Description Style ・ RTL記述(順序回路: トランスペアレント型ラッチ ) ・ always @ (G or D) … G or D の信号値変化時に …の手続きブロックを実行 ・ alwaysによる記述 modulelatch (G,D,Q); inputG,D; outputQ; regQ; always @ (G or D) if (G) Q <= D; endmodule 動作 ・ G = 1 イベント式 D → Qへデータが つつぬける ・ G = 0 Dが変化しても Qは変化しない p. 251

  15. 4.Description Style ・ RTL記述(順序回路: 同期リセット付きエッジトリガ型FF) ・ alwaysによる記述 ・ always @ (posedge clk) … clk の 0 → 1 変化時 に … の手続きブロックを実行 moduledff (clk,R,D,Q); inputclk,R,D; outputQ; regQ; always @ (posedge clk) begin if (R) Q <= 0; else Q <= D; end endmodule 動作 イベント式 ・ R = 1 (リセット/正論理※) clk の立ち上がり時に Q = 0 ・ R = 0 “or posedge R” を付加 すると非同期リセットに clk の立ち上がり時に Q = D ※ No. 19 の res など,負論理で  扱うことも多いので要注意 p. 273 nReset

  16. assignna= ~(in1 & in2); assignout = (sel == 1) ? d1 : d0; assigncarry = (cnt10 == 4’h9); assignsum = a+b; //2入力NAND // セレクタ // 桁上がり信号 // 加算回路 a in1 sum na in2 b 4.Description Style ・ RTL記述(組合せ回路) ・ assignによる記述 2入力NAND 加算回路

  17. function名(戻り値) 入力宣言 動作記述 functionの終了 functionの使用 教 4.Description Style ・ RTL記述(組合せ回路) p. 129 ・ functionによる記述 moduledec1to2 (din, dout); inputdin; output[1:0]dout; function[1:0]dec; inputdin; begin case (din) 1’h0 : dec = 2’b01; 1’h1 : dec = 2’b10; endcase end endfunction assigndout = dec (din); endmodule

  18. 4.Description Style ・ 下位モジュール呼び出し pp. 114-115 moduleff4 (clk, D,Q); inputclk; input[3:0]D; output[3:0]Q; ffF0( .D(D [0]),.Q(Q [0]),.clk(clk)); ffF1( .D(D [1]),.Q(Q [1]),.clk(clk)); ffF2( .D(D [2]),.Q(Q [2]),.clk(clk)); ffF3( .D(D [3]),.Q(Q [3]),.clk(clk)); endmodule moduleff (clk, D,Q); inputclk,D; outputQ;  ・・・・・・・  ・・・・・・・  ・・・・・・・  ・・・・・・・ endmodule D[2] D[0] D[3] D[1] clk D D D D F0 F1 F2 F3 clk clk clk clk Q Q Q Q Q[3] Q[2] Q[1] Q[0]

  19. 回路ごとにテストベンチは異なる 教 5.Test Bench Description ・ 4 ビットカウンタとテストベンチの記述 p. 302(参考) module count4r (clk, res , out) ; input clk, res ; output [ 3 : 0 ] out ; reg [ 3 : 0 ] q ; always @ ( posedge clk ) begin if ( res )// clk↑の際に res = 1 なら q <= 0 ; else // clk↑の際に res = 0 なら q <= q + 1 ; end assign out = q; endmodule module test_counter ; wire [3:0] out; reg clk, res; initial begin $monitor(“%t %b %b %b”,$time,clk,res,out); clk <= 0; res <= 0; #40 res <= 1; #350 $finish; end always #10 // 10単位時間毎に clk を反転 begin clk <= ~clk; end count4r inst (clk,res, out); // モジュール呼出し endmodule 出力書式指定

  20. 6.Assignment (第1回 レポート出題) Verilog-HDLを用いたハードウェア設計    以下の (1) と (2) それぞれについて記述せよ (1) 組合せ回路 (構造記述:Gate水準記述 or RTL記述) 加算器,エンコーダ,デコーダ,コンパレータ, パリティチェッカ,カウンタ,バレルシフタ,ほか (2) 順序回路 (同期リセット or 非同期リセット付き) 各種フリップフロップ,n進カウンタ, 符号化カウンタ(ジョンソン,グレイ,リング), 擬似ランダム符号系列発生回路(LFSR),ほか

  21. 6.Assignment ・ 〆切+評価 〆切 ・ 2011/5/30 講義開始前に教卓に 評価 ・ 基本点 : 10点 (状況により変動) ・ 加点対象 : 内容により +5点 シミュレーション実行 (iVerilogを使用) 波形シミュレーション実行   (GTKwaveを使用) 最高 15点 インストール方法は      こちら→ http://cas.eedept.kobe-u.ac.jp/~sugar/pdf/v_install.pdf

  22. 入出力 ネット・レジスタ宣言 moduleで始まりendmoduleで終わる initial文  すぐに実行 function文 case文 (条件分岐) function文  always等の 内でしか使用不可 always文 assign文 6.Assignment ・ 例  擬似電卓(第2回?) module calculation (equal, cal, in1, in2, out) ; input equal ; input [1:0] cal ; input [3:0] in1, in2 ; output [7:0] out ; reg [7:0] q ; initial q <= 8’b00000000 ; function [7:0] manipulator; input [3:0] inA, inB ; input [1:0] cal ; case (cal) 2’b00:manipulator = inA + inB; 2’b01: manipulator = inA - inB; 2’b10:manipulator = inA * inB; 2’b11: manipulator = inA / inB; endcase endfunction always@ ( posege equal ) begin q <= manipulator ( in1, in2, cal ) ; end assign out = q; endmodule

  23. 6.Assignment ・ GTKWaveを使用する際のテストベンチ module test_counter ; wire [3:0] out; reg clk, res; initial begin $dumpfile("counter4r.vcd"); $dumpvars(0,test_counter); $monitor(“%t %b %b %b”,$time,clk,res,out); clk <= 0; res <= 0; : : count4r inst (clk,res, out); endmodule $monitorの前に2行追加する GTKWave用の実行ファイル GTKWave用の時間設定 トップモジュール名にする   (ここではテストベンチ名)

  24. 7.Conclusion ・ まとめと今後の課題 <まとめ> ・ LSI設計におけるHDLの位置付け ・ Verilog-HDLの記述法の説明 ・ Verilog-HDLを用いたハードウェア設計法の説明 ・ 必修レポート課題の説明 <今後の課題> ・ 設計する回路の規模拡大 ・ テスト・ベンチ記述をもちいたシミュレーション

  25. 困ったときは… ・ 講義サポートページ(Verilog)http://cas.eedept.kobe-u.ac.jp/numa/lect/verilog/ ・ 新居良祐サポートページhttp://cas.eedept.kobe-u.ac.jp/~arai/ B-406沼 4階 N 電気事務室 (3階) B-408

  26. 講義サポートページ ユーザ verilog パスワード 講義で

  27. Verilog HDL ビデオ講習会 5月12日(木)15:00~16:50C4-201 広島市立大学 助教授 越智裕之先生 (現在,京都大学准教授)

  28. C言語 System Verilog まだまだ 発展途上 System C Verilog Appendix ・ HDLとSystem C,System Verilog ? ? Spec C Bach C

  29. Appendix ・ 不定値 x とハイ・インピーダンス z 論理シミュレーション実行後 信号の値が不定値になる ・ まだ値が代入されていないreg型の信号 ・ 複数の信号が競合したwire型の信号 ・ 明示的に不定値を与えた場合 ・ 不定値を含む演算の結果 信号の値がハイ・インピーダンスになる ・ 何も接続されていないwire型の信号 ・ 明示的にハイ・インピーダンスを与えた場合

  30. Appendix ・ alwaysブロックによる組み合わせ回路の記述 <制約> moduledec1to2 (dindout); inputdin; output[1:0]dout; reg [1:0] dout; always @ (din); begin case (din) 1’h0 : dout <= 2’b01; 1’h1 : dout <= 2’b10; endcase end endmodule ・ 出力をreg宣言する ・ always文の@以降に,  すべての入力を記述 functionで代用可能なので, あまり用いられない

More Related