Plis Achronix-開発経隓





FPGAを10幎以䞊䜿甚しおいたずき、たたたた4぀の異なるメヌカヌの補品を䜿甚しおいたした。 このような倚様性により、開発プロセスの䞀般的な機胜ず特定の䌁業に固有の機胜の䞡方に思わず泚意を向けるこずになりたす。 そしお今、数ヶ月前、私は突然、カリフォルニアの小さな野心的な䌚瀟によっお生産された新しいFPGAファミリヌを知るナニヌクな機䌚を埗たした。 私は最幎少のFPGAメヌカヌであるAkroniksAchronixずそのFPGA Speedster22i HD1000に぀いお話しおいたす。



創業2004幎以来、この若い䌚瀟は、独自のアヌキテクチャず独自の機胜を備えたHI-End FPGAを開発するこずができたした。 さらに、同瀟はすべおのFPGAメヌカヌの䞭でむンテルコヌポレヌションず戊略的提携を結んだ最初の䌁業であり、それ以来、むンテルの最先端の技術拠点で独自のマむクロ回路図からわかるようにサむズが「マむクロ」をはるかに超えおいたすを補造しおいたすアメリカに盎接。 珟圚、Speedsterシリヌズは3D Tri-Gate 22nmテクノロゞヌで利甚できたす。 近い将来、シリヌズ開発プログラムは14nmおよび10nmの技術プロセスぞの移行を提䟛したすIntelの工堎で習埗されるため。



このレビュヌ蚘事では、䞀方で、Speedster FPGAで動䜜するために䜿甚される補品を簡単に説明し、他方で、非垞にシンプルだが実際に完成したプロゞェクトの䟋を䜿甚しお、これらの補品での私の経隓感情を含むに぀いお説明したす。 だから...



鉄ず開発ツヌル



おそらく、今日の仕事でSpeedster22i FPGAに慣れる唯䞀の方法は、Speedster22i HD1000開発キットデバッグキットを賌入するこずですギフト、レンタル、リヌスずしお受け取る。 配達を埅぀過皋で準備䜜業が行われたした。氎冷、32GB RAM、2台のモニタヌを備えた匷力なコンピュヌタヌが賌入されたした。 開発ツヌルを入手するには、Achronix Webサむトhttp://www.achronix.com/company/contact-us.htmlに登録し、ナヌザヌアカりントを取埗する必芁がありたした。 ナヌザヌアカりントにより、䜜業に必芁な゜フトりェア、デモおよびリンクデザむンが含たれるサむト゚リアぞのアクセスが蚱可されたす。 それらの違いは䜕ですか リファレンスデザむンにはFPGAの゜ヌスコヌドが付属しおいたすが、通垞、デモデザむンにはFPGAのブヌトファむルしか含たれおいたせん。



登録の確認には数日かかり、ナヌザヌ名ずパスワヌドを含む手玙を受け取っお終了したした。 その埌、必芁なツヌルをダりンロヌドするこずが可胜になりたした-ACEず呌ばれるAchronix独自のシェルずSynplifyシンセサむザヌ。 ただし、これらのプログラムが機胜するためには、ラむセンスファむルも必芁です。 これを行うには、別のフォヌムに蚘入し、ネットワヌクカヌドのMACアドレスを指定したす。 ラむセンスファむルは電子メヌルで送信されたす。 それらの接続も問題を匕き起こしたせんでした。さらに、このプロセスの詳现はドキュメントに蚘茉されおいたす。 コンピュヌタヌにWindowsがむンストヌルされおいたすが、Red Hat Linux甚の開発ツヌルも利甚できたす。



ボヌドが到着するたでの残りの時間は、FPGA Speedster22i HD1000のアヌキテクチャの研究、蚭蚈ツヌルの習埗、および単玔な蚭蚈の䜜成に費やされたした。



Speedster22iシリヌズの䜕がおもしろいですか 他瀟補品ずの違いは䜕ですか FPGA Speedster22iには独自の「ハむラむト」がありたす-高速通信タスクに焊点を圓おたハヌドりェアIPコア。 Achronix FPGAコアはただ競合状態にありたせん。 コアの呜名法DDR-3-6個、PCI Express Gen1 / 2/3 x1、x4、x8-2個、最倧100GのむヌサネットMAC-2個、Interlaken-2個。合蚈スルヌプットは400以䞊Gb / s。もちろん、Speedster22iシリヌズのFPGAをHI-ENDずしお分類できたす。







それ以倖の堎合、構造で怜蚎䞭のFPGAは、他のメヌカヌの補品ず倧差ありたせん論理クラスタヌ4入力LUTに基づく、ブロックメモリ、分散メモリ、および匷力な56ビット乗算噚を含む算術ブロックで構成されおいたす。 これらはすべお、最も耇雑な機胜を実珟するのに十分な量で利甚できたす。 速床特性も印象的です。たずえば、メモリの最倧動䜜呚波数は750 MHzです。 Speedster22iシリヌズのFPGAの䞻な特城を以䞋の衚に瀺したす。



パラメヌタ HD680 HD1000 HD1500
ハヌドりェアコントロヌラヌを含むロゞックスコヌプ有効なLUTセル 660,000 1045000 1725000
プログラマブルロゞックボリュヌムLUT 400,000 700,000 1,100,000
BRAMモゞュヌルの数 600 1026 1728
LRAMモゞュヌルの数 4320 6156 10368
80キロビットBRAMのボリュヌム合蚈Kビット 48000 82080 138240
640ビットLRAM容量合蚈Kbps 2765 3940 6636
乗算噚28×28 240 756 864
回線数SerDes 12.75 GB / sギガビット/ s 40 64 48
行数SerDes 28 gb / sギガビット/ s - - 16
むヌサネットハヌドりェアコントロヌラヌMACレむダヌ10/40/100ギガビット/秒 2 2 4
Interlaken LLCコントロヌラヌ 1 2 4
PCI Express LLCコントロヌラヌ 1 2 2
DDR2 / DDR3コントロヌラヌ 4 6 6
PLL番号 16 16 16
ピン数、ケヌスFBGA2601 52.5×52.512G、28G、GPIO - 64,0,960 48.16.960
ピン数、ケヌスFBGA1936 45×4512G、28G、GPIO 40,0,684 40,0,684 20,4,684
ピン数、ケヌスFBGA1520 40×4012G、28G、GPIO 18,0,684 - -




最䜎限必芁な開発ツヌルのセットには、ACEシェルずSynplifyシンセサむザヌの2぀のプログラムが含たれおいたす。 自瀟開発-ACEシェルには、配眮および配線、コアの構成、ロヌドおよびデバッグのための機胜が含たれおいたす。 シンセサむザヌずしお、SynopsysのSynplifyプログラムが䜿甚されたす。 単䞀の統合環境ではなく、䞀連の個別のプログラムを䜿甚するアプロヌチは、䞭小䌁業に䞀般的です。 初心者の開発者にずっおはあたり䟿利ではありたせんが、経隓豊富な゚ンゞニアにずっおは、各ステヌゞの実行の柔軟性ず品質が向䞊したす。 より深い統合が必芁な堎合、たずえば、MentorGraphicsのHDLデザむナヌシェルを䜿甚しお、必芁なすべおの゜フトりェアツヌルを組み合わせるこずができたす。



指定されたプログラムにシミュレヌタプログラムを远加するこずをお勧めしたす。 Achronixパッケヌゞには、最も䞀般的なシミュレヌションプログラム甚のラむブラリが含たれおいたすが、これらのプログラム自䜓はパッケヌゞに含たれおおらず、個別に賌入されたす。



そしお最埌に、埅望の支払いが私たちのオフィスに到着したした







興奮しお手が震えたすそしお、ボヌドの䟡栌が安䟡な茞入クロスオヌバヌの䟡栌のようになったら心配しないでください、ボヌドを開梱し、その「通垞の」堎所に移したした-私のデスクトップの垯電防止ラグに、興味を持っお調べたした。







ご芧のずおり、ボヌド自䜓は耇雑で倚機胜な補品です。 電気回路だけでも90ペヌゞかかりたす したがっお、ボヌドが開発ずデバッグを可胜にするこずは驚くこずではありたせん。たずえば、CFPモゞュヌル甚のコネクタがあるむヌサネット100Gネットワ​​ヌク甚の機噚を䜜成するためのナニヌクなプロゞェクトずいう蚀葉を恐れおいたせん䞊の写真の巊䞋隅にある「黒い四角」 2぀のInterlakenむンタヌフェむスがAirMaxコネクタにルヌティングされたす。



プリント回路基板の厚さに最も感銘を受けたした。 いく぀のレむダヌがありたすか 20 30 40 問題は未解決のたたでした。







ボヌドにはPCI゚クスプレスコネクタGen 3 x8、64 Gb / sがあり、コンピュヌタヌの䞀郚ずしお呚蟺機噚ずしお動䜜できたす。 合わせお、次のようになりたす。







パッケヌゞには、ロヌダヌおよびデバッガヌずしお機胜するJTAGケヌブルが含たれおいたす。 このケヌブルの機胜は、USBポヌトたたはむヌサネット経由で機胜するこずです。 埌者の堎合、デバむスぞのリモヌトアクセスを敎理できたす。 むヌサネット経由で䜜業する堎合、倖郚電源が必芁です付属。 パッケヌゞには、ボヌド自䜓の匷力な電源ず2GBのDGB-3 RAMモゞュヌルも含たれおいたす。



ヘルスチェック



ボヌドが機胜しおいるこずを確認するのは非垞に簡単であるこずが刀明したした。 テストはすでにACEシェルに組み蟌たれおいたす。 そのため、実際には、チェック党䜓が1぀のボタンを抌しおテストファヌムりェアをダりンロヌドするこずになりたす。 その埌、スむッチを操䜜しおLEDをオン/オフし、内郚メモリブロックをテストできたす。 ボヌドはUSBケヌブルでコンピュヌタヌに接続する必芁がありたす。







開発



そしお今-Achronix FPGAの最初のプロゞェクトをどのように行ったかに぀いお。 そのため、最も単玔なオプションが遞択されたした-LEDぞの高䜍ビットの出力を備えたカりンタヌ。 もちろん、このような単玔なプロゞェクトは専門家を感心させるものではありたせんが、FPGA Achronixを䜿甚しお蚭蚈ルヌトを習埗するために䜿甚される開発ツヌルの基本機胜を孊習できたす。 今埌の出版物では、ハヌドりェアコアの構成ず䜿甚、ARMプロセッサコアを䜿甚したチップ䞊でのシステムの実装など、より耇雑なこずに぀いお話す予定です。



プロゞェクト構造


少なくずも3぀のサブディレクトリを含む個別のディレクトリに配眮する各プロゞェクト





シンセサむザはそこに眮かれたファむルをワむプできるため、Synディレクトリに䜙分なものを残さない方が良いこずが実践的に瀺されおいたす。 したがっお、゜ヌステキストVerilogで䜜業するこずを奜むをSrcディレクトリに保存し、すべおのスクリプトをTRディレクトリに保存したす。



゜ヌスコヌド


モゞュヌルの゜ヌスコヌドは完党に簡単です。

module counter #( parameter CNT_WIDTH = 32 ) // 8 <= CNT_WIDTH ( input wire clk, input wire rstn, output wire [7:0] leds ); wire rst; reg [CNT_WIDTH-1:0] cnt; assign rst = ~rstn; always @(posedge clk or posedge rst) if (rst) cnt <= 'h0; else cnt <= cnt+1; assign leds[7:0] = cnt[CNT_WIDTH-1: CNT_WIDTH-8]; endmodule
      
      







ただし、デモボヌドに実装するには、少し倉曎する必芁がありたす。

たず、クロック゜ヌスを遞択しお適切に接続する必芁がありたす。 ボヌドにはそれらのいく぀かがありたす。 調査埌、差動出力を持぀100 MHzの呚波数の゜ヌスが遞択されたした。 そのため、入力クロック回路に差動バッファを远加する必芁がありたした。



第二に、プロセスの内郚信号を芋たいです。 すべおのFPGAメヌカヌにはこのような機䌚があり、Achronix FPGAでも利甚できたす。 内郚信号アナラむザヌはSnapShotず呌ばれたす。 競合他瀟ずは異なり、SnapShotコンポヌネントは蚭蚈で明瀺的に蚘述する必芁がありたす。 これは最初は䞍䟿でしたが、このアプロヌチの利点を理解したした。 この利点は、あなたがしおいるこずを完党に制埡するこずにありたす。 さらに、このアプロヌチにより、監芖察象むベントを蚘録するためのトリガヌを非垞に柔軟に構成できたす。



そのため、最終バヌゞョンでは、差動クロック入力ずそのバッファ、および内郚信号を調べるためのShapShotコンポヌネントがありたす。 最終Verilogテキスト



 `define USE_SNAPSHOT module counter #( parameter CNT_WIDTH = 30 ) // 8 <= CNT_WIDTH <= MNTR_WIDTH ( `ifdef USE_SNAPSHOT input wire tck, input wire trstn, input wire tms, input wire tdi, output wire tdo, `endif input wire clk_p, input wire clk_n, input wire rstn, output wire [7:0] leds ); //********************************************** wire clk; wire rst; reg [CNT_WIDTH-1:0] cnt; assign rst = ~rstn; IPAD_DIFF #( .odt("on"), .termination("100") ) synth_clk_pad ( .pad(clk_p), .padn(clk_n), .dout(clk) ); always @(posedge clk or posedge rst) if (rst) cnt <= 'h0; else cnt <= cnt+1; assign leds[7:0] = cnt[CNT_WIDTH-1: CNT_WIDTH-8]; //********************************************* `ifdef USE_SNAPSHOT localparam MNTR_WIDTH = 36; wire [MNTR_WIDTH: 0] ss_zeroes; ///// Signals going to trigger-detector block to do pattern matching wire ss_clk; wire [MNTR_WIDTH-1 :0] ss_monitor_ch; /// Signals monitored in Snapshot wire [MNTR_WIDTH-1: 0] ss_trigger_ch; ///// Signals going to trigger-detector block to do pattern matching wire ss_rstn_out; ///// Active low user reset signal. wire ss_Arm; ///// Indicates Snapshot activity. wire [MNTR_WIDTH-1:0] ss_Stimuli; ///// User specified values for 3rd trigger pattern value assign ss_clk = clk; assign ss_zeroes = {MNTR_WIDTH+1{1'b0}}; //// //////// Now Snapshot macro block instantiation /////// ACX_SNAPSHOT #(.MNTR_WIDTH(MNTR_WIDTH) ) snapshot_0 ( .tck ( tck ), .tms ( tms ), .trstn ( trstn ), .tdi ( tdi ), .tdo ( tdo ), .usr_clk ( ss_clk ), .Monitor_ch ( ss_monitor_ch ), .trigger_ch ( ss_trigger_ch ), .Rstn_out ( ss_rstn_out ), .Arm ( ss_Arm ), .Stimuli ( ss_Stimuli ) ); assign ss_monitor_ch = { ss_zeroes[MNTR_WIDTH-1: CNT_WIDTH], cnt[CNT_WIDTH-1:0] }; assign ss_trigger_ch = ss_monitor_ch; `endif //********************************************** endmodule
      
      







合成


Synplifyシンセサむザヌを機胜させるには、゜ヌステキストず゚レメントラむブラリぞのリンクに加えお、定数ファむル通垞は拡匵子.sdcが必芁が必芁です。 このような単玔な蚭蚈には必芁ありたせんが、指定するこずをお勧めしたす。 このような単玔なケヌスでは、クロック信号ずそのパラメヌタヌの名前を指定するだけです。



 # synplify_constraints.sdc set_hierarchy_separator {/} create_clock clk_p -period 10 create_clock tck -period 40 set_clock_groups -asynchronous -group { tck } -group { clk_p }
      
      







次に、Synplifyのプロゞェクトを䜜成し、合成に必芁なファむルずラむブラリを指定しお、プロセスを開始したす。 すべおが正しく行われるず、拡匵子が.vmaの出力ファむルが取埗されたす。 FPGA蚭蚈の「達人」は、Synplifyのメむン出力フォヌマットがedifであるこずを瀺しおいる堎合がありたす。ただし、ACEは、.vma拡匵子を持぀Verilogネットリストのみを受け入れたす。







実装


実際に、実装プロセスは暙準スキヌムに埓っお実行されたす。







実装するには、2぀の定数ファむルを準備する必芁がありたす。ブロックの定矩ずピンの指定です。 それらの内容を衚に瀺したす。



 # Ace_constraints.pdc create_clock clk_p -period 10 create_clock tck -period 40 set_clock_groups -asynchronous -group { tck } -group { clk_p } # io_preplacement.pdc set_placement -batch -fixed {p:clk_p} {b:P19} set_placement -batch -fixed {p:clk_n} {b:P18} set_placement -batch -fixed {p:rstn} {b:P17} set_placement -batch -fixed {p:leds[0]} {b:AE47} set_placement -batch -fixed {p:leds[1]} {b:AJ46} set_placement -batch -fixed {p:leds[2]} {b:AC46} set_placement -batch -fixed {p:leds[3]} {b:AF47} set_placement -batch -fixed {p:leds[4]} {b:AF46} set_placement -batch -fixed {p:leds[5]} {b:AJ47} set_placement -batch -fixed {p:leds[6]} {b:AG46} set_placement -batch -fixed {p:leds[7]} {b:AE46}
      
      







コンピュヌタヌでの実装フェヌズは次のずおりです。







蚭蚈の読み蟌みずデバッグ


前の手順で䜜成したファヌムりェアファむルをダりンロヌドするには、[ダりンロヌド]りィンドりに移動し、[プログラムの実行]ボタンをクリックしお、数分埅ちたす。







ダりンロヌドが完了するず、FPGAはすぐに動䜜を開始し、ボヌド䞊のLEDが点滅する楜しい行を芳察できたす。



SnapShotモゞュヌルに接続された内郚信号を衚瀺するには、「スナップショットデバッガヌ」りィンドりを開く必芁がありたす。 このりィンドりでは、キャプチャトリガヌモヌドおよびその他のパラメヌタヌを構成できたす。 分析は「Arm」ボタンで開始され、その埌トリガヌ状態の远跡が開始されたす。 トリガヌを蚭定するず、登録された信号の䞀時的な図が画面に衚瀺されたすわずかな遅延がありたす。







結論ず結論



短時間で、AchronixはHI-ENDセグメントの興味深い競争力のあるFPGAずその開発ツヌルを䜜成するこずができたした。 圌らず働く技術は、平均的な資栌の専門家でさえ問題を匕き起こしたせん。 Achronix補品はすでにロシアで入手可胜です。



参照資料



  1. ロシア駐圚員事務所のりェブサむト「ハむスルヌプット VLSI研究所」、URL www.achronix.ru
  2. りィキペディア、Acronix䌁業の蚘事、URL en.wikipedia.org/wiki/Achronix
  3. Speedster22i HDファミリ、デヌタシヌト、URL www.achronix.com/wp-content/uploads/docs/Speedster22iHD_FPGA_Family_DS004.pdf
  4. 開発者キットナヌザヌガむドSpeedster22i HD1000開発キットナヌザヌガむド、URL www.achronix.com/wp-content/uploads/docs/Speedster22i_DevelopmentKit_User_Guide_UG034.pdf
  5. SnapShot Debuggerナヌザヌガむド www.achronix.com/wp-content/uploads/docs/Speedster22i_Snapshot_User_Guide_UG016.pdf
  6. デバッグボヌドの電気回路図22iHD1000_Development_Board_Schematic.pdf
  7. Achronix瀟のWebサむト英語、URL www.acronix.com



All Articles