スライド 1

ハードウェア記述言語による
論理回路設計と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と入力