ザイリンクステンプレートに、サンプルオーロラ工学aurora_8b10b_0_FRAME_GEN最初の機能は、このシリーズの一つ一つは、本明細書に解析され、サブ機能の数を含む、ある、公式の説明によれば、その役割は次のとおりです。これは、パターンジェネレータモジュールである、とレーザーは、ハードウェアをテストするために設計されています。これは、レーザ及びデータチャネルによって生成されます。インターフェイスがフレームに接続されている場合、それは、異なるサイズ及び間隔のフレームを生成します。LFSRは、擬似ランダムデータを生成するために、LFSR REMは、より低いバスに接続されています。
REMはとても価値のTKKP 10または11のように、それは産後のデータによるものである、次のモジュールにここに残り、LL_IP_REM出力インタフェースの意味であるべきで、よりランダムです。
図1に示すように、管理モジュールリセット
// コードの*********************************本体*********** *********************** 常に @(posedge USER_CLK) 始める 場合(RESET) channel_up_cnt <= `DLY 5 " D0; それ以外の 場合(CHANNEL_UP) であれば(&channel_up_cnt) channel_up_cnt <= `DLYのchannel_up_cnt。 他 channel_up_cnt <= `DLY channel_up_cnt + 1 " B1; 他 channel_up_cnt <= `DLY 5 " D0; エンド・ アサインdly_data_xfer =(&channel_up_cnt)。 // オーロラチャネルの準備ができていないときにリセット信号を発生 アサイン RESET_C = RESET || !dly_data_xfer;
RESETリセット入力信号モジュール用、加えて、オーロラIP CHANNEL_UPも公式意味する信号出力、信号を生成:.アサートオーロラ8B / 10Bチャネルの初期化が完了し、チャネルがデータ転送tx_channel_upための準備ができたときとCHANNEL_UPオーロラ8B / 10Bチャンネルが初期化され、データチャネル送信のための準備ができたときにrx_channel_upそれぞれ単体のコアにのみ適用されますが、設定されています。
16クロック遅延がCHANNEL_UPを待っている場合、&channel_up_cntは、フレームデータ単位のリセット動作を発生させるように遅延されるそれぞれの相、すなわち、各ビット1を表します。
2、ランダムデータ生成モジュール
LFSR(線形フィードバックシフトレジスタ、LFSR)は乱数が懸念を持って生成されます
// ______________________________送信データは__________________________________ // XNORフィードバックLFSRを使用してランダムデータを生成 常に @(posedge USER_CLK) 場合(RESET_C) 開始 data_lfsr_r <= `DLY 16 " hABCDを。//ランダムシード値 端 そう であれば(!TX_DST_RDY_N &&!idle_r) 開始 data_lfsr_r <= 'DLY {!{data_lfsr_r [ 3 ] ^ data_lfsr_r [ 12 ] ^ data_lfsr_r [ 14 ] ^ data_lfsr_r [ 15 ]}、 data_lfsr_r [ 0:14 ]}。 終わり
シミュレーション(ModelSimの)結果
図3に示すように、送信データ数カウンタのカウンタのフレームデータ
常に2つのブロックを公式アーキテクチャを使用して、データの最大数は常に送信されたデータの各フレームのブロック、及び他の常にデータの数をデータブロックは、カウンタの値を表す場合に、送信されたことは2に等しいです送信されました。
コード:
// を使用し送信するために次のフレームのサイズを決定するためにカウンタ 常に(@ posedgeのUSER_CLK) 場合(RESET_C) frame_size_r <= 'DLY 8 ' H00。 そう であれば(single_cycle_frame_r || eof_r) frame_size_r <= 'DLY frame_size_r + 1 。 // 使用して、フレームのバイト数がすでに送られてきた方法を決定するために第2のカウンタ 常に @(posedge USER_CLK) であれば(RESET_C) bytes_sent_r <= `DLY 8 "をH00; それ以外の 場合(sof_r) bytes_sent_r <= `DLY 8 " H01。 それ以外の 場合(TX_DST_RDY_N &&!idle_r) bytes_sent_r <= `DLY bytes_sent_r + 1 ;
さらに、データ送信処理でifg_size_rを生成するためにカウンタを使用して、各ifg_size_cクロックは、クロックのハイレベルを生成する15ように、リフレッシュ制御信号を制御信号値の頻度。(個人的な理解)
// 使用して、IFGを決定するために、自走カウンタを 常に @(posedge USER_CLK) であれば(RESET_C) ifg_size_r <= `DLY 4 " H0; 他 ifg_size_r <= `DLYのifg_size_r + 1 ; // ifg_sizeが登録時IFGが行われる0 割り当て ifg_done_c =(== ifg_size_r 4 ' H0)。
図4に示すように、ホットコード状態機械
これは、常に制御状態の転送は、この送信された制御信号(主に生成され、TlastをTvalid信号)の出力信号の状態をブロック
// ステート・レジスタ1-ホットステート・マシンのために 常に @(posedge USER_CLK) 場合(RESET_C) 開始 idle_r <= `DLY 1 " B1を。 single_cycle_frame_r <= `DLY 1 " B0; sof_r <= `DLY 1 " B0; data_cycle_r <= `DLY 1 " B0; eof_r <= `DLY 1 " B0; 終了 他の 場合(!TX_DST_RDY_N) 開始 idle_r <= `DLY next_idle_c。 single_cycle_frame_r <= `DLY next_single_cycle_frame_c。 sof_r <= `DLY next_sof_c。 data_cycle_r <= `DLY next_data_cycle_c。 eof_r <= `DLY next_eof_c。 終わり
idle_r = 0、single_cycle_frame_r新しいデータ送信を開始する準備ができていることを示し、データが開始フレームの開始を示すsof_r、data_cycyle_rは進行中のデータ転送を示し、eof_rが表すいかなるデータの送信、アイドル= 0は、データのフレームを表していない、アイドル状態を示しますデータ転送が完了しています。
// 1-ホットステートマシンのNextstateロジック アサイン !next_idle_c = ifg_done_c && (single_cycle_frame_r || || eof_r idle_r)。 割り当て next_single_cycle_frame_c =(ifg_done_c &&(frame_size_r == 0))&& (idle_r || || single_cycle_frame_r eof_r)。 アサイン next_sof_c =(!ifg_done_c &&(frame_size_r = 0))&& (idle_r || || single_cycle_frame_r eof_r)。 割り当てます next_data_cycle_c =(frame_size_r = bytes_sent_r!)&& (sof_r || data_cycle_r)。 割り当て next_eof_c =(frame_size_r == bytes_sent_r)&& (sof_r || data_cycle_r)。
最後の有効な状態に応じて信号を生成するために、状態機械スイッチを使用してDureコード形式と