3.ハードウェア構成図 ラックキャビネット編 3.1 … · 3.ハードウェア構成図 ラックキャビネット編. 3.1 ラックキャビネット
ハードウェア記述言語による 論理回路設計とFPGAへの実装 2
description
Transcript of ハードウェア記述言語による 論理回路設計とFPGAへの実装 2
ハードウェア記述言語による論理回路設計とFPGAへの実装
2SPP
2009.8.27高知工業高校
高知大学理学部 本田理恵、三好康夫
内容
• 前回の補足– 回路と使用されたロジックエレメントの確認– HDL 文法
• 順序回路– フリップフロップ– カウンタ
• 実習 1 (先週の課題を完成)• 実習 2 -自由課題ー
モジュール 構造
module モジュール名 ( ポートリスト) ;ポート宣言ネット宣言レジスタ宣言パラメータ宣言
回路記述本体assignfunction
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 進数
例 8’haa →10101010例 1’b1 → 1例 b1 → 0000000.....1 (32bit)
ビット幅省略→ 32bit基数省略→ 10 進数x,z は使えない。
演算子算術演算
+ 加算、プラス記号
- 減算、マイナス記号
* 乗算
/ 割り算
% 剰余 ( あまり)
等号演算
== 等しい
!= 等しくない
=== 等しい( 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 ) 文1else if ( 条件式 2) ←省略可能 文 2else 文 3
end
case 複数への同時分岐
begincase ( 式)
値 1: 文 1; 値 2: 文 2; default: 文 3;
endcaseend
組み合わせ回路ーセレクターmodule sel(d0,d1,dout)input d0, d1;output dout;assign dout= (sel==1’b1)? d1:d0 ;end module
module sel(d0,d1,dout)input d0, d1;output dout;beginif (sel==1’b1)
dout<=d1;else
dout<= d0end endmodule
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;
endend module
× module 中にいきなり if を入れてはいけない ( 独特のルール )
d0
d 1
sel
dout
d0,d1,selが変化したとき
順序回路
• 回路内に記憶素子を含んでいて、クロックと呼ばれる基準信号と入力によって出力がきまる回路
• クロックという時間の概念存在する• 基本論理素子と記憶素子で構成されてい
る• 順序回路の例としては、フリップフロッ
プやカウンタなどがある
クロック信号
• ディジタル回路において順序回路を動作させるための基準信号のことであり、一定の周期でH => L => H を繰り返す・・・・信号
補足:7セグメント LED のデコード値
A[7:0] 16 進数
0 1111 1100 FC
1 0110 0000 60
2 1101 1010 DA
3 1111 0010 F2
4 0110 0110 66
5 1011 0110 B6
6 1011 1110 BE
7 1110 0000 E0
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
フリップフロップ• フリップフロップとは、シーソーの働きの意味
。• 回路の働きが文字通りシーソーの働きに似てい
る。
入力 (D ) の変化がクロック (CLK) の立ち上がり、又は立下りにより出力 (Q) に伝わる通常、リセット (RESET) はクロック (CLK) とは非同期リセット (RESET) は“ L” 時リセット
フリップフロップ– HDL 記述 -
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; endendmodule
クロックの立ち上がりかリセットの立ち下がりを検出したら以下の動作を行う
a
b
clk
posedgenegedge
rst
実機確認
– 作成済みのデスクトップにある SPP/test/test.pof をダブルクリックしてプロジェクト開始
–各信号は下記の表の通り割り当てられている
–再コンパイルとプログラミングを行う– クロック信号をそれぞれ 610Hz 、 305Hz 、 1Hz 、単発
パルスにしたときの SW_A0 の押し離しに対する LED1の反応を観察しなさい。
信号 信号名(HDL) 装置 ピン番号
入力 a SW_A0 2
出力 b LED1 47
リセット信号 rst RESET 240
クロック信号 clk SW27 28
参考:周波数の切り替え
メモリSW27 0 1 2 3 4 5 6 7
周波数 40MHz
20MHz
10MHz
5MHz
1.25MHz
325KHz
78.1KHz
19.5KHz
★1 クロックスイッチ SW28 を有効にする。スイッチ押し下げごとに 1 つ単発のクロックを発生させる。
1 Hz :1秒間に 1 回のクロック信号(1つのたち上がりとたち下がり)
メモリSW27 8 9 A B C D E F
周波数 9.8KHz
4.9KHz
244KHz
1.22KHz
610Hz
305Hz
1.0Hz ★
周波数 周期1MHz 1x10-6sec1KHz 1x10-3sec1Hz 1sec
カウンタ• スイッチを押して 10秒後に学籍番号を点灯
• 入力されるクロックは 10MH zとする。
10MHz→1 周期 1E-7sec10sec →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/q
uartus-ii/web-edition/qts-we-index.html• または Google で Quartus II と入力