RTL vs HDL?有什么不同


24

RTL和HDL之间的主要区别是什么?老实说,我搜索/谷歌搜索,但人们意见分歧。我记得有人说过HDL是用于描述数字电路的计算机语言,当它可合成时,就被认为是RTL。

Answers:


18

HDL是所有硬件定义语言(Verilog,VHDL等)的全称,以面向对象可以引用C ++,Java等的方式表示。

另一方面,RTL是描述电路的一种方式。

您用HDL语言编写RTL级别代码,然后将其翻译(通过综合工具)以使用相同的HDL语言或目标设备/过程所用的任何内容进行门级别描述。

让我给你举个例子。这是一行Verilog(HDL),描述了RTL中的多路复用器:

assign mux_out = (sel) ? din_1 : din_0;

您的综合工具可以将其转换为一组逻辑门,或者仅转换为最终设备支持的多路复用器宏。例如,它可能实例化一个mux宏

mux u3 (mux_out, din_1, din_0);

在这两种情况下,您都可以将相同的输入馈入块(RTL或门级),并且输出应相同。实际上,有些工具会根据RTL代码检查综合的输出,以确保该工具不会在综合过程中意外优化或更改会导致不匹配的内容。这称为形式验证。

由于各种原因,互操作性,更改的便利性,易理解性,您将数字电路的描述写为RTL而不是门级。


3
好的答案,再进一步完善... RTL采用给定的设计风格-逻辑云,寄存器,逻辑云,寄存器等,这意味着同步(时钟)设计。如果您在hdl中为无时钟(异步)设计编码,那么综合工具可能会使用RTL以外的其他工具。
占位符

实际上,有些工具会根据RTL代码检查综合的输出,以确保该工具不会在综合过程中意外优化或更改会导致不匹配的内容。这称为形式验证。不,不是。这称为逻辑等效检查或形式等效检查。形式验证是一个证明过程(使用数学方法,没有模拟/测试平台),证明您的硬件描述确实描述了要描述的行为。
Al Bundy

14

HDL(硬件描述语言)是使用的语言类型,Verilog / VHDL与非HDL javascript相比。

RTL(寄存器传输级别)是您正在编写的抽象级别。我所指的三个级别是行为,RTL,门级别。

行为具有最高的抽象层,它描述了整体行为,并且通常无法合成,但对验证很有用。

RTL通过暗示逻辑来描述所需的硬件。定义触发器,锁存器以及它们之间的数据传输方式。这是可综合的,综合可以更改/优化所使用的逻辑,但不能更改/优化行为。为门等开关多路复用器有时会反转信号,以更好地优化设计。

Verilog RTL暗示一个触发器:

logic a;              //logic is SystemVerilog, could be a 'reg'
logic k;              // Driven by RTL not shown
always @(posedge clk or negede rst_n) begin
  if (~rst_n) begin
    a <= 'b0 ;
  end
  else begin
    a <= k ;
  end
end

组合按位运算符:

logic [1:0] n;
logic [1:0] m;
logic [1:0] result;

assign result = n & m ;

门级是使用基本逻辑门(NAND,NOR,AND,OR,MUX,FLIP-FLOP)的设计。它不需要合成,也可以是合成的输出。这具有最低的抽象级别。它是您将在芯片上使用的逻辑门,但缺少位置信息。

门级Verilog(与上述功能相同):

wire a;
wire k;
DFFRX1 dffrx1_i0 (
  .Q (a),   //Output
  .QN( ),   //Inverted output not used
  .D (k),   //Input
  .CK(clk), //Clk
  .RN(rst_n)// Active Low Async Reset
);

组合式

wire [1:0] n;
wire [1:0] m;
wire [1:0] result;

AND2X1 and2x1_i0 (
  .Y( result[0]),
  .A( n[0]     ),
  .B( m[0]     )
);
AND2X1 and2x1_i1 (
  .Y( result[1]),
  .A( n[1]     ),
  .B( m[1]     )
);

如果将电路设计为MyReg[7..1] := MyReg[6..0]; MyReg[0] := SerInput; MyReg.Clk = SerClk; MyReg[7..0].AR = !InBus[7..0] & Load; MyReg[7..0].AP = InBus[7..0] & Load;(可以在Xilinx 9536 CPLD上使用具有异步复位/预设功能的模块实现异步并行负载移位寄存器),那么该电路将被视为RTL或门级吗?
supercat

在RTL中,门级看起来像是AND(.a(),.b()) OR(.a(),.b())纯粹的逻辑门。我给人的印象是RTL是您要综合的任何东西,甚至是组合电路,因为您仍在描述数据的变化,而不是逻辑门。
pre_randomize

1
抱歉,我没有遵循,将尝试澄清。RTL意味着一个触发器。门级实例化触发器。对于简单的电路,接上一堆逻辑门可能很简单。但可能无法有效利用电源区域。Atom处理器具有4700万个晶体管,大约相当于1000万个NAND2。您是否要定义和调试一千万个手动有线门?这是抽象一点的优点,我们可以研究和调试预期的行为。
pre_randomize

1
假设有人试图在HDL中指定74HC74。可以使用组合逻辑,仅同步触发器和透明锁存器的组合来合成这种设备的方法有很多种,但是我想不出任何不涉及竞争条件或造成行为异常的实现方式。硬件原语不存在(例如,如果D和Q高,CP或/ SD上的欠幅脉冲应该没有影响,但是在实现中,我可以认为此类脉冲可能导致亚稳和/或输出毛刺)。
超级猫

1
如何创建MyLatch它是实例化的基本单元还是隐式闩锁。如果您实例化门,则为门电平。如果您隐含该门,则为RTL。门级库将具有与之相关联的时序,用于对比赛条件/故障等进行建模。RTL仿真使用理想的组件运行。
pre_randomize
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.