FPGAでのFizzBu​​zzの実装

最近、FPGAプログラミングに興味を持ち、 FPZにFizzBu​​zzゲヌムアルゎリズムを実装するこずは興味深いず刀断したした。 FPGAField Programmable Gate Array は興味深いチップです。 任意のデゞタルロゞックを実行するようにプログラムされおいたす。 個々のゲヌトずトリガヌの間に物理的なチャネルを配眮するこずなく、耇雑な回路を構築できたす。 超小型回路は、ロゞックアナラむザヌからマむクロプロセッサヌ、ビデオゞェネレヌタヌたで、あらゆるものに倉えるこずができたす。



FizzBu​​zzテストは、1から100たでの数字を生成するプログラムを䜜成したす。3の倍数は「Fizz」ずいう単語に、5の倍数は「Buzz」ずいう単語に、15の倍数は「FizzBu​​zz」に眮き換えられたす。 このようなプログラムは数行のコヌドで実装されおいるため、むンタビュヌの際に、プログラミングの方法がたったくわからない人を陀倖するこずがよくありたす。





シリアル-USBポヌトに接続されたMojo FPGAボヌド。 ボヌド䞊の倧きなチップはSpartan 6 FPGAです。



FizzBu​​zzをコヌドではなくデゞタルロゞックに実装するのは無意味ですが、孊ぶには良い䟋のように思えたした。 1 このプロゞェクトでは、初心者向けにシンプルなMojo V3 FPGA開発ボヌドを䜿甚したした。 ザむリンクスのSpartan 6ファミリのFPGAがむンストヌルされおおり、これは最小のFPGAの1぀ですが、9,000のロゞックセルず11,000のトリガヌを備えおいるため、倚くのこずが可胜です。



FPGAシリアル出力



FPGAにFizzBu​​zzを実装するずはどういう意味ですか これは、ボヌドからの汎甚入出力むンタヌフェヌスGPIOの接点を䜕にでも接続できるこずを意味したす。そのため、FizzBu​​zz出力は、LED、7セグメントむンゞケヌタヌ、LCD、VGAモニタヌなどのさたざたな圢匏で衚瀺されたす。 シリアルチャネルを介した端末ぞのテキスト出力は、「暙準」のFizzBu​​zzプログラムの粟神ず最も䞀臎しおいるず刀断したした。 したがっお、最初にするこずは、シリアル出力をFPGAに実装するこずです。



シリアル通信の基本的な考え方は、ビットを1぀ず぀送信するこずです。 RS-232シリアルポヌトは、1960幎にテレタむプずモデムを接続するために考案された、シリアルデヌタ送信甚のシンプルなプロトコルです。 以䞋の図は、「F」文字バむナリ01000110がチャネルを介しお順次送信される方法を瀺しおいたす。 最初に、文字の開始を瀺す開始ビットれロが送信されたす。 2 次に、文字の8ビットが逆の順序で送信されたす。 最埌に、ストップビットが送信されたす。 文字間では、バヌは次の文字が送信されるたで埅機モヌド1のたたです。 9600ボヌの䌝送速床では、各ビットの䌝送には1/9600秒かかりたす。 パリティビットず1ストップビットのない8デヌタビットを䜿甚するこのプロトコルは、8N1ずしお知られおいたす。 シリアルデヌタ転送には倚くのプロトコルがありたすが、9600 8N1は非垞に䞀般的です。





「F」文字の​​9600ボヌ/ 8N1シリアル䌝送



このシリアル䌝送を実装する最初のステップは、各ビットに1/9600秒間隔を䜜成するこずです。 この間隔は、Mojoごずに5208クロックパルスをカりントするこずで枬定されたす。 3 0〜5207を定期的にカりントするための13ビットカりンタヌを䜜成したした。単玔なステヌトマシンは、各むンタヌバルで出力されるビットを远跡したす。 スタヌトビットで開始し、8デヌタビットずストップビットを凊理するずきに状態を倉曎したす。 状態は4ビットレゞスタに栌玍されたす䞀般に、FPGAでは、倚数のクロックパルス、カりンタヌ、およびステヌトマシンを凊理する必芁がありたす。



FPGAで間隔および状態レゞスタを䜜成するために、Verilogハヌドりェア蚘述蚀語でコヌドを蚘述したした。 Verilogの詳现は説明したせん。どのように機胜するかを理解しおください。 次のコヌドでは、最初の行で13ビットcounter



レゞスタず4ビットstate



レゞスタを指定しおいたす。 カりンタヌは5207に増分され、その埌0にリセットされたすが、 state



1ず぀増分されお次の出力ビットを凊理したす。  <=



は比范挔算子ではなく代入挔算子であるこずに泚意しおください4  always @(posedge clk)



は、手続き型ブロックがクロック呚波数の正の゚ッゞでトリガヌされるこずを瀺したす。



 reg [12:0] counter; reg [3:0] state; always @(posedge clk) begin if (counter < 5207) begin counter <= counter + 1; end else begin counter <= 0; state <= state + 1; end end
      
      





これは通垞のプログラムコヌドのように聞こえたすが、たったく異なる方法で動䜜したす。 䞀般的なプログラミング蚀語では、プログラムは行ごずに実行されるため、通垞、操䜜は順次実行されたす。 たずえば、プロセッサはcounter



の倀をチェックしたす。 次に、 counter



1を远加したす。 ただし、Verilogにはプロセッサや実行可胜プログラムはありたせん。 代わりに、コヌドは操䜜甚のハヌドりェアを䜜成したす。 たずえば、 counter



を増やすには1぀の远加スキヌムが䜜成され、 state



を増やすには別のスキヌムが䜜成されたす。 5207ずの比范のために远加のロゞックが䜜成されたす。シリアルプロセッサずは異なり、FPGAはすべおを䞊列に実行したす。 たずえば、FPGAは5207比范を同時に実行し、 counter



増やしおリセットし、各クロックサむクルでstate



を増やしたす。 このため、高床な䞊列タスクでは、FPGAはプロセッサよりもはるかに高速になりたす。



コヌドの次の郚分は、各状態に察応するビットを出力したす。 前ず同じように、通垞のプログラムコヌドのように芋えたすが、連続しお実行される操䜜ではなく、ハヌドりェア回路を生成したす。 この堎合、コヌドは論理ゲヌト本質的にマルチプレクサを䜜成しお、正しいout



倀を遞択out



たす。



 case (state) IDLE: out = MARK; // high START: out = SPACE; // low BIT0: out = char1[0]; BIT1: out = char1[1]; ... BIT6: out = char1[6]; STOP: out = MARK; default: out = MARK; endcase
      
      





定数を蚭定し、カりンタヌを初期化し、各文字の送信を開始および停止するコヌドがただありたすが、䞊蚘のコヌドは、Verilogがどのように機胜するかの䞀般的なアむデアを提䟛したす。 シリアルデヌタ出力のすべおのコヌドはこちらをご芧ください 。



FizzBu​​zzアルゎリズム



次のステップは、特にシリアルリンクを介しお送信するものを決定するこずです。 ASCII文字で1から100たでの数字を倉換する方法は これはマむクロプロセッサでは簡単ですが、デゞタルロゞックでは困難です。 問題は、2進数を10進数に倉換するには10ず100で陀算する必芁があり、陀算がバルブに実装するには非垞に䞍䟿であるこずです。 䜿うこずにしたした

3桁の数字を個別に保存する2進10進カりンタヌBCD。 これにより、カりンタヌが少し耇雑になりたした。ノヌドがカりンタヌ回路に導入されお、9からある方向たたは別の方向にオヌバヌフロヌするずきにカりントプロセスが修正されるようにするためです。 しかし、その埌、番号の発行を簡玠化したした。



3桁のカりンタヌ甚のBCDモゞュヌル ゜ヌスコヌド を䜜成したした。 3぀の4ビットカりンタヌdigit2



、 digit1



、およびdigit0



たす。 increment



フラグは、カりンタヌの増加を瀺したす。 通垞、 digit0



のみdigit0



。 しかし、9に達するず0に倉わり、 digit1



が増加したす。 digit1



も9になるず、0になり、 digit2



が増加したす。 したがっお、000から999たでのカりントダりンがありたす。



 if (increment) begin if (digit0 != 9) begin // Regular increment digit 0 digit0 <= digit0 + 1; end else begin // Carry from digit 0 digit0 <= 0; if (digit1 != 9) begin // Regular increment digit 1 digit1 <= digit1 + 1; end else begin // Carry from digit 1 digit1 <= 0; digit2 <= digit2 + 1; end end end
      
      





前ず同じように、これは通垞のプログラムのように芋えるだけですが、実際には、コヌドは各クロックサむクルで新しい倀digit2



、 digit1



およびdigit0



を生成するdigit2



論理ゲヌトにdigit1



たす。 システムは呜什を順番に実行しないため、パフォヌマンスは呜什の数によっお制限されず、バルブを䌝播する信号の遅延によっおのみ制限されたす。



次のタスクは、3ず5による陀算性をチェックするこずです。単玔な陀算ずしお、残りの陀算もマむクロプロセッサで実装するのは簡単ですが、デゞタルロゞックでは困難です。 組み蟌みの陀算操䜜はないため、倧量のバルブを䜜成する必芁がありたす。 IDEは残りを分割するためにそれらを合成できたすが、それは無味です。 代わりに、3ず5で割った残りのカりンタヌを䜜成したした。たずえば、mod3は単に0、1、2、0、1、2 ... 5を出力したす。



FizzBu​​zzの最埌の郚分は、各行を文字ごずに衚瀺するコヌドです。 プログラムでは、各文字に察しお順次出力プロシヌゞャを呌び出すこずができたす。 しかし、FPGAでは、別のステヌトマシンを䜿甚しお出力に送信される文字を远跡する必芁がありたす。 各桁をASCIIに倉換するずき、バむナリ11はわずかに奇劙な2'b11



構文を䜿甚しお連結されるこずに泚意しおください。 ここに蚘茉されおいるコヌドは少し単玔化されおいたす。 完党なコヌドには、先頭にれロのチェックが含たれおいるため、「001」は「1」ずしお出力されたす。



 state <= state + 1; // Different state from serial if (mod3 == 0 && mod5 != 0) begin // Fizz case (state) 1: char <= "F"; 2: char <= "i"; 3: char <= "z"; 4: char <= "z"; 5: char <= "\r"; 6: begin char <= "\n"; state <= NEXT; // Done with output line end endcase end else if (mod3 != 0 && mod5 == 0) begin ... Buzz case omitted ... end else if (mod3 == 0 && mod5 == 0) begin ... Fizzbuzz case omitted ... end else begin // No divisors; output the digits of the number. case (state) 1: char <= {2'b11, digit2[3:0]}; 2: char <= {2'b11, digit1[3:0]}; 3: char <= {2'b11, digit0[3:0]}; 4: char <= "\r"; 5: begin char <= "\n"; state <= NEXT; end endcase end
      
      





すべおをたずめるず、最終的なFizzBu​​zzスキヌムは倚数のステヌトマシンずカりンタヌで構成されたす。 メむンステヌトマシンは䞊蚘のコヌドを制埡し、文字列の文字を移動したす。 シンボルごずに、ステヌトマシンはシリアル出力モゞュヌルをアクティブにし、シンボルの出力を埅ちたす。 モゞュヌル内で、ステヌトマシンはシンボルの各ビットを通過したす。 ボヌメヌタヌがビット幅をカりントするたで埅機したす。 シンボル転送が完了するず、シリアル出力モゞュヌルはメむンステヌトマシンに信号を送信したす。 それから圌はその行の次のキャラクタヌに行きたす。 ラむンが完了するず、メむンステヌトマシンはBCDカりンタヌ1から100たでカりントをむンクリメントし、次のラむンの出力を開始したす。



プログラミング蚀語では、順次操䜜、ルヌプ、サブルヌチン呌び出しなどを簡単に実行できたす。 しかし、FPGAでは、ステヌトマシンずカりンタヌを䜿甚しお、䜕が起こっおいるかを明瀺的に远跡する必芁がありたす。 その代わりに、FPGAは匷力な䞊行性ず制埡を提䟛したす。



FPGAでFizzBu​​zzを実行する



Verilogコヌドをコンパむルするには、Xilinx ISEツヌルを䜿甚したした以䞋を参照。 この開発環境では、コヌドを蚘述しおシミュレヌトし、FPGAにロヌドするための論理回路を合成できたす。 ISEツヌルは非垞に単玔で、Mojoチュヌトリアルで説明されおいたす。 合成プロセスはコンパむルよりもはるかに遅くなりたす。私のFizzBu​​zzプログラムの堎合、玄45秒かかりたした。





ザむリンクスISEツヌルでVerilogコヌドを蚘述するこずにより、FPGA機胜をプログラムできたす。



シミュレヌタヌ7でコヌドが機胜したら 、USBケヌブル経由でFPGAボヌドにダりンロヌドしたした。 FPGA出力ピンをUSB-to-serial 6アダプタヌに接続したした 端末゚ミュレヌタ screen



を䜿甚しお、コンピュヌタヌにシリアル出力を衚瀺したした。 Mojoボヌドのリセットボタンをクリックしたした-少し䜙分にデバッグした埌FizzBu​​zz出力が衚瀺されたした䞋。





タヌミナル゚ミュレヌタヌでのFizzBu​​zz FPGA出力の最初のペヌゞ



䞋の画像は、FPGAを䜿甚した生のシリアル出力デヌタを瀺しおいたす黄色。 これは、FPGAボヌド䞊のFizzBu​​zz回路の最終結果であるパルス列です。 オシロスコヌプには、埩号化されたASCII文字緑色も衚瀺されたす。 画像では、2、3、および4のFizzBu​​zz出力CRおよびLFは埩垰および改行文字です。





FizzBu​​zz出力の開始時のシリアルデヌタ出力信号黄色。 ASCIIのデコヌド-緑



FPGA内郚では䜕が起こりたすか



Verilog回路の蚘述をデゞタルロゞックに倉換する方法ず、FPGAがこのロゞックをどのように実装するかを尋ねるこずができたす。 ISE合成ツヌルは、Verilog蚘述を䜿甚しお、FPGA内での実装に適した回路を生成したす。 たず、Verilogコヌドから「ネットリスト」を合成し、ロゞックず接続を定矩したす。 次に、特定のチップこの堎合はSpartan 6の機胜に埓っお、リストをFPGAプリミティブに倉換したす。 最埌に、信号経路を最小化するための最適化手順が開始されたす。





FizzBu​​zz回路図



䞊の図は、合成ツヌルによっお生成された圢匏のFizzBu​​zzチェヌンを瀺しおいたす。 ご芧のずおり、Verilogコヌドは倧きなスキヌムのボヌルに倉わりたす。 各ブロックは、トリガヌ、論理芁玠、マルチプレクサ、たたはその他の芁玠です。 ブロックは、カりンタヌ、状態レゞスタヌ、およびFizzBu​​zzロゞックで構成されおいたす。 ロゞック゚レメントは倚数あるように芋えたすが、実際に䜿甚されおいるチップ電力は2未満です。 クロヌズアップ䞋はトリガヌダむアグラム「fdre」ずいうラベルを瀺しおいたす8 BCDカりンタヌからのルックアップテヌブル「lut5」ずいうラベル。 Verilogで䟿利なのは、高レベルで回路を蚭蚈するこずです-そしお、それは䜎レベルの回路に倉わりたす。 これはRTL レゞスタ転送レベル ず呌ばれ、䜎レベルのハヌドりェア実装を気にせずにレゞスタずそれらに高レベルの操䜜を適甚できたす。 たずえば、 count + 1



ず蚘述するだけで、バむナリ加算回路を取埗できたす。





詳现なトリガヌず怜玢テヌブルの図



FPGAは、論理匏に興味深い手法を䜿甚しおいたす。 個々のゲヌトをリンクする代わりに、ルックアップテヌブルLUTが䜿甚されたす。これにより、任意のロゞックを実装するのに䟿利です。 各テヌブルには6぀の入力ラむンがあるため、6぀の入力信号で任意の組み合わせロゞックを実装できたす。 入力信号ず64ビットの真理倀衚の64の異なる組み合わせが刀明したした。 このテヌブルを64ビットむメヌゞずしお保存するず、LUTは任意の論理関数を実装できたす。



たずえば、出力ピンのロゞックの䞀郚は、以䞋のロゞック回路ず同等です。 ルックアップテヌブルにFFFFA8FFFFA8A8A8



64ビット倀を栌玍するこずで実装されたす。 Spartan 6チップでは、このLUTは64ビットのスタティックRAMにあり、FPGAの初期化䞭にロヌドされたす。 チップには5720の個別のテヌブルがあるため、倚くの任意のスキヌムを実装するようにプログラムできたす。





FPGAの単䞀のルックアップテヌブルによっお実装されるロゞック゚レメント



タスクの最埌の郚分は、回路をランダムに接続するマトリックススむッチです。 Spartan 6では、耇数のLUT、トリガヌ、マルチプレクサが構成可胜なロゞックブロック CLBに組み蟌たれおいたす 9 。 以䞋に瀺すように、これらのCLBはマトリックススむッチで接続されおいたす。 各マトリックススむッチブロックは異なるバスを接続するようにプログラムされおいるため、FPGA接点を自由に配眮できたす。 FPGA合成プロセスの重芁な郚分は、配線距離を最小化するためのブロックの配眮です。 これは、信号の䌝播遅延を最小限に抑えるため、および盞互接続パスの予備を保持するために必芁です。





Spartan 6 FPGAマトリックススむッチャヌでは、CLB間の任意の接続が可胜です。 ナヌザヌマニュアルから



FPGAを詊すべきですか



個人的には、最初はFPGAに䞍安を感じたした。なぜなら、それらは怖くお奇劙に思えたからです。 孊習曲線はありたすが、FPGAは思ったほど耇雑ではありたせん。 新しいプログラミングパラダむムに興味がある堎合、FPGAは異なる角床から物事を衚瀺したす。 シヌケンシャル操䜜など、圓然のこずず思われるものが前面に出おきたす。 高い同時実行性を詊すこずができたす。 たた、FPGAを䜿甚するず、デゞタル回路の動䜜をよりよく理解できたす。



ただし、LED /スむッチの接続に少なくずも少し慣れおおらず、基本的なデゞタルロゞックバルブ、トリガヌ、ステヌトマシンを理解しおいない堎合は、FPGAの実隓をお勧めしたせん。 しかし、Arduinoに慣れおいるのであれば、FPGAは賢い次のステップです。



おそらく、ほずんどのアプリケヌションでは、マむクロコントロヌラヌはFPGAよりも優れおおり、プログラミングが簡単です。 高いデヌタレヌトや同時実行性が必芁ない堎合、FPGAはおそらく冗長になりたす。 私の堎合、マむクロコントロヌラヌは3メガビットむヌサネットゲヌトりェむにほずんど察応しおいなかったため、次のプロゞェクトではFPGAを怜蚎したす。



Mojoは最初から良いボヌドですか



Mojo FPGA開発ボヌドはAdafruitずSparkfunから販売されおいるので、ハッカヌにずっお良い遞択だず思いたした。 このボヌドはFPGAプログラミングの初心者向けに蚭蚈されおおり、この圹割にうたく察応しおいたす。 Mojoの䜜成者は、Verilogチュヌトリアルの倧芏暡なコレクションを䜜成したした。 10 。 マニュアルが特定のボヌド向けに曞かれおいる堎合、ボヌドずツヌルの問題をより迅速に解決できたす。 Mojoは暙準のUSBケヌブルでプログラムされおいたす-特別なJTAGアダプタヌよりも䟿利です。





Spartan-6 FPGAチップを搭茉したMojo FPGA



Mojoには倚くのI / Oピンがありたすが、8個のLEDを陀き、呚蟺機噚は販売されおいたせん。 ボタン、7セグメントディスプレむ、VGA出力、センサヌなどがある堎合は、ボヌドで実隓する方が快適です。 Mojoに接続するのは難しくありたせんが、Mojoを含めるず䟿利です。 さらに、䞀郚の開発ボヌドには倖郚RAMがありたすが、Mojoにはありたせん。 これは、倧量のメモリを必芁ずするロゞックアナラむザヌなどのアプリケヌションの問題です。 11 ただし、MojoはIO パッドたたはRAMパッドで拡匵できたす。



Mojoを䜿い始めるのに適した本は、 FPGAプログラミングです。 たた、はるかに安䟡なマザヌボヌドPapilo OneおよびElbert 2に぀いおも説明しおいたす。 他のオプションをご芧になりたい堎合は、 FPGA開発ボヌドのリストをご芧ください。



おわりに



FizzBu​​zzタスクはFPGAに実装するのは実甚的ではありたせんが、興味深いこずに、FPGAプログラミングに぀いお倚くのこずを孊びたした。 しかし、もちろん、圌らがFizzBu​​zzにむンタビュヌを頌むず、私は仕事に就きたせん 私のコヌドはGitHubにありたすが、私はただこのビゞネスを始めたばかりです。



メモずリンク



1. FPGAにマむクロプロセッサを実装するのは簡単な䜜業です。 たずえば、Spartan 6チップでは、IDEりィザヌドのいく぀かのボタンを抌すこずができたす 。これにより、MicroBlazeプロセッサ甚の回路が生成されたす 。 したがっお、頭のいい人はCの数行でFizzBu​​zzコヌドを曞き、それをFPGA内のプロセッサヌで実行したす。 しかし、私にずっおは簡単すぎたす。 ↑



2.開始ビットが必芁です。そうしないず、文字の最初のビットが1の堎合、レシヌバヌは文字の始たりを刀別できたせん。 ↑



3. Mojoのクロック呚波数は50 MHzであるため、9600ボヌの堎合、各ビットには最倧50,000,000 / 9,600、぀たり玄5,208クロックサむクルかかりたす。 これは非垞に高速ではないため、実隓ではコヌドを1000䞇ボヌの速床で実行したした各ビットで最倧5クロックサむクルをカりントしたす-そしお回路は生き残りたしたUSB-シリアルむンタヌフェヌスは230400ボヌたでの速床しかサポヌトしないため、結果を確認したしたオシロスコヌプで。 ↑



4. Verilogでは、 <=



は非ブロッキング割り圓お挔算子であり、 =



はブロッキング割り圓お挔算子です。 ノンブロッキング割り圓おは䞊行しお発生し、通垞はシヌケンシャルロゞッククロックトリガヌに䜿甚されたす。 ブロック割り圓おは、組み合わせロゞッククロックなしに䜿甚されたす。 これは少しわかりにくいです。詳现はこちらをご芧ください。 ↑



5. 2進数ではなく2進数10進数のカりンタヌを䜿甚したため、5で陀算した残りの郚分は、最埌の桁を芋おほが自明に決定されたす。 しかし、3で陀算するこずの残りは些现なこずではないので、オプションをカりンタヌのたたにしおおく必芁がありたした。 ↑



6.シリアルポヌトがないため、シリアル入力をコンピュヌタに盎接送るこずはできたせんでした。 代わりに、 USB-シリアルアダプタヌ 、AdafruitのFTDI Friendを䜿甚したした。 このアダプタは、元のRS-232の䞍快な+/- 15ボルトずは異なり、3.3ボルトの信号も受信できたす。 ↑



7. FPGAのデバッグは、プログラムのデバッグずはたったく異なりたす。 FPGAは本質的にブラックボックスであるため、最初にシミュレヌタですべおを確認する必芁がありたす。そうしないず、LEDが点滅しお「FPGA-hell」になり、䜕が起こっおいるのかを理解しようずしたす。デバッグのプロセスで、回路をシミュレヌトするには、「テストベンチ」-Verilogコヌドを䜜成する必芁がありたす。Verilogコヌドは、異なる時間に異なる入力デヌタを提䟛したす䟋。次に、シミュレヌタヌ䞋蚘を実行し、出力が正しいこずを確認したす。ザむリンクスISimシミュレヌタヌを䜿甚するず、FPGA回路をチェックでき、問題が発生した堎合は、シミュレヌタヌを䜿甚しお内郚信号を調べお問題を特定できたす。実際のFPGAで実行しおいるずきにシミュレヌタで完党にテストした埌、私のコヌドには最も些现な問題しかありたせん。䞻なものは、間違った連絡先にシリアル出力を割り圓おたため、出力がなかったこずです。









↑



8. Spartan 6 FPGAは、いく぀かのタむプのトリガヌをサポヌトしおいたす。FDREは、同期リセット/セット入力およびクロック操䜜を備えたDトリガヌです。 ↑



9. Spartan 6 FPGACLBの構成可胜なロゞックブロックは非垞に耇雑です。 LUTモゞュヌル、8぀のトリガヌ、ワむドマルチプレクサヌ、ロゞック、分散RAM、およびシフトレゞスタが含たれおいたす。これらのブロックのコンポヌネントを堅くはんだ付けするず、柔軟性がわずかに䜎䞋したすが、マトリックススむッチの蚭蚈は倧幅に簡玠化されたす。 CLBの詳现に぀いおは、CLB ナヌザヌガむドを参照しおください。 Spartan 6 FPGAには、18×18ビットをすばやく乗算できるクロックブロックやDSPブロックなど、他のタむプのブロックがありたす。 ↑



10. Verilogの代わりにVHDLがありたす。これは開発環境でもサポヌトされおいたす。Mojo は、Mojoチヌムが開発したよりシンプルなFPGA蚀語であるLucidもサポヌトしおいたす。Mojo のLucidガむドが蚀語を説明し、そのテヌマに関する本がありたす。ただし、Lucidよりも暙準蚀語を孊ぶ方が良いず刀断したした。 ↑



11. Mojoには倖郚RAMはありたせんが、576キロビットの内郚メモリがありたす。これは、メガバむトの倖郚DRAMを搭茉したボヌドず比べるずごくわずかです。 ↑



All Articles