Semiconductor_Design

□LSIの設計工程

◆標準的な設計工程

_◇仕様設計(アルゴリズム設計)

※UML(Unified Modeling Language)を使った設計

※C/C++を使った設計

※Matlabを使った設計

_◇機能分割(アーキテクチャ設計)

アルゴリズムをどのようなアーキテクチャ(構造)で実現するか
⇒ハードウエアとソフトウエアとの機能分割

※ソフトウエア、ハードウエア協調設計
⇒協調シミュレータ

_◇動作設計(ハードウエア設計)
動作合成可能な記述によりアーキテクチャを検証する

※SystemCであるとBCA, PCAモデル

_◇動作合成

_◇RTL設計

_◇低消費電力設計
※ゲーティッド・クロック

_◇論理合成

※設計制約条件
Design Constraint
面積
クロック周期
消費電力

_◇タイミング解析
論理合成されたゲート回路について解析する

※スタティック・タイミング解析ツール
設計制約条件を満たしているか
セットアップ時間
ホールド時間

_◇等価検証
RTLとゲート回路の論理の一致性をテストベクタを使わず、論理的に検証する。

_◇テスト容易化設計

※テストベクタ生成

※テスト容易化設計

※故障シミュレータ

※自動テストパターン生成ツール

_◇レイアウト設計

※フロアプラン

※自動配線

※DRC

※LVS

_◇サインオフ検証
レイアウト終了後、配線情報を検証環境にバックアノテートして、機能、タイミングなどを満たしているか検証する。
⇒タイミング精度が保証されたゲートレベルライブラリを用いる

※シグナル・インテグリティ解析
電源や内部配線における誤動作を防ぐ

□設計ツール

◎論理設計

◆回路図キャプチャ

◆言語設計/論理シミュレーション

◆論理合成
Logic Synthesis

HDL記述からゲート回路を自動生成

_◇論理合成の工程

①RTLから内部論理式への論理変換
②演算順序の最適化
③リソース割り付け
④リソース共有化
⑤設計制約条件に基づいた論理最適化
⑥論理の平坦化や構造化
⑦冗長論理の削除
⑧テクノロジ・マッピング
⑨テクノロジ変換

_◇論理変換と論理最適化
※RTL=1クロックサイクル内の最適化

※論理変換
リソース割りつけ
レジスタ・インファレンス
状態マシン合成

※論理最適化
多段論理最適化
2段論理最適化
冗長論理の削除
テクノロジマッピング
テクノロジ変換

_◇速度性能向上手法

※論理段数の削減

_◇パイプライン化

_◇HDL記述の見直し

_◇リソース

_◇階層構造

_◇コンパイラ最適化

_◇論理分割

※クリティカルなネットのファンアウトの逓減

_◇IP利用

※パラメータ変更しての再生成

_◇遅延対策

※FPGA 遅延の割合
LOGIC 4割
ROUTING 6割

◆動作合成
Behavioral SYnthsis

SystemCやC/C++を用いた検証と動作記述からRTLを生成する

※SystemCのBCA(Bus Cycle Accurate)な動作記述から生成する
⇒入出力はクロックを考慮
⇒回路本体はタイミングを含まない

※動作=複数クロックにわたる

※動作合成
①仕様に基づいて複数のRTLデザインを自動生成
パイプライン化
②動作仕様のスケジューリング
③サイクル数、演算リソースのトレードオフ
④レジスタの共有化、割り付け
リソースの割り付け
⑤データパス部、状態マシン部、メモリ部の自動生成

◆ESL設計
Engineering System Level

◎回路設計

◆回路シミュレータ(未リンク)

◎レイアウト設計設計

◆パターンエディタ

◆LVS
Layout versus Schematic

◆DRC

◆配置・配線

□検証
Verification

◎シミュレータによる検証

◆テストベンチ記述
回路を書いている間には使わなかった文法がテストベンチを書く際には必要

※機能ブロック単位での検証

_◇検証仕様
まず何を検証するのかを考える。

テストベンチによる検証の流れ

_◇記述の手順
①検証環境を置く箱を作る
Verilogならmodule
VHDLならentity
⇒入出力のポートはない
⇒VHDLの場合、configuration宣言をテストベンチ(最上位階層)に必ず記述する

②箱に検証対象の回路を置く
Verilog) インスタンス宣言
モジュール名 インスタンス名(.ポート名1(信号名1),
…);
VHDL)
※コンポーネント宣言
親回路のアーキテクチャの宣言部分で子回路のコンポーネント宣言必要
コンポーネント名=子回路のエンティティ名と同一
ポートの記述は子回路のエンティティ宣言にあわせる
⇒子回路のエンティティ宣言をコピーし
entityをcomponentに書き換えてisを除けばできあがる
※ライブラリ宣言とパッケージ呼び出し
ファイル先頭にライブラリ宣言とパッケージ呼び出し
例)
library IEEE;
use IEEE.std_logic_1164.all;
※子回路の接続
親回路のアーキテクチャ宣言の機能部分に記述
インスタンス名:コンポーネント名
port map (ポート名1 => 信号名1,
… );

③箱の中で入力波形を作る
Verilog)テスト入力信号 reg型宣言
テスト出力信号 wire型宣言
例)reg A,B;
initial文と遅延をつかって波形を記述
⇒シミュレーション開始時点で1度だけ式が実行される
例)
initial begin
A=0;
#100 A=1;
#100 A=0;
#100 $finish;
end
⇒$finishはシミュレーションを終了させるためのシステムタスク
VHDL)VHDLでは値を入力する信号も、検証対象の出力ポートに接続する信号も同じデータ型でよい。
センシティビティリストには変化を観測する信号名を書く
プロセス文はセンシティビティリストの信号のどれかが変化すると実行される。
センシティビティリストを書かないと、シミューレション開始時に開始され、無限ループとなる
process (センシティビティ・リスト) begin
式;
wait for 遅延時間; 式;
end process;
例)
process begin
A <= ‘0’;
wait for 100ns; SA<=1;
wait for 100ns; assert false;
end procsss;
※waitによる遅延時間はprocess文内で累積される。
※assert falseによりERRORを発生させ、シミュレーションを停止させる。
⇒ERROR条件ではシミュレーターは停止する設定が通常
⇒assetは、本来、条件違反時にメッセージを表示する機能

④信号をテスト対象の回路のポートにつなげる
Verilog)
子回路の出力ポートの値にはwire型の信号を接続する
VHDL)
port mapにより接続されている

_◇組み合わせ回路の検証用テストベンチ

①Verilog

—UUT

module and_comb(
input A,
input B,
output Y
);

assign Y = A & B;

endmodule

—TB

module and_comb_tb;

// Inputs
reg SA;
reg SB;

// Outputs
wire SY;

// Instantiate the Unit Under Test (UUT)
and_comb and_comb (
.A(SA),
.B(SB),
.Y(SY)
);

initial begin
// Initialize Inputs
SA = 0; SB = 0;
#100 SA = 1; SB = 0;
#100 SA = 0; SB = 1;
#100 SA = 1; SB = 1;
#100 $finish;
end

endmodule

②VHDL

—UUT
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity and_comb is
Port ( A : in STD_LOGIC;
B : in STD_LOGIC;
Y : out STD_LOGIC);
end and_comb;

architecture Behavioral of and_comb is
begin
Y <= A and B; end Behavioral; —TB LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY and_comb_tb IS END and_comb_tb; ARCHITECTURE behavior OF and_comb_tb IS COMPONENT and_comb PORT( A : IN std_logic; B : IN std_logic; Y : OUT std_logic ); END COMPONENT; –Inputs signal SA : std_logic := ‘0’; signal SB : std_logic := ‘0’;  –Outputs signal SY : std_logic; BEGIN  – Instantiate the Unit Under Test (UUT) uut: and_comb PORT MAP ( A => SA,
B => SB,
Y => SY
);

process begin
SA<= ‘0’;  SB <= ‘0’;
wait for 100ns; SA<= ‘1’; SB <= ‘0’;
wait for 100ns; SA<= ‘0’; SB <= ‘1’;
wait for 100ns; SA<= ‘1’; SB <= ‘1’;
wait for 100ns; assert false;
end process;
END behavior;

configuration cfg_and_comb_tb of and_comb_tb is
for behavior
end for;
end cfg_and_comb_tb;

……_◇順序回路の記述
_◇順序回路の記述

①Verilogでのクロックの記述
他のテスト入力とは別のalways文で作る

例)
reg CLK;

always begin
CLK = 1’b1;
#50 CLK = 1’b0;
#50;
end

②VHDLでのクロックの記述
他のテスト入力とは別のprocess文で作る

例)
signal CLK : std_logic;


process begin
CLK <= ‘1’; wait for 50ns;
CLK <= ‘0’; wait for 50ns;
end process;

◎フォーマルベリファイア

◆指定した項目(プロパティ)を検証するための入力パターンを自動生成した上で解析エンジンを回す。

※プロパティ例:初期化していないレジスタからは信号を読み出さない

◆等価性チェッカ
2つの設計の論理機能が等しいというプロパティを扱う専用のプロパティチェッカ。最終検証(レグレッションテスト)などに使う。

◆セミフォーマルベリファイア
実用的でない100%検証を行わない。

□設計IP
Intellectual Property

◆IPの分類

①ソフトIP
論理合成可能なHDL記述のIP
⇒多く回路機能はパラメータ化
⇒テクノロジ同率
⇒レイアウト後の回路性能は、論理合成やレイアウト設計の良しあしによる

②ファームIP
ネットリストで記述されたIP
⇒ソフトIPよりは最終回路の性能は予測しやすい
⇒反面、パラメータ化は制限、機能変更も難しい、内容理解も難しい
⇒論理合成で最適化とテクノロジ変換後レイアウト

③ハードIP
レイアウトレベルのIP
⇒機能変更難しい