計算機工学特論A 講義資料第2回

Download Report

Transcript 計算機工学特論A 講義資料第2回

計算機工学特論A
第4回 論理合成
山越研究室 増山 知東
2007年11月7日
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
論理合成とは?
• HDL言語で書かれたソースファイルを
ゲート回路のような“素子”に変換し
それらを組み合わせ、機能を向上させること。
• 但し、論理合成に不向きな言語仕様もある。
module 1
module 3
module 2
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
具体的な方法
• ソースファイルである .v ファイルから
シンボルファイル(.bsf ファイル)を作成する
File → Create/Update →
Create Symbol Files for Current File
を選択すると .v ファイルで作成した
プログラムのシンボルファイルを作成でき
る。
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
具体的な方法
• 作成したシンボルファイルを用いて
.bdf ファイル上に回路図を書いていく。
入力端子、出力端子などは
あらかじめ用意されている。
また、AND・OR等のゲート素子も
登録されている。
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
具体的な方法
• .vwf ファイルを作成してシミュレーションを行う。
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
フル・アダー呼び出しによる加算回路の論理合
成
接続線の太さはデータのビット数が1bit か、それより大きなもので区別する。
このビット数による差を設定しないと、コンパイルすらできない。
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
シミュレーション結果
出力 q の項を見ると‘X’という不定形が出力されている。
接続の不良か、設定の不備か期待していた結果は得られなかった。
論理合成せずにHDL記述で実行した、フル・アダー呼び出しによる 4bit 加算回路
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
フル・アダーの論理合成結果
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
シミュレーション結果
A : L,H,L,H・・・・と交互に繰り返す
CIN : 常に H
B : H,L,H,L・・・・と交互に繰り返す
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
第2章 もう少し進んだVerilog HDL記述
2.1 電子サイコロ
修士1年 赤津 実幸
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
電子サイコロの構造
カウンターが1~6の値でループしており、
enableを0にした瞬間のカウンター値をサイコロの目で表現するmodule
reset
enable
ck
reset リセット。1の目を表示して停止
lamp[0]
lamp[1]
lamp[2]
lamp[3]
lamp[4]
lamp[5]
lamp[6]
enable 1で回転
0で停止
ck
電子サイコロのブロック図
クロック
ランプ lamp[0~6]
lamp[4]
1 : ランプ点灯
lamp[1]
lamp[5]
0 : ランプ消灯
lamp[2]
lamp[6]
に対応
lamp[0]
サイコロの目 3の場合
lamp[0]
lamp[4]
lamp[1]
lamp[5]
lamp[2]
lamp[6]
lamp[3]
lamp[3]
対応表示ランプ
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
電子サイコロの各処理の説明
input ck, reset, enable
if (reset = 1)
カウンタ値cntを1に設定
Counter
イベント
pogedge ck
or posedge reset
else if (enable = 1)
if(カウンタ値cnt = 3)
reg [2:0] cnt 3bitレジスタ
cntを1に設定
else
デコーダ
cntを1インクリメント
入力 cnt
出力 lamp
※ reset = 1ならcnt=1なので lamp[3]のみ1になり
サイコロの目は1を表示
output [6:0] lamp
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
電子サイコロの各処理の説明
input ck, reset, enable
functionを用いたデコーダ
function [6:0] dec
7bitのデータを出力
Counter
input [2:0] din
イベント
pogedge ck
or posedge reset
C言語でいう仮引数。
3bitの変数をdinに代入
reg [2:0] cnt 3bitレジスタ
デコーダ function dec
入力 3bit cnt
出力 7bit lamp
Case文によるdinの値での場合わけ
din = 1
dec = 7b’0001000
din = 2
dec = 7b’1000001
din = 3
dec =7b’0011100
din = 4
dec=7b’1010101
din = 5
dec=7b’1110111
din = 6
dec=7b’1110111
din = その他
dec=不定値
lamp = dec( cnt )
output [6:0] lamp
Yamakoshi-Lab.
functionのリターン値
関数decに3bitカウンタ値cntを入れると7bitの
lampに7bitのdecの値が代入される。
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
module saikoro 出力結果1
クロック周期 clk 50ns, 20MHz(=1/50ns)
reset(1→0)タイミング 200ns
enable(0→1)タイミング 800ns
サイコロの目
1
2
3
4 5
6
1
2
3
4 5
6
1
ひげが立ち上がってしまう。1→2、3→4のタイミング
こうなると、一瞬だけサイコロの値が変化してしまうところができてしまう。
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
module saikoro 出力結果2 問題の検証
カウンタcntと出力lampの出力タイミングが
ほぼ同時
データの立ち上がり、
立ち下りのタイミングが重なるので
出力値が不安定になっている可能性がある
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
module saikoro 改善1 不定値を0化
カウンタcntが変化する不安定な
区間はlampを0にする
default = 7’bxxxxxxxを変更
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
module saikoro 改善1 変更後
変更前
変更後
サイコロの目 1 → 2 になるタイミングは改善された
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
module saikoro 改善1 変更後
3→4のタイミングの検証
0
1
1
3
ZOOM
6 5
1
0
0
4
6
カウンタ一瞬で値が変わるのではなく、bitが全て変化するのに時間がかかる。
lamp = dec(cnt)によりカウンタcntの変化に応じて出力lampも変化してしまう。
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
module saikoro 改善2 デコーダ処理
問題点
・カウンタには値が完全に変化するまで時間がかかる
⇒その間のカウンタcntの値は不定値
・カウンタcntの変化にすぐに応じてデコーダdecが処理して
出力lampに吐き出してしまう
そこで
・カウンタcntが完全に変化したあとにデコーダdecで処理させて やればよ
い
⇒デコーダに処理のタイミングを与える
⇒カウンタはクロックの立ち上がりで処理するので
半クロック後にはカウンタの変化は終了しているので
半クロック後に1回デコーダ処理を行わせる
⇒イベントalways文を用いる always@(negedge ck)
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
module saikoro 改善2 変更後
クロックの立下り時にのみ処理を行う
デコーダを作成
カウンタ変化後半クロック遅れて
lamp出力される
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
module saikoro 改善2 比較
変更前
変更後
デコーダにカウンタを読み込むタイミング(半クロック遅延)が与えられたため
カウンタの不定値範囲を読み込まなくなった
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
計算機工学特論A
テキスト内容 2.2
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
2.2 電子錠
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
2.2.1 電子錠の仕様
入力
7
4
8
5
9
6
1
2
0
クローズ
Yamakoshi-Lab.
クロック(50Hz程
度)
リセット
テン・キー
出力
ck
reset
10
3
クローズ・キー
クロック
lock
錠出力
tenkey
[9:0]
close
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
2.2.2 電子錠の回路概要
ck
=3
=6
=9
=5
R
CK
Q
S
EN
tenkey
エ
ン
コ
ー
ダ
D
Q
CK
RES
EN
D
Q
CK
RES
EN
D
Q
CK
RES
EN
D
Q
CK
RES
ck
close
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
lock
2.2.3 電子錠のHDL記述
リスト2.3
module elelock(ck,reset,tenkey,close,lock);
input ck,reset,close;
input [9:0] tenkey;
output lock;
reg lock,ke1,ke2;
reg [3:0] key [0:3];//レジスタ配列
wire match, key_enbl;
parameter SECRET_3=4‘h5,SECRET_2 = 4’h9,SECRET_1 = 4‘h6,SECRET_0
= 4’h3;//定数
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
2.2.3 電子錠のHDL記述
レジスタ配列
reg [x1:x2] 名前 [y1:y2];
多次元配列の一種。x1-x2+1bitをひとつの単位としてみなした一次元配列。要
素数はy2-y1+1個。全体のサイズは(x1-x2+1)×(y2-y1+1)bit。アクセスはx1x2+1bitを単位としてのみ可能で1bit単位ではアクセスできない。
ex)
reg [7:0] u_byte [0:3];
//1byte(8bit)のu_byte[0]~[3]が宣言される
u_byte[1] = 8’hff;
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
2.2.3 電子錠のHDL記述
定数
parameter 名前 = 実態(数値);
数値等を使うところで代わりにparameterで定義した名前を使うことができる。
ex)
parameter aka = 24’hff0000;
reg [23:0] tmp;
tmp = aka;
とするとtmpに24‘hff0000が代入される
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
2.2.3 電子錠のHDL記述
リスト2.3 暗証番号入力レジスタ
always @(posedge ck or posedge reset) begin
if (reset = = 1'b1) begin
key[3] <=4‘b1111;key[2] <=4’b1111; リセット信号が来たらそれま
key[1] <=4‘b1111;key[0] <=4’b1111; でに入力された番号を消す。
end
else if(close= =1'b1)begin
key[3] <=4'b1111;key[2] <=4'b1111; クローズ信号が来たらそれま
key[1] <=4'b1111;key[0] <=4'b1111; でに入力された番号を消す。
end
else if (key_enbl= =1'b1) begin
キー入力が来たら値を更新
key[3] <= key[2];key[2] <= key[1]; する
key[1] <= key[0];key[0] <= keyenc(tenkey);
end
入力されたキーから保持す
end
べき値を返す関数
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
2.2.3 電子錠のHDL記述
リスト2.3 テンキー入力チャッタ取り用
always @(posedge ck or posedge reset) begin
if(reset==1'b1) begin
ke2 <= 1'b0; リセット信号が来たらキーが押されてない状態として
ke1 <= 1'b0; 暗証番号入力レジスタに通知する
end
else begin
1クロック前に押されてたキーの状態をke2に保
ke2 <= ke1;
ke1 <= |tenkey; 存し今キーが押されているかを取得する。
end
end
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
2.2.3 電子錠のHDL記述
リスト2.3 電子錠出力
always @(posedge ck or posedge reset) begin
if (reset==1'b1)
リセット信号が来たらロックを解除する
lock <= 1'b0;
else if (close==1'b1)
lock <= 1'b1;
else if (match==1'b1)
lock <= 1'b0;
クローズ信号が来たらロックする
暗証番号が一致したらロックを解除する
end
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
2.2.3 電子錠のHDL記述
リスト2.3 テンキー入力エンコーダ
function [3:0] keyenc;
input [9:0] sw;
case (sw)
10'b00000_00001: keyenc = 4'h0;
10'b00000_00010: keyenc = 4'h1;
10'b00000_00100: keyenc = 4'h2;
10'b00000_01000: keyenc = 4'h3;
10'b00000_10000: keyenc = 4'h4;
10'b00001_00000: keyenc = 4'h5;
10'b00010_00000: keyenc = 4'h6;
10'b00100_00000: keyenc = 4'h7;
10'b01000_00000: keyenc = 4'h8;
10'b10000_00000: keyenc = 4'h9;
endcase
endfunction
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
2.2.3 電子錠のHDL記述
リスト2.3 暗証番号一致信号
assign match = (key[0]==SECRET_0) && (key[1]==SECRET_1)
&& (key[2]==SECRET_2) && (key[3]==SECRET_3);
設定されている暗証番号と入力信号が一致すれば1を出力する
assign key_enbl = ~ke2 & ke1; ~はnotを表している。
endmodule
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
2.2.4 電子錠のシミュレーション
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-
2.2.4 電子錠のシミュレーション
Yamakoshi-Lab.
-Department of Electric and Electronic Engineering,Faculty of Engineering,Gunma University Japan-