VLSIたたはFPGAチップのボリュヌム内の呚蟺ナニットず盞互䜜甚するための同期システムむンタヌフェむス。 STI 1.0

この蚘事では、VLSIチップ内の機胜ブロックの盞互䜜甚の構成、぀たり、プロセッサヌコア、DMAコントロヌラヌ、システムバスブリッゞず呚蟺ブロックGPIO、SPI、I2C、UARTコントロヌラヌ、タむマヌ、パルス幅倉調噚-PWMを提案しおいたす。 氎晶のリストされたブロックの盞互䜜甚を実装するロヌカルシステムむンタヌフェむスである、シンプルな゚グれキュヌタのゞャンクションの䞀連の信号ずむンタヌフェむスプロトコルが考慮されたす。 説明したむンタヌフェむスをサポヌトするGPIOコントロヌラヌずレゞスタファむルの合成モデルの䟋を瀺したす。



半導䜓産業は、「System on Crystal」レベルの超小型回路の集積床を達成した暙準0.18ÎŒm以䞋の技術プロセスを習埗しおきたため、このような超小型回路に実装された機胜ブロックの内郚ゞョむントに぀いお倚くの仕様が登堎したした。 ほずんどの堎合、これらのゞョむントは、AMBA APB、AHB、AXI、りィッシュボヌン、OCP [1、2、3、4、5、6]などの同期システムバスで衚されたす。 バスずは関係のない元のトポロゞも提案されたした。たずえば、クリスタルネットワヌク-NOCNetworks-On-Chip[7]です。



この出版物の䞻題領域は、VLSIたたはFPGAチップの境界を超えるこずなく、コンピュヌティングデバむスの機胜ブロックの関係の構築に限定されおいたす。 このような接続の特城は、亀換プロトコルに関係する信号線の数に倧きな制限がないこずです。 この機胜は、氎晶ボリュヌムに远加の信号を導入するず、トランゞスタリ゜ヌスを占有する論理回路が倧幅に簡玠化される䞀方、トレヌスリ゜ヌスはそれほど倚くないためです。 たた、RTLレベルモデルで明瀺的に蚘述された䞀郚の信号は、組み合わせロゞックの最適化により、合成回路および技術芁玠のレベルの接続リストで利甚できない堎合があるこずに泚意しおください。



チップ内システムバスの既存の仕様のほずんどは、遅延トランザクション、ブロック転送バヌストモヌド、プリフェッチ可胜な読み取り、トランザクションの䞭止、芁求の再詊行を定矩する高床なプロトコルを䜿甚しおいたす。 この機胜には、すべおのバス゚ヌゞェントからのサポヌトが必芁であり、制埡マシンのスむッチングアルゎリズムが倧幅に耇雑になりたすが、倚くの堎合は䜿甚されたせん。 特に、氎晶の䜎速たたは単玔な呚蟺ブロックぞのアクセスを敎理する堎合は冗長です。



たずえば、Wishboneバス[5]などの仕様では、゚ヌゞェントを盞互に接続する原理は芏制されおおらず、むニシ゚ヌタヌむニシ゚ヌタヌず゚グれキュヌタヌタヌゲットのむンタヌフェヌスのみが定矩されおいたす。



既存のむンタヌフェヌスの䞻な利点は、開発および怜蚌された幅広い機胜ブロックIPコアです。



西掋でずっず前に開発された氎晶バスシステム甚の暙準プロトコルを䜿甚するこずに慣れおいる倚くの開発者が疑問を抱く可胜性がありたす。 最初に、新しい仕様を䜜成する䞻な目暙は、すべおのゞョむント、バスぞの接続に関する゚ヌゞェントの内郚組織、およびバス自䜓のむンフラストラクチャの構築方法を管理する最も単玔な同期システムむンタヌフェむスを蚘述するこずでした。 第二に、元の仕様は英語ではなくロシア語で䜜成する必芁がありたす。



開発目暙を定矩し、サブゞェクト領域を制限した埌、むンタヌフェむス仕様の盎接調査に移りたす。



バヌゞョン1.0の単玔な゚グれキュヌタヌ-Simple Target Interface v.1.0以降-STIのゞャンクションは、1぀のFPGA構成プロゞェクトたたはVLSIチップ以降-プロゞェクトのボリュヌム内のいく぀かの機胜ブロックの接続を提䟛する論理信号ず察話プロトコルのセットです。



プロゞェクト蚘述のRTLモデルでは、STIむンタヌフェむスの数に制限はなく、同時に、互いに独立しお䞊行しお動䜜できたす。 これらの各むンタヌフェむスは、以降STIセグメントず呌ばれたす。



同じSTIセグメント内の盞互䜜甚は1぀のプロゞェクト同期ドメむンに実装されたす。぀たり、1぀のSTIセグメントで接続されたむニシ゚ヌタヌずすべおのアヌティストに単䞀のクロック信号CLKを䜿甚したす。



共通STIセグメントによっお接続されたプロゞェクト機胜ブロックのセットには、1぀および1぀のみの亀換むニシ゚ヌタヌず亀換゚グれキュヌタヌのセットが含たれ、これらはこのセットの残りのブロックによっお衚されたす。



STIむンタラクション方匏は、コンピュヌティングデバむスのプロセッサのアドレススペヌスの1぀にある特定のアドレスで利甚可胜なデヌタワヌドの曞き蟌みず読み取りで構成されたす。 ワヌド幅は、特定のSTIセグメント甚に遞択されたむンタヌフェむス実装のデヌタパスのビット深床によっお決定され、8、16、32、たたは64ビットにするこずができたす。



デヌタの単䞀ワヌドの曞き蟌みたたは読み取りは、STIむンタヌフェヌスを介した亀換サむクル以降、サむクルず呌びたすです。



STIデヌタ亀換は、セグメント内の亀換を開始する唯䞀のブロック以降、むニシ゚ヌタヌず呌びたすから始たりたす。 共通STIセグメントに接続された亀換゚グれキュヌタヌ以䞋、゚グれキュヌタヌず呌ぶのいく぀かのブロックが存圚する堎合がありたす。 実行者の最倧数は、開発者によるVLSIプロゞェクトの実装に䟝存し、このプロトコルによっお芏制されたせん。 ただし、パフォヌマンスの最適化のため、8人を超えるアヌティストを1぀のSTIセグメントに接続するこずはお勧めしたせん。 STIセグメントに2぀以䞊のパフォヌマヌが存圚する堎合、読み取りパスでのデヌタ切り替えず制埡信号の切り替えは、組み合わせ回路を組み合わせお実行されたす。 耇数のアヌティストが、遞択されたアドレススペヌスSTIコマンドに基づいお、たたは合蚈アドレススペヌスの量で遞択されたアドレス範囲に基づいお切り替えられたす。



曞き蟌みサむクルでは、むニシ゚ヌタヌから゚グれキュヌタヌにデヌタが転送され、読み取りサむクルでは、反察方向にデヌタが転送されたす。 同時読み取りおよび曞き蟌み操䜜の耇合サむクル、このSTIプロトコルは蚱可したせん。



アドレス空間の遞択は、STIコマンドS_CMDで゚ンコヌドされたす。 遞択したアドレス空間の量のアドレスは、アドレスパスS_ADDRに沿ったすべおのサむクルでむニシ゚ヌタヌから゚グれキュヌタヌに転送されたす。



アドレスパスの幅は、開発者によるプロゞェクトの実装に䟝存し、このプロトコルによっお芏制されたせん。 䞀郚の機胜ブロックでは、請負業者がシステムアドレス空間の1぀の組み合わせ曞き蟌み甚に1぀のレゞスタヌおよび/たたは読み取り甚に1぀のレゞスタヌを䜿甚する堎合、STIゞャンクションのアドレスパスが存圚しない堎合がありたす。

「システムオンチップ」クラスSoCのVLSIチップの䟋でのSTIむンタヌフェむスの堎所は、図2に瀺すブロック図に瀺されおいたす。 1. STIセグメントに関連する関係は灰色で匷調衚瀺されたす。



画像

図 1. VLSIチップのボリュヌム内のSTIむンタヌフェむスの堎所



STIゞャンクションを䜿甚するず、ロヌカルバスむニシ゚ヌタヌ機胜のサポヌトを必芁ずしないプロゞェクト機胜ブロックを簡単に接続できたす。 STIプロトコルは、各クロックサむクルでデヌタワヌドを読み曞きする機胜を提䟛し、同じビット深床ずクロック呚波数で、完党に機胜するシステムバスのレベルで垯域幅を提䟛したす。



STI゚グれキュヌタヌの参加によるデヌタ配列のブロック転送は、STIセグメントブリッゞの䞀郚ずしお実装されるダむレクトメモリアクセスプロセッサ-DMAによっお、たたはSTIセグメントブリッゞにアクセスするロヌカルシステムバスに接続されたむニシ゚ヌタヌを持぀他のブロックによっお実行できたす。



STIセグメントのボリュヌム内の゚ヌゞェントの通信トポロゞヌを考慮しおください。



STIセグメントの盞互䜜甚は、衚1に瀺す信号セットを䜿甚したす。



è¡š1

8ペヌゞ デヌタパス 16ペヌゞ デヌタパス 32ペヌゞ デヌタパス 64ペヌゞ デヌタパス むニシ゚ヌタヌ 出挔者
S_EX_REQ S_EX_REQ S_EX_REQ S_EX_REQ ク゚リリク゚スト 入力をリク゚スト
S_ADDR [n-10] / S_ADDR_0 S_ADDR [n-11] / S_ADDR_1 S_ADDR [n-12] / S_ADDR_2 S_ADDR [n-13] / S_ADDR_3 アドレス出力 䜏所入力
いや S_NBE [10] S_NBE [30] S_NBE [70] バむト解像床出力 バむト解像床入力
S_CMD [20] S_CMD [20] S_CMD [20] S_CMD [20] コマンドコヌド出力 コマンドコヌド入力
S_D_WR [70] S_D_WR [150] S_D_WR [310] S_D_WR [630] 曞き蟌みデヌタ出力 蚘録甚デヌタ入力
S_EX_ACK S_EX_ACK S_EX_ACK S_EX_ACK 確認ログむン 確認出力
S_D_RD [70] S_D_RD [150] S_D_RD [310] S_D_RD [630] デヌタ入力の読み取り デヌタ出力の読み取り
CLK CLK CLK CLK クロック入力 クロック入力
Rst Rst Rst Rst システムリセット入力 システムリセット入力


STI゚グれキュヌタヌによるハヌドりェア割り蟌み芁求のシグナルには、STIセグメントに関連しないサむドバンド信号を䜿甚できたす。その制埡順序は、各プロゞェクトの開発者によっお制埡されたす。



1぀のSTIセグメントのボリュヌム内の論理信号の接続のトポロゞを図5に瀺したす。 2.この䟋では、2人のパフォヌマヌの切り替え、およびパフォヌマヌずむニシ゚ヌタヌの入力ず出力の構成が瀺されおいたす。 パフォヌマヌの転流は、アドレススペヌスを2぀の等しい郚分に分割するこずによっお行われたす。 したがっお、S_ADDR [n-1]アドレスの高䜍ビットの䜎レベルでは、タヌゲットA゚グれキュヌタヌが遞択され、高レベルでは、タヌゲットBが遞択されたす。 アドレスの組み合わせだけでなく、アドレススペヌスを分離するためのコマンドコヌドも、パフォヌマヌを遞択するロゞックに含めるこずができたす。



画像

図 2. STIセグメントの接続トポロゞ



STIむンタヌフェむスむニシ゚ヌタヌむンタヌフェむスのトポロゞには、次の制限が課されたす。



  1. S_ADDRアドレスの出力には、CLK信号に同期したレゞスタ出力の圢匏の゜ヌスが必芁です。 したがっお、クロック信号の動䜜゚ッゞからのS_ADDRの出力の遅延は、トリガヌT-coの出力遅延Clock-to-Output遅延に等しくなりたす。
  2. むニシ゚ヌタヌ出力信号の残りは、入力信号S_EX_ACKおよびS_D_RDに応答しない組み合わせ回路、たたはレゞスタヌによっお生成できたす。


STIむンタヌフェむス゚グれキュヌタヌむンタヌフェむスのトポロゞには、次の制限が課せられたす。



  1. ルヌプ確認出力S_EX_ACKには、CLK信号によっお同期化されたレゞスタ出力の圢匏の゜ヌスが必芁です。 したがっお、クロック信号の動䜜゚ッゞからの出力遅延S_EX_ACKは、T-coトリガヌの出力遅延Clock-to-Output遅延に等しくなりたす。 曞き蟌み亀換サむクルず読み取り亀換サむクルで埅機サむクルを導入しない実行者の堎合、高レベル定数の圢匏でS_EX_ACK信号を生成するこずができたす。
  2. S_D_RDバスに出力レゞスタがない堎合、デヌタ読み取りパスのマルチプレクサは、゚グれキュヌタのボリュヌム内の内郚レゞスタの出力CLK信号に同期、たたはアドレスバスS_ADDR [n-1k]の入力ビットのサブセットによっお制埡する必芁がありたす。


STIゞャンクションでのむニシ゚ヌタヌおよび゚グれキュヌタヌむンタヌフェむスのトポロゞヌのリストされた芁件は、耇雑な組み合わせルヌプの生成を陀倖する必芁があるために発生したす。



同じSTIセグメント内で耇数のパフォヌマヌを切り替える組み合わせ回路の接続は、S_EX_REQ芁求回路の「AND」論理ゲヌトず、むニシ゚ヌタヌの共通入力ぞのパフォヌマヌ出力のマルチプレクサヌによっお衚されたす。 リンク論理構築の䟋を図に瀺したす。 2。



プロゞェクトの合成モデルでは、組み合わせ論理の最適化ず論理回路を介したレゞスタの転送により、個々のSTIセグメントの特定の論理信号が存圚しない堎合がありたす。 合成結果は、開発者CADが䜿甚する蚭蚈ツヌルで指定されたナヌザヌ蚭定にも䟝存したす。



1぀のSTIセグメントの゚ヌゞェントの盞互䜜甚プロトコルを怜蚎しおください。



システム同期ラむンCLKおよび初期むンストヌルリセットRSTを陀くSTIむンタヌフェむスのすべおのロゞック信号は、クロック信号CLKの動䜜゚ッゞに関連する同期の芁件を満たさなければなりたせん。 このプロトコルでは、䜜業面は昇順であるず想定されたす。この堎合、䜎レベルが高レベルに眮き換えられたす。



信号S_NBEは、珟圚のサむクルで曞き蟌たれたたたは読み取られたアクティブなバむトに関する情報を搬送したす。 8ビットSTIむンタヌフェむスの堎合、この信号は䜿甚されたせん。これは、すべおのサむクルで1バむトしか送信されず、無効にできないためです。 8ビットSTIセグメントの無効なバむトは、ルヌプがないこずです。

16ビットSTIでは、S_NBE信号のビット深床は2ビットです。 䜎レベルS_NBE [0]は、ビットS_D_WR [70]たたはS_D_RD [70]のデヌタの有効性を瀺したす。 䜎レベルS_NBE [1]は、ビットS_D_WR [158]たたはS_D_RD [158]に有効なデヌタが存圚するこずを瀺したす。 S_NBE [x]の高レベルは、察応するビットにデヌタがないこずを瀺したす。 したがっお、これらのバむトを曞き蟌んだり、読み取りず芋なしたりしないでください。



32ビットSTIでは、S_NBE信号のビット深床は4ビットです。 2぀の远加ビットS_NBE [32]は、デヌタバスの䞊半分を制埡したす。 䜎レベルのS_NBE [2]は、ビットS_D_WR [23:16]たたはS_D_RD [23:16]のデヌタの有効性を瀺したす。 䜎レベルS_NBE [3]は、ビットS_D_WR [31:24]たたはS_D_RD [31:24]に有効なデヌタが存圚するこずを瀺したす。 同様に、ビットS_NBE [74]は64ビットむンタヌフェむスの䞊䜍バむトを制埡し、ビット4はバむト[39:32]、ビット5-バむト[47:40]、ビット6-バむト[55:48]を制埡したす。ビット7は䞊䜍バむト[63:56]です。



S_CMD [20]行で、珟圚の亀換サむクルのタむプを決定するコマンドが送信されたす。 STIコマンドを衚2にリストしたす。



è¡š2。

S_CMD [2] S_CMD [1] S_CMD [0] サむクルタむプ
0 0 0 IO曞き蟌み-最終的な゚グれキュヌタヌデヌタレシヌバヌの準備が敎っおいるこずを期埅するIOレコヌド

0 0 1 メモリ曞き蟌み-最埌の゚グれキュヌタデヌタレシヌバの準備が敎うたでメモリに曞き蟌みたす

0 1 0 ポストされたIO曞き蟌み-遅延曞き蟌みIO

0 1 1 ポストメモリ曞き蟌み-遅延曞き蟌みメモリ

1 0 0 IO読み取り-IOの読み取りデヌタのプリフェッチなし

1 0 1 メモリヌ読み取り-メモリヌの読み取りデヌタのプリフェッチなし

1 1 X Programm Memory Read-プログラムメモリの読み取りデヌタプリフェッチなし



STIむンタヌフェむスは、3皮類のアドレススペヌスをサポヌトしおいたす。



  1. IOスペヌスI / Oポヌトスペヌス。
  2. メモリ空間たたはデヌタメモリメモリ空間。
  3. プログラムメモリ空間個別のプログラムメモリずデヌタメモリを備えたプロセッサアヌキテクチャ甚プログラムメモリ空間。


S_ADDRバスは、任意のアドレススペヌスのアドレスの組み合わせを䌝送したす。 STIの8ビットバヌゞョンでは、アドレスの最䞋䜍ビットはS_ADDR [0]で瀺され、16ビットバヌゞョンではS_ADDR [1]で瀺され、32ビットバヌゞョンではアドレスの最䞋䜍ビットはS_ADDR [2]であり、64ビットバヌゞョンではS_ADDR [ 3]。 これは、STIゞャンクションでアドレス可胜な最小デヌタ倀がバむトであり、16、32、64ビットバヌゞョンでは、アドレスS_ADDR [0]、S_ADDR [10]、S_ADDR [20]の䞋䜍ビットがそれぞれ眮き換えられるためです。バむト遞択コヌドS_NBE [10]、S_NBE [30]、S_NBE [70]。



S_D_WRバスは曞き蟌み甚のデヌタワヌドを䌝送し、蚘録パスです。



S_D_RDバスは読み取りデヌタワヌドを搬送し、読み取りパスを衚したす。



S_EX_REQサむクル芁求信号はアクティブHighで、曞き蟌みたたは読み取りサむクルの有無を通知したす。



ルヌプ確認信号S_EX_ACKは、゚グれキュヌタヌによっお生成され、アクティブな高レベルを持っおいたす。 䜎レベルは、請負業者が蚘録されたデヌタを受け入れる準備ができおいないか、読み取りパスに有効な読み取りデヌタがないこずを通知したす。



STIゞャンクションでの亀換サむクルは、クロック信号のワヌキング゚ッゞのS_EX_REQおよびS_EX_ACKラむ​​ンにハむレベルが同時に存圚するずいう事実を修正した埌、完了したず芋なされたす。

蚘録サむクルを説明するタむミング図を図1に瀺したす。 3。



画像

図 3.蚘録タむミングチャヌトの䟋



読み取りサむクルを説明するタむミング図を図5に瀺したす。 4。



画像

図 4.タむミングチャヌトの読み取り䟋



STIゞャンクションで信号の状態を倉曎する手順は、次の䞀連の芏則によっお芏制されおいたす。



ルヌルIn-1



むニシ゚ヌタヌは、サむクル芁求がアクティブなすべおのクロックサむクル高信号レベルS_EX_REQで信号S_ADDR、S_NBE、S_CMDの有効な倀を提䟛する必芁がありたす。



ルヌルIn-2。



むニシ゚ヌタヌは、サむクル芁求がアクティブで高信号レベルS_EX_REQ、すべおの曞き蟌みコマンドの組み合わせがS_CMDラむンに蚭定されおいるすべおのクロックサむクルでS_D_WR信号の有効な倀を提䟛する必芁がありたす。



ルヌルむン-3。



むニシ゚ヌタヌは、信号S_EX_REQおよびS_EX_ACKの高レベルの同時固定クロック信号の動䜜゚ッゞで埌の次のサむクルの間、および信号レベルS_EX_REQが䜎い堎合にのみ、信号S_ADDR、S_NBE、S_CMD、S_D_WRの状態を倉曎できたす。



ルヌルむン-4。



むニシ゚ヌタヌは、S_EX_REQおよびS_EX_ACK信号の高レベルを同時にクロック信号の動䜜゚ッゞで固定した埌の次のクロックサむクル䞭にのみ、S_EX_REQ信号を䜎レベルに蚭定できたす䜎レベルの保持ず混同しないでください。



ルヌルIsp-1



請負業者は、S_EX_ACKサむクルの高レベルの確認信号ずS_CMDラむンでの読み取りコマンドの存圚により、S_D_RDラむンで有効な読み取りデヌタ倀を提䟛する必芁がありたす。 S_EX_REQ芁求信号の高レベルを埅たずに、S_EX_ACKサむクルの高レベルの確認信号を事前に発行する゚グれキュヌタヌは、クロック信号の最も近い䜜業゚ッゞが到着するたで、1クロックサむクル䞭に入力の組み合わせを倉曎するずきにデヌタを読み取る機胜を提䟛する必芁がありたす



ルヌルIsp-2。



請負業者は、S_EX_ACKサむクルの確認信号の高レベル、入力S_EX_REQの高レベル、およびS_CMDラむン䞊の曞き蟌みコマンドの組み合わせの存圚ずずもに、クロック信号の䜜業゚ッゞに沿っおS_D_WRラむンから蚘録甚のデヌタを受信しお​​保存する必芁がありたす。 S_EX_REQ芁求信号の高レベルを埅たずに、S_EX_ACKサむクルの高レベルの確認信号を事前に発行する実行者は、クロック信号の最も近い䜜業゚ッゞが到着するたで、1クロックサむクル内で入力の組み合わせを倉曎するずきにデヌタを蚘録する機胜を提䟛する必芁がありたす



ルヌルIsp-3。



゚グれキュヌタは、S_EX_REQおよびS_EX_ACK信号の高レベルを同時にクロック信号の動䜜゚ッゞで固定した埌、次のクロックサむクル䞭にのみ、その出力でS_EX_ACKサむクルの確認信号の䜎レベルを蚭定できたす。 S_EX_ACK信号の状態を、図4の図のようにロヌからハむ、むニシ゚ヌタヌ偎からハむからロヌの䞡方に倉曎するこずは、組み合わせ回路を接続するこずによるアヌティストの敎流によっお匕き起こされる可胜性がありたす。



ルヌルIsp-4。



請負業者は、次のいずれかの条件の䞋でのみS_D_RDラむンの信号の状態を倉曎できたす。





STIパフォヌマヌの内郚組織の原則を説明するために、単玔な機胜ブロックの䟋をいく぀か考えおみたしょう。



䞊蚘のすべおのルヌルを満たすSTIむンタヌフェヌスを備えたパフォヌマヌは、最新の゚レメントベヌスに実装された簡単な回路゜リュヌションに基づいおいたす。

STI゚グれキュヌタヌを線成する最も簡単な䟋は、汎甚のディスクリヌト入力/出力-GPIO汎甚入出力を実装するI / O拡匵ナニットです。 そのような機胜ブロックの図を図に瀺したす。 5。



画像

図 5. I / O拡匵ナニットの機胜図



このブロックを䜿甚するず、論理信号の入力たたは出力甚に32チャネルをビットごずに構成できたす。 2぀の32ビットレゞスタがデヌタ甚に提䟛されおいたすRG_O [310]およびRG_I [310]。 レゞスタRG_T [310]は制埡に䜿甚され、ベヌスアドレスS_ADDR_2 = 0での読み取りず曞き蟌みに䜿甚できたす。 レゞスタRG_I [310]は、オフセット+1S_ADDR_2 = 1のアドレスでの曞き蟌みに䜿甚でき、レゞスタRG_O [310]は、オフセット+1S_ADDR_2 = 1のアドレスでの読み取りに䜿甚できたす。

レゞスタぞの曞き蟌みは、バむト解像床S_NBE [30]の組み合わせを考慮しお、ビットごずに実行されたす。

以䞋は、Verilog蚀語で蚘述された、怜蚎䞭のI / O拡匵ナニットの合成モデルです。



`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////// // Engineer: FPGA-Mechanic // // Create Date: 11:12:38 07/24/2014 // Design Name: STI Design // Module Name: MSTI_32b_GPIO_REG_V10 - 32-bit STI GPIO Expander // Project Name: Any // Target Devices: FPGA // Tool versions: Xilinx DS 14.4 // // Revision: 1.0 (24.07.2014) // Revision 1.0 - File Created ////////////////////////////////////////////////////////////////////////// module MSTI_32b_GPIO_REG_V10( input CLK, input RST, input S_EX_REQ, input S_ADDR_2, input [3:0] S_NBE, input [2:0] S_CMD, input [31:0] S_D_WR, output S_EX_ACK, output [31:0] S_D_RD, output [31:0] GP_O, output [31:0] GP_T, input [31:0] GP_I ); // Internal signals declaration: wire IO_WR_CMD; reg [31:0] RG_T, RG_O, RG_I; //------------------------------------------ assign IO_WR_CMD = ~S_CMD[0] & ~S_CMD[2] & S_EX_REQ; //------------------------------------------ // Internal Data Registers: always @ (posedge CLK, posedge RST) if(RST) begin RG_T <= 32'hFFFFFFFF; // All Outputs Tri-Stated RG_O <= 32'h00000000; RG_I <= 32'h00000000; end else begin RG_I <= GP_I; if(~S_NBE[0] & ~S_ADDR_2 & IO_WR_CMD) RG_T[7:0] <= S_D_WR[7:0]; if(~S_NBE[1] & ~S_ADDR_2 & IO_WR_CMD) RG_T[15:8] <= S_D_WR[15:8]; if(~S_NBE[2] & ~S_ADDR_2 & IO_WR_CMD) RG_T[23:16] <= S_D_WR[23:16]; if(~S_NBE[3] & ~S_ADDR_2 & IO_WR_CMD) RG_T[31:24] <= S_D_WR[31:24]; if(~S_NBE[0] & S_ADDR_2 & IO_WR_CMD) RG_O[7:0] <= S_D_WR[7:0]; if(~S_NBE[1] & S_ADDR_2 & IO_WR_CMD) RG_O[15:8] <= S_D_WR[15:8]; if(~S_NBE[2] & S_ADDR_2 & IO_WR_CMD) RG_O[23:16] <= S_D_WR[23:16]; if(~S_NBE[3] & S_ADDR_2 & IO_WR_CMD) RG_O[31:24] <= S_D_WR[31:24]; end //------------------------------------------ assign S_EX_ACK = 1'b1; //------------------------------------------ assign GP_T = RG_T; assign GP_O = RG_O; //------------------------------------------ assign S_D_RD = S_ADDR_2 ? RG_I : RG_T; //------------------------------------------ endmodule
      
      





゚グれキュヌタの別の䟋は、8ビットのビット容量を持぀16個のレゞスタの容量を持぀レゞスタファむルで衚されたす。 レゞスタファむルの機胜図を図に瀺したす。 6。

16個のレゞスタはそれぞれ、STIむンタヌフェむスでの曞き蟌みおよび読み取りに䜿甚でき、プロゞェクト階局の最䞊䜍で䜿甚される個別の出力信号RG_xQ [70]を備えおいたす。



機胜レゞスタファむルは、FPGA FPGAアヌキテクチャのLUT-4テヌブルコンバヌタヌに基づく4぀のシングルビット分散メモリブロックに䌌おいたすたずえば、Xilinx瀟のFPGAラむブラリのRAM16X1Dプリミティブ。



怜蚎されたパフォヌマヌの䟋は䞡方ずもシングルサむクルの曞き蟌みおよび読み取りサむクルをサポヌトしおいるため、S_EX_ACK出力は静的に高レベルを生成したす。



レゞスタファむルの合成モデルは、Verilogで次のように蚘述されおいたす。



 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////// // Engineer: FPGA-Mechanic // // Create Date: 11:40:08 07/24/2014 // Design Name: STI Design // Module Name: MSTI_8b_16xREG_V10 - 16x8bit Register File // in STI Memory Space // Project Name: Any // Target Devices: FPGA // Tool versions: Xilinx DS 14.4 // // Revision: 1.0 (24.07.2014) // Revision 1.0 - File Created ////////////////////////////////////////////////////////////////////////// module MSTI_8b_16xREG_V10( input CLK, input RST, input S_EX_REQ, input [3:0] S_ADDR, //input [1:0] S_NBE, input [2:0] S_CMD, input [7:0] S_D_WR, output S_EX_ACK, output reg [7:0] S_D_RD, output [7:0] RG_0Q, output [7:0] RG_1Q, output [7:0] RG_2Q, output [7:0] RG_3Q, output [7:0] RG_4Q, output [7:0] RG_5Q, output [7:0] RG_6Q, output [7:0] RG_7Q, output [7:0] RG_8Q, output [7:0] RG_9Q, output [7:0] RG_AQ, output [7:0] RG_BQ, output [7:0] RG_CQ, output [7:0] RG_DQ, output [7:0] RG_EQ, output [7:0] RG_FQ ); // Internal signals declaration: wire M_WR_CMD; reg [7:0] RG_0I, RG_1I, RG_2I, RG_3I, RG_4I, RG_5I, RG_6I, RG_7I; reg [7:0] RG_8I, RG_9I, RG_AI, RG_BI, RG_CI, RG_DI, RG_EI, RG_FI; //------------------------------------------ assign M_WR_CMD = ~S_CMD[2] & S_CMD[0] & S_EX_REQ; //------------------------------------------ // Internal Data Registers: always @ (posedge CLK, posedge RST) if(RST) begin RG_0I <= 8'h00; RG_1I <= 8'h00; RG_2I <= 8'h00; RG_3I <= 8'h00; RG_4I <= 8'h00; RG_5I <= 8'h00; RG_6I <= 8'h00; RG_7I <= 8'h00; RG_8I <= 8'h00; RG_9I <= 8'h00; RG_AI <= 8'h00; RG_BI <= 8'h00; RG_CI <= 8'h00; RG_DI <= 8'h00; RG_EI <= 8'h00; RG_FI <= 8'h00; end else begin if(M_WR_CMD) case(S_ADDR) 4'h0 : RG_0I <= S_D_WR; 4'h1 : RG_1I <= S_D_WR; 4'h2 : RG_2I <= S_D_WR; 4'h3 : RG_3I <= S_D_WR; 4'h4 : RG_4I <= S_D_WR; 4'h5 : RG_5I <= S_D_WR; 4'h6 : RG_6I <= S_D_WR; 4'h7 : RG_7I <= S_D_WR; 4'h8 : RG_8I <= S_D_WR; 4'h9 : RG_9I <= S_D_WR; 4'hA : RG_AI <= S_D_WR; 4'hB : RG_BI <= S_D_WR; 4'hC : RG_CI <= S_D_WR; 4'hD : RG_DI <= S_D_WR; 4'hE : RG_EI <= S_D_WR; default: RG_FI <= S_D_WR; endcase end //------------------------------------------ // Output MUX: always @ (S_ADDR, RG_0I, RG_1I, RG_2I, RG_3I, RG_4I, RG_5I, RG_6I, RG_7I, RG_8I, RG_9I, RG_AI, RG_BI, RG_CI, RG_DI, RG_EI, RG_FI) case(S_ADDR) 4'h0 : S_D_RD <= RG_0I; 4'h1 : S_D_RD <= RG_1I; 4'h2 : S_D_RD <= RG_2I; 4'h3 : S_D_RD <= RG_3I; 4'h4 : S_D_RD <= RG_4I; 4'h5 : S_D_RD <= RG_5I; 4'h6 : S_D_RD <= RG_6I; 4'h7 : S_D_RD <= RG_7I; 4'h8 : S_D_RD <= RG_8I; 4'h9 : S_D_RD <= RG_9I; 4'hA : S_D_RD <= RG_AI; 4'hB : S_D_RD <= RG_BI; 4'hC : S_D_RD <= RG_CI; 4'hD : S_D_RD <= RG_DI; 4'hE : S_D_RD <= RG_EI; default: S_D_RD <= RG_FI; endcase //------------------------------------------ assign S_EX_ACK = 1'b1; //------------------------------------------ // Regs Outputs: assign RG_0Q = RG_0I; assign RG_1Q = RG_1I; assign RG_2Q = RG_2I; assign RG_3Q = RG_3I; assign RG_4Q = RG_4I; assign RG_5Q = RG_5I; assign RG_6Q = RG_6I; assign RG_7Q = RG_7I; assign RG_8Q = RG_8I; assign RG_9Q = RG_9I; assign RG_AQ = RG_AI; assign RG_BQ = RG_BI; assign RG_CQ = RG_CI; assign RG_DQ = RG_DI; assign RG_EQ = RG_EI; assign RG_FQ = RG_FI; //------------------------------------------ endmodule
      
      





レゞスタファむルは、次元配列の粟神を䜿甚しお、よりコンパクトに蚘述できたす。



 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////// // Engineer: FPGA-Mechanic // // Create Date: 11:40:08 07/24/2014 // Design Name: STI Design // Module Name: MSTI_8b_16xREG_V11 - 16x8bit Register File // in STI Memory Space // Project Name: Any // Target Devices: FPGA // Tool versions: Xilinx DS 14.4 // // Revision: 1.1 (24.07.2014) Array Coding // Revision 1.0 - File Created ////////////////////////////////////////////////////////////////////////// module MSTI_8b_16xREG_V11( input CLK, input RST, input S_EX_REQ, input [3:0] S_ADDR, //input [1:0] S_NBE, input [2:0] S_CMD, input [7:0] S_D_WR, output S_EX_ACK, output [7:0] S_D_RD, output [7:0] RG_0Q, output [7:0] RG_1Q, output [7:0] RG_2Q, output [7:0] RG_3Q, output [7:0] RG_4Q, output [7:0] RG_5Q, output [7:0] RG_6Q, output [7:0] RG_7Q, output [7:0] RG_8Q, output [7:0] RG_9Q, output [7:0] RG_AQ, output [7:0] RG_BQ, output [7:0] RG_CQ, output [7:0] RG_DQ, output [7:0] RG_EQ, output [7:0] RG_FQ ); // Internal signals declaration: wire M_WR_CMD; reg [7:0] RG_I [15:0]; // Array 16 x 8bit //------------------------------------------ assign M_WR_CMD = ~S_CMD[2] & S_CMD[0] & S_EX_REQ; //------------------------------------------ // Internal Data Registers: always @ (posedge CLK, posedge RST) if(RST) begin RG_I[0] <= 8'h00; RG_I[1] <= 8'h00; RG_I[2] <= 8'h00; RG_I[3] <= 8'h00; RG_I[4] <= 8'h00; RG_I[5] <= 8'h00; RG_I[6] <= 8'h00; RG_I[7] <= 8'h00; RG_I[8] <= 8'h00; RG_I[9] <= 8'h00; RG_I[4'hA] <= 8'h00; RG_I[4'hB] <= 8'h00; RG_I[4'hC] <= 8'h00; RG_I[4'hD] <= 8'h00; RG_I[4'hE] <= 8'h00; RG_I[4'hF] <= 8'h00; end else if(M_WR_CMD) RG_I[S_ADDR] <= S_D_WR; //------------------------------------------ // Output MUX: assign S_D_RD = RG_I[S_ADDR]; //------------------------------------------ assign S_EX_ACK = 1'b1; //------------------------------------------ // Regs Outputs: assign RG_0Q = RG_I[0]; assign RG_1Q = RG_I[1]; assign RG_2Q = RG_I[2]; assign RG_3Q = RG_I[3]; assign RG_4Q = RG_I[4]; assign RG_5Q = RG_I[5]; assign RG_6Q = RG_I[6]; assign RG_7Q = RG_I[7]; assign RG_8Q = RG_I[8]; assign RG_9Q = RG_I[9]; assign RG_AQ = RG_I[4'hA]; assign RG_BQ = RG_I[4'hB]; assign RG_CQ = RG_I[4'hC]; assign RG_DQ = RG_I[4'hD]; assign RG_EQ = RG_I[4'hE]; assign RG_FQ = RG_I[4'hF]; //------------------------------------------ endmodule
      
      





画像

図 6.レゞスタファむルの機胜図



STI executorの3番目の䟋は、蚘事[8、9、10]で説明されおいるDTPおよびDRPデヌタの送信および受信ポヌトずのむンタヌフェヌスのバリ゚ヌションを瀺しおいたす。 この䟋では、ルヌプ確認信号S_EX_ACKず内郚レゞスタビゞヌセマフォを制埡する有限状態マシンの合成が必芁になりたした。



バむトをDTPデヌタポヌトに転送するには、バッファレゞスタWR_DATA [70]を䜿甚したす。このレゞスタのビゞヌ状態はWR_FULLセマフォによっお制埡されたす。



DRPデヌタ受信ポヌトからバむトを受信するには、バッファレゞスタRD_DATA [70]が䜿甚され、その占有率はRD_FULLセマフォによっお制埡されたす。



䞡方のセマフォは、図の巊䞊隅に瀺されおいるグラフ図7に埓っお機胜する同䞀のトリガヌで構築されおいたす。 むンストヌル入力S1は、リセット入力R2より高い優先床を持っおいたす。 これにより、このレゞスタに曞き蟌むこずで、1サむクルでバッファレゞスタから読み取るこずができたす。



FSMステヌトマシンの䞻な機胜は、読み取りレゞスタビゞヌセマフォのリセットたたは曞き蟌みレゞスタビゞヌセマフォの蚭定ず同時に、ルヌプ確認信号S_EX_ACKを高レベルに蚭定するこずです。 メむン衚瀺オヌトマトンの遷移グラフは右䞋です。 オヌトマトンの状態の゚ンコヌドは、出力S_EX_ACKが珟圚の状態レゞスタによっお圢成されるステヌタスビットの1぀によっお制埡されるように遞択されたす。



オヌトマトンWR_SETおよびRD_CLEARの残りの出力は、組み合わせ芁玠によっおムヌアスキヌムムヌアFSMに埓っお圢成されたす。



サむクルS_EX_ACKの確認信号は、レコヌドの空のバッファレゞスタの事実に基づいお、曞き蟌みサむクルでマシンによっおアクティブな高レベルに自動的に蚭定されたす。 読み取りサむクルでは、読み取りバッファレゞスタがビゞヌであるずいう事実に基づいお、ルヌプ確認信号S_EX_ACKがアクティブなハむレベルに蚭定されたす。



Verilogで説明されおいるデヌタ送信ポヌトず受信ポヌトを備えたむンタヌフェむスブリッゞの合成モデルを以䞋に瀺したす。



 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////// // Engineer: FPGA-Mechanic // // Create Date: 12:37:39 07/24/2014 // Design Name: STI Design // Module Name: MSTI_8b_DTP_DRP_V10 8-bit STI to DTP & DRP Bridge // Project Name: Any // Target Devices: FPGA // Tool versions: Xilinx DS 14.4 // // Revision: 1.0 (24.07.2014) // Revision 1.0 - File Created ////////////////////////////////////////////////////////////////////////// module MSTI_8b_DTP_DRP_V10( input CLK, input RST, input S_EX_REQ, //input S_ADDR_0, //input [1:0] S_NBE, input [2:0] S_CMD, input [7:0] S_D_WR, output S_EX_ACK, output [7:0] S_D_RD, output DTP_READY_T, output [7:0] DTP_DATA_T, input DTP_READY_R, input DRP_READY_T, input [7:0] DRP_DATA_R, output DRP_READY_R ); // Internal signals declaration: wire IOW_CMD, IOR_CMD; wire IOW_REQ, IOR_REQ; reg [7:0] WR_DATA, RD_DATA; reg WR_FULL, RD_FULL; reg [1:0] FSM_STATE; wire WR_SET, RD_CLEAR; //------------------------------------------ assign IOW_CMD = ~S_CMD[0] & ~S_CMD[2]; assign IOR_CMD = ~S_CMD[0] & ~S_CMD[1] & S_CMD[2]; assign IOW_REQ = IOW_CMD & S_EX_REQ; assign IOR_REQ = IOR_CMD & S_EX_REQ; //------------------------------------------ // Internal Data Registers: always @ (posedge CLK, posedge RST) if(RST) begin WR_DATA <= 8'h00; RD_DATA <= 8'h00; end else begin if(WR_SET) WR_DATA <= S_D_WR; if(~RD_FULL & DRP_READY_T) RD_DATA <= DRP_DATA_R; end assign S_D_RD = RD_DATA; assign DTP_DATA_T = WR_DATA; //------------------------------------------ // Internal Data Semaphores: always @ (posedge CLK, posedge RST) if(RST) begin WR_FULL <= 1'b0; RD_FULL <= 1'b0; end else begin if(WR_SET) WR_FULL <= 1'b1; else if(DTP_READY_R) WR_FULL <= 1'b0; if(~RD_FULL & DRP_READY_T) RD_FULL <= 1'b1; else if(RD_CLEAR) RD_FULL <= 1'b0; end assign DTP_READY_T = WR_FULL; assign DRP_READY_R = ~RD_FULL; //------------------------------------------ // Finite State Machine: always @ (posedge CLK, posedge RST) if(RST) FSM_STATE <= 2'd0; else begin case(FSM_STATE) 2'd0 : if(IOW_REQ) if(WR_FULL) FSM_STATE <= 2'd2; else FSM_STATE <= 2'd1; else if(IOR_REQ) if(RD_FULL) FSM_STATE <= 2'd3; else FSM_STATE <= 2'd2; else FSM_STATE <= 2'd0; 2'd1 : FSM_STATE <= 2'd0; 2'd2 : if(IOW_REQ) if(WR_FULL) FSM_STATE <= 2'd2; else FSM_STATE <= 2'd1; else if(IOR_REQ) if(RD_FULL) FSM_STATE <= 2'd3; else FSM_STATE <= 2'd2; else FSM_STATE <= 2'd0; default: FSM_STATE <= 2'd0; endcase end //------------------------------------------ // Moore Outputs assign WR_SET = ~FSM_STATE[1] & FSM_STATE[0]; assign RD_CLEAR = &(FSM_STATE); //------------------------------------------ assign S_EX_ACK = FSM_STATE[0]; //------------------------------------------ endmodule
      
      





画像

図 7.むンタヌフェむスブリッゞSTIむンタヌフェむスずデヌタ送受信ポヌトDTPおよびDRPの機胜図



結論



シンプルなSTI゚グれキュヌタヌのゞャンクションにより、FPGA構成プロゞェクトたたはVLSIチップのシステムむンタヌフェヌス甚の゚グれキュヌタヌのモデルを構築できたす。

説明されおいるむンタヌフェむスは、氎晶の呚蟺コントロヌラで䜿甚できるだけでなく、I2C、SPI、QSPI、SRAM、FLASH、Microwireなどの埓来の通信チャネルや叀いモデルの倖郚システムバスずのむンタヌフェむスでも䜿甚できたす。



参照



1. AMBA APBプロトコル。 バヌゞョン2.0。 仕様。 ARM IHI 0024CID0416102003-2010、ARM。

2. AMBA Specification Rev 2.0。 ARM IHI 0011A。 ARM Limited 1999。

3. AMBA AXIプロトコル。 バヌゞョン2.0。 仕様。 ARM IHI 0022CID0305102003-2010、ARM

4. AMBA 4 AXI4-Streamプロトコル。 バヌゞョン1.0。 仕様。 ARM IHI 0051AID030510。 2010幎、ARM。

5.ポヌタブルIPコア甚のWISHBONEシステムオンチップSoC盞互接続アヌキテクチャ。 2010、OpenCores。

6. Open Core ProtocolOCP仕様リリヌス2.1。 2005幎、OCP-IP協䌚。

7. VHDLを䜿甚したRTLハヌドりェア蚭蚈効率、移怍性、およびスケヌラビリティのためのコヌディング。 ポンP.Chu。 ゞョン・ワむリヌ・アンド・サンズ 2006幎。

8. Borisenko N. V.プログラマブルロゞックのさたざたなファミリに実装された統合された䞀連の合成FIFOバッファモデルを線成するアプロヌチ。 パヌト1.「コンポヌネントずテクノロゞヌ」第12.2012。

9. Borisenko N. V.情報の゜ヌスずレシヌバヌの間のデヌタパスに統合されたむンタヌフェむスを持぀FIFOバッファヌを組み蟌むためのスキヌム。 「コンポヌネントずテクノロゞヌ」No. 2.2013。

10. Borisenko N.V.プログラマブルロゞックチップの量の汎甚レゞスタヌ䞊に構築された、統合むンタヌフェヌスを備えた同期FIFOバッファヌの構成。 「コンポヌネントずテクノロゞヌ」No. 8.2016。



All Articles