0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

谈谈几种芯片设计增加代码复用性的方法

sanyue7758 来源:IC的世界 2023-09-12 09:55 次阅读

很多芯片在设计之初,就已经考虑如何增加代码的复用性,尽量减少工作量,降低错误概率。 增加复用性的几个场景:

不同项目之间的代码复用性

不同工艺之间的代码复用性

同一个模块例化多份,分别工作在不同模式下

同一个项目不同环境(RTL验证,FPGA demo 验证)之间的代码复用性

本章节将简单谈谈几种增加代码复用性的方法。

1、基础模块IP化

在各家ASIC/FPGA项目的代码目录中,我们经常能看到各类小的基础模块,例如各类跨时钟模块、各类调度仲裁模块、各类RAM读写模块、各类总线接口模块等等。它们可能命名为share_ip_*或base_ip_*或cmn_ip_*,又或者其他名称,几乎每个设计者都需要用到这些基础模块。 我们在需要实现其相关功能时,只需要例化模块即可,简单高效,有降低了bug概率。

2、模块参数

在进行模块设计时,我们需要尽量保证模块参数化,尽量避免使用立即数(例如10’d0)。 被参数化的信号可能是数据位宽,用户数量或者其他类型的信号。

module  ip_bus_sync #( // 
    parameter   DATA_WDTH                       =       16                                      ,   //
    parameter   INI_VALUE                       =       {DATA_WDTH{1'b0}}                           //
)(
    input                                               i_src_clk                               ,   //
    input                                               i_src_rst_n                             ,   //
    input               [DATA_WDTH-1:0]                 i_src_din                               ,   //
    input                                               i_dst_clk                               ,   //
    input                                               i_dst_rst_n                             ,   //
    output  reg         [DATA_WDTH-1:0]                 o_dst_dout                                  // 


);




//逻辑代码


endmodule

3、宏定义区分代码分支

ASIC项目的代码一般至少有两个版本:ASIC版本和验证版本(FPGA/加速器)。部分公司还会同时出两个系列的芯片,ASIC系列和FPGA系列。因此我们通常需要通过宏定义区分不同的代码分支和参数

`ifdef FOR_ASIC_DESIGN
  //ASIC  logic
  //参数定义
`else
  //其他分支逻辑
  //参数定义
`endif
`ifdef FOR_ASIC_DESIGN




generate
genvar  i;


for ( i=0; i
        

4、使用参数选择代码分支

在同一个宏定义分支下(例如同在ASIC或者FPGA项目),我们可能需要奖模块例化多份,以支持如下场景:

Case1:同一个模块,工作在同的模式下,为了节约资源,只需要保留对应模式的代码逻辑。 Case2:同一个模块,其支持的功能数量不同,所需要的RAM等资源也不相同,需要例化不同规格的RAM。

module xxxxx
#(
    parameter   FUNCTION_MODE   =       `MULTI_FUNCTION             
)
(
   //各类IO信号
) ;




generate


if (FUNCTION_MODE==`MULTI_FUNCTION) begin:MULTI_FUNCTION_CODE


     //多function 逻辑  


end


else begin:SINGLE_FUNCTION_CODE


    // 单function 逻辑


end


end
endgenerate

5、IP接口隔离

不同Vendor的IP的用户侧接口大概率是不一样的,为了避免因为IP替换导致的大量代码修改,可以在设计之处就考虑将IP接口隔离。例如通过2类接口转换模块(控制类和数据类),将所需要的控制信号和数据流信号转换成通用的内部信号,这样无论怎么替换IP,都只需要修改少量代码。

4c118826-5090-11ee-a25d-92fbcf53809c.png                  

6、std cell 隔离

我们通常会将std cell外包一层或者多层代码,这样就能将工艺与设计代码尽量分离。

常见的有bit同步器,ram,clk-gating,clk mux等模块。如下是单bit同步器的案例。

module  ip_bit_sync #( parameter      DATA_WDTH = 1    // bit width)(in

put  wire                     i_dst_clk,   // destination clockinput  wire [(DATA_WDTH-1):0]   i_src_din,   // data inputoutput wire [(DATA_WDTH-1):0]   o_dst_dout   // data output);`ifdef FOR_ASIC_DESIGNgenerategenvar  i;for ( i=0; i





审核编辑:刘清

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

    关注

    1626

    文章

    21678

    浏览量

    602043
  • 加速器
    +关注

    关注

    2

    文章

    795

    浏览量

    37772
  • 芯片设计
    +关注

    关注

    15

    文章

    1005

    浏览量

    54819
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59710
  • ASIC芯片
    +关注

    关注

    2

    文章

    91

    浏览量

    23724

原文标题:增加设计复用性的6种方法

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于可测设计的雷达数字处理芯片的实现

    本文采用基于扫描路径法的可测设计技术,对一款约750万门级雷达芯片的实际电路进行可测设计。在设计中通过使用时钟复用技术、时钟电路处理技术以及IP隔离技术等
    的头像 发表于 12-11 10:04 2420次阅读
    基于可测<b class='flag-5'>性</b>设计的雷达数字处理<b class='flag-5'>芯片</b>的实现

    电磁兼容整改的几种方法

    电磁兼容整改的几种方法
    发表于 08-12 10:34

    电磁兼容主要的几种整改方法

    首先,要根据实际情况对产品进行诊断,分析其干扰源所在及其相互干扰的途径和方式。再根据分析结果,有针对的进行整改。一般来说主要的整改方法有如下几种。 1 减弱干扰源 在找到干扰源的基础上,可对干扰源
    发表于 05-30 08:06

    软件复用库互操作有哪些方法

    存放的构件,同时又使用户通过一个界面透明地访问和检索多个复用库中的构件,这对于提高构件复用效率和复用的可能非常必要,因此出现了软件复用库互
    发表于 11-01 06:10

    物联网技术中几种典型芯片NB-IOT的测试方法

    高速数字设计和测试综述高质量的信号生成电源完整测试物联网技术中几种典型芯片NB-IOT的测试方法
    发表于 01-12 07:15

    代码优化的目的是什么?具体方法包括哪几种

    代码优化的目的是什么?具体方法包括哪几种代码优化工作有什么创新点?
    发表于 06-03 06:17

    你知道可测试设计方法有哪几种

    可扫描触发器的作用有哪些?标准IEEE测试访问方法主要有哪些应用领域?可测试设计方法有哪几种?分别有哪些优点?
    发表于 08-09 07:23

    代码如何复用

    工程。背景需求做任何事情都要有目标,朝着目标去前进。本文关注的目标如下:1. 代码如何复用,达到多项目复用的目的2. 如何满足多项目复用的前提下...
    发表于 08-11 07:26

    芯片分析的几种方法与步骤

    半导体器件芯片分析的几种方法与步骤。分析手段一般包括:c-sam,x-ray,sem扫描电镜,EMMI微光显微镜等。
    发表于 05-02 15:36 1w次阅读

    电磁兼容整改的几种方法

    电磁兼容整改的几种方法,这些方法不仅节约成本,而且是最有效的整改方法
    发表于 10-28 14:56 9次下载

    Linux的内核级代码复用攻击检测

    内核级代码复用攻击,提出了一种基于细粒度控制流完整(CFD的检测方法.首先根据代码复用攻击原理
    发表于 12-27 15:14 0次下载

    一种新颖的复用代码精确快速溯源方法

    提出了一种新颖的复用代码精确快速溯源方法。该方法以函数为单位,基于simhash与倒排索引技术,能在海量代码中快速溯源相似函数。首先基于si
    发表于 01-31 14:23 0次下载
    一种新颖的<b class='flag-5'>复用</b><b class='flag-5'>代码</b>精确快速溯源<b class='flag-5'>方法</b>

    谈谈STM32Fxx系列单片机引脚的复用功能资料下载

    电子发烧友网为你提供谈谈STM32Fxx系列单片机引脚的复用功能资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料、参考设计、用户指南、解决方案等资料,希望可以帮助到广大的电子工程师们。
    发表于 04-13 08:46 15次下载
    <b class='flag-5'>谈谈</b>STM32Fxx系列单片机引脚的<b class='flag-5'>复用</b>功能资料下载

    嵌入式代码的可移植和可复用

    可移植与我们平时所说的跨平台能力比较相近,而软件复用则是一种通过已有软件子件来构建新产品软件的能力。
    的头像 发表于 11-10 09:06 1277次阅读

    AN021 测量MCU代码运行时间的几种方法

    AN021 测量MCU代码运行时间的几种方法
    发表于 02-27 18:23 0次下载
    AN021 测量MCU<b class='flag-5'>代码</b>运行时间的<b class='flag-5'>几种方法</b>