我们在购买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 ) ); 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 内部如果存在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 `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 //-----------------------------------------------------------------------------
审核编辑:汤梓红
-
寄存器
+关注
关注
31文章
5308浏览量
119975 -
接口
+关注
关注
33文章
8486浏览量
150804 -
Verilog
+关注
关注
28文章
1343浏览量
109970 -
时钟
+关注
关注
10文章
1720浏览量
131339
原文标题:如何高效替换Soft IP中的标准cell
文章出处:【微信号:IP与SoC设计,微信公众号:IP与SoC设计】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论