220 likes | 516 Views
ハードウェア記述言語による 論理回路設計とFPGAへの実装 2. SPP 2009.8.27 高知工業高校 高知大学理学部 本田理恵、三好康夫. 内容. 前回の補足 回路と使用されたロジックエレメントの確認 HDL 文法 順序回路 フリップフロップ カウンタ 実習 1 (先週の課題を完成) 実習 2 -自由課題ー. モジュール 構造. module モジュール名 ( ポートリスト) ; ポート宣言 ネット宣言 レジスタ宣言 パラメータ宣言 回路記述本体 assign function always など end module.
E N D
ハードウェア記述言語による論理回路設計とFPGAへの実装2ハードウェア記述言語による論理回路設計とFPGAへの実装2 SPP 2009.8.27 高知工業高校 高知大学理学部 本田理恵、三好康夫
内容 • 前回の補足 • 回路と使用されたロジックエレメントの確認 • HDL文法 • 順序回路 • フリップフロップ • カウンタ • 実習1(先週の課題を完成) • 実習2-自由課題ー
モジュール構造 module モジュール名(ポートリスト); ポート宣言 ネット宣言 レジスタ宣言 パラメータ宣言 回路記述本体 assign function alwaysなど end module 内部でやりとりする信号
信号の種類 複数ビットの場合はビット幅をつけて宣言(1bitの場合は省略可能) reg [7:0] a; wide [15:8] b; 同じビット幅の信号のみ,で連ねて宣言できる。 同じ信号をポートとレジスタ、ポートとネットの両方で宣言することがある。 output [7:0] a; reg [7:0] a;
組み合わせ回路ーセレクター module sel(d0,d1,dout) input d0, d1; output dout; assign dout= (sel==1’b1)? d1:d0; end module d0 dout d1 sel 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 sel(d0,d1,dout) input d0, d1; output dout; begin if (sel==1’b1) dout<=d1; else dout<= d0 end endmodule ×module 中にいきなりifを入れてはいけない(独特のルール)
順序回路 • 回路内に記憶素子を含んでいて、クロックと呼ばれる基準信号と入力によって出力がきまる回路 • クロックという時間の概念存在する • 基本論理素子と記憶素子で構成されている • 順序回路の例としては、フリップフロップやカウンタなどがある
クロック信号 • ディジタル回路において順序回路を動作させるための基準信号のことであり、一定の周期でH=>L=>H・・・・を繰り返す信号
フリップフロップ • フリップフロップとは、シーソーの働きの意味。 • 回路の働きが文字通りシーソーの働きに似ている。 入力(D)の変化がクロック(CLK)の立ち上がり、又は 立下りにより出力(Q)に伝わる 通常、リセット(RESET)はクロック(CLK)とは非同期 リセット(RESET)は“L”時リセット
フリップフロップ–HDL記述- posedge negedge module test(a,b,clk,rst); input a; // 入力 input clk; // クロック信号 input rst; //リセット信号 output b; // 出力 reg b; always @( posedge clk or negedge rst ) begin if (!rst) b <= 1‘b0; else b <= a; end endmodule clk a b rst クロックの立ち上がりかリセットの立ち下がりを検出したら以下の動作を行う
実機確認 • 作成済みのデスクトップにあるSPP/test/test.pofをダブルクリックしてプロジェクト開始 • 各信号は下記の表の通り割り当てられている • 再コンパイルとプログラミングを行う • クロック信号をそれぞれ610Hz、305Hz、1Hz、単発パルスにしたときのSW_A0の押し離しに対するLED1の反応を観察しなさい。
参考:周波数の切り替え ★1クロックスイッチSW28を有効にする。 スイッチ押し下げごとに1つ単発のクロックを発生させる。 1Hz :1秒間に1回のクロック信号(1つのたち上がりとたち下がり) 周波数 周期 1MHz 1x10-6sec 1KHz 1x10-3sec 1Hz 1sec
カウンタ • スイッチを押して10秒後に学籍番号を点灯 • 入力されるクロックは10MHzとする。 10MHz→1周期1E-7sec 10sec →99999999回カウント したら表示
カウンタ • HDL記述は資料6を参考に
実習1 • 先週のメッセージを表示する課題を完成しなさい。 • デスクトップの SPP/gakuseki/gakuseki.pofをダブルクリックして利用してください • 別途配布するプリントを埋めながら実施してください。
実習2-自由課題ー • 資料1の カウンタ(P73-) 、クロック(P75 -)、シフト回路(P78-)の説明に目を通して実装して動作確認を行いなさい。また、合成された回路のロジックエレメント数を答えてください。 • デスクトップにある作成済みのプロジェクトを利用して構いません • 練習8 カウンタ SPP/count/count.pof • 練習9 クロック 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/quartus-ii/web-edition/qts-we-index.html • またはGoogleで Quartus IIと入力