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