我們在購買soft IP的時候,vendor提供的是通用的verilog/system verilog的代碼,而在不同的項目中,我們采用的工藝不一樣,因此所需的memory 和同步cell不一樣。通用的soft IP是如何便捷的替換memory和標(biāo)準(zhǔn)std cell的呢?
case0:小規(guī)模的afifo/fifo和ram 會用寄存器搭建的方式實現(xiàn)
小規(guī)模的afifo/fifo和ram使用寄存器搭建,不需要替換。
不同IP對資源的敏感度不一樣,因此多大規(guī)模的fifo/ram能夠使用reg實現(xiàn)依賴于IP的類型和應(yīng)用場景。例如在高速以太IP和PCIe中,8x16 的fifo就屬于小規(guī)模,如果例化次數(shù)比較少,使用寄存器搭建是可以接受的。
case1:大規(guī)模的ram 在外部實現(xiàn),IP 會透露出讀寫接口
例如在IP的頂層io上會出現(xiàn)類似如下接口:
wclk/wr/wdata/waddr
rclk/rd/rdata/raddr
case2:底層2級/3級同步器手動替換
Soft IP 內(nèi)部如果存在跨時鐘設(shè)計,通常會使用2級/3級同步器,soft ip如何沒有提供便捷的替換方式,則需要使用者手動替換,例如soft IP代碼多次調(diào)用2級同步器模塊soft_ip_synchronizer.v。
為了使用工藝匹配的2級同步器cell,需要新建一個soft_ip_synchronizer.v,在filelist中將路徑指向新建的soft_ip_synchronizer.v,新soft_ip_synchronizer.v接口與soft IP使用的接口保持一致,且在soft_ip_synchronizer.v中調(diào)用項目使用的base_ip_bit_sync.v, base_ip_bit_sync調(diào)用了制造工藝匹配的同步器cell。
新建的soft_ip_synchronizer.v
`include "soft_ip_constant_h.v" //----------------------------------------------------------------------------- // Block of two synchronisation flip-flops module soft_ip_synchronizer #( parameter FIELD_SIZE = 1 // Field Size in bits ) ( input wire clk , input wire [FIELD_SIZE-1:0] data_in , output wire [FIELD_SIZE-1:0] data_out ); base_ip_bit_sync #( .DATA_WDTH ( FIELD_SIZE ) ) u_data_bit_sync ( .i_dst_clk ( clk ) , .i_din ( data_in ) , .o_dout ( data_out ) ); endmoduleSoft ip的soft_ip_synchronizer.v(被替換)
// Description: Clock Domain Resynchronizer basic elements `include "soft_ip_constant_h.v" module soft_ip_synchronizer #( parameter FIELD_SIZE = 1 // Field Size in bits ) ( input wire clk , input wire [FIELD_SIZE-1:0] data_in , output reg [FIELD_SIZE-1:0] data_out ); reg [FIELD_SIZE-1:0] data_in_r; always @(posedge clk) begin data_in_r <= data_in ; data_out <= data_in_r ; end endmoduleCase3:特殊cell通過define重新指定: Soft IP 內(nèi)部如果存在clk gate模塊,clk mux,多級同步器等特殊定制的cell時,通常需要替換成工藝對應(yīng)的cell,部分soft IP支持define方式指定cell 如下所示:
1:Soft IP所有的Verilog/system Verilog文件都調(diào)用了SOFT_IP.defines.v 在module之前`include "SOFT_IP.defines.v",見SOFT_IP_SPECIAL_SYNC2R.v文件,且在例化2級同步器時使用了調(diào)用define名稱SOFT_IP_SDFFYRPQ2D的方式: `SOFT_IP_SDFFYRPQ2D SYNC ( .CK(CK), .D(D), .R (R), .SI(1'b0), .SE(1'b0), .Q(Q) );
2:新建一個SOFT_IP.defines.v文件,通過define指定cell SOFT_IP.defines.v
// Uncomment to enable Tech Library Cells instantiations in // the special function modules (_SPECIAL). `define SOFT_IP_USE_LIBRARY_CELLS //Default Special Library Cells `defineSOFT_IP_SDFFYRPQ2DSDFFYRPQ2D_**//Std cell名稱SOFT_IP_SPECIAL_SYNC2R.v
`include "SOFT_IP.defines.v" `timescale 1ns/10ps module SOFT_IP_SPECIAL_SYNC2R ( CK , // Synchronizing clock R , // Input asynchronous reset signal - POSITIVE active D , // Input asynchronous data signal Q // Synchronized output data signal ); input CK ; input R ; input D ; output Q ; //----------------------------------------------------------------------------- // Instantiation of the library synchronizer cell //----------------------------------------------------------------------------- `ifdef SOFT_IP_USE_LIBRARY_CELLS `SOFT_IP_SDFFYRPQ2D SYNC ( .CK(CK), .D(D), .R (R), .SI(1'b0), .SE(1'b0), .Q(Q) ); `endif //----------------------------------------------------------------------------- // RTL code for the synchronizer //----------------------------------------------------------------------------- `ifndef SOFT_IP_USE_LIBRARY_CELLS reg SYNC1, SYNC2; always @(posedge CK or posedge R ) if (R == 1'b1) SYNC1 <= 1'b0; else SYNC1 <= D ; always @(posedge CK or posedge R ) if (R == 1'b1) SYNC2 <= 1'b0; else SYNC2 <= SYNC1; assign Q = SYNC2; `endif endmodule //----------------------------------------------------------------------------- // End of logic //-----------------------------------------------------------------------------
審核編輯:湯梓紅
-
寄存器
+關(guān)注
關(guān)注
31文章
5368瀏覽量
121245 -
接口
+關(guān)注
關(guān)注
33文章
8706瀏覽量
151988 -
Verilog
+關(guān)注
關(guān)注
28文章
1352瀏覽量
110434 -
時鐘
+關(guān)注
關(guān)注
11文章
1747瀏覽量
131835
原文標(biāo)題:如何高效替換Soft IP中的標(biāo)準(zhǔn)cell
文章出處:【微信號:IP與SoC設(shè)計,微信公眾號:IP與SoC設(shè)計】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
[原創(chuàng)]NEMA標(biāo)準(zhǔn)三相異步高效電機
Matlab的cell數(shù)組的問題
Megwizard與Qsys中 PCIE IP的區(qū)別
IP definition not found for VLNV: xilinx.com:ip:axi_vdma:6.2 ERROR: [Common 17-39] 'create_bd_cell' failed due to earlier errors.要如何解決呢
cell 延遲計算基礎(chǔ)
是否可以使用ST6G3244替換IP4856CX25?
什么是Cell
in-cell panel_In-Cell觸摸屏原理
![in-<b class='flag-5'>cell</b> panel_In-<b class='flag-5'>Cell</b>觸摸屏原理](https://file1.elecfans.com//web2/M00/A6/51/wKgZomUMPN-AQmdXAAAIm7tBhjY364.jpg)
IP 數(shù)據(jù)表: 1.8V Standard Cell for TSMC 28nm HPC+
![<b class='flag-5'>IP</b> 數(shù)據(jù)表: 1.8V Standard <b class='flag-5'>Cell</b> for TSMC 28nm HPC+](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
IP 數(shù)據(jù)表: 3.0V Standard Cell for TSMC 40nm LP
![<b class='flag-5'>IP</b> 數(shù)據(jù)表: 3.0V Standard <b class='flag-5'>Cell</b> for TSMC 40nm LP](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
IP 數(shù)據(jù)表: 1.8V Standard Cell for TSMC 28nm HPC+
![<b class='flag-5'>IP</b> 數(shù)據(jù)表: 1.8V Standard <b class='flag-5'>Cell</b> for TSMC 28nm HPC+](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
IP 數(shù)據(jù)表: 3.0V Standard Cell for TSMC 40nm LP
![<b class='flag-5'>IP</b> 數(shù)據(jù)表: 3.0V Standard <b class='flag-5'>Cell</b> for TSMC 40nm LP](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論