第4章

第4章
した問題を未然に防ぐことができます.
ここでは,ASIC 開発に慣れていない論理設計者が失敗しやす
い点を解説する.ASIC 開発は,ユーザ側の論理設計者とベン
●レベル・ラッチを生成させない
ダ側のレイアウト設計者の共同作業である.開発期間を短縮し
最近は,RTL(register transfer level)のHDL(hardware
たり,後工程でのトラブルを回避したければ,レイアウト設計
への影響を考慮しながら論理設計を行ったほうがよい.また,
description language)を利用して論理設計を行います.こ
ユーザとベンダの間で円滑なコミュニケーションを維持するこ
こでよく起こるトラブルは,論理合成ツールが設計者の意
ともたいせつである.
図しない回路を合成するケースです.こうした例を,簡単
(編集部)
な回路で説明します.
図1(a)のようなコンパレータを if 文を用いて記述した
本稿では,ASIC(application specific integrated circuit)
開発時の標準的な作業の中で起こりがちなトラブルの事例
とします.このとき,5∼10行目の記述がなければ,図1
を紹介します.設計の過程でトラブルが頻発したりその対
(b)のようなレベル・ラッチが生成されます.また,8,9
処に手間取ると,納期を守れなかったり,ASICの品質を
行目がない場合も,レベル・ラッチが生成されます.
維持できなかったりと,さまざまな問題が起こります.開
レベル・ラッチには,スルー(through)状態とホールド
発時に起こりうるトラブルを事前に把握しておけば,こう
(hold)状態があります.スルー状態のときは信号が通過す
process (P , Q)
begin
if ((P(3 downto 0)) = (Q(3 downto 0))) then
LT <= '0';
else
if (unsigned((P(3 downto 0))) < unsigned((Q(3 downto 0)))) then
LT <= '1';
else
LT <= '0';
end if;
end if;
end process;
P3:0
process (p , Q)
begin
if ((p(3 downto 0)) = (Q(3 downto 0))) then
LT <= '0';
end if;
end process;
レベル・ラッチの
真理値表
P=Q
Q3:0
LT
入 力
D
G
X
H
H
L
L
L
出 力
Q
Q0
H
L
状 態
ホールド
スルー
スルー
P3:0
P=Q
P<Q
(a)正しい記述
Q3:0
D
レベル・ Q LT
G ラッチ
(b)レベル・ラッチが生成される記述
〔図1〕4 ビット・コンパレータの記述(VHDL)
(a)は,P=Qのときに‘0’を,P<Qのときに‘1’を,それ以外のときに‘0’を出力する回路である.(b)のように,P=Qのとき以外の記述を忘れると,レベル・
ラッチが生成されてしまう.これは,シミュレーションでは検出できない場合もある.
Design Wave Magazine 2003 November
55
4
るだけなので,信号遅延(タイミング)を解析できます.一
Verilog HDLの場合は,以下のような記述になります.
方,ホールド状態のときは信号が分断されてしまい,信号
遅延を解析できないという問題が発生します.このような
input[255:0] 端子名 ;
記述を行うと,設計者の意図しない回路が合成されます.
こうした問題は論理合成ツールの課題と見ることもでき
これらの記述を利用すると,設計者が機能ブロック間の
ますが,設計者が事前に注意していれば,避けて通れる問
接続を行うときに,簡単に多数のネットをチップ内にはわ
題です.
せることができます.ただし,これらの記述はレイアウト
実は,このレベル・ラッチによる信号の分断が存在する
と,後のタイミング解析の工程で,解析対象のパスがつな
がっていないとか,パスが見えないといったエラーが発生
します.
設計のときに,配線効率の低下を招くことになるので注意
が必要です.
また,特定のブロックや端子に配線が集中するような回路
の場合も配線効率が低下し,レイアウト後のタイミングの収
同様の問題は,ステート・マシンなどを実現する際に用
束が難しくなります.例えば,オンチップ・バスである
いる case 文の記述にも存在します.図2(a)に,その例を
AMBA( Advanced Microcontroller Bus Architecture)
示します.この記述の中で,図2(b)のように8行目のwhen
のリード・データ・バス用マルチプレクサなどの回路につ
others ∼の記述を忘れると,レベル・ラッチが生成され
いては,図3のようなトーナメント方式を採用するなど,
ます.
一つのブロックに対する配線の集中を避けるような回路構
成を検討してください.
●レイアウト時に配線しにくい回路構成は避ける
VHDLでは,以下のような方法で256本の信号のバンド
●テスト・パターンはできるだけ短く
数年前の論理検証では,詳細なタイミング(信号遅延)を
ル記述を行えます.
考慮したゲート・レベル・モデルによるシミュレーション
端子名 : in std_logic_vector(255 downto 0)
(ゲート・レベル・シミュレーション)が行われており,論
理検証に時間がかかりがちでした.当時の設計者は検証期
process (Sel, Q)
begin
case Sel is
when '00' =>
out <= Q(23 downto 16);
when '01' =>
out <= Q(15 downto 8);
when others =>
out <= Q(7 downto 0);
end case;
end process;
Q23:16
Q15:8
out
Q7:0
デ
コ
ー
ダ
Sel
00h
01h
others
(a)正しい記述
〔図2〕
マルチプレクサの記述
(VHDL)
(a)は,Sel信号が“00h”のとき
に Q23 : 16 が out に,“01h”の
ときにQ15:8がoutに,それ以
外のときにQ7:0がoutに出力
される回路である.(b)のよう
に,それ以外のときの記述を忘
れると,レベル・ラッチが生成
され,過去のデータがホールド
出力されてしまう.
56
Q23:16
process (Sel, Q)
begin
case Sel is
when '00' =>
out <= Q(23 downto 16);
when '01' =>
out <= Q(15 downto 8);
end case;
end process;
Design Wave Magazine 2003 November
Q15:8
Sel
デ
コ
ー
ダ
00h
01h
(b)レベル・ラッチが生成される記述
レベル・
ラッチ
out