E203バイパスバッファ


ないデータFIFOと同じ期間内に出力データに直接データを入力する入力、バイパスFIFO、もし。データFIFOがある場合は、FIFOが読み込まれ、それは一般的な同期FIFOになります。

#sirv_gnrl_bypbufモジュール(
  パラメータDP = 8、
  パラメータDW = 32 
)(入力            i_vld、
  出力i_rdy、入力   [DW-1:0] I_DAT、
  出力o_vld、入力            o_rdy、
  出力〔DW-1:0] o_dat、入力            CLK、
   入力            RST_N 
)。
  ワイヤーfifo_i_vld。
  ワイヤーfifo_i_rdy。
  ワイヤ〔DW-1:0] fifo_i_dat。
  ワイヤーfifo_o_vld。
  ワイヤーfifo_o_rdy。
  ワイヤ〔DW-1:0] fifo_o_dat。
  #(sirv_gnrl_fifo 
       .DP(DP)、
       .CUT_READY(1)
  
  

  

  



 
       .DW(DW)、 
  )u_bypbuf_fifo(
    .i_vld(fifo_i_vld)、
    .i_rdy(fifo_i_rdy)、
    .i_dat(fifo_i_dat)、
    .o_vld(fifo_o_vld)、
    .o_rdy(fifo_o_rdy)、
    .o_dat(fifo_o_dat)、
    .clk(CLK)
    .rst_n(RST_N) 
  )。

   //このモジュールは、超兵器であるためタイミング修正
   //それはトリッキーで、あなたが読んでいる時に難しく、それを考える、またはボブ胡連絡

  i_rdy = fifo_i_rdyを割り当てます。

  :// FIFOがバイパスされたときに
  // * FIFOが空である、 o_rdyが高い
  (fifo_o_vld〜)ワイヤーBYP = i_vld&o_rdy&;

  // FIFO O-準備だけo_rdyを使用
  割り当てるfifo_o_rdy = o_rdy。

  //出力が有効である場合には FIFO または 入力が有効で持って
  o_vld = fifo_o_vld割り当てを| i_vld; 

  優先度が高いと//出力データはFIFOを選択
  o_dat = fifo_o_vldを割り当てますか?fifo_o_dat:I_DAT。

  fifo_i_dat = I_DATを割り当てます。

  //のみFIFOに渡す私は -valid 場合は FIFOがされていないバイパス
  アサインfifo_i_vld = i_vld&(〜BYP)。


ENDMODULE
モジュールsirv_gnrl_dffs_tb。

   REG CLK = 0、RST_N。
   REG i_vld、o_rdy。
   REG [31:0] I_DAT。

   ワイヤi_rdy、o_vld。
   線[31:0] o_dat。

   sirv_gnrl_bypbuf#(。CUT_READY(1),. DP(4),. DW(32))mybuf(.i_vld(i_vld),. i_rdy(i_rdy),. I_DAT(I_DAT),. o_vld(o_vld),. o_rdy( o_rdy),. o_dat(o_dat),. CLK(CLK),. RST_N(RST_N))。

   常に#10 CLK =〜CLK; 

   初期は
   始まる
	RST_N = 1'b1の。
	i_vld = 1'b0この; 
        o_rdy = 1'b0この; 
	I_DAT = 32'h12345678。
	#20 
	RST_N = 1'b0この; 
	#80 
	RST_N = 1'b1の。
	#80 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h8。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	#20
	I_DAT = 32'h12。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h2。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h11。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h13。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h6。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h22。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h99。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h33。
        o_rdy = 1'b1の。
	I_DAT = 32'h17。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h3。
        #500 $フィニッシュ。終了 
   初期
	   $モニター($時間,,, " CLK =%bの、RST_N =%bの、i_vld =%bの、o_rdy =%bの、i_rdy =%bの、o_vld =%bの、 "、CLK、RST_N、i_vld、o_rdyを、i_rdy、o_vld)。
   初期には
   開始
   	// $のダンプファイル( " dump.vcdを "); 
   	// $ dumpvars。
   	$ fsdbDumpfile( " dump.fsdb "); 
	$ fsdbDumpvars( " +すべて ");
   エンド 
   ENDMODULE
   




上記のテストベンチを使用して、fifo_o_vld常に0、バイパス・バッファを見ることができます

画像

モジュールsirv_gnrl_dffs_tb。

   REG CLK = 0、RST_N。
   REG i_vld、o_rdy。
   REG [31:0] I_DAT。

   ワイヤi_rdy、o_vld。
   線[31:0] o_dat。

   sirv_gnrl_bypbuf#(。CUT_READY(1),. DP(4),. DW(32))mybuf(.i_vld(i_vld),. i_rdy(i_rdy),. I_DAT(I_DAT),. o_vld(o_vld),. o_rdy( o_rdy),. o_dat(o_dat),. CLK(CLK),. RST_N(RST_N))。

   常に#10 CLK =〜CLK; 

   初期は
   始まる
	RST_N = 1'b1の。
	i_vld = 1'b0この; 
        o_rdy = 1'b0この; 
	I_DAT = 32'h12345678。
	#20 
	RST_N = 1'b0この; 
	#80 
	RST_N = 1'b1の。
	#80 
	i_vld = 1'b1の。
        o_rdy = 1'b0この; 
	I_DAT = 32'h8。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b0この; 
	I_DAT = 32'h12。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h2。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h11。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h13。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h6。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h22。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h99。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h33。
	#20
        o_rdy = 1'b1の。
	I_DAT = 32'h17。
	#20 
	i_vld = 1'b1の。
        o_rdy = 1'b1の。
	I_DAT = 32'h3。
        #500 $フィニッシュ。終了 
   初期
	   $モニター($時間,,, " CLK =%bの、RST_N =%bの、i_vld =%bの、o_rdy =%bの、i_rdy =%bの、o_vld =%bの、 "、CLK、RST_N、i_vld、o_rdyを、i_rdy、o_vld)。
   初期には
   開始
   	// $のダンプファイル( " dump.vcdを "); 
   	// $ dumpvars。
   	$ fsdbDumpfile( " dump.fsdb "); 
	$ fsdbDumpvars( " +すべて ");
   エンド 
   ENDMODULE
   




コードの表示

上記テストベンチは、通常のバッファー、無バイパスなった場合


画像

おすすめ

転載: www.cnblogs.com/mikewolf2002/p/11250356.html