見てのとおり、電源とグラウンドは隅に寄せてあります。これらのピンは内部で結線されているので、一箇所つなげばOKです。ただし、VCCIOとVCCINTは別物ですので、両方結線してください。
JTAG用のピンがまとまっているのも注目です。
XILINX-CPLDを基板に実装するときには、1番ピンの場所にご注意ください。「XILINX」と描かれたロゴを見るのではなく、チップの切りかきと丸ポッチの場所を参照して実装してください。
●赤で描かれたピンはCPLDの内部電源です。これは3.3Vを供給してください。
●紫色で描かれたピンはCPLDのI/O電源です。これは3.3Vまたは2.5Vを供給してください。
●黄色で描かれたピンは、CPLDの書き込みのためのJTAGピンです。
●黒で描かれたピンは、グラウンドです。
●緑で描かれたピンは、CPLDのユーザーI/Oです。全部で117本あります。
●白で描かれたピンはどこにも接続されていません。XC95144XLのマクロセルは全部で144個ありますが、ユーザーピンの数は117個しかないので、各ファンクション・ブロックあたり3〜5個のマクロセルがCPLDの内部接続専用になっています。欠番したマクロセルに対応するピンはNCにしてあります。詳しくは後の節で解説します。
********J6 ********J4 J2J1 * * 1 * * * * / X * * * * I * * * * L * * * * I * * * * N * * * * X * * * * * * * * * * J3********** J7J8 J5********** ***** -------- VCC,TDI,TCK,TDO,TMS,GND
これらマクロセルをいくつか集めたものがファンクション・ブロックです。XC95シリーズでは18個のマクロセルで1つのファンクション・ブロックが構成されています。ファンクション・ブロック内では、マクロセルの出力を他のマクロセルの入力に入れるのは自由ですし、時間的な遅れも最小限にとどまります。
以上のことより、ある機能を実現する回路は可能な限り同じファンクション・ブロックに配置した方が良い結果が得られるのがわかります。特にカウンタ回路は同じファンクションブロック内に作るとCPLDの持つ能力を発揮できます。
しかしながらXC95シリーズとWebPACKはそれ自体とても高度なものなので、ユーザーはそれほど気にしなくても構いません。WebPACKのツールが最適化を自動的に行ってくれますので、慣れていないユーザーは気にしないほうがよいでしょう。
デバイスの再設計を考慮に入れる場合や、リソース使用率100%に迫るような設計をする場合はファンクション・ブロックの配置を念頭に設計します。
なお、PLDの規模をゲートサイズでいうときがありますが、144マクロセルは3200ゲート相当だそうです。
ファンクション・ブロック | 外部へのマクロセル数 |
FB1 | 15 |
FB2 | 15 |
FB3 | 15 |
FB4 | 15 |
FB5 | 14 |
FB6 | 13 |
FB7 | 15 |
FB8 | 15 |
ucfファイルの#はコメントを意味します。各行のコメント部分にあるFB=1,MC=等の記述は、ピンの割り当てがわかりやすくなるように書き加えました。FBはファンクション・ブロック、MCはマクロセルの番号をあらわしています。N/AはユーザーIOとして使えないピンを意味します。GCK,GTS,GSRとなっているのはグローバルピンです。GCKはグローバルクロックという信号です。グローバル信号はCPLDの全体に行き渡る専用の配線を持っています。
そのためクロックなどCPLD全体で使う信号はこのグローバルピンを使うように心がけます。ちなみにGCKは3本あり、このCPLDは3相のクロックを同等に扱えます。GTSはグローバル・トライステートで、CPLDのI/Oを一気にハイ・インピーダンスにするのに使います。GSRはグローバル・セット・リセットで、CPLD内のフリップフロップを一気に非同期セット・リセットするのに使います。GTSやGSRは私はいままでに使ったことはありませんし、滅多に使う必要はないでしょう。もちろんこれらのピンは普通のIOピンとしても使えますが、逆はできません。つまり普通のIOピンをグローバル信号にすることはできません。
下のucfファイルで、""で囲まれた部分にあなたのデザインで使った信号名を入れてください。""のままだとWebPACKは誤動作をします。LOC=の"S:23"という表現はピン番号を表しています。
#Function block 1 , USER I/O = 15 NET "" LOC = "S:23"; #FB=1,MC=1 NET "" LOC = "S:16"; #FB=1,MC=2 ,GTS3 NET "" LOC = "S:17"; #FB=1,MC=3 ,GTS4 NET "" LOC = "S:25"; #FB=1,MC=4 NET "" LOC = "S:19"; #FB=1,MC=5 ,GTS1 NET "" LOC = "S:20"; #FB=1,MC=6 ,GTS2 #NET "" LOC = "S:"; #FB=1,MC=7 ,N/A NET "" LOC = "S:21"; #FB=1,MC=8 NET "" LOC = "S:22"; #FB=1,MC=9 NET "" LOC = "S:31"; #FB=1,MC=10 NET "" LOC = "S:24"; #FB=1,MC=11 NET "" LOC = "S:26"; #FB=1,MC=12 #NET "" LOC = "S:"; #FB=1,MC=13 ,N/A NET "" LOC = "S:27"; #FB=1,MC=14 NET "" LOC = "S:28"; #FB=1,MC=15 NET "" LOC = "S:35"; #FB=1,MC=16 NET "" LOC = "S:30"; #FB=1,MC=17 ,GCK1 #NET "" LOC = "S:"; #FB=1,MC=18 ,N/A #Function block 2 , USER I/O = 15 NET "" LOC = "S:142"; #FB=2,MC=1 NET "" LOC = "S:143"; #FB=2,MC=2 ,GSR #NET "" LOC = "S:"; #FB=2,MC=3 ,N/A NET "" LOC = "S:4"; #FB=2,MC=4 NET "" LOC = "S:2"; #FB=2,MC=5 NET "" LOC = "S:3"; #FB=2,MC=6 #NET "" LOC = "S:"; #FB=2,MC=7 ,N/A NET "" LOC = "S:5"; #FB=2,MC=8 NET "" LOC = "S:6"; #FB=2,MC=9 NET "" LOC = "S:7"; #FB=2,MC=10 NET "" LOC = "S:9"; #FB=2,MC=11 NET "" LOC = "S:10"; #FB=2,MC=12 NET "" LOC = "S:12"; #FB=2,MC=13 NET "" LOC = "S:11"; #FB=2,MC=14 NET "" LOC = "S:13"; #FB=2,MC=15 NET "" LOC = "S:14"; #FB=2,MC=16 NET "" LOC = "S:15"; #FB=2,MC=17 #NET "" LOC = "S:"; #FB=2,MC=18 ,N/A #Function block 3 , USER I/O = 15 NET "" LOC = "S:39"; #FB=3,MC=1 NET "" LOC = "S:32"; #FB=3,MC=2 ,GCK2 NET "" LOC = "S:41"; #FB=3,MC=3 NET "" LOC = "S:44"; #FB=3,MC=4 NET "" LOC = "S:33"; #FB=3,MC=5 NET "" LOC = "S:34"; #FB=3,MC=6 NET "" LOC = "S:46"; #FB=3,MC=7 NET "" LOC = "S:38"; #FB=3,MC=8 ,GCK3 NET "" LOC = "S:40"; #FB=3,MC=9 NET "" LOC = "S:48"; #FB=3,MC=10 NET "" LOC = "S:43"; #FB=3,MC=11 NET "" LOC = "S:45"; #FB=3,MC=12 #NET "" LOC = "S:"; #FB=3,MC=13 ,N/A NET "" LOC = "S:49"; #FB=3,MC=14 NET "" LOC = "S:50"; #FB=3,MC=15 #NET "" LOC = "S:"; #FB=3,MC=16 ,N/A NET "" LOC = "S:51"; #FB=3,MC=17 #NET "" LOC = "S:"; #FB=3,MC=18 ,N/A #Function block 4 , USER I/O = 15 NET "" LOC = "S:118"; #FB=4,MC=1 NET "" LOC = "S:126"; #FB=4,MC=2 NET "" LOC = "S:133"; #FB=4,MC=3 #NET "" LOC = "S:"; #FB=4,MC=4 ,N/A NET "" LOC = "S:128"; #FB=4,MC=5 NET "" LOC = "S:129"; #FB=4,MC=6 #NET "" LOC = "S:"; #FB=4,MC=7 ,N/A NET "" LOC = "S:130"; #FB=4,MC=8 NET "" LOC = "S:131"; #FB=4,MC=9 NET "" LOC = "S:135"; #FB=4,MC=10 NET "" LOC = "S:132"; #FB=4,MC=11 NET "" LOC = "S:134"; #FB=4,MC=12 NET "" LOC = "S:137"; #FB=4,MC=13 NET "" LOC = "S:136"; #FB=4,MC=14 NET "" LOC = "S:138"; #FB=4,MC=15 NET "" LOC = "S:139"; #FB=4,MC=16 NET "" LOC = "S:140"; #FB=4,MC=17 #NET "" LOC = "S:"; #FB=4,MC=18 ,N/A #Function block 5 , USER I/O = 14 #NET "" LOC = "S:"; #FB=5,MC=1 ,N/A NET "" LOC = "S:52"; #FB=5,MC=2 NET "" LOC = "S:59"; #FB=5,MC=3 #NET "" LOC = "S:"; #FB=5,MC=4 ,N/A NET "" LOC = "S:53"; #FB=5,MC=5 NET "" LOC = "S:54"; #FB=5,MC=6 NET "" LOC = "S:66"; #FB=5,MC=7 NET "" LOC = "S:56"; #FB=5,MC=8 NET "" LOC = "S:57"; #FB=5,MC=9 NET "" LOC = "S:68"; #FB=5,MC=10 NET "" LOC = "S:58"; #FB=5,MC=11 NET "" LOC = "S:60"; #FB=5,MC=12 NET "" LOC = "S:70"; #FB=5,MC=13 NET "" LOC = "S:61"; #FB=5,MC=14 NET "" LOC = "S:64"; #FB=5,MC=15 #NET "" LOC = "S:"; #FB=5,MC=16 ,N/A NET "" LOC = "S:69"; #FB=5,MC=17 #NET "" LOC = "S:"; #FB=5,MC=18 ,N/A #Function block 6 , USER I/O = 13 #NET "" LOC = "S:"; #FB=6,MC=1 ,N/A NET "" LOC = "S:106"; #FB=6,MC=2 #NET "" LOC = "S:"; #FB=6,MC=3 ,N/A NET "" LOC = "S:111"; #FB=6,MC=4 NET "" LOC = "S:110"; #FB=6,MC=5 NET "" LOC = "S:112"; #FB=6,MC=6 #NET "" LOC = "S:"; #FB=6,MC=7 ,N/A NET "" LOC = "S:113"; #FB=6,MC=8 NET "" LOC = "S:116"; #FB=6,MC=9 NET "" LOC = "S:115"; #FB=6,MC=10 NET "" LOC = "S:119"; #FB=6,MC=11 NET "" LOC = "S:120"; #FB=6,MC=12 #NET "" LOC = "S:"; #FB=6,MC=13 ,N/A NET "" LOC = "S:121"; #FB=6,MC=14 NET "" LOC = "S:124"; #FB=6,MC=15 NET "" LOC = "S:117"; #FB=6,MC=16 NET "" LOC = "S:125"; #FB=6,MC=17 #NET "" LOC = "S:"; #FB=6,MC=18 ,N/A #Function block 7 , USER I/O = 15 #NET "" LOC = "S:"; #FB=7,MC=1 ,N/A NET "" LOC = "S:71"; #FB=7,MC=2 NET "" LOC = "S:75"; #FB=7,MC=3 #NET "" LOC = "S:"; #FB=7,MC=4 ,N/A NET "" LOC = "S:74"; #FB=7,MC=5 NET "" LOC = "S:76"; #FB=7,MC=6 NET "" LOC = "S:77"; #FB=7,MC=7 NET "" LOC = "S:78"; #FB=7,MC=8 NET "" LOC = "S:80"; #FB=7,MC=9 NET "" LOC = "S:79"; #FB=7,MC=10 NET "" LOC = "S:82"; #FB=7,MC=11 NET "" LOC = "S:85"; #FB=7,MC=12 NET "" LOC = "S:81"; #FB=7,MC=13 NET "" LOC = "S:86"; #FB=7,MC=14 NET "" LOC = "S:87"; #FB=7,MC=15 NET "" LOC = "S:83"; #FB=7,MC=16 NET "" LOC = "S:88"; #FB=7,MC=17 #NET "" LOC = "S:"; #FB=7,MC=18 ,N/A #Function block 8 , USER I/O = 15 #NET "" LOC = "S:"; #FB=8,MC=1 ,N/A NET "" LOC = "S:91"; #FB=8,MC=2 NET "" LOC = "S:95"; #FB=8,MC=3 NET "" LOC = "S:97"; #FB=8,MC=4 NET "" LOC = "S:92"; #FB=8,MC=5 NET "" LOC = "S:93"; #FB=8,MC=6 #NET "" LOC = "S:"; #FB=8,MC=7 ,N/A NET "" LOC = "S:94"; #FB=8,MC=8 NET "" LOC = "S:96"; #FB=8,MC=9 NET "" LOC = "S:101"; #FB=8,MC=10 NET "" LOC = "S:98"; #FB=8,MC=11 NET "" LOC = "S:100"; #FB=8,MC=12 NET "" LOC = "S:103"; #FB=8,MC=13 NET "" LOC = "S:102"; #FB=8,MC=14 NET "" LOC = "S:104"; #FB=8,MC=15 NET "" LOC = "S:107"; #FB=8,MC=16 NET "" LOC = "S:105"; #FB=8,MC=17 #NET "" LOC = "S:"; #FB=8,MC=18 ,N/A |