• 検索結果がありません。

Testbench の記述例 (decoder:1)

ドキュメント内 Microsoft PowerPoint - Chap3 (ページ 116-138)

115

116

Testbench の記述例 (decoder:2)

module Decoder_test;

reg DA,DB,DE;

wire [3:0] DZ;

Decorder2x4 D1 (DA,DB,DE,DZ);

initial begin

DE = 0; DA = 0; DB = 0;

#10 DE = 1;

#10 DA = 1;

#10 DB = 1;

#10 DA = 0;

#10 DB = 0;

end

always @(DE or DA or DB or DZ)

$display("Time %t, input is %b%b%b, output is %b", $time,DA,DB,DE,DZ;

endmodule

DA DB DE

10 20 30 40 50 DZ[0]

DZ[1]

DZ[2]

DZ[3]

117

8:論理合成

• 論理合成とは、 HDL で記述されたモデルからゲー トレベルのネットリストを構成すること

• 論理合成システムは指定された面積制約、タイミ ング制約にしたがって回路を最適化する

• Verilog HDL のすべてが合成可能な構文ではない

118

論理合成の利点

真理値表

論理式 簡単化

回路図

HDL記述 論理合成

ライブラリ1

ライブラリ2

回路1

(ゲートアレイ)

回路2

(スタンダードセル)

119

論理合成可能な記述法

• 論理合成ツールを用いる LSI 設計法が主流

• 高位レベル記述でゲートレベルを自動生成す るアプローチがもっとも生産性が高い

• 記述のしかたによりどんな回路が合成される

かを知っておく必要がある

120

組み合わせ回路の合成

• データフロー記述( assign 文)

• 動作記述( always ブロック)

• ファンクションを用いた記述

alwaysブロックでは、注意しないとラッチを生成する

可能性がある

121

データフロー記述による組合せ回路

• 必ず組合せ回路が生成される

• 右辺の式により、高位の表現が可能

• if 文、 case 文などが使えない

assign y = (s) ? a : b;

条件演算子の利用 assign y = (s == 2’b00) ? a : (s == 2’b01) ? b : (s == 2’b10) ? c : (s == 2’b11) ? d ;

122

動作記述による組合せ回路

always ブロックによる記述

reg y;

always @(a or b or c or s) begin

case (s)

2’b00: y <= a;

2’b01: y <= b;

2’b10: y <= c;

default: y <= x;

endcase end

代入される変数はreg ブロック内で参照される すべての信号を列挙する

場合分けにもれがないようにする defaultには、できるだけxを記入

123

動作記述による組合せ回路(2)

always ブロックによる記述

reg y;

always @(a or b or c or s) begin

case (s)

2’b00: y <= a;

2’b01: y <= b;

2’b10: y <= c;

endcase end

S=2’b11のとき、yは前の値を 保持しなければならない

yにラッチが生成され、

組合せ回路でなくなる。

124

Function を用いた 組合せ回路

module shifter(q,a,dir);

output [7:0] q;

input [7:0] a;

input dir;

assign q = (dir)? lshift(a) : rshift(a);

function [7:0] lshift;

input [7:0] data;

lshift = data << 1;

endfunction

function [7:0] rshift;

input [7:0] data;

rshift = data >> 1;

endfunction endmodule

125

お絵かきスペース

126

同期式順序回路

クロックの立上り(立下り)で入力値を取り込むエッジトリガD-FFが基本

reg q;

always @(posedge ck ) begin

q <= d;

end

d

ck q

d ck

q

127

非同期 Reset の追加

reg q;

always @(posedge ck or negedge reset) begin

if (!reset) begin

q <= 0;

end else

begin

q <= d;

end end

d ck reset

q

reset d ck

q

128

同期 Load の追加

module counter(out,d,ld,ck,res);

output [3:0] out;

input [3:0] d;

input ld, ck, res;

reg [3:0] q;

always @(posedge ck or negedge res) begin

if (!res) q <= 0;

else

begin

if (!ld) q <= d;

else q <= q + 1;

end end

assign out = q;

endmodule

リセット ロード カウント

129

お絵かきスペース

reset d ck out

ld

130

レジスタ代入の記述

always @(posedge CLR or posedge RES) begin

if (RES==1’b1) Q <= 1’b0;

else

Q <= P;

end

always @(RES) begin

if (RES==1’b1) Q <= 1’b0;

end

always @(posedge CLK) begin

Q <= P;

end

正しい記述 不完全な記述

同一レジスタに対する代入は単一のalways文の中で行わないとエラー

131

最適化

遅延 面積

論理合成における最適化

ハードウェアの記述量と合成される回路のゲート数は関係しない

132

資源割り付け(共有化)

if (ShReg)

out = A + B;

else if (ReadWrite) out = C + D;

else

out = E + F;

if (ShReg) begin

temp1 = A; temp2 = B;

end

else if (ReadWrite) begin

temp1 = C; temp2 = D;

end else

begin

temp1 = E; temp2 = F;

end

out = temp1 + temp2;

Adderを3個生成する

Adderを1個生成する

133

ミニクイズ:前のページの記述に相当する回路をお絵かきしましょう

134

共通部分式

if (test)

X = A & (B ^ C);

else

Y = (B ^ C) | D;

Temp = (B ^ C);

if (test)

X = A & Temp;

else

Y = Temp | D;

A B

C

D

B

C A

D

135

お絵かきスペース

136

ラッチの回避

always文の中の分岐において、変数への代入が行われない

パスが存在するとき、ラッチが生成される

reg Luck;

always @ (Probe or Count) if (Probe)

Luck = Count;

reg Luck;

always @ (Probe or Count) if (Probe)

Luck = Count;

else

Luck = 0;

ドキュメント内 Microsoft PowerPoint - Chap3 (ページ 116-138)

関連したドキュメント