2019.7.6
前へ
次へ
ホームページトップへ戻る

[新連載]CPLD入門!
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使うことになるだろうと思ってはいたのですが。
何を今頃になって、というようなものですが。
ようやく本気で、CPLDと四つに取り組みます。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜



[第85回]


●Pin Planner

コンパイルが済んだあと、最後の仕上げとしてやらなくてはいけないのは、端子名を実際の外部端子に結びつける作業です。
QuartusUの場合VHDLソースプログラムには端子番号は記述しません。
端子名のみを記述しますから、そのままでは実際にCPLDにプログラムを実行させることはできません。
端子名を端子番号に結びつけるにはPin Plannerを使います。
Pin Plannerは視覚的で簡便なのですが、ピン数が多いCPLDになってくると、1本1本つないでいく手間はなかなかに面倒な作業になってきます。
おまけにたとえばあるソースプログラムをもとにして、別のソースプログラムを作った場合などでも、Pin Plannerの作業は最初からやり直しをしなければなりません。
なんとかならないかなあ、という気持ちになります。
実はすでに作業済みの端子接続をもとにして、新しいVHDLプログラム用に一部(または全部)をそのまま利用する裏技があります。
その裏技についても説明が進んできましたら、お教えいたします。
今回は最初ですので、Pin Plannerをはじめから使うところから説明をします。

前回と同じようにしてQuartusUV13.0sp1を起動して、trngio1d.vhdソースプログラムが表示されている状態のところまで進んでください。
前回のコンパイル作業にかかる直前の状態です。
下の画面の状態です。

Pin Plannerはコンパイルのあとで実行します。
ソースプログラムを手直しするなどして、端子名が変わったり、追加削除を行なったりしたときも、もちろん再コンパイルしますが、そのときもPin Plannerで新しい端子名の情報を反映させる必要があります。

さて、それではPin Plannerを起動します。
「Assignments」をクリックします。
開くメニューの「Pin Planner」をクリックします。

この画面は前回のコンパイル終了後にそのまますぐにPin Plannerを起動したときの画面になっていますが、今回の説明のようにコンパイルが終ったところでQuartusUを終了して、のちほど再びQuartusUを起動して、Pin Plannerを実行するということでも全く支障はありません。

Pin Plannerが起動しました。

ちょっと表示が小さいので、右上の「最大化」(□マーク)をクリックして表示画面を最大にします。

画面が大きくなりました。

画面上部に端子名と端子番号を結合する前のまっさらな端子図が表示されます。
画面下部にはVHDLソースプログラムで定義した端子名のリストが表示されます。
枠が狭いので一部しか表示されていません。
隠れているところはスクロールして表示させることができます。
表ではコンパイラが仮に貼り付けた端子番号が表示されていますが、もちろんこのままでは使えません。
実際にPin Plannerで端子名と端子番号をつなぐと空白になっているLocationのところに、割り当てた端子番号が表示されます。

ところで。
どの端子名をどの端子番号に割り当てるかということは、VHDLプログラムができあがるときまでに決っているはずです。
信号によっては空いている端子に適当に割り当ててしまってもよいものも出てくるかもしれませんが、普通はハード回路の配線が決っていますから、ほとんどの信号は、どの信号がどの端子に、という割り当てが最初から決っています。
今説明をしておりますCPLDトレーニングボードの場合でも、ほとんどの信号はそれぞれ特定の端子番号に割り当て済みです。
今回の82C55プログラムで使う信号の端子番号への割り当て表を下に示します。
この表を見ながらPin Plannerを操作していきます。
実際の作業を始める前に下の枠で囲った部分をコピーして(メモ帳かTeraPadなどに貼り付けて)プリントアウトしてください。
それを見ながら作業するほうが楽だと思います。

set_location_assignment PIN_22 -to ADRSIN[7]
set_location_assignment PIN_21 -to ADRSIN[6]
set_location_assignment PIN_20 -to ADRSIN[5]
set_location_assignment PIN_18 -to ADRSIN[4]
set_location_assignment PIN_17 -to ADRSIN[3]
set_location_assignment PIN_16 -to ADRSIN[2]
set_location_assignment PIN_15 -to ADRSIN[1]
set_location_assignment PIN_12 -to ADRSIN[0]
set_location_assignment PIN_11 -to DINOUT[7]
set_location_assignment PIN_10 -to DINOUT[6]
set_location_assignment PIN_9 -to DINOUT[5]
set_location_assignment PIN_8 -to DINOUT[4]
set_location_assignment PIN_6 -to DINOUT[3]
set_location_assignment PIN_5 -to DINOUT[2]
set_location_assignment PIN_4 -to DINOUT[1]
set_location_assignment PIN_81 -to DINOUT[0]
set_location_assignment PIN_65 -to LEDOUT[3]
set_location_assignment PIN_67 -to LEDOUT[2]
set_location_assignment PIN_68 -to LEDOUT[1]
set_location_assignment PIN_69 -to LEDOUT[0]
set_location_assignment PIN_24 -to IOR
set_location_assignment PIN_25 -to IOW
set_location_assignment PIN_64 -to PA[7]
set_location_assignment PIN_63 -to PA[6]
set_location_assignment PIN_61 -to PA[5]
set_location_assignment PIN_60 -to PA[4]
set_location_assignment PIN_58 -to PA[3]
set_location_assignment PIN_56 -to PA[2]
set_location_assignment PIN_57 -to PA[1]
set_location_assignment PIN_54 -to PA[0]
set_location_assignment PIN_55 -to PB[7]
set_location_assignment PIN_52 -to PB[6]
set_location_assignment PIN_51 -to PB[5]
set_location_assignment PIN_50 -to PB[4]
set_location_assignment PIN_49 -to PB[3]
set_location_assignment PIN_48 -to PB[2]
set_location_assignment PIN_46 -to PB[1]
set_location_assignment PIN_45 -to PB[0]
set_location_assignment PIN_34 -to PCH[3]
set_location_assignment PIN_35 -to PCH[2]
set_location_assignment PIN_36 -to PCH[1]
set_location_assignment PIN_37 -to PCH[0]
set_location_assignment PIN_40 -to PCL[3]
set_location_assignment PIN_39 -to PCL[2]
set_location_assignment PIN_41 -to PCL[1]
set_location_assignment PIN_44 -to PCL[0]

この表は実際の作業の向きとは逆の書き方になっています。
一番上の「PIN_22 −to ADRSIN[7]」は
「ADRSIN[7]はPIN_22に割り当てる」
というように読んでください。

それでは表を見ながら実際の作業を開始します。

画面下部に表示されているリストの一番上の「ADRSIN[7]」をマウスで選択して、そのまま画面上部の端子図のところまでドラッグしていきます。

端子番号22の○のところまでドラッグしていって、そこで離すとADRSIN[7]がPIN22に貼り付けられて○が濃い赤色に着色されます。

下のリストのLocationのところにもPIN_22が表示されました。

次はADRSIN[6]です。

作業は上から順にしなければならない、ということはありません。
途中でうっかり飛ばしてしまったりしたときは、その飛ばしたところまで行って、その端子についての作業をすることができます。
間違って別の端子番号に貼り付けてしまった場合も、わざわざ取り消さなくても、構わずにそのあとで正しい端子番号のところにドラッグしていって貼り付ければ、正しい結果に直されます。

同じ操作を行なって、ADRSIN[6]がPIN_21に貼り付けられました。


そのようにしてDINOUT[6]まで貼り付けました。


リストの下に隠れているところは右のスクロールバーを操作して表示させることができます。


DINOUT[5]をPIN_9に割り当てました。

リストの表示は割り当てが完了したところまで戻ってしまいます。
うーん。
せめてその下の一行だけでもしっかり表示してくれると楽なのですけれど(半分しか表示してくれません)。

最後まで割り当てが済みました。

一番下に表示されているTCK〜TMSはJTAG端子なので、このままにしておきます。
JTAG端子は端子図では五角形で表示されています。
なお電源端子はX印になっています(VDD、GRDの別は図示されません)。
未割り当ての端子は○のまま残ります。
回路が未配線のままの状態で、○のまま残すとそこからノイズが入って誤動作の原因になりますからよくありません。
CPLDトレーニングボードの回路では○の端子は82C55回路としては使いませんが、すべてプルアップしてありますから、このまま残しておいても支障はありません。

リストをもう一度よく見て、Locationが空白になったままのところがないかどうか確認してください。
また念のため上でプリントした割当表と照合して間違っていないかどうか確認してください。

間違いを発見したときの直し方です。
ある端子名を間違った端子番号に貼り付けてしまっていたことがわかったとき、たまたま正しい割り当てを行なう端子が○になっていたら、その端子名を正しい端子の○のところまでドラッグしていって、そこで離せば正しい○が着色されて、代わりに間違っていた端子のところが○に変わります。
正しい端子番号のところがすでに別の端子名に割り当てられて○が着色されていた場合(この場合にはそこに割り当てられている端子名も間違って割り当てられているはずです)、先にその着色されている端子を○にしなければなりません。
たまたま先に間違って割り当てていた端子名の正しい割当先が○ならば、先にその端子名の割り当てをし直すことで順次空き端子の状態にすることができますから、同じ要領で順次直していくことができます。
問題は端子名Aと端子名Bがそれぞれ相手の端子番号のところに割り当てられてしまっていた場合です。
この場合にはどちらかを先に取り消さなければ作業ができません。
簡便な方法としては、もともと空いている○に一旦端子名AかBを移動しておいて、残ったほうの端子名を正しい端子に貼り付けたあと、仮に移動しておいた端子名を正しい端子に貼り付けるという方法があります。

正攻法としては一旦間違って貼り付けてしまった端子の割り当てを削除します。

操作例として最初にADRSIN[7]をPIN_22に結び付けましたがそれが間違っていたとします。
リストのPIN_22のところにマウスをもっていって右クリックするとメニューが開きます。
そのメニューの中の「Edit」にマウスをもっていくと、さらにメニューが開きます。
その中の「Delete」をクリックすると登録が取り消されます。

端子配置図のPIN22が○になって、リストのADRSIN[7]の行のLocationが空白になりました。


上の例は見本として仮に行なっただけですから、もし同じことを試しにやってみた方はPin Plannerを終了する前に、ちゃんと元通りに直しておかなければなりません。
QuartusUは作業をすべてリアルタイムで記録しているらしいので、上の状態のままQuartusUを終了すると誤った情報が登録されたままになります。

ADRSIN[7]を元の通りに戻しました。

右上の[X]をクリックしてPin Plannerを終了します。

Pin Plannerを使ったあとは、もう一度コンパイルを実行しておきます。

この画面はPin Plannerを実行する前のコンパイル終了時のFlow Sammaryです。
ここのTotal macrocellsの値を覚えておいてください。

Processingをクリックして、開くメニューのStart Compilationをクリックします。


コンパイルが終りました。

Total Macrocellsの値が変わりました。
なぜでしょうか、ねえ。
仮の端子番号の割付がPin Plannerによって、別の端子番号に割り当てられたことによって、Macrocellsの組み合わせが変わって、その結果使用量が変わるのかもしれません。
今回は割り当て前に比べて使用量が減りましたが、逆に増えることもあるかもしれません。
いずれにせよ、Pin Plannerを使ったら、その後でもう一度コンパイルを実行しておかなければならないようです。
「OK」をクリックしてコンパイルを終了します。

コンパイルを終了しました。

右上の[X]をクリックしてQuartusUを終了します。

以上で、皆様の手元で現在できる作業については全て終りました。
このあとは実際にEPM7128SLC84にコンパイル後のプログラムを書き込む作業になりますが、それを実行するにはCPLDトレーニングボードを入手していただかなければなりません。
現在そのための準備中です。
近日中にCPLDトレーニングボードについての案内を掲載予定です。

CPLD入門![第85回]
2019.7.6upload

前へ
次へ
ホームページトップへ戻る