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

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

3天内不再提示

RTL电路的设计原则和方法

冬至子 来源:梧桐芯语 作者:孙荣荣 2023-07-13 16:17 次阅读

既然RTL是寄存器传输级电路,那么电路设计就一定是以寄存器的特性为基础进行设计。

一般来说,RTL电路设计我们建议3个主要的原则:

  1. 时序逻辑与组合逻辑分开
  2. 数据路径与控制路径分开
  3. 先画电路,后写代码

以上3个原则,我们一个一个来看。

时序逻辑与组合逻辑分开

这里涉及到数字电路基础知识,不懂的小朋友还是先把数字电路设计原理学一下。我们一般把寄存器(DFF)以及锁存器(LATCH)看做是时序逻辑,也就是数据输出与时钟变化保持有一定的关系。具体的原理,可以参考之前关于寄存器工作原理分析的部分。而组合逻辑,则输出与时钟没有关系,仅仅因为输入信号的变化,会立即产生变化,如选择器、与门、或门、非门等。

如下图所示,就是一组完整电路的功能框图模型:

图片

其工作原理为:

(a) current state bits=↑(next state bits);

(b) next state bits=f1(inputs,current state bits);

(c) outputs=f2(inputs,current state bits);

这里面f1和f2就是分别算出next state bits以及outputs的组合电路功能。可以明确的电路,在这里就是时序逻辑电路,或者说是寄存器。所以我们在描述电路的时候,先描述寄存器就好:

1.jpg

接下来我们看,组合逻辑电路怎么设计。

数据路径与控制路径分开

假设我们想描述以下电路:

图片

那么时序逻辑的输入,也就是D端怎么获得?在正常的思考情况下,我们一般这样考虑问题,是有逻辑的:

如果满足XX条件(这里假设S0为0)那么D端来自于InA,否则如果满足XX条件(这里假设S1为1)则赋值为1'b0,否则如果满足XX条件(这里假设S2为1)则来源于InC跟InB的与逻辑,否则就保持不变。

这种数据来源的逻辑思考,利用选择器实现成电路,就是数据路径的设计思路。而利用VerilogHDL来描述电路,就只需要用assign以及?,:的组合,实现选择器的功能即可。而Synthesis综合工具,会根据最终的电路进行优化,实现最优的组合逻辑结构。对设计者来说,首先能做用选择器来设计数据路径就可以了。

1.jpg

而S0、S1跟S2是怎么来的?设计S0、S1跟S2就相当于这个电路模型组合逻辑的控制逻辑设计。

当然S0、S1、S2又可以看做一种数据路径进一步扩展设计,他们可能是组合逻辑直接赋值,也可能是时序逻辑寄存器的输出。

先画电路图,后写代码

由于前些年软件与互联网产业的蓬勃发展,越来越多的人都把软件视为生产力第一工具,却忽略了工程师的主观能动性。越来越多的年轻人投入到集成电路设计领域往往只是学习了VerilgHDL语言,就开始编写电路。殊不知这样的电路,往往会面临大量不可预知的bug,以及调试人员茫然的眼神。

也许有同学说了,现在有很多代码风格(coding style),写电路的时候按照标准的代码风格写就好。也许作为一个接近20年电路设计经验的老工程师来说,心中的电路已经非常清晰,按照coding style编写的电路还是比较好的,但仍然会因为电路逐步复杂,有些部分无法把握,会遇到疏漏。

在这里我还是呼吁各位同学,先把电路设计功底做好,再考虑如何用描述语言描述出来。至少,这个才叫做电路吧。这样做的好处主要有以下3点:

逻辑清晰,便于表达及传递思路

电路直观,便于Debug以及修改

信号定义明确,Coding只需照抄

RTL电路设计的方法

其实根据RTL电路设计的原则,我们认为一个已知接口信号以及功能定义的模块,可以从输出开始往输入推着写。

比如说,我们要设计一个4bit计数器,其功能要求如下:

  • 从0到15循环计数
  • 加电平输入信号P_M,P_M为1则往上加,P_M为0则往下减
  • 加脉冲输入信号Clr,Clr脉冲(高有效)来到,则计数器输出为0
  • 加脉冲输入信号Load,电平输入信号DIN[3:0],Load脉冲(高有效)来到则计数器输出加载为DIN[3:0]的值
  • 增加一个电平输入信号Hold,当Hold为高电平时,计数器保持当前值,不做增减。

那么首先我们分析这个寄存器的输入输出。

输出就是0~15的数值,需要4bit输出信号cnt_num,而输入除了时钟复位(clk,rstn)外,有P_M,Clr,Load,DIN[3:0]以及Hold。因此我们先把输入输出整理出来。

1.jpg

接着我们从输出设计开始往回(输入)推导,先定义输出需要的寄存器来存储每个周期变化用的计数值,cnt_r,并描述出来:

1.jpg

接着,根据功能定义,描述时序逻辑输入端的数据路径:

1.jpg

由于所有控制信号来源于输入,这个电路可以不做控制路径的设计。但有心的小伙伴应该发现了,如果Hold为高,则想加载DIN是无法实现的。因此这样设计的电路,其实是存在优先级的。需要与模块定义的朋友做深入交流,确保实际功能使用时不会出错。

同时,我们看到这个电路里用到了1个加法器和一个减法器,如果想进一步优化电路面积,我们可以考虑加法器的复用:

图片

这样做电路应该怎么改呢?留给大家去思考了。

复杂电路系统设计方法

现在又要有小伙伴说了,我们的电路很复杂的,如果每个都画出电路,那什么时候能投片。我的理解是,复杂电路都是简单电路的衍生,按照功能将系统进行框架划分,并定义出每个框架之间的接口信号及其时序要求,接着再通过画电路的方法,设计框架里的电路。有些小的电路实际上是会被复用的。每个公司产品线,大部分时间都会处于一个逐步演进的过程,小电路设计多数是刚开始,后续的工作量会逐步降低。

但如果公司从一开始就不重视画电路,只是电路描述做实现,也许前几款产品可以正常跑,过了一段时间,客户可能突然发现有些地方要优化,有些地方有bug,但之前设计人员可能已经离职。电路描述不好,电路图也没有,这个时候负责优化和解bug的小伙伴一定会郁闷的。

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

    关注

    30

    文章

    5032

    浏览量

    117746
  • 加法器
    +关注

    关注

    6

    文章

    174

    浏览量

    29732
  • 锁存器
    +关注

    关注

    8

    文章

    745

    浏览量

    41037
  • RTL
    RTL
    +关注

    关注

    1

    文章

    377

    浏览量

    59069
  • 时序逻辑电路

    关注

    2

    文章

    78

    浏览量

    16402
收藏 人收藏

    评论

    相关推荐

    集成电路的替换方法原则

    了解集成电路常见故障类型。掌握集成电路替换的原则方法和注意事项。可以使维修或替换集成电路事半功倍
    发表于 04-01 10:07 3782次阅读

    RTL8201N系列接口电路

    本帖最后由 azsxdcfv1871514 于 2013-1-6 14:56 编辑 RTL8201N系列接口电路RTL8201C,RTL8201CL,
    发表于 04-12 15:36

    【下载】《射频电路设计》——快速掌握射频电路的基本设计方法原则

    微带线制成的各种射频器件的原理和方法。在内容安排上,《射频电路设计:理论与应用》力图让尚未系统学习过电磁场理论的电子类学科学生和工程技术人员也能了解和掌握射频电路的基本设计方法
    发表于 08-11 17:21

    FPGA设计基本原则及设计思想

    、在有效时钟沿到达后,数据输入至少还将稳定保持采样寄存器的Hold时钟之久,这条原则简称满足Hold时间原则。九、同步时序设计注意事项 异步时钟域的数据转换,组合逻辑电路的设计方法,同
    发表于 10-11 12:26

    RTL8308+RTL4204交换机原理图

    RTL8308+RTL4204交换机原理图 RTL8308电路原理图 RTL4204 原理图
    发表于 10-18 16:35 504次下载

    RTL TTL探头电路

    RTL TTL探头电路
    发表于 12-24 14:39 1098次阅读
    <b class='flag-5'>RTL</b> TTL探头<b class='flag-5'>电路</b>图

    RTL,RTL是什么意思

    RTL,RTL是什么意思 电阻晶体管逻辑电路 RTL电路-电
    发表于 03-08 11:19 1.4w次阅读

    设计复用的RTL指导原则

    设计可复用的基本要求是RTL 代码可移植。通常的软件工程指导原则RTL 编码时也适用。类似软件开发,基本的编码指导原则要求RTL 代码简单
    发表于 12-24 00:46 32次下载

    RTL8710模块常用使用方法

    Realtek 物联网(iot)领域SOC芯片rtl8710的使用方法
    发表于 05-25 10:01 0次下载

    RTL8111E和RTL8105E应用参考电路pdf下载

    RTL8111E和RTL8105E应用参考电路
    发表于 03-07 11:24 48次下载

    RTL8316D应用参考电路资料pdf下载

    RTL8316D应用参考电路
    发表于 03-09 09:32 50次下载

    RTL8306SD和RTL8306SM应用参考电路pdf

    RTL8306SD和RTL8306SM应用参考电路
    发表于 03-09 09:40 74次下载

    RTL8822 wifi模块电路原理图

    RTL8822 wifi模块电路原理图
    发表于 10-29 17:26 103次下载

    RTL8187和RTL8225USB无线网卡电路图与RTL822电路

    RTL8187和RTL8225USB无线网卡电路图+RTL8225电路图注释分析
    发表于 09-07 17:48 5次下载

    RTL8211 DEMO电路参考设计

    RTL8211 DEMO 电路参考设计
    发表于 01-29 09:36 33次下载