ハードウェア記述言語による 論理回路設計とFPGAへの実装 2 SPP 2009.8.27 高知工業高校 高知大学理学部 本田理恵、三好康夫 内容 • 前回の補足 – 回路と使用されたロジックエレメントの確認 – HDL文法 • 順序回路 – フリップフロップ – カウンタ • 実習1(先週の課題を完成) • 実習2-自由課題ー モジュール 構造 module モジュール名(ポートリスト); ポート宣言 ネット宣言 レジスタ宣言 内部でやりとりする信号 パラメータ宣言 回路記述本体 assign function alwaysなど end module 信号の種類 タイプ 説明 宣言文 入出力区別 ポート 入出力信号 input 信号,信号...; output 信号,信号...; inout 信号,信号...; 入力 出力 入出力 レジスタ 回路内部で、変化し、 reg 信号,信号; 記憶される信号 出力 内部の信号 ネット 入力 内部の信号 回路内部の信号(変 更されない) wire 信号,信号; 複数ビットの場合はビット幅をつけて宣言(1bitの場合は省略可能) reg [7:0] a; wide [15:8] b; 同じビット幅の信号のみ,で連ねて宣言できる。 同じ信号をポートとレジスタ、ポートとネットの両方で宣言することがある。 output [7:0] a; reg [7:0] a; 論理値と数値表現 コメント 論理値 0, 1, x, z x、不定値、z、ハイインピー ダンス 数値 <ビット幅>’ <基数><数値> 基数 b,B 2進数 o,O 8進数 d,D 10進数 h,H 16進数 ビット幅省略→32bit 基数省略→10進数 x,zは使えない。 例 例 例 8’haa →10101010 1’b1 → 1 b1 → 0000000.....1 (32bit) 演算子 算術演算 + 加算、プラス記号 - 減算、マイナス記号 * 乗算 / 割り算 % 剰余(あまり) 等号演算 == 等しい != 等しくない === 等しい(z,xも) !== 等しくない(z,xも) ビット演算 関係演算 ~ NOT & AND < 小 | OR <= 小または等しい ^ XOR > 大 |~ XNOR >= 大または等しい 基本文 parameter 定数の代入 parameter パラメータ名 = 定数(式) assign 信号の値の継続 的な代入 assign 信号名 = 式 ; assign 信号名 =(条件式)? 式1:式2; 条件式が成立するとき式1を、 そうでないとき式2を信号に代入 always あるイベントが起 こった時に処理 する内容を記述 always @ (イベント式) 例 reg [7:0] sum always @ (a or b) sum <= a+b; (aの値かbの値が変化したとき sumにa+bを代入) if 文による条件分岐 if 逐次的な条件分岐 begin if (条件式1) 文1 else if (条件式2) ←省略可能 文2 else 文3 end case 複数への同時分 岐 begin case (式) 値1: 文1; 値2: 文2; default: 文3; endcase end 組み合わせ回路ーセレクター d0 dout d1 module sel(d0,d1,dout) input d0, d1; output dout; assign dout= (sel==1’b1)? d1:d0; end module sel module sel(d0,d1,dout) input d0, d1; output dout; begin if (sel==1’b1) dout<=d1; else dout<= d0 end endmodule d0,d1,sel が変化し たとき module sel(d0,d1,dout) input d0, d1; output dout; always @(d1 or d0 or sel) begin if (sel==1’b1) dout<=d1; else dout<= d0; end end module × module 中にいきなりifを入れてはいけない(独特のルール) 順序回路 • 回路内に記憶素子を含んでいて、クロックと 呼ばれる基準信号と入力によって出力がきま る回路 • クロックという時間の概念存在する • 基本論理素子と記憶素子で構成されている • 順序回路の例としては、フリップフロップやカ ウンタなどがある クロック信号 • ディジタル回路において順序回路を動作させ るための基準信号のことであり、一定の周期 でH=>L=>H・・・・を繰り返す信号 補足:7セグメントLEDのデコード値 A[7:0] 0 1 2 3 4 5 1111 1100 0110 0000 1101 1010 1111 0010 0110 0110 1011 0110 A[7:0] 16進数 8 1111 1110 FE 9 1111 0110 F6 a 1110 1110 EE b 0011 1110 3E c 0001 1010 1A d 0111 1010 7A e 1001 1110 9E f 1000 1110 8E 16進数 FC 60 DA F2 66 B6 6 1011 1110 BE 7 1110 0000 E0 フリップフロップ • フリップフロップとは、シーソーの働きの意味。 • 回路の働きが文字通りシーソーの働きに似て いる。 入力(D)の変化がクロック(CLK)の立ち上がり、又は 立下りにより出力(Q)に伝わる 通常、リセット(RESET)はクロック(CLK)とは非同期 リセット(RESET)は“L”時リセット フリップフロップ–HDL記述posedge negedge module test(a,b,clk,rst); input a; // 入力 clk input clk; // クロック信号 input rst; //リセット信号 a output b; // 出力 b reg b; rst always @( posedge clk or negedge rst ) begin if (!rst) b <= 1‘b0; else クロックの立ち上がりか b <= a; リセットの立ち下がりを end 検出したら以下の動作を endmodule 行う 実機確認 – 作成済みのデスクトップにあるSPP/test/test.pofを ダブルクリックしてプロジェクト開始 – 各信号は下記の表の通り割り当てられている 信号 信号名(HDL) 装置 ピン番号 入力 a SW_A0 2 出力 b LED1 47 リセット信号 rst RESET 240 クロック信号 clk SW27 28 – 再コンパイルとプログラミングを行う – クロック信号をそれぞれ610Hz、305Hz、1Hz、単 発パルスにしたときのSW_A0の押し離しに対する LED1の反応を観察しなさい。 参考:周波数の切り替え メモリ SW27 0 1 2 3 4 5 6 7 周波数 40 MHz 20 MHz 10 MHz 5 MHz 1.25 MHz 325 KHz 78.1 KHz 19.5 KHz メモリ SW27 8 9 A B C D E F 周波数 9.8 KHz 4.9 KHz 244 KHz 1.22 KHz 610 Hz 305 Hz 1.0 Hz ★ ★1クロックスイッチSW28を有効にする。 スイッチ押し下げごとに1つ単発のクロックを発生させる。 周波数 周期 1MHz 1x10-6sec -3 1Hz :1秒間に1回のクロック信号(1つのたち上がりとたち下がり) 1KHz 1x10 sec 1Hz 1sec カウンタ • スイッチを押して10秒後に学籍番号を点灯 • 入力されるクロックは10MHzとする。 10MHz→1周期1E-7sec 10sec →99999999回カウント したら表示 カウンタ • HDL記述は資料6を参考に 実習1 • 先週のメッセージを表示する課題を完成しな さい。 – デスクトップの SPP/gakuseki/gakuseki.pofをダブ ルクリックして利用してください • 別途配布するプリントを埋めながら実施してく ださい。 実習2-自由課題ー • 資料1の カウンタ(P73-) 、クロック(P75 -)、シフト回路(P78-) の説明に目を通して実装して動作確認を行いなさい。また、 合成された回路のロジックエレメント数を答えてください。 – デスクトップにある作成済みのプロジェクトを利用して構いません • 練習8 カウンタ • 練習9 クロック • シフト回路 SPP/count/count.pof SPP/clk/clk.pof SPP/shift/clksegseg.pof • どれか1つを選んで1か所でもよいので,自分なりに変更を加 えてみてください。この際、資料6のHDL記述の説明をみなが らその回路記述を理解して変更してください • • • • 例 シフト回路のメッセージを変える。左から右にシフトさせる。 クロックを3ケタにする。 カウンタの時間とメッセージを変える。 • 作業の過程を別紙(配布する)に記録してください。 参考 • HDL独習ソフトで学ぶCQEndeavor Verilog HDL 小林、CQ出版 • JFIT資料 • 個人でQuartus IIを使用してみたい人は、 • http://www.altera.co.jp/products/software/q uartus-ii/web-edition/qts-we-index.html • またはGoogleで Quartus IIと入力
© Copyright 2024 ExpyDoc