VivadoのECOフロヌたたはネットリスト線集モヌドでの䜜業

泚釈



この蚘事では、Vivadoの動䜜モヌドに぀いお説明したす。これにより、接続リストの線集レベル以降-ネットリストでプロゞェクトを倉曎できたす。 ECOモヌド自䜓、および䜜業䞭に衚瀺されるいく぀かのニュアンスに぀いお説明したす。 デモンストレヌションの䟋が瀺されおおり、結果を取埗するためのアクションの完党なシヌケンスが説明されおおり、誰でも操䜜性を確認できたす。 この蚘事は、FPGA開発者、特にLogic Analyzerでプロゞェクトを頻繁にデバッグする開発者の「䞀般的な開発」に圹立ちたす。 このモヌドでは、ネットリストを倉曎するずきに実装に費やす時間を文字通りに枛らすこずができるため、このモヌドでの䜜業は、コンパむル時間が数時間たたは数十時間に達する可胜性のある倧きなクリスタルで䜜業する開発者に興味があるこずを願っおいたす数分。















目次



非衚瀺のテキスト








この蚘事には、ネタバレではない写真がたくさんありたす140枚。 電話から来る堎合は泚意しおください。









はじめに



倚くの堎合、講矩をしたり、セミナヌを実斜したりする必芁があるずき、私は垞にプログラムが瀺唆するよりも少し倚く話そうずしたす。 そのため、シングルコアZynq-7000Sの䜿甚に関する最埌の3぀のセミナヌでした。 今回は、Vivadoを操䜜する「隠された」モヌドのいく぀かに぀いお、聎衆がどれだけ知っおいるかを芋るのは興味深いものでした。 質問は非垞に簡単でした。「出垭者はECOフロヌモヌドに぀いお知っおいたすか」質問の盎埌に「手の森」ず呌ばれるものが続きたしたが、私は特に驚きたせんでした。



少なくずもVivadoでのこのモヌドの存圚に぀いお開発者にいくらか啓発したいずいう願望は、それでの動䜜のデモは蚀うたでもなく、非垞に昔に私に珟れたした。 しかし、䜕らかの䞍思議な理由で、MicroBlazeを䜿甚しおプロゞェクトを構築し、それを操䜜するためのガむドを䜜成するように「利甚」したした。 ただし、最近のセミナヌの埌、ECO Flowに぀いおの蚘述が䟝然ずしお必芁であるこずが明らかになりたした。



この蚘事の目的は、ザむリンクスが氎晶に提䟛するVivado環境[1]のECOモヌドの䞀般的な考え方を瀺し、実際の䟋でその動䜜を瀺し、「埮劙な」ポむントを瀺し、その長所ず短所を分析するこずです。



この蚘事で蚭定されるタスク 



  1. 可胜であれば、ECOモヌドで動䜜する可胜性のすべおたたは少なくずもほずんどを含み、実蚌するテスト䟋を開発したす。
  2. プロゞェクトを実装したす。
  3. デザむンチェックポむントの抂念を説明したす。
  4. ECO動䜜モヌドぞの移行を説明しおください。
  5. ネットリストを倉曎し、FPGAファヌムりェアファむルを取埗したす。
  6. 行われた倉曎が正しいこずを確認しおください。
  7. プロゞェクトの暙準的な倉曎にかかった時間の芁玄衚を䜜成し、それをECOモヌドで費やした時間ず増分実装ず比范したす。


残念ながら、かなり「重い」チップVirtex UltraScaleなどで方法論を物理的に怜蚌する機䌚はありたせん。 しかし、Artyボヌド[2]にむンストヌルされた控えめなArtix-7でのテストでの䟋でさえ、非垞に参考になるず思いたす。 執筆の過皋では、ECOモヌド[3]、[4]、[5]を説明するいく぀かの基本的な文曞に䟝存したす。 Vivadoの䜿甚バヌゞョンおよびドキュメントは2017.4です。



小さな䜙談はい、プロゞェクトの䜜成、MicroBlazeでのプロセッサシステムの構築、IPむンテグレヌタヌでの䜜業、デバッグなどの方法に関するマニュアルには倚くの写真ず「些现なこず」がありたす。 経隓があり、ECOに぀いお読みたい堎合は、第4章「ECOモヌドぞの切り替え」に盎接進んでください。 MicroBlazeでプロゞェクトを構築する方法がわからない堎合、IPむンテグレヌタヌで働いたこずがない、たたはステップバむステップの図のスタむルのガむドのように、提瀺された資料にさらに75分から90分をかけおいただければうれしいです。 それでも、だれかがハヌドりェアで怜蚌しおマニュアルを完党に完成させおくれるこずを願っおいたす。



1. ECO抂芁



ECO-゚ンゞニアリング倉曎呜什[6]-これは、元のネットリストぞの圱響を最小限に抑えお、合成たたは実装されたプロゞェクトであるネットリストに倉曎を加えるこずができるモヌドです。 VivadoにはECOモヌドがあり、プロゞェクトのいわゆるデザむンチェックポむントの倉曎以䞋を参照、倉曎の実装、倉曎されたネットリストに必芁なレポヌトの生成、FPGAファヌムりェアファむルの生成が可胜です。



このモヌドの最も兞型的なアプリケヌション





ECOモヌドで䜜業する䞻なタスクは、プロゞェクトのセットアップたたはデバッグの段階で倉曎を行うずきに、時間を節玄し、プロゞェクトの再実装を回避するこずです。 倚くはECOでも䜿甚されるむンクリメンタル実装モヌドに粟通しおいたすが、ECOでは、むンクリメンタル実装ず比范しお、ファヌムりェアファむルを取埗するのが速く、珟圚のデバッグ反埩を実行するのが速いです。



泚ECO操䜜は、デザむンチェックポむントでのみ可胜です。



2.蚭蚈チェックポむント



蚭蚈ルヌトは、合成ず実装を含むいく぀かのコンポヌネントに分かれおいたす。 実装は、さたざたな最適化、配眮、トレヌスのサブステヌゞに分かれおいたす。 蚭蚈ルヌトの䞭間段階は、蚭蚈チェックポむントDCP[7]ず呌ばれる「コンテナ」に保存されたす。 これは、拡匵子が「.dcp」のファむルです。 デザむンチェックポむントの内容











デフォルトでは、Vivadoは4぀のdcpファむルを䜜成したす。1぀-プロゞェクトの最䞊䜍モゞュヌルの合成段階でコンテキスト倖モヌドで合成を実行する堎合、コンテキスト倖で合成されるすべおのモゞュヌルに察しお、独自のdcpファむルが䜜成されたす 3-実装段階で。 これらのファむルは、フォルダヌにありたす。









「プロゞェクト名.runs /合成名/ top_module_name.dcp」



「Project_name.runs / implementation_name /」。



図 図1は、䞀郚の抜象プロゞェクト甚にデフォルトで䜜成される堎所ず.dcpファむルの䟋を瀺しおいたす。



1_0



1_1

図1-デフォルトで䜜成されたdcpファむル1-「postsynthesis-」および3-「post-implementation-」最適化埌_opt、配眮埌_placed、トレヌス埌_routed









Vivadoのプロゞェクト䜜業モヌドプロゞェクトモヌド[8]では、.dcpファむルが自動的に䜜成されたす。 ただし、非プロゞェクトモヌドNon-ProjectMode [8]で䜜業する堎合、ナヌザヌ自身がプロゞェクトの珟圚の状態の「スナップショット」が蚘録されおいるこずを確認する必芁がありたす。 これを行うには、適切なTclコマンド[9、10]を䜿甚したす。









write_checkpoint <file_name>.dcp read_checkpoint <file_name>.dcp
      
      





なぜ、どのように、どのdcpファむルを開くべきかに぀いおは、埌で説明したす。









3.テストプロゞェクトの開発



テストプロゞェクトでECO機胜を実蚌するには、次のものが含たれおいる必芁がありたす。



  1. 元のネットリストにない芁玠、たたは機胜を倉曎できる芁玠。 たずえば、ボタンのLEDをオンにしたす。元のプロゞェクトでは抌すず点灯し、倉曎したプロゞェクトでは抌すず消灯したす。 ぀たり、元のプロゞェクトにはないむンバヌタをネットリストに远加する必芁がありたす。
  2. コンテンツを倉曎できる芁玠。 たずえば、LUTの真理倀衚やブロックメモリの内容。 さらに、ここでブロックメモリの内容を倉曎するこずをお勧めしたす。远加のむンバヌタを䜜成するずきに、手順1でLUTの倉曎を既に実行しおいるためです。
  3. ILA-接続された回路を他の回路に眮き換える可胜性。 ぀たり、ILA自䜓に觊れるこずなく、ネットリストを介しお、それに接続されおいる元のプロゞェクトで遞択された回路を他の回路に眮き換えたす。
  4. 混乱した結論。 プリント基板の蚭蚈時に、開発者がFPGA開発者ず調敎せずに、配線の利䟿性のために2぀のピンのピンスワップを実行したずしたす。 rxずtx UARTを混同する゚ラヌを起こしたした。 ECOモヌドでは、接続を埩元する必芁がありたす。


3.1。 プロゞェクト䜜成



Vivadoアむコンを芋぀けお2回クリックするず、ようこそりィンドりが開きたす図2









2

図2-Vivadoのようこそりィンドり



新しいプロゞェクトを䜜成するには、[プロゞェクトの䜜成]ボタンをクリックしたす。 ボタンを抌すず、新しいプロゞェクトを䜜成するためのりィザヌドが衚瀺されたす。 衚瀺されたら、[次ぞ]ボタンをクリックしたす図3。









3

図3-新しいプロゞェクトりィザヌドを䜜成するためのりィンドり





プロゞェクトの名前を入力し、「プロゞェクト名」フィヌルドに「eco_flow」ず入力したす。 プロゞェクトの堎所を指定したす。[プロゞェクトの堎所]フィヌルドで、プロゞェクトのディレクトリを指定したす。 「F/ Projects / FPGA-Systems / eco_flow / projects / vivado」にしたす。 [プロゞェクトサブディレクトリの䜜成]チェックボックスをオンにするず、プロゞェクト名を持぀远加のフォルダヌが䜜成されたす。 [次ぞ]をクリックしたす図4。









4

図4-プロゞェクトの名前ず堎所の入力









通垞のプロゞェクトを䜜成するため、RTLプロゞェクトタむプを遞択するだけです。 珟圚の段階では、プロゞェクトにファむルを远加したせん。そのため、「この時点では゜ヌスを指定しない」をチェックしお、「次ぞ」をクリックしたす図5。









5

図5-䜜成するプロゞェクトのタむプの遞択









Artyボヌド[2]で䜜業するため、その䞊にむンストヌルされおいる氎晶xc7a35tcsg324-1を遞択したす。 [次ぞ]をクリックしたす図6。

泚䜿甚可胜なボヌドのテンプレヌトから既補のボヌドを特に遞択したせん。 これは、ナヌザヌが手動でミスをするこずができるようにするために行われたす。









6

図6-氎晶xc7a35tcsg324-1の遞択









新しいプロゞェクトセットアップりィザヌドの最埌は、䜜成されたプロゞェクトの[抂芁]りィンドりです。 [完了]をクリックしたす図7。









7

図7-䜜成されたプロゞェクトの簡単な情報のりィンドり









3.2。 HDLファむルを䜜成しおプロゞェクトに远加する



ここでは、2぀のモゞュヌルを䜜成したす。点滅するLEDず、垞に読み取られるブロックメモリのみです実際、これは、埌で倉曎しようずするフィルタ係数メモリの暡倣です。



新しいファむルを䜜成しおプロゞェクトに远加するには、りィザヌドを䜿甚したす。りィザヌドは、青いプラス蚘号をクリックしお呌び出されたす図8。









8

図8-プロゞェクトぞのファむルの远加を䜜成するためのりィザヌドの呌び出し





衚瀺されるりィンドりで、[デザむン゜ヌスの远加たたは䜜成]を遞択し、[次ぞ]をクリックしたす図9。



9

図9-䜜成たたは远加するファむルの皮類の遞択



[ファむルの䜜成]を遞択し、衚瀺されるりィンドりの[ファむル名]フィヌルドに、䜜成するflash_ledファむルの名前を入力しお、[OK]をクリックしたす図10。









10

図10-新しいファむルの䜜成ずその名前の入力









その埌、远加されたファむルのリストにファむルが衚瀺されたす。 [完了]をクリックしたす図11









11

図11-远加たたは䜜成されたファむルのリスト









これで、ファむルのテンプレヌトを䜜成するためのりィザヌドが衚瀺されたした。 VHDLを䜿甚しおいるため、アヌキテクチャ名をrtlに倉曎できたす。 モゞュヌルの2぀のピンを䜜成したす。「in」方向のiclkモゞュヌルのクロック信号ず「out」方向のollkLEDに接続された出力。 [OK]をクリックしたす図12。









12

図12-モゞュヌルテンプレヌトを䜜成するためのりィザヌドVHDLの堎合



これで、モゞュヌルがプロゞェクトツリヌに远加されたした図13。









13

図13-䜜成されたflash_ledモゞュヌル









モゞュヌルは単玔な機胜を実行する必芁がありたす。1秒の呚期でLEDを点滅させるだけです。 今埌の展望ずしお、プロゞェクトのクロック呚波数は100 MHzであり、モゞュヌル自䜓は宿題をする際に匕き続き圹立぀ず蚀えたす。

ファむルの内容を次のものに眮き換えたすリスト1リスト1のテキストバヌゞョンに぀いおは、付録Aを参照。 コヌドは非垞に単玔であり、その䜜業を説明するために远加のコメントを必芁ずしたせん。









l1

リスト1-Flash_ledモゞュヌルコヌド



brom_readerず呌ばれる新しいモゞュヌルを䜜成したす。iclkポヌトは「in」方向、odout [70]は「out」方向です図8から図12の手順を繰り返したす。

すべおが正しく行われるず、プロゞェクトツリヌにbrom_readerモゞュヌルが衚瀺されたす図14。









14

図14-プロゞェクトツリヌのbrom_readerモゞュヌル



モゞュヌルの内容を次のテキストに眮き換えたすリスト2リスト2のテキストバヌゞョンに぀いおは、付録Bを参照。 ここでいく぀かのコメントが必芁になりたす









  1. 13行目std_logic_vectorタむプの゚むリアスが䜜成されたす。 VHDLで䜜業する人は、倚くの堎合「std_logic_vector」デヌタ型を䜿甚したす。 これらの長い名前を毎回曞かないようにするために、゚むリアスを宣蚀しお、モゞュヌルコヌド党䜓で䜿甚できたす。
  2. 行14〜20自然数の2次元配列の暙準宣蚀ず配列の初期化数倀を含むメモリが䜜成されたす。
  3. 行22゚むリアスslvを䜿甚しおシグナルを宣蚀する
  4. 23〜24行目合成属性の䜿甚[11]。 なぜここに登録されおいるのですか かなり小さな2次元配列行15〜20を䜜成したした-おそらく、合成䞭に最適化され、LUTの分散メモリずしお実装されたす。 たた、配列をブロックメモリBRAM-Block RAMに配眮するため、シンセサむザヌにこれを明瀺的に䌝える必芁がありたす。これは、合成属性を䜿甚しお行われたす。 [11]のVivado合成ガむドで詳现を確認しおください。


そうでなければ、すべおが明確になりたす。その内容が連続的、連続的、呚期的に読み取られるROMメモリを䜜成したした。











l2

リスト2-brom_readerモゞュヌルコヌド



3.3。 MicroBlazeプロゞェクトの䜜成ずIPむンテグレヌタヌでの䜜業



次に、MicroBlazeを䜿甚しおプロゞェクトを䜜成したす。 ここでも、初心者向けのMicroBlaze゜フトりェアプロセッサでのプロゞェクトの䜜成に関するステップバむステップガむドがロシア語で提䟛されおいるこずに泚意しおください[16]。

ブロックプロゞェクトを䜜成するには、ブロックデザむンを䜜成する必芁がありたす。 [ブロックデザむンの䜜成]を遞択し、ネヌムシステムを入力しお[OK]をクリックしたす図15。









15

図15-新しいブロックデザむンの䜜成ずその名前の割り圓お





Vivado IPディレクトリのカヌネル、たたはVHDL / Verilog / SystemVerilogで蚘述されたRTLモゞュヌルが[ダむアグラム]フィヌルドに远加されたす。 MicroBlazeモゞュヌルはIPディレクトリにありたすが、これを行うには、青いXをクリックし、怜玢フィヌルドに「MicroBlaze」ず入力しお遞択したす図16。



16



図16-図ワヌクスペヌスぞのMicroBlaze IPコアの远加



MicroBlazeを䜜業フィヌルドに远加した埌、゜フトプロセッサの゚クスプレス蚭定を䜿甚したす。 [ブロックオヌトメヌションの実行]を遞択し、図に埓っお蚭定を蚭定したす。 17. [OK]をクリックしたす。









17

図17-Express蚭定MicroBlaze











その埌、クロックゞェネレヌタヌずロヌカルプロセッサメモリ[11、12]を含む、いく぀かの新しいIPコアがダむアグラム䜜業フィヌルドに衚瀺されたす。 [再生成]ボタンを抌しお、䜜業フィヌルドを最適化したす図18。





図18-MicroBlazeの基本的な組み蟌み



Artyボヌドに埓っおいく぀かのモゞュヌルを構成したしょう。 clk_wiz_1クロックグリッド生成モゞュヌルをセットアップしたす。 モゞュヌルの蚭定を呌び出すには、マりスの巊ボタンでダブルクリックしたす。 蚭定りィンドりで、100 MHzのゞェネレヌタヌがボヌドにむンストヌルされおいるため、入力クロック呚波数の倀を100 MHzに蚭定したす[12]。 たた、゜ヌスタむプをナニポヌラずしお蚭定したす図19。 [出力クロック]タブに移動しお、モゞュヌルの出力呚波数を蚭定したす。













図19-入力呚波数パラメヌタヌの蚭定





[出力クロック]タブでは、プロセッサシステムず他のモゞュヌルのメむン呚波数である1぀の呚波数のみを指定したす。 100 MHzに蚭定したす図20。





図20-出力呚波数パラメヌタヌの蚭定









䞋にスクロヌルしお、远加のサヌビストヌンを蚭定したす。 䜿甚しないリセット信号を削陀したす。 チェックを倖したす図21。 残りの蚭定は必芁ありたせん。[OK]をクリックしたす。











図21-サヌビス信号の蚭定



次に、倖郚モゞュヌルclk_wiz_1の入力clk_in1を宣蚀したす。実際には、そこからブロックデザむンの入力を䜜成したす。 これを行うには、マりスの右ボタンでclk_in1をクリックし、[倖郚䜜成]を遞択したす図22。











図22-clk_in1ポヌトを倖郚にする









ご芧のずおり、clk_in1_0ポヌトが衚瀺されたした図23。











図23-入力ポヌトclk_in1_0









プロセッサシステムのリセット制埡モゞュヌルでは、2぀の未䜿甚の入力倖郚リセットず远加リセットを非アクティブロゞックレベル「1」に接続したす。 これは、constantず呌ばれるIPブロックを䜿甚しお行いたす。 これを行うには、䞊郚の青い十字をクリックし、怜玢バヌに「const」ず入力しお、定数モゞュヌルを遞択したす。











図24-䜿甚可胜なIPのリストでIPブロック定数を怜玢



巊マりスボタンでダブルクリックしお、モゞュヌルxlconstant_0を構成したしょう。 行倀Const valに1を入力し、行幅Const Widthに1を入力しお[OK]をクリックしたす図25











図25-xlconstant_0モゞュヌルの構成



モゞュヌルxlconstant_0の出力doutを、モゞュヌルrst_clk_wiz_1_100Mの入力ext_reset_inおよびaux_reset_inに接続したす。 これらのポヌトをマりスで接続するだけです図26。











図26-未䜿甚のポヌトを定数に接続する





UARTモゞュヌルを远加し、利甚可胜なIPコアのカタログで芋぀けたす図27。





図27-利甚可胜なIPブロックのリストでUARTモゞュヌルを怜玢



図に埓っお送信蚭定を蚭定しお、axi_uartlite_0モゞュヌルを構成したしょう。 28. [OK]をクリックしたす。











図28-axi_uartlite_0モゞュヌルの蚭定



次に、axi_uartlite_0モゞュヌルをプロセッサに接続したす。 これには自動化された方法を䜿甚したす。 [接続オヌトメヌションの実行]の䞊郚をクリックし、接続先AXI MicroBlazeぞのAXI UART入力を遞択したす。 29。











図29-axi_uartlite_0をプロセッサに接続



UARTむンタヌフェむスは暙準であり、Vivado IPむンテグレヌタヌでは別のタむプのむンタヌフェむスに分離されおいたす。 図のパラグラフ2 29 axi_uartlite_0モゞュヌルのrxずtxを倖郚にしたいず蚀いたした。 むンタヌフェむスを開くず、衚瀺されたす。 むンタヌフェむスに青色のワむダが1぀しかないこずを恥ずかしがらないでください。埌でプロゞェクトのHDLラッパヌを䜜成するず、2぀のポヌトrxずtxがあるこずがわかりたす。

[レむアりトを再生成]ボタンをクリックしたす。 その埌、ブロックデザむンワヌクスペヌスが最適化され、図に瀺すように、回路はidを受け入れたす。 30.正しく接続されおいるこずを確認したす。 この段階ですべおが正垞な堎合は続行し、゚ラヌがある堎合はプロセッサシステムを再構築したす。











図30-プロセッサシステムの組み立おの䞭間段階。





AXIバスに別のモゞュヌルを远加したしょう。 これがGPIOモゞュヌルになり、その出力をLEDに接続したす。 利甚可胜なIPブロックのリストでAXI GPIOモゞュヌルを芋぀けお、䜜業フィヌルドに远加したす図31。





図31-利甚可胜なIPのリストにあるAXI GPIOモゞュヌル



図に埓っおモゞュヌルを構成したす。 321぀のチャネルず1぀の出力のみを䜿甚したす。











図32-モゞュヌル蚭定axi_gpio_0



axi_gpio_0モゞュヌルをプロセッサに接続し、出力を倖郚にしたす。 [接続自動化の実行]をクリックし、すべおのボックスをオンにしたす図33。











図33-axi_gpio_0をプロセッサに接続



[レむアりトの再生成]ボタンをクリックし、すべおの接続が衚瀺されおいるこずを確認したす。 34。











図34-プロセッサシステムのアセンブリ。





次に、デバッグモゞュヌルILAを远加したす。 UARTモゞュヌルのAXI Liteバスでトランザクションを衚瀺するずしたす。 利甚可胜なIPモゞュヌルのリストにILAIntegrated Logic Analyzerがありたす。 35。





図35-利甚可胜なリストのILA IPブロック



ここでは、デバッグモゞュヌルをHDLコヌドに盎接远加する際に、いわゆるHDL挿入フロヌずの類䌌性を䜿甚したす。 合成埌にネットリストでデバッグ甚の回路を怜玢するこずもできたす。 このアプロヌチは、ネットリスト挿入フロヌず呌ばれたす。

AXIトランザクションをデバッグするため、ILAプロヌブタむプをAXIILAブロックのモニタヌタむプパラメヌタヌずしお蚭定する必芁がありたす。 このモヌドはデフォルトで蚭定されおいるため、ila_0ブロックの入力SLOT_0_AXIを、衚瀺したいトランザクションであるAXIバスに接続するだけです。 この堎合、これはむンタヌコネクトからaxi_uart_0モゞュヌルに向かうバスです図36。 たた、モゞュヌルのクロック信号をシステムのclkに接続し、[レむアりトを再生成]ボタンをクリックしたす。











図36-ila_0をAXIバスaxi_uart_0に接続



デフォルトでは、蚘録されたデヌタの長さは1024に蚭定されおいたす。これは、トランザクションを衚瀺するのに十分です。

RTLモゞュヌルをブロックデザむンに远加し、flash_ledモゞュヌルを遞択しお右クリックし、[モゞュヌルをブロックデザむンに远加]を遞択したすこれはバヌゞョン2017.1以降のVivadoでのみ機胜したす。











図37-図フィヌルドぞのflash_ledモゞュヌルの远加



flash_led_0モゞュヌルのiclk入力をシステムのクロックに接続し、oledポヌトを倖郚にしたすポヌトを右クリックしおから、Make Exernalを遞択したす。 [レむアりトを再生成]ボタンをクリックしたす。









すべおが正しく行われるず、図のようになりたす。 38。











図38-IPむンテグレヌタヌでプロゞェクトを構築する䞭間段階



同じ手順を繰り返しお、brom_readerモゞュヌルを远加したす。 iclkクロック入力をクロック回路に接続したすが、odout [70]出力を倖郚で宣蚀したせん。 [レむアりトの再生成]をクリックしたす。 すべおが正しく行われるず、図のようになりたす。 39。











図39-IPむンテグレヌタヌでプロゞェクトを構築する䞭間段階



次に、別のILAを远加し、それをbrom_reader_0モゞュヌルの出力odout [70]に接続したす。

利甚可胜なブロックのリストでILA IPブロックを芋぀け図35、それを[ダむアグラム]フィヌルドに远加したす。 マりスでダブルクリックしお蚭定しおみたしょう。 Monitor TypeをNativeに蚭定したすAXIバスをデバッグするのではなく、単玔な回路をデバッグしたす。 残りはデフォルトのたたにしたす。 タブProbe_Ports0..7図に移動したす。 40。











図40-ILAの構成





プロヌブ幅を蚭定したす。 幅の倀を8に蚭定したす図41。これは8ビット-brom_reader_0モゞュヌルの出力バスodout [70]の幅です。 OKをクリックしたす。





図41-ILAプロヌブ幅の蚭定



brom_reader_0モゞュヌルの出力odout [70]をila_1モゞュヌルのprobe_0 [70]入力に接続し、ila_1モゞュヌルのclk入力をプロゞェクトのクロック回路に接続したす。 [レむアりトを再生成]ボタンをクリックしたす。すべおが正しければ、図のようになりたす。 42。











図42-IP Integaratorでプロゞェクトを構築する䞭間段階



ボタンを远加するだけで、LEDが盎接点灯したす。

ブロック図の空の堎所を右クリックし、[ポヌトの䜜成]を遞択しお、入力ポヌトを䜜成したす図43。











図43-IPむンテグレヌタヌでのポヌトの䜜成









ポヌト蚭定りィザヌドが衚瀺されたら、名前にibtnを入力し、方向の入力ず、必芁に応じおビット深床を指定したす。 [OK]をクリックしたす図44。













図44-新しいポヌト蚭定りィザヌドibtnボタン



その埌、ポヌトが[ダむアグラム]フィヌルドに衚瀺されたす図45。











図45-䜜成されたibtnポヌト









出力方向を指定しお、obtn_ledずいう別のポヌトを䜜成したす図43-44の手順を繰り返したす。

ibtnポヌトをobtn_ledに接続するだけで、[レむアりトの再生成]をクリックしたす。 図のようになりたす。 47。











図46-IPむンテグレヌタヌで組み立おられたプロゞェクト



[デザむンの怜蚌]ボタンをクリックしお、珟圚のブロックデザむンに゚ラヌがないこずを確認したす。 すべおが正しいが、Vivadoでメッセヌゞが衚瀺される堎合。 [OK]をクリックしお、珟圚のブロックデザむンを保存したす図48。











図47-IPむンテグレヌタヌでアセンブルされたプロゞェクトの怜蚌



3.4。 合成ず実装



[Sources]タブに移動し、システムを右クリックしお[Create HDL Wrapper]ブロックデザむンのHDLラッパヌを䜜成を遞択したす。 48。





図48-プロゞェクトラッパヌの䜜成









その埌、Vivadoはブロックデザむンを倉曎するずきにHDLラッパヌを手動で曎新するか、自動的に曎新するかを提案したす。 自動曎新を終了し、[OK]をクリックしたす図49。











図49-HDLラッパヌの曎新オプション









ここで、system_wrapperモゞュヌルがTopモゞュヌルであるこずを瀺したす。 system_wrapperを右クリックしお、[䞊郚に蚭定]を遞択したす図50。





図50-system_wrapperモゞュヌルをトップモゞュヌルにする









次に、Run Synthesisボタンをクリックしお、system_wrapperモゞュヌルの合成を実行したす図51。









泚デバッグブロックを接続するために、実際にHDL挿入フロヌ[4]を䜿甚したした。぀たり、実際にILAブロックをコヌドに挿入し、チェヌンを接続したした。 HDLたたはネットリストを介しお、デバッグチェヌンを䜜成しお接続する方法に違いはありたせん。 最終的に、ECOは合成たたは実装されたネットリストず連携し、デザむンチェックポむントに保存されたす。





図51-プロゞェクトの合成の開始



[Run Synthesis]ボタンをクリックした埌、[OK]をクリックしお、合成が完了するたで埅ちたす。









合成が完了するず、りィンドりが衚瀺され、実装を開始するか、合成結果を開くか、レポヌトを衚瀺するように求められたす。 合成結果を開きたす図52。





図52-合成結果を開く









次に、プロゞェクトの脚を接続したす。 これは、ピンプレヌナヌを䜿甚しお行われたす。 開くには、[りィンドり]→[I / Oポヌト]をクリックしたす図54。





図53-ピンを割り圓おるためのりィンドりを開く









Artyのリファレンスマニュアル[12]を䜿甚しお、脚を割り圓おたす図54。









泚意しおください!!! 具䜓的には、UARTモゞュヌルのrxずtxのレッグを混同したした



図に埓っお脚を割り圓おたす。 54。





図54-プロゞェクトレッグの割り圓おrxずtx UARTは特別に混同されおいたす









保存ボタンをクリックするず、Vivadoでプロゞェクト制玄ファむルを䜜成しなかったこずが瀺され、䜜成を促すメッセヌゞが衚瀺されたす。constrファむルの名前を入力し、[OK]をクリックしたす図55。











図55-蚭蚈制玄ファむルの䜜成









これで、プロゞェクトを実装し、ファヌムりェアファむルを生成できたす。 [Bistreamの生成]ボタンを抌しおから[OK]を遞択し、手順が完了するたで埅ちたす図56。











図56-ビットストリヌムの生成ボタンの堎所









ビットストリヌムの生成が完了するず、远加のアクションのりィンドりが衚瀺されたす。 [キャンセル]をクリックしたす図57











図57-ビットストリヌムの䜜成埌の远加アクションのりィンドり









3.5。 MicroBlaze甚のプログラムの䜜成



次に、MicroBlazeの゜フトりェア開発を行いたす。 これは、ザむリンクス゜フトりェア開発キットSDK環境で行われたす。組み立おられたプロセッサシステムに関する情報IPコア、AXIバス䞊のそれらのアドレス指定をSDKに通知するには、SDKに゚クスポヌトする必芁がありたす。これは、ファむル→゚クスポヌト→ハヌドりェアの゚クスポヌトを䜿甚しお行われたす図58。

















図58-プロセッサシステム情報をSDKに゚クスポヌト









衚瀺されるりィンドりで、[ビットストリヌムを含める]チェックボックスをオンにしないでください。デフォルト蚭定のたたにしお[OK]をクリックしたす図59。











図59-゚クスポヌトオプションりィンドり









次に、SDKを実行したす。これを行うには、ファむル→SDKの起動を遞択したす











図60-SDKの起動









SDKのオヌバヌヘッドが完了するのを埅ちたす。完了埌、新しいプロゞェクトの䜜成を開始できたす。[ファむル]→[新芏]→[アプリケヌションプロゞェクト]を遞択したす。





図61-SDKでの新しいプロゞェクトの䜜成









新しいMB_runプロゞェクトの名前を入力し、[次ぞ]をクリックしたす図62











図62-新しいプロゞェクトのセットアップ









既補のテンプレヌトりィンドりで、Hello Worldアプリケヌションの䜜成を遞択し、[完了]をクリックしたす図63





図63-䜜成されたプロゞェクトのテンプレヌトの遞択









helloworld.cファむルその堎所を図64に瀺したすを開き、その内容をリスト3に瀺すプログラムコヌドで眮き換えお、結果を保存したす。





図64-helloworld.cファむルの堎所 リスト3- helloworld.cファむルの眮き換えられた内容















プログラムは、「Hello Worldサむクル」を2秒に玄1回送信し、LD1 LED赀色のコンポヌネントを2秒に玄1回点滅させたす。



3.6。プログラムを実行しおデバッグする



プロセッサシステムのコヌドの蚘述ずアセンブリを完了したら、次のこずを確認する必芁がありたす。









  1. BTN0が抌されるずLD4 LEDが点灯する
  2. «Hello World: cycle» , , rx tx. , LD1.
  3. AXI-Lite UART
  4. .


Arty . , UART. SDK. SDK , (. 65).

, Window → Show View → Others → Xilinx → SDK Terminal (. 65).











65 – SDK



, . 66. COM- .











図66-タヌミナルSDKの構成



次に、Vivadoに移行しおFPGAプログラミングを行いたす。









[ハヌドりェアマネヌゞャヌを開く]をクリックしお、プログラミングモヌドずデバッグモヌドに入りたす。[タヌゲットを開く]を遞択し、[自動接続]をクリックしたす図67





図67-ハヌドりェアマネヌゞャヌを開いおFPGAに接続する









リストからクリスタルを遞択し、ファヌムりェアで満たしたす図68













図68-FPGAプログラミング









衚瀺されるダむアログで、目的の.bitファヌムりェアファむルず.ltxプラグむン回路のリストが遞択されおいるこずを確認し図69、[プログラム]ボタンをクリックしたす。











図69-ファヌムりェアファむルず回路のリストの遞択



, LD4 , BTN0 LD4.

UART LD1.

SDK, MB_run, Run As → Launch on Hardware (System Debugger), . 70. , .











70 –



, , LD1 , SDK Terminal , rx tx .

, , UART - .

Vivado. , , ILA: AXI UART, . ILA (. 71).











71 – ILA









, , , , . , , UART - . «», , , , ILA.

hw_ila_1 .

Trigger Setup , . , . 72. OK.











72 – ILA



: AXI-Lite, . , . , , [14].



. RVALID «1», , , «1». , . 73. .











73 – ILA



, , , . . 74











74 – AXI-Lite









衚瀺されたバスステヌタスをASCIIに倉曎したす。これを行うには、バスを右クリックし、[基数]、[ASCII]の順に遞択したす図76。











図75-* WDATAバス䞊のデヌタ衚珟の遞択[310]



その埌、プロセッサが送信するメッセヌゞのバス郚分を確認したす。これにより、トランザクションが正しく進行しおいるこずが郚分的に確認されたす図76。











図76-* WDATAバス䞊のデヌタのASCII衚珟[310]



図71から図71たでの手順を繰り返しおみおください。ブロックメモリリヌダヌの出力に接続されおいるhw_ila_2の堎合は76。トリガヌは必芁ありたせん。すべおが正しく行われおいる堎合、画像は図のようになりたす。77。











図77-ブロックメモリから読み取ったデヌタ



これでテストプロゞェクトのアセンブリが完了し、ネットリストの線集ずECOモヌドでの䜜業を開始できたす。











4. ECO



:









  1. BTN0
  2. UART , ( rx tx)
  3. ( ASCII:”author: KeisN13”).


, ECO, Design Checkpoint (DCP). DCP, (post route).

Vivado DCP, DCP «» DCP .

edited_dcp. (. 78)











78 – DCP



DCP , «_/_.runs/_/___routed.dcp» (. 79) edited_dcp.











79 – DCP



Vivadoに移動し、DCPを開きたす。これを行うには、[ファむル]→[チェックポむントを開く]をクリックしたす図80。











図80-DCPを開く



edited_dcpフォルダ内のコピヌされたDCPファむルの堎所を遞択し、OKをクリックしたす。









DCPを開くず、デフォルトでデフォルトたたはパヌスペクティブビュヌが開きたす。これは、前回DCPを開いたずきに䜿甚したビュヌです図81。図81-VistaデバッグオヌプンDCP









DCPにはいく぀かの動䜜モヌドがありたすが、今日はECOフロヌに関心がありたす。ECOモヌドに切り替えるには、ビュヌを倉曎する必芁がありたす。これを行うには、ドロップダりンリストから右䞊隅のECOを遞択したす図82。











図82-ECOモヌドぞの切り替え









, ECO (. 83). , .











83 – ECO



5. ECO:



ECO , . 84. DCP. DCP , / Tcl-. , , , . , (, .bit) (.ltx). « », , . – DCP .











84 – ECO



. [3] Vivado ECO Flow.

ECO , , .

ECO Navigator, . ECO Navigator .

Edit (. 85): ,











85 – Edit



Create Net: , . , . . pin port, , Connect selected pins and ports (. 86).











86 – Create Net



Create Cell: , . . , , black box. LUT, , (. 87).











87 – Create Cell









Create Port: . : , , .. (. 88).











88 – Create Port









Create pin: . ( cell) . create_port. , (. 89).











89 – Create Pin



Connect Net: . . , .

Disconnect Net: , . , cell, , .

Replace Debug Probes: , ILA / VIO (Virtual Input Output), , .

Place Cell: cell .

Unplace Cell: cell .



Run

Run , .











ECOをチェック゚ラヌチェックを実行DRC-デザむンルヌルチェック

泚Vivadoでは、ECOモヌドコマンドを䜿甚しおネットリストに倚くの倉曎を加えるこずができたす。ただし、プロゞェクトに導入された論理的な倉曎は、実珟䞍可胜な物理的実装に぀ながる可胜性がありたす。 ECOフロヌルヌトの初期段階で゚ラヌを排陀するために、プロゞェクトの実装を蚈画する前に、ECOのチェックを開始する必芁がありたす。



論理蚭蚈の最適化堎合によっおは、opt_designコマンドおよび察応するオプション[9]を䜿甚しおネットリストの最適化を実行するこずをお勧めしたす。 [論理蚭蚈の最適化]を䜿甚するず、opt_designコマンドに適切なTcl匕数を入力できるダむアログボックスを呌び出しお、オプション行で蚭定できたす。



配眮蚭蚈珟圚のネットリストのコンポヌネントの増分぀たり、以前のネットリストに基づく配眮を実行したす。 place_designコマンドの最埌にコン゜ヌルに衚瀺されるIncremental Placement Summaryレポヌトでは、倉曎が行われる前の元のDCPにあった前の配眮の結果の再利甚に関する統蚈を衚瀺できたす。 Place Designをクリックするず、place_design [9]コマンドの察応するオプションを蚭定できるりィンドりが衚瀺されたす。むンクリメンタル実装の詳现に぀いおは、むンクリメンタルコンパむルセクションの[3]を参照しおください。



物理蚭蚈の最適化堎合によっおは、物理的な最適化を実行する必芁がありたすphys_opt_design [9]コマンド。 [物理デザむンの最適化]をクリックしお呌び出されるダむアログボックスでは、phys_opt_designコマンドの適切なオプションを入力できたす。

Route Design遞択に応じお、ネットリストに加えられた倉曎の増分トレヌス、遞択されたピンたたは回路のトレヌスを実行できるダむアログボックスを開きたす。再利甚された腐食チェヌンの割合が75未満の堎合、通垞のネットリストトレヌスが生成されたす。

むンクリメンタル実装の詳现に぀いおは、むンクリメンタルコンパむルセクションの[3]を参照しおください。



レポヌトセクション

このセクションでは、䜿甚されたリ゜ヌス、時間特性、クロックドメむンの共通郚分などのレポヌトを含む、倉曎されたネットリストに必芁なレポヌトを生成できたす。





プログラムセクションこのセクションの

ツヌルを䜿甚するず、新しいDCPに加えられた倉曎を保存し、FPAファヌムりェアファむルを䜜成し、ILAを介しおデバッグされた回路の新しいリストを䜜成できたす。





Scratch

, , , . Con , PnR .

Scratch (. 90). , , . , [3] Vivado ECO Flow → Scratch Pad → Scratch Pad Pop-up Menu.











90 – Scratch



6.



. , , . , LD0 , BTN0 . , , .











6.1。



, ibtn, , F4. , , .











91 –



, ibtn. ibtn LD1 ( obtn_led). ibtn, Expand Cone To Flops or I/Os. Regenerate Layout (. 92)











92 – ,



«» (. 93).











93 – «» ibtn obtn_led



, , , . system_i . obtn_led system_i I obtn_led_OBUF_inst, Edit Disconnect Net.











94 –



Regenerate Layout , (. 95)











95 –



Scratch Pad, .

. Edit Create Cell, invertor, INV OK (. 96)















96 –



INV (. 97)











97 –



, LUT. , LUT , , , Cell Properties, Truth Table Edit LUT Equation
 (. 98).















98 – LUT



. , Scratch Pad I0 invertor obtn_led system_i.











99 –



. Edit Create Net. btn_led, (. 100)











100 –



. Regenerate Layout (. 101)











101 –



O invertor I obtn_led_OBUF_inst. -, . btn_led_o. . 102











102 –









DCP , (. 103).











103 – ECO



配眮ずトレヌスを実行しなかったため、これを瀺す゚ラヌが倚数衚瀺されたす。



それでは、ファヌムりェアファむルを少し生成しおみお、倉曎が正しく行われたかどうかを確認したしょう。これを行うには、実行セクションの手順を順番に実行する必芁がありたす。すべおが明確でオプションがないわけではありたせん。デフォルトではすべおが残っおいたす図104。



[デザむンの配眮]をクリックし、オプションを入力せずに[OK]をクリックしたす。操䜜の完了を埅っおから、[ルヌト蚭蚈]をクリックし、衚瀺されるりィンドりで[むンクリメンタルルヌト]を遞択しお、[OK]をクリックしたす。



その埌、Generate Bitstreamをクリックしおビットファむルを生成したす。ファむルパスフィヌルドにedited_dcpフォルダが指定されおいるこずを確認しおください。その埌、ハヌドりェアマネヌゞャヌを開いおFPGAをフラッシュしたす。











図104-.bitファヌムりェアファむルを取埗する手順のシヌケンス



, Vivado. , Vivado Hardware Manager (. 105). , .bit ILA .ltx











105 – Hardware Manager Vivado









, .67-69 . , , edited_dcp (. 106).











106 –









, LD0 , BTN0 .











6.2。 /



ECO . brom_reader, , , . BROM INIT, .

Netlist brom_reader (.107).











107 – brom_reader



, , Cell Properties (. 108). Properties INIT.











図108-遞択したブロックメモリのINITプロパティ





ご芧のずおり、ブロックメモリの初期化倀はINITプロパティに保存されたす。倚くのプロパティの䞭で、興味があるのはINIT_00ずINIT_01のみです。これら2぀のプロパティの内容、HEXからASCIIぞのコンバヌタヌ[15]をコピヌするず、図に芋られる碑文が埗られたす。77、ただし逆の順序で蚘述されおいたす図109図109-ASCII圢匏のINITプロパティの内容









コンポヌネントプロパティを倉曎するには、鉛筆アむコンをクリックしお新しい倀を入力するか、Tclコン゜ヌルずset_ptopertyコマンドを䜿甚したす。

図110に埓っおプロパティ倀を眮き換え、結果を保存したす。











INIT_00256'h0061006700700066002E00770077007700200020002000200020002000200020









INIT_01: 256'h0020002000200020002000750072002E0073006D00650074007300790073002D











110 – INIT ASCII



, . Generate Bitstream . .ltx, (. 111).











111 –



Hardware manager FPGA .bit .ltx (.112). , edit_dcp.











112 –



, . 73-75 ( hw_ila_2, ASCII ). , . 113.











113 –



, , , , . , , , , MMCM PLL . , , , , (Report Timing Summary ..).











6.3. ILA



, ECO , . , , « ». , gnd vcc.



, , , .



ECO, , ; .









: , « », : . : , , Disconnect Net . «DONT_TOUCH» ( «unrote») – Disconnect Net . .









, , . , brom_reader. . , (. 114). cnt, , 5.











114 –











Replace Debug Probes. 31, 5 , ila_1, Edit Probes (. 115). ila, . , .











115 –



, *cnt[*]. , . , 5 , 5 . contains match tcl . Tcl , .











116 –



«0», Vivado , gnd const0. , Edit Probes (.117).











117 – ila_1



*const0 , , (. 118). !!! Debug Hub (dbg_hub), Vivado , . IP, , uartlite.











118 –



ila_1 . 119. , . , DRC.











119 – ila_1



OK , , DONT_TOUCH , ila_1. , . , , . , Unset Property DCP.

, , (.120). 1 . , !











120 –









Hardware Manger , .bit .ltx .

hw_ila_2 4 : cnt const0. cnt hex unsigned decimal ( . 75) , . , cnt 0 31 1 (.121).











121 – cnt ila_1



, .









6.4. /



, rx tx uart - Hello World . , ECO , . .



. , , cell, . , .



.



uart_rtl_0_rxd, . unplace cell (. 122). , , .











122 –



. uart_rx, Create Port . 123











123 –



A9 , Vivado , A9. (. 124)











124 –



. Create Cell, ibuf_rx (. 125)











125 –









. . , . uart_rx Create Net. rx_net.











126 –



I Connect Net. (. 127)











127 –



, system_i. O uart_rtl_0_rxd, system_i Create Net











128 –



.

uart_rtl_0_txd, . Unplace cell, , (. 122). , , .











129 –



uart_tx, Create Port, Output LVCMOS33 (. 130)













130 –









tx_net, uart_tx. uart_tx Create Net











131 – tx_net



tx_obuf, Create Cell OBUF (. 132)











132 –



O , uart_tx Connect Net.











133 –



system_i. I uart_rtl_0_txd (. 134).











134 –



. (. 135).











135 –



Hardware Manager . SDK (. . 70). , Hello World: cycle (. 136).











136 – Hello World SDK Terminal



7.



, . , , , .. , , .. HDL , , «-» . 1. , , . , . , IP Integrator – IP RTL.



è¡š1.さたざたなモヌドで最終ファヌムりェアファむルを取埗するのにかかる時間の比范分析。











比范分析を芁玄するず、もう䞀床私はそれが非垞に衚面的であるず蚀いたす。FPGAは耇雑なシステムであり、デザむンルヌトのこの段階たたはその段階は非垞に倉化する可胜性があるこずを完党に理解しおいたす。それにも関わらず、ECOは合成を必芁ずせず、特にクリスタルトレヌスを保存しおコンポヌネントの内容のみを倉曎したい堎合、プロゞェクトぞの小さな倉曎は非垞に高速です。



8.結論



実際にECOモヌドを適甚したこずがありたすか はい , , , . ECO; , Tcl-, . , ECO – , LogicAnalyser (ChipScope) ILA ( ) . , , - , .

ECO Flow , , : Vivado ECO Flow.

. 頑匵っお









9.



  1. , LUT, , .
  2. ECO. Tcl Vivado [9].
  3. AXI-lIte, GPIO. ECO , ila_1 uartlite, gpio.
  4. * , MMCM, 100. 50 . , . , , .
  5. * Tcl , ECO. , , , ..
  6. ** , brom_reader, 32 ASCII, /




1. Vivado Xilinx

2. Arty Board Digilent

3. UG904 Vivado Design Suite User Guide: Implementation

4. UG908 Vivado Design Suite User Guide Programming and Debugging

5. UG986 Vivado Design Suite Tutorial: Implementation

6. Wiki : ECO

7. UG949 UltraFast Design Methodology Guide

8. UG892 Vivado Design Suite User Guide Design Flows Overview

9. UG835 Vivado Design Suite Tcl Command Reference Guide

10. UG894 Using Tcl Scripting

11. UG901 Vivado Design Suiteナヌザヌガむド合成

12. Artyリファレンスマニュアル

13. UG908プログラミングおよびデバッグ

14. UG1037 Vivado Design Suite AXIリファレンスガむド

15. Hex-to-ASCII

16. マニュアル MicroBlaze゜フトりェアプロセッサに基づいたプロセッサシステムの開発ザむリンクスVivado IDE / HLx









付録A. flash_ledモゞュヌルのリスト



非衚瀺のテキスト
 library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity flash_led is Port ( iclk : in STD_LOGIC; oled : out STD_LOGIC); end flash_led; architecture rtl of flash_led is signal cnt : natural range 0 to 100_000_001 := 0; signal led : std_logic := '0'; begin process(iclk) begin if rising_edge(iclk) then if cnt = 100_000_000 then cnt <= 0; else cnt <= cnt + 1; end if; if cnt < 50_000_000 then led <= '0'; else led <= '1'; end if; end if; end process; oled <= led; end rtl;
      
      







付録B. brom_readerモゞュヌルのリスト



非衚瀺のテキスト
 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity brom_reader is Port ( iclk : in STD_LOGIC; odout : out std_logic_vector(7 downto 0) ); end brom_reader; architecture rtl of brom_reader is alias slv is std_logic_vector; type rom_type is array (0 to 31) of natural; signal rom : rom_type := ( 32 , 32, 32, 32, 97, 117, 116, 104, 111, 114, 58, 32, 75, 101, 105, 115, 78 , 49, 51, 32, 32, 32, 32, 32, 32 , 32, 32, 32, 32, 32, 32, 32 ); signal cnt : natural range 0 to rom'length-1 := 0; signal dout: slv(odout'range) := (others => '0'); attribute RAM_STYLE : string; attribute RAM_STYLE of rom : signal is "BLOCK"; begin process(iclk) begin if rising_edge(iclk) then dout <= slv(to_unsigned(rom(cnt), dout'length)); if cnt = (rom'length - 1) then cnt <= 0; else cnt <= cnt + 1; end if; end if; end process; odout <= dout; end rtl;
      
      







付録B. helloworldプログラムのリスト

非衚瀺のテキスト
 #include "platform.h" #include "xil_printf.h" #include "xparameters.h" #include "xgpio.h" XGpio Gpio; /* The Instance of the GPIO Driver */ #define DELAY 10000000 int main() { init_platform(); int Status; volatile int Delay; int k = 0; /* Initialize the GPIO driver */ Status = XGpio_Initialize(&Gpio, XPAR_GPIO_0_BASEADDR); if (Status != XST_SUCCESS) { xil_printf("Gpio Initialization Failed\r\n"); return XST_FAILURE; } /* Loop forever blinking the LED */ while (1) { /* Set the LED to High */ XGpio_DiscreteWrite(&Gpio, 1, 1); xil_printf("Hello World: cycle %d\n\r", k); k++; /* Wait a small amount of time so the LED is visible */ for (Delay = 0; Delay < DELAY; Delay++){}; /* Clear the LED bit */ XGpio_DiscreteWrite(&Gpio, 1, 0); /* Wait a small amount of time so the LED is visible */ for (Delay = 0; Delay < DELAY; Delay++){}; } cleanup_platform(); return 0; }
      
      









PS: intekus Des333 , ishevchuk , roman-yanalov 91 ( Word), .








All Articles