如何高效替换Soft IP中的标准cell

电子说

1.2w人已加入

描述

    我们在购买soft IP的时候,vendor提供的是通用的verilog/system verilog的代码,而在不同的项目中,我们采用的工艺不一样,因此所需的memory 和同步cell不一样。通用的soft IP是如何便捷的替换memory和标准std cell的呢?

case0:小规模的afifo/fifo和ram 会用寄存器搭建的方式实现

      小规模的afifo/fifo和ram使用寄存器搭建,不需要替换。
     
 不同IP对资源的敏感度不一样,因此多大规模的fifo/ram能够使用reg实现依赖于IP的类型和应用场景。例如在高速以太IP和PCIe中,8x16 的fifo就属于小规模,如果例化次数比较少,使用寄存器搭建是可以接受的。

  case1:大规模的ram 在外部实现,IP 会透露出读写接口    

 例如在IP的顶层io上会出现类似如下接口:    

 wclk/wr/wdata/waddr  

   rclk/rd/rdata/raddr

case2:底层2级/3级同步器手动替换   
 
Soft IP 内部如果存在跨时钟设计,通常会使用2级/3级同步器,soft ip如何没有提供便捷的替换方式,则需要使用者手动替换,例如soft IP代码多次调用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中调用项目使用的base_ip_bit_sync.v, base_ip_bit_sync调用了制造工艺匹配的同步器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   )
);
endmodule
Soft 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
endmodule
Case3:特殊cell通过define重新指定: Soft IP 内部如果存在clk gate模块,clk mux,多级同步器等特殊定制的cell时,通常需要替换成工艺对应的cell,部分soft IP支持define方式指定cell 如下所示:

1:Soft IP所有的Verilog/system Verilog文件都调用了SOFT_IP.defines.v 在module之前`include "SOFT_IP.defines.v",见SOFT_IP_SPECIAL_SYNC2R.v文件,且在例化2级同步器时使用了调用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
`define SOFT_IP_SDFFYRPQ2D  SDFFYRPQ2D_** //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
//-----------------------------------------------------------------------------

 

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分