目次
 ●設計方法
 ◎実際
 ○実効譜
 ○機能実行譜
 ○シミュレーション
 ○検証
 ○チップ開発環境での検証
 ○チップ化
|
 
設計方法
1. エディッタでL言語の論理譜の作成
2. LDCで論理式に翻訳
3. LSIMで論理式から検証結果を作成
4. LSIM VIEWで結果を閲覧
望みの機能が得られるまで 1.〜4.を繰り返します。
望みの機能が得られたら、LDCの選択機能で出力論理式を
1. ABEL
2. AHDL
3. Verilog HDL
4. VHDL
から選んで出力します。
チップ化する場合には上記で出力したものをPLDメーカの提供
する開発ツールでチップデータにしてチップ化して下さい。
 
実際
L言語で設計してVHDLでメーカの開発環境に渡してチ
ップ化するデータを作るまでを順を追って説明します
。
74シリーズの00を名前をTTL00として作ってみます。
上が名前だけをつけた最上位の枠になります。
 
実効譜
これにICという名前で実効譜の枠を作ります。
logicname TTL00
enyity IC {← ICという名前の実効譜のはじまり。}
ende {← ICという名前の実効譜の終わり}
endlogic
|
上のICという名前の実効譜の枠の中に7400の論理を作っていきます。
7400には2入力の否定論理積が4個はいっています、それぞれの入力を
A1,A2,
B1,B2,
C1,C2,
D1,D2
とします。
logicname TTL00
entity IC
input A1,A2; {1番目の否定論理積の入力}
input B1,B2; {2番目の否定論理積の入力}
input C1,C2; {3番目の否定論理積の入力}
input D1,D2; {4番目の否定論理積の入力}
ende
endlogic
|
7400の4個の否定論理積の出力をYA,YB,YC,YDとします。
logicname TTL00
entity IC
input A1,A2;
input B1,B2;
input C1,C2;
input D1,D2;
output YA,YB,YC,YD; {4個の否定論理積の出力}
ende
endlogic
|
1個の否定論理積を作ります。
logicname TTL00
entity IC
input A1,A2;
input B1,B2;
input C1,C2;
input D1,D2;
output YA,YB,YC,YD;
if (A1 & A2) {条件付けの始まりと条件を示します。}
YA=0; {条件が真(1)のとき有効になります。}
else {偽の式が続くことを示します。}
YA=1; {条件が偽(0)のとき有効になります。}
endif {条件の終わりを示します。}
ende
endlogic
|
同様に4個作ります。
logicname TTL00
entity IC
input A1,A2;
input B1,B2;
input C1,C2;
input D1,D2;
output YA,YB,YC,YD;
if (A1 & A2) YA=0; else YA=1; endif {1番目の否定論理積}
if (B1 & B2) YB=0; else YB=1; endif {2番目}
if (C1 & C2) YC=0; else YC=1; endif {3番目}
if (D1 & D2) YD=0; else YD=1; endif {4番目}
ende
endlogic
|
これで論理譜は一応の完成ができました。
これをSAMPL.Lのファイルの保存して。
コマンドプロンプトで
LDC SAMPLE -vh
を実行します。
-vhはVHDLのファイルを得るためのオプションです。
library IEEE;
use IEEE.std_logic_1164.all;
entity IC is
port(A10 : in std_logic;
A20 : in std_logic;
YA0 : out std_logic;
B10 : in std_logic;
B20 : in std_logic;
YB0 : out std_logic;
C10 : in std_logic;
C20 : in std_logic;
YC0 : out std_logic;
D10 : in std_logic;
D20 : in std_logic;
YD0 : out std_logic);
end IC;
architecture RTL of IC is
signal n_n16 : std_logic ;
signal n_n21 : std_logic ;
signal n_n26 : std_logic ;
signal n_n31 : std_logic ;
begin
n_n16 <= (A10 and A20) ;
YA0 <= (not n_n16) ;
n_n21 <= (B10 and B20) ;
YB0 <= (not n_n21) ;
n_n26 <= (C10 and C20) ;
YC0 <= (not n_n26) ;
n_n31 <= (D10 and D20) ;
YD0 <= (not n_n31) ;
end RTL;
|
上のVHDLのファイルが e0.vhd に得られま
す。
このファイルを使ってチップ化を行ってください。
e0.vhd の e0 は1番目の枠がファイル化されると
きの番号で、2番目の枠の場合は e1 になります。
枠は実効譜と機能実行譜です、手続き譜は含まれませ
ん。
 
機能実行譜
実効譜 IC を検証するために機能実行譜を作り
ます。
機能実行譜の名前は sim と決まっています。
logicname TTL00
entity IC
input A1,A2;
input B1,B2;
input C1,C2;
input D1,D2;
output YA,YB,YC,YD;
if (A1 & A2) YA=0; else YA=1; endif
if (B1 & B2) YB=0; else YB=1; endif
if (C1 & C2) YC=0; else YC=1; endif
if (D1 & D2) YD=0; else YD=1; endif
ende
entity sim {← 機能実行譜のはじまり。}
ende {← 機能実行譜のおわり。}
endlogic
|
上の機能実行譜で実効譜 IC を検証するには、実効
譜ICを導入します。
logicname TTL00
entity IC
input A1,A2;
input B1,B2;
input C1,C2;
input D1,D2;
output YA,YB,YC,YD;
if (A1 & A2) YA=0; else YA=1; endif
if (B1 & B2) YB=0; else YB=1; endif
if (C1 & C2) YC=0; else YC=1; endif
if (D1 & D2) YD=0; else YD=1; endif
ende
entity sim
part IC(A1,A2,B1,B2,C1,C2,D1,D2,YA,YB,YC,YD) {実効譜ICの導入}
ende
endlogic
|
実効譜ICを導入するには、上の様に
part
を使って実効譜の名前の
IC
を指定して導入します
。
( )
の中には信号を書かれた順番に引用していきます。
信号を引用するときの名前は機能実行譜の中で割り当
てた信号なので自由に付けることができます、引用先
と同じ名前を使用してもかまいません。
logicname TTL00
entity IC
input A1,A2;
input B1,B2;
input C1,C2;
input D1,D2;
output YA,YB,YC,YD;
if (A1 & A2) YA=0; else YA=1; endif
if (B1 & B2) YB=0; else YB=1; endif
if (C1 & C2) YC=0; else YC=1; endif
if (D1 & D2) YD=0; else YD=1; endif
ende
entity sim
output A1,A2; {引用する信号の割り当て。}
output B1,B2; {〃}
output C1,C2; {〃}
output D1,D2; {〃}
output YA,YB,YC,YD;{〃}
part IC(A1,A2,B1,B2,C1,C2,D1,D2,YA,YB,YC,YD)
ende
endlogic
|
これで上の機能実行譜が実効譜ICを検証できるように
なりました。
機能実効譜は完結して閉じた論理なので割り当てる信
号はすべて出力信号になります。
検証の方法を決めます、否定論理積は2入力なので4種
類の入力値を与えます。
4個の否定論理積には時刻をずらして、それらを与え
ることにします。
時刻を作るために5桁の信号tcを割り当てて32ステッ
プまでの検証を行えるようにします。
logicname TTL00
entity IC
input A1,A2;
input B1,B2;
input C1,C2;
input D1,D2;
output YA,YB,YC,YD;
if (A1 & A2) YA=0; else YA=1; endif
if (B1 & B2) YB=0; else YB=1; endif
if (C1 & C2) YC=0; else YC=1; endif
if (D1 & D2) YD=0; else YD=1; endif
ende
entity sim
output A1,A2;
output B1,B2;
output C1,C2;
output D1,D2;
output YA,YB,YC,YD;
bitr tc[5]; {時刻を作るために5桁の信号tcを割り当てます。}
part IC(A1,A2,B1,B2,C1,C2,D1,D2,YA,YB,YC,YD)
ende
endlogic
|
実効譜ICを検証するための論理を付け加えます。
logicname TTL00
entity IC
input A1,A2;
input B1,B2;
input C1,C2;
input D1,D2;
output YA,YB,YC,YD;
if (A1 & A2) YA=0; else YA=1; endif
if (B1 & B2) YB=0; else YB=1; endif
if (C1 & C2) YC=0; else YC=1; endif
if (D1 & D2) YD=0; else YD=1; endif
ende
entity sim
output A1,A2;
output B1,B2;
output C1,C2;
output D1,D2;
output YA,YB,YC,YD;
bitr tc[5];
part IC(A1,A2,B1,B2,C1,C2,D1,D2,YA,YB,YC,YD)
tc=tc+1; {時刻を進める計数。}
switch(tc) {否定論理積4個分の入力値設定}
case 3: A1=0; A2=0;
case 4: A1=0; A2=1;
case 5: A1=1; A2=0;
case 6: A1=1; A2=1;
case 7: B1=0; B2=0;
case 8: B1=0; B2=1;
case 9: B1=1; B2=0;
case 10: B1=1; B2=1;
case 11: C1=0; C2=0;
case 12: C1=0; C2=1;
case 13: C1=1; C2=0;
case 14: C1=1; C2=1;
case 15: D1=0; D2=0;
case 16: D1=0; D2=1;
case 17: D1=1; D2=0;
case 18: D1=1; D2=1;
endswitch
ende
endlogic
|
これで実効譜と機能実行譜のそろった論理譜が完成で
きました。
コマンドプロンプトで
LDC SAMPLE -ls -lbl
を実行します。
-ls はLSIMのファイルを得るためのオプションです。
-lbl はVIEWの閲覧時の信号表を得るためのオプションです。
t1.sim と lsim.lbl が得られます。
実行譜ICの機能実行譜のファイルが t1.sim になる
のは2番目の枠だからです。
機能実行譜はいくつでも置くことができます、それら
のファイルは t に枠の順番が振り付けられたもの
になります。
 
シミュレーション
t1.sim を使って検証を行うデータをシミュレータ
SIM
を使って作ります。
コマンドプロンプトで
SIM t1.sim
を実行します。
1-信号解析終了
2-論理式解析終了
3-メモリ取得終了
4-ヒューズマップ作成終了
5-深度解析終了 [3]
6-実行順序割付終了
7-実行マップ作成終了
----------------
信号数 18
論理和数 16
論理容量 1
記憶信号 0
非記憶信号 16
入力信号 2
論理参照 20
メモリ確保 2 KB
論理式 1 KB
ステップ 100
====== End =====
simulation -> end
|
上の画面になればシミュレーションは正常に終了して
います。
100ステップのデータが LSIM.OUT に出来上がってい
ます。
100以上のステップが必要な場合はファイル名の後に
ステップ数を付けると、そのステップ数でシミュレー
ションが行われます。
 
検証
検証はシミュレーションデータ LSIM.OUT を信号表
LSIM.LBL で VIEW を使って閲覧して行います。
LSIM.OUT のあるディレクトリでコマンドプロンプト
を開いて
VIEW
を実行します。
上の画面が開くので、検証したい位置の値を確認しま
す。
ここで値が期待値でなければ、設計の修正が必要な場
合なら実効譜を直します。
さらに論理の確認を増やして値を見たい場合は機能実
行譜に書き加えます、そして
「コンパイル → シミュレーション → 検証」
を期待値が得られて論理設計が完成するまで繰り返し
行います。
 
チップ開発環境での検証
機能実行譜があるときに LDC を -vh オプション
を付けて実行すると機能実行譜は e1.vhd のファイ
ルになります、また、そのテストベンチが s1.vhd
に出力されています。
e1.vhd は設計論理と検証論理が合体したものです。
s1.vhd は、その閉じた論理を初期化してクロックを
与えています。
logicname TTL00
entity IC
input A1,A2;
input B1,B2;
input C1,C2;
input D1,D2;
output YA,YB,YC,YD;
if (A1 & A2) YA=0; else YA=1; endif
if (B1 & B2) YB=0; else YB=1; endif
if (C1 & C2) YC=0; else YC=1; endif
if (D1 & D2) YD=0; else YD=1; endif
ende
entity sim
output A1,A2;
output B1,B2;
output C1,C2;
output D1,D2;
output YA,YB,YC,YD;
bitr tc[5];
input simres; {機能実行を初期化する信号}
part IC(A1,A2,B1,B2,C1,C2,D1,D2,YA,YB,YC,YD)
if (!simres) tc=tc+1; endif {シミュレーション開始時に初期化されます。}
switch(tc)
case 3: A1=0; A2=0;
case 4: A1=0; A2=1;
case 5: A1=1; A2=0;
case 6: A1=1; A2=1;
case 7: B1=0; B2=0;
case 8: B1=0; B2=1;
case 9: B1=1; B2=0;
case 10: B1=1; B2=1;
case 11: C1=0; C2=0;
case 12: C1=0; C2=1;
case 13: C1=1; C2=0;
case 14: C1=1; C2=1;
case 15: D1=0; D2=0;
case 16: D1=0; D2=1;
case 17: D1=1; D2=0;
case 18: D1=1; D2=1;
endswitch
ende
endlogic
|
コマンドプロンプトで
LDC SAMPLE -vh
を実行します。
上の論理譜をコンパイルして得られる e1.vhd に
s1.vhd をテストベンチにしてシミュレーションしま
す。
これで得られるテストベンチのステップ数は30にな
っています。
例えばステップ数を500にしたいときは
-sp 500
のオプションを付け加えます。
エディタでテストベンチを直接編集して変更しても
問題ありません。
機能実行譜を LSIM でシミュレーションするときは信
号の初期値はすべて0として始まります。
記憶信号も初期化の論理がなくてもいつも0を初期値
として始められます。
他のシミュレータでは初期値が不定になるときはシミ
ュレーションが進まないものがあります。
機能実行譜では唯一の例外として
simres
を入力に指定することができます。
simres はテストベンチでシミュレーション開始のと
きに5クロックだけ1になります。
記憶信号は simres を使って初期値を与えます。
LSIMとは共有できない信号なので、LSIMを使うときは
simres=0 にして効かないようにします。
|
e1.vhd に s1.vhd をテストベンチにして ModelSimで
シミュレーションした結果です。
 
チップ化
これまでの行程を経て論理設計が完了すると、次のス
テップのチップ化に移ります。
チップ化には e0.vhd を使います、下は、その一例で
す。
cpldfit: version G.26 Xilinx Inc.
Fitter Report
Design Name: ic Date: 8-20-2004, 7:21PM
Device Used: XC9536-5-PC44
Fitting Status: Successful
**************************** Resource Summary ****************************
Macrocells Product Terms Registers Pins Function Block
Used Used Used Used Inputs Used
4 /36 ( 11%) 4 /180 ( 2%) 0 /36 ( 0%) 12 /34 ( 35%) 8 /72 ( 11%)
PIN RESOURCES:
Signal Type Required Mapped | Pin Type Used Remaining
------------------------------------|---------------------------------------
Input : 8 8 | I/O : 12 16
Output : 4 4 | GCK/IO : 0 3
Bidirectional : 0 0 | GTS/IO : 0 2
GCK : 0 0 | GSR/IO : 0 1
GTS : 0 0 |
GSR : 0 0 |
---- ----
Total 12 12
MACROCELL RESOURCES:
Total Macrocells Available 36
Registered Macrocells 0
Non-registered Macrocell driving I/O 4
GLOBAL RESOURCES:
Global clock net(s) unused.
Global output enable net(s) unused.
Global set/reset net(s) unused.
POWER DATA:
There are 4 macrocells in high performance mode (MCHP).
There are 0 macrocells in low power mode (MCLP).
There are a total of 4 macrocells used (MC).
End of Resource Summary
*************** Summary of Required Resources ******************
** LOGIC **
Signal Total Signals Loc Pwr Slew Pin Pin Pin Reg Init
Name Pt Used Mode Rate # Type Use State
YA0 1 2 FB2_2 STD FAST 44 I/O O
YB0 1 2 FB2_11 STD FAST 34 I/O O
YC0 1 2 FB1_2 STD FAST 3 I/O O
YD0 1 2 FB1_11 STD FAST 13 I/O O
** INPUTS **
Signal Loc Pin Pin Pin
Name # Type Use
A10 FB1_10 12 I/O I
A20 FB1_6 8 I/O I
B10 FB2_7 38 I/O I
B20 FB2_8 37 I/O I
C10 FB1_9 11 I/O I
C20 FB1_8 9 I/O I
D10 FB2_10 35 I/O I
D20 FB2_9 36 I/O I
End of Resources
*********************Function Block Resource Summary***********************
Function # of FB Inputs Signals Total O/IO IO
Block Macrocells Used Used Pt Used Req Avail
FB1 2 4 4 2 2/0 17
FB2 2 4 4 2 2/0 17
---- ----- ----- -----
4 4 4/0 34
*********************************** FB1 ***********************************
Number of function block inputs used/remaining: 4/32
Number of signals used by logic mapping into function block: 4
Signal Total Imp Exp Unused Loc Pwr Pin Pin Pin
Name Pt Pt Pt Pt Mode # Type Use
(unused) 0 0 0 5 FB1_1 2 I/O
YC0 1 0 0 4 FB1_2 STD 3 I/O O
(unused) 0 0 0 5 FB1_3 5 GCK/I/O
(unused) 0 0 0 5 FB1_4 4 I/O
(unused) 0 0 0 5 FB1_5 6 GCK/I/O
(unused) 0 0 0 5 FB1_6 8 I/O I
(unused) 0 0 0 5 FB1_7 7 GCK/I/O
(unused) 0 0 0 5 FB1_8 9 I/O I
(unused) 0 0 0 5 FB1_9 11 I/O I
(unused) 0 0 0 5 FB1_10 12 I/O I
YD0 1 0 0 4 FB1_11 STD 13 I/O O
(unused) 0 0 0 5 FB1_12 14 I/O
(unused) 0 0 0 5 FB1_13 18 I/O
(unused) 0 0 0 5 FB1_14 19 I/O
(unused) 0 0 0 5 FB1_15 20 I/O
(unused) 0 0 0 5 FB1_16 22 I/O
(unused) 0 0 0 5 FB1_17 24 I/O
(unused) 0 0 0 5 FB1_18 (b)
Signals Used by Logic in Function Block
1: C10 3: D10 4: D20
2: C20
Signal 1 2 3 4 Signals FB
Name 0----+----0----+----0----+----0----+----0 Used Inputs
YC0 XX...................................... 2 2
YD0 ..XX.................................... 2 2
0----+----1----+----2----+----3----+----4
0 0 0 0
Legend:
Total Pt - Total product terms used by the macrocell signal
Imp Pt - Product terms imported from other macrocells
Exp Pt - Product terms exported to other macrocells
in direction shown
Unused Pt - Unused local product terms remaining in macrocell
Loc - Location where logic was mapped in device
Pwr Mode - Macrocell power mode
Pin Type/Use - I - Input GCK - Global Clock
O - Output GTS - Global Output Enable
(b) - Buried macrocell GSR - Global Set/Reset
X(@) - Signal used as input (wire-AND input) to the macrocell logic.
The number of Signals Used may exceed the number of FB Inputs Used due
to wire-ANDing in the switch matrix.
*********************************** FB2 ***********************************
Number of function block inputs used/remaining: 4/32
Number of signals used by logic mapping into function block: 4
Signal Total Imp Exp Unused Loc Pwr Pin Pin Pin
Name Pt Pt Pt Pt Mode # Type Use
(unused) 0 0 0 5 FB2_1 1 I/O
YA0 1 0 0 4 FB2_2 STD 44 I/O O
(unused) 0 0 0 5 FB2_3 42 GTS/I/O
(unused) 0 0 0 5 FB2_4 43 I/O
(unused) 0 0 0 5 FB2_5 40 GTS/I/O
(unused) 0 0 0 5 FB2_6 39 GSR/I/O
(unused) 0 0 0 5 FB2_7 38 I/O I
(unused) 0 0 0 5 FB2_8 37 I/O I
(unused) 0 0 0 5 FB2_9 36 I/O I
(unused) 0 0 0 5 FB2_10 35 I/O I
YB0 1 0 0 4 FB2_11 STD 34 I/O O
(unused) 0 0 0 5 FB2_12 33 I/O
(unused) 0 0 0 5 FB2_13 29 I/O
(unused) 0 0 0 5 FB2_14 28 I/O
(unused) 0 0 0 5 FB2_15 27 I/O
(unused) 0 0 0 5 FB2_16 26 I/O
(unused) 0 0 0 5 FB2_17 25 I/O
(unused) 0 0 0 5 FB2_18 (b)
Signals Used by Logic in Function Block
1: A10 3: B10 4: B20
2: A20
Signal 1 2 3 4 Signals FB
Name 0----+----0----+----0----+----0----+----0 Used Inputs
YA0 XX...................................... 2 2
YB0 ..XX.................................... 2 2
0----+----1----+----2----+----3----+----4
0 0 0 0
Legend:
Total Pt - Total product terms used by the macrocell signal
Imp Pt - Product terms imported from other macrocells
Exp Pt - Product terms exported to other macrocells
in direction shown
Unused Pt - Unused local product terms remaining in macrocell
Loc - Location where logic was mapped in device
Pwr Mode - Macrocell power mode
Pin Type/Use - I - Input GCK - Global Clock
O - Output GTS - Global Output Enable
(b) - Buried macrocell GSR - Global Set/Reset
X(@) - Signal used as input (wire-AND input) to the macrocell logic.
The number of Signals Used may exceed the number of FB Inputs Used due
to wire-ANDing in the switch matrix.
;;-----------------------------------------------------------------;;
; Implemented Equations.
!YA0 = A20 & A10;
!YB0 = B20 & B10;
!YC0 = C20 & C10;
!YD0 = D20 & D10;
Legend: .COMB = combinational node mapped to the same physical macrocell
as the FastInput "signal" (not logically related)
**************************** Device Pin Out ****************************
Device : XC9536-5-PC44
--------------------------------
/6 5 4 3 2 1 44 43 42 41 40 \
| 7 39 |
| 8 38 |
| 9 37 |
| 10 36 |
| 11 XC9536-5-PC44 35 |
| 12 34 |
| 13 33 |
| 14 32 |
| 15 31 |
| 16 30 |
| 17 29 |
\ 18 19 20 21 22 23 24 25 26 27 28 /
--------------------------------
Pin Signal Pin Signal
No. Name No. Name
1 TIE 23 GND
2 TIE 24 TIE
3 YC0 25 TIE
4 TIE 26 TIE
5 TIE 27 TIE
6 TIE 28 TIE
7 TIE 29 TIE
8 A20 30 TDO
9 C20 31 GND
10 GND 32 VCC
11 C10 33 TIE
12 A10 34 YB0
13 YD0 35 D10
14 TIE 36 D20
15 TDI 37 B20
16 TMS 38 B10
17 TCK 39 TIE
18 TIE 40 TIE
19 TIE 41 VCC
20 TIE 42 TIE
21 VCC 43 TIE
22 TIE 44 YA0
Legend : NC = Not Connected, unbonded pin
PGND = Unused I/O configured as additional Ground pin
TIE = Unused I/O floating -- must tie to VCC, GND or other signal
VCC = Dedicated Power Pin
GND = Dedicated Ground Pin
TDI = Test Data In, JTAG pin
TDO = Test Data Out, JTAG pin
TCK = Test Clock, JTAG pin
TMS = Test Mode Select, JTAG pin
PE = Port Enable pin
PROHIBITED = User reserved pin
**************************** Compiler Options ****************************
Following is a list of all global compiler options used by the fitter run.
Device(s) Specified : xc95*-*-*
Optimization Method : SPEED
Multi-Level Logic Optimization : ON
Ignore Timing Specifications : OFF
Default Register Power Up Value : LOW
Keep User Location Constraints : ON
What-You-See-Is-What-You-Get : OFF
Exhaustive Fitting : OFF
Keep Unused Inputs : OFF
Slew Rate : FAST
Power Mode : STD
Ground on Unused IOs : OFF
Global Clock Optimization : ON
Global Set/Reset Optimization : ON
Global Ouput Enable Optimization : ON
FASTConnect/UIM optimzation : ON
Local Feedback : ON
Pin Feedback : ON
Input Limit : 36
Pterm Limit : 25
|
|