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

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

3天内不再提示

如何用RTL原语实现MUX门级映射呢?

roborobo_0706 来源:艾思后端实现 2023-12-14 16:26 次阅读

对于前端设计人员,经常会需要一个MUX来对工作模式,数据路径进行明确(explicit)的声明,这个对于中后端工程师下约束也很重要。这里介绍一种巧用的RTL原语,实现MUX的方法。

为了在最终网表里边实现确实的MUX,通常有两种方式。

RTL designer采用了手动实例化(instance)工艺的MUX来实现MUX。但是对于RTL在不同工艺下使用,却造成了一些不便。

一种使用脚本替换的方法,即在综合elaboration的数据库上进行对标工艺的硬替换(replace),这样也需要一套脚本流程。

上述方法可以实现MUX,但是灵活度不是很好,也需要额外的流程和代码量。这里看看DC的解决策略。

RTL原语

DC在做HDL分析,解析(analyze,elaboration)的时候,会对RTL里边的一些原语进行识别,譬如在verilog里边,可以这样使用:


verilog_code // synopsys RTL_primitive

这里的primitive是一整套RTL配置,里边有一个功能就是可以对RTL的MUX功能进行有效映射。所以,通过这个RTL 原语,就可以实现设计出MUX的诉求。

带入RTL原语的elaborate

DC的综合阶段,首先是尝试把RTL的逻辑关系影射成为功能描述库,也就是我们常说的GTECH库。但是对于下列两种情况会做较特殊的处理

使用case搭建的语句:DC 默认会处理成SELECT_OP类型

沿触发/电平触发的时序逻辑语句:DC 默认会处理成SEQGEN类型 (这里暂不作展开)

对于SELECT_OP类型的逻辑转化,通常来自于类似下列的语句:

wKgZomV6vG2AcdDvAADxZe2eWlg254.jpg

DC对于上述语句在elaborate阶段,将其转换成为了SELECT_OP,至于最终实现的器件类型,并不明确。

按照DC的规则:compile会根据实际的时序,面积等考虑,DC会决断把SELECT_OP实现为一个与或非逻辑或者是一个MUX逻辑。相对于RTL实例化一个MUX而言,这里就会带来一些不确定性。

基于此,通过对RTL进行原语级别的配置,让elaborate对case的结果进行约束。示例语法如下:

wKgaomV6vG2AZPArAACRVU6nDdg156.jpg

可以看到,这里的采用了infer_mux (infer:推断)的原语。这个原语可以指导DC对这里的case语句进行MUX_OP实现方式的推断,而非使用默认的SELECT_OP作替换。

wKgZomV6vG2AeltjAAE6_ro9DIs577.jpg

通过上例可以看到,同样的代码,在使用infer_mux和不使用的情形下,DC的elaborate给出了不同的答案。

不使用infer_mux,映射为SELECT_OP_4.1_4.1_1: 四输入一输出的组合逻辑结构

使用infer_mux,映射为MUX_OP_4_2_1:四输入,二选择,一输出的MUX结构 由于DC的compile/compile_ultra命令是基于elaborate的映射结果,所以,这里距离完全实现目标就剩compile一个步骤了。

被改善compile结果

Compile完成后,通过verdi打开,可以很方便的查验到结构图:

wKgaomV6vG2AM1D6AADsL72MJXc571.jpg

可以看到,DC工具在infer_mux的dout[0]通路上使用了一个四输入的MUX做了实现,但是在dout[1]的通路上选择的常规的与或非逻辑作实现。

DC这样做是有它的道理的,在本案例中,穿过dout[0]和dout[1]的时序都是满足的,这个时候DC会有先使用面积小的进行实现dout[1]逻辑,但是会依赖infer_mux的指引实现dout[0]上的逻辑:

dout[0]上的MUX4面积: 98.76

dout[1]的与或非逻辑面积:70.092 所以,在原语的控制下,DC强制使用了MUX,而对于其他部分,DC其实是做了更为优化的选择,譬如这里的面积优先选择机制。

MUX树的创建

除过RTL代码保持平滑度的好处外,原语的另一个好处是可以让工具自动选择合适的MUX进行结果构建。譬如当前工艺库最大提供了四输入MUX,如果是一个较大扇入(fan-in)的MUX需求,DC工具可以友好的进行自动“拓展”,灵活构建一个MUX Tree 达到用户需要的结果 譬如下例:RTL书写了一个八输入MUX

wKgZomV6vG2AVs6RAADcXVCOwV4683.jpg

elaborate后,DC将它正确识别成了:八输入,三控制,一输出的MUX:MUX_OP_8_3_1_1 工艺库并没有八输入这个大的MUX,这个时候如果使用手动构建会比较复杂。但是DC却可以做自动“拓展”,使用了两个MUX4外加一个MUX2,完成了这个MUX tree的构建, compile完成后,通过查看网表可以看到,这里最终是一个MUX tree来实现这个八输入MUX,见下图:

wKgaomV6vG2AHKviAADA-KfnaV0395.jpg

可以看到,DC先是放了两个平行的四输入的MUX进行选择,然后进入到一个两输入的MUX做最后的决断。

作为比对,这里的dout[4],并未采用infer_mux 作实现,可以看到DC使用了常规的与或非结构进行了实现

wKgaomV6vG2AFxnZAAEFiuDho9Q715.jpg

使用RTL原语的方法,对于设计人员的工作量大为减少,并且可以不依赖工艺库,DC工具甚至可以自动构建MUX tree,达到了事半功倍的效果。

== =【敲黑板划重点】===

RTL原语是DC对于RTL的一个特殊指令,通过这套系统可以对elaborate进行显性(explicity )的干预,设计人员可以灵活使用,将设计理念完整的传递到中后端。






审核编辑:刘清

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

    关注

    8

    文章

    327

    浏览量

    47351
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59720
  • Mux
    Mux
    +关注

    关注

    0

    文章

    38

    浏览量

    23356

原文标题:巧用RTL原语实现MUX门级映射

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

收藏 人收藏

    评论

    相关推荐

    电路低功耗设计优化案例分析

    电路的功耗优化(Gate Level Power Optimization,简称GLPO)是从已经映射网表开始,对设计进行功耗的优
    的头像 发表于 07-02 16:28 5396次阅读
    <b class='flag-5'>门</b><b class='flag-5'>级</b>电路低功耗设计优化案例分析

    RTL设计的基本要素和步骤是什么

      综合(Logic Synthesize)是指将HDL语言、原理图等设计输入翻译成由与、或、非门等基本逻辑单元组成的连接(网表),并根据设计目标与要求(约束条件)优化所生成的逻辑连接,输出门网表文件。
    的头像 发表于 01-17 16:57 1w次阅读
    <b class='flag-5'>RTL</b><b class='flag-5'>级</b>设计的基本要素和步骤是什么

    求解大神,如何用基本逻辑和触发器实现6进制加法计数器

    求解大神,如何用基本逻辑和触发器实现6进制加法计数器等...还有12进制加法计数器
    发表于 11-29 18:40

    RTL仿真与门仿真

    本人最近用verilog代码写了一个DDS正弦波发生器,RTL仿真波形正确,但仿真出现毛刺,不知道该如何去掉这些毛刺?我用的是quartus ii 15.0,一开始没分清各种仿真,编译完后就直接
    发表于 08-08 22:57

    关于RTL仿真和仿真求助~

    `刚刚本科毕业,假期导师要求做一个设计。实验室没有做过FPGA的学长只好问网上的各位了。写好的FPGA代码进行RTL仿真波形是符合要求的,如下图。但是做仿真的时候,时序就不对了,变成了这样
    发表于 08-06 12:12

    如何从Virtex原语切换到Spartan原语

    亲爱的大家,Virtex中的许多原语在Spartan 6中找不到,例如BUFIO,BUFR,IDELAY,IDDR。如何使用Spartan原语实现类似的功能?非常感谢你!箱子以上来自于谷歌翻译以下
    发表于 06-03 10:31

    何用存储器映射的方法实现片外FLASH的擦写?

    请问如何用存储器映射的方法实现片外FLASH的擦写?
    发表于 04-20 06:13

    何用51单片机控制RTL8019AS实现以太网通讯?

    何用51单片机控制RTL8019AS实现以太网通讯?
    发表于 05-27 07:14

    电路功耗优化的相关资料分享

    (1)电路的功耗优化综述  电路的功耗优化(Gate Level Power Optimization,简称GLPO)是从已经映射
    发表于 11-12 06:14

    串口IO口映射功能该如何去实现

    串口IO口映射功能是指什么?串口IO口映射功能该如何去实现
    发表于 12-13 07:07

    何用java映射创建java对象和调用java对象

    java是一种解析语言,java程序是通过java虚拟机解析.class的方式运行起来。因此,java中就存在java映射的概念。下面介绍如何用java映射创建java对象和调用java对象的方法
    发表于 04-11 14:43

    介绍RTL设计引入的后端实现过程中的布线问题

    RTL设计引入的后端实现过程中的布线(routing)问题。后端物理实现需要完成芯片中布局布线(place&routing)的工作。在物理实现过程中routing之前
    发表于 04-11 17:11

    (五)电路低功耗设计优化

    (1)电路的功耗优化综述  电路的功耗优化(Gate Level Power Optimization,简称GLPO)是从已经映射
    发表于 11-07 11:05 19次下载
    (五)<b class='flag-5'>门</b><b class='flag-5'>级</b>电路低功耗设计优化

    逻辑综合与物理综合

    利用工具将RTL代码转化为网表的过程称为逻辑综合。综合一个设计的过程,从读取RTL代码开始,通过时序约束关系,映射产生一个
    的头像 发表于 11-28 16:02 2604次阅读

    X态如何通过RTL仿真模型中的逻辑进行传播

    在Verilog中,IC设计工程师使用RTL构造和描述硬件行为。但是RTL代码中的一些语义,并不能够准确地为硬件行为建模。
    的头像 发表于 04-20 09:12 1971次阅读