Skip to Main Content

什么是寄存器传输级(RTL)设计?

寄存器传输级(RTL)设计是数字电路设计流程中的一个重要步骤。在指定电路的物理布局之前,它在抽象级定义和优化数字设计的逻辑功能。工程师使用VHDLVerilog等硬件描述语言(HDL),将其设计的高级预期行为转换为软件代码。 

HDL最早于20世纪80年代被开发出来,最初其能够在RTL级进行建模,然后发展为完整设计系统,使工程师能够对电子电路中的数据流进行建模。 

随着设计变得更大、更复杂,制造技术实现了新的逻辑运算和数学运算方式,RTL设计方法也齐头并进。随着时间的推移,RTL设计已成为数字设计流程中的一个必要步骤,可在系统规范和电路设计步骤之间建立连接。 

RTL描述的抽象特性支持快速的研究和设计迭代,以便在深入探索设计流程中更复杂和耗时的阶段之前获得可接受且优化的设计。

RTL设计是集成电路设计周期的关键部分,它使工程师能够在寄存器、运算符和数据流阶段优化其设计,然后再开始考虑物理组件的实现及其连接方式。在本文中,我们将介绍一些基础知识,描述RTL设计适用于数字电路设计的场景,并解释RTL设计流程。然后,我们将演示RTL设计如何被运用于现场可编程门阵列(FPGA)和专用集成电路(ASIC)芯片设计,并展望RTL设计的未来前景。

RTL设计基础知识

“寄存器传输”是指如何用语言描述寄存器之间的数据流,以及如何对数据应用逻辑运算和数学运算。工程师使用RTL设计来描述功能模块,以便定义用于执行特定功能的分立组件的行为。每个功能模块都有关于模块中的寄存器的描述(被称为时序电路),以及包含功能模块逻辑运算的组合电路。此外,工程师还使用HDL来描述如何连接功能模块,以定义流经电路的数据流。

RTL设计的强大之处在于,它将一个复杂的系统分解为由HDL代码表示的相对简单的模块。以下给出了一些重要的基础知识,有助于您了解如何使用RTL设计。

寄存器

在RTL设计中,可以存储一定数据量的硬件元件被称为寄存器。它们通常以D触发器的形式实现。可以将寄存器的值读取为逻辑运算的输入,或设置为运算的输出。RTL设计的基本目的是描述数据在寄存器之间的流动方式以及如何通过运算更改数据。

硬件设计语言(HDL)

RTL设计中最重要的部分是描述电路行为的代码。HDL是一种规范语言,看起来非常像编程语言,包含变量、函数调用、If-then-else和CASE等逻辑语句、布尔语句和数学。不过,HDL专门用于描述电子电路(通常是集成电路)的行为和结构。HDL与编程语言的一大区别在于,它的语言中包含时间的概念,因此电路中的时钟可以触发运算。  

这可以通过在电路中使用定义数字时钟值的变量来实现,例如在这个逆变器的简单VHDL示例中,当时钟值clk从低电平状态变为高电平状态(上升沿)时,输出(Q)被设置为输入值(D):

D <= not Q;

process(clk)
begin
    if rising_edge(clk) then
        Q <= D;
    end if;
end process;

最常用的HDL,即超高速集成电路硬件描述语言(VHDL),是一种冗长、强类型的语言,其语法与C语言不同。这种HDL是描述更复杂系统设计的首选。 

另一种常见的HDL是Verilog或其超集SystemVerilog。它更简洁、属于弱类型且灵活,其语法看起来与C语言类似。其易于学习而且容易创建描述,因此工程师在刚开始设计或电路不太复杂时更喜欢使用它。Verilog和VHDL均被IEEE定义为行业标准。 

这里给出了使用两种语言的与门的简单示例。与门有两个输入和一个输出。当两个输入都等于1时,输出为1。当它们不相等或都被设为0时,输出为0。 

VHDL对与门的描述如下所示: 

entity my_and is -- First, you define the entity
  port (
     inp1: in  std_logic; -- The first port
     inp2: in  std_logic; -- The second port
     rst: out std_logic   -- The output port
  );
end my_and;

architecture blk of my_and is -- Next, define the architecture
begin
  process(inp1, inp2) -- With the inputs, do the following
  Begin
    -- Use a simple if-then-else statement
    if((inp1=’1’) and inp1=’1’))then
      rst <= ’1’;
    else
      rst <= ’0’;
    End if;
  end process
end blk;

Verilog对与门的描述如下所示:

module my_and(inp1,inp2,rst); // define the module call
input inp1, inp2;             // define inputs and output
output rst;

assign rst = inp1 & inp2;    // use the & (and) operator

endmodule

逻辑将取两个输入端口的值,如果两个端口均为1时,则逻辑将输出设置为1。这是一个简单的示例,但这种类型的代码可以表示系统中的每个实体,然后可以进行组合,以定义整个数字电路。典型的基本构建块包括加法器、乘法器、计数器、存储器和状态机。设计工程师定义系统后,代码就会发送到编译器。如果编译时没有任何错误,工程师可以使用结果来测试其系统。

逻辑运算

RTL设计中有两种类型的运算。第一种是逻辑运算,它对寄存器中存储的数据执行按位运算和修改。通过在HDL中定义逻辑行为来创建AND、OR、NOT、XOR和移位等逻辑运算。上面的示例展示了如何在VHDL和Verilog中表示AND。逻辑运算对应硬件中的逻辑门。 

算术运算

RTL设计中的第二种运算是算术运算。它们读取寄存器中的数据,并进行加、减、乘、除运算。其在HDL中以标准的数学运算符表示。例如,在VHDL中添加两个数字的代码为:

rst <= inp1 + inp2;

——其中,inp1和inp2是两个输入寄存器,而rst被赋值给输出寄存器。RTL中的算术运算表示专用的物理元素,例如加法器、减法器、乘法器和除法器。 

同步和异步操作

RTL设计可以以同步或异步方式表示数据流。在同步方式中,例程由函数的系统时钟输入执行或触发。在异步方式中,当一个或多个输入端口的值以特定方式发生变化时,就会执行例程。这可以通过检查时钟输入或非时钟输入的输入值来实现,即查看它们是否随if语句发生了变化。 

RTL在集成电路设计中的作用

现代集成电路(IC)设计流程涉及获取器件所需操作的规范,并将其转化为封装半导体芯片。RTL设计提供的抽象级别使工程师能够专注于系统的更高级别功能,而无需考虑如何实际实现设计的细节。 

ic-design-process-rtl.jpg

集成电路设计流程。RTL设计在系统规范和电路设计步骤之间建立了连接。

IC设计流程的第一步是定义系统规范和架构设计。这些信息,会被转换为HDL代码。然后,工程师使用该代码来定义功能和逻辑设计。在这项工作完成后,设计被转换为用于创建电路设计的网表,接下来完成设计流程的其余部分。 

应在设计流程中尽早完成使用RTL设计的抽象表示,即在花费时间和资金进行物理设计、验证物理设计或实际制造硬件之前。要将RTL设计步骤融入到流程中,不仅需要在开始阶段将系统规范进行良好集成,还需要强大的工具,以在完成RTL设计后,将寄存器、运算和数据流转换为实际电路。 

RTL设计流程

RTL设计流程的目标是定义和优化集成电路(通常是FPGA或ASIC器件)的功能。设计工程师使用RTL设计流程,首先定义器件的逻辑和流程,以测试和优化系统,然后将RTL定义转换为网表。典型的RTL设计方法包含以下五步。

1.高层次综合 

流程中的第一项任务是通过尽可能少的编辑将器件规范转换为HDL代码。在大多数情况下,工程师用C或C++等标准编程语言表示器件所需的行为。软件工具将软件模型中的算法分解成所选的规范语言。更简单的设计可以跳过此步骤,但对于更复杂的设计,这可以节省大量工作量。 

2.RTL编码

然后,工程师创建或优化代码。设计人员要了解特定寄存器的详细信息、需要的运算以及数据的流动方式。这一步的一个重点是使用模块来描述常见运算和系统的特定部件。当创建模块后,这些代码可以在适用的情况下重复使用,从而大幅简化整体设计的复杂性。 

3.优化性能、功耗和面积(PPA)

优化过程在编码完成后开始。这一步的目标是提高性能,最大限度地减少功耗并减小设计的物理尺寸。 

时序和逻辑仿真

仿真工具可用于在整个系统中进行时序分析和跟踪寄存器值。在寄存器传输级检查设计,以确保电路中不存在时序问题,并确保运算产生预期的输出。在这个阶段,设计团队可以在设计流程中尽早调试系统中的任何问题,包括功耗毛刺。 

功耗估算

系统中的每个器件都会消耗一定的功耗,设计工程师需要知道具体的功耗,并对其设计进行迭代,以了解功率分布并最大限度地降低功耗。Ansys PowerArtist™软件被许多头部半导体设计企业用于在RTL设计阶段分析和降低功耗。其提供快速的迭代时间,使设计团队能够对功耗进行交叉分析,识别低效能功耗的RTL代码,并标记设计中的每次浪费的切换。 

面积最小化

集成电路中的每个组件都会占用物理空间,这些组件之间的布线同样如此。尽管RTL设计流程不考虑组件的物理尺寸,但它需要考虑组件的数量以及组件之间的连接复杂性。

4.验证

对设计进行优化后,必须对其进行验证,以确保符合全部规范。这是设计流程中的关键部分,必须检查所有设计要求,然后才能继续推进设计。该步骤可以通过RTL仿真或形式验证来完成。 

RTL仿真:利用各种软件工具来动态地验证设计。应用输入矢量,并将得到的输出矢量与预期结果进行比较。输入和输出通常用波形表示,以便设计工程师可以直观地检查系统的行为。 

形式验证:这是一种静态的验证流程,利用自动化将一组行为预期转换为数学算法,以探索系统的整个运算空间。然后对结果进行数学上的求值,以验证正确性。 

5.RTL综合

当完全验证系统的设计后,RTL综合可用于将RTL设计的HDL代码表示转换为门级网表。这是在电子设计自动化(EDA)工具中,将最终原理图转换为物理布局的工具的前端。Synopsys等公司已经在EDA平台中构建了各种综合工具。 

在FPGA和ASIC设计流程中使用RTL设计

集成电路可分为两类。一类是专用集成电路(ASIC),其面向特定应用或任务而定制设计。ASIC的芯片逻辑一旦构建完成,就无法更改。ASIC芯片的示例包括内存模块、数字录音设备、优化的信号处理器、微处理器、中央处理器(CPU),甚至像片上系统一样复杂的组件,包括I/O、CPU、内存等。 

另一类是可编程门阵列(FPGA)芯片。这类半导体芯片,在制造完成后可以重新编程。FPGA不是将逻辑内置于芯片的几何结构中,而是通过连接网格将逻辑块阵列连接起来,并且可以对逻辑块进行编程。 

在这两种设计流程的第一部分中,RTL设计发挥着相同的作用。在完成RTL综合后,ASIC设计流程需要工程师规划和布局物理电路,这被称为布局规划。在FPGA设计中,RTL代码被直接转换为网表,该网表了解可用的逻辑块,并在布局和布线步骤中配置这些块。 

RTL设计的未来

使用硬件描述语言来表示数字系统的预期行为始于20世纪70到80年代。其随着超大规模集成(VLSI)的普及而获得显著发展,并与IC设计的进一步发展齐头并进。集成电路的特征尺寸在持续缩小,时钟速度不断增加,单个芯片中包含了更多的功能,因此设计工程师面临着越来越多的挑战。 

设计复杂性并未降低,而RTL工具将继续应对这些挑战。为设计人员开发定义新一代集成电路的工具套件的企业,将重点关注几个关键领域,以提高RTL设计流程的易用性和功能。一些重点领域包括:

  • 功耗降低

    电源管理仍然是整个集成电路设计流程中的最大挑战之一,而RTL优化仍然是了解和管理系统中功耗压降的最佳阶段。PowerArtist软件等工具的增强功能提供了更多选项、更高可见性和更快的速度,将帮助团队应对这一挑战。

  • 工具之间的无缝集成

    用于设计、仿真、验证和签核的工具的数量不断增加,现有工具的功能也在随之增加。提供这些工具的企业和IEEE等行业组织需要通过更新和改进标准,并提供尽可能实现应用之间的无缝流程的工具,以跟上发展步伐。

  • 将AI纳入设计流程

    集成电路设计流程中的许多工具都利用机器学习(ML)和专家系统来加速流程步骤,尤其是在物理电路布局中。随着ML算法的改进和创成式人工智能(AI)工具的使用,这种情况只会继续下去,AI/ML将提供最有可能的后续步骤或问题解决方案建议。

  • 高层次综合的改进

    RTL领域的供应商正在努力提高工程师的能力,让他们能够以更快的速度和更接近于最佳配置的设计,将其高层次系统规范转换为高层次硬件语言。

  • 更智能的RTL综合

    在RTL综合步骤中,在将RTL描述中的门级转换为实际晶体管时,生产力和优化有显著提升的空间。随着物理几何结构进入设计阶段,设计者有机会做出明智的决策,从而简化电路布局的下游流程。

相关资源

SiFive利用RISC-V内核最大限度地提高计算密度

在此次与Ansys的联合演示中,SiFive将介绍如何实现最大的计算密度——计算每平方毫米的马力和兆瓦一直是SiFive RISC-V处理器内核产品组合的驱动目标。

在RTL阶段解码毛刺功耗(Glitch Power):毛刺功耗估算和优化的左移方法

在本白皮书中,了解Ansys PowerArtist软件和PowerArtist-SC平台如何在设计流程的早期阶段为设计人员提供有关毛刺功耗的丰富信息。

利用早期RTL功耗设计方法优化处理器功耗性能比

了解AMD如何通过严格跟踪多个带宽场景下的功耗,识别功耗严重浪费的区域,并借助修改高功耗影响力的RTL代码来解决这些问题。