RTL和行为验证之间的区别


Answers:


5

行为代码是较高级别的,通常无法进行综合。诸如循环,延迟和“初始”语句之类的构造都是行为性的。

RTL代码是较低级别的,旨在进行合成。它定义了一个电路,该电路是互连的寄存器以及对这些寄存器之间的信号执行的操作的组合。

取自Yahoo Answers,并立即在Google中发现!


1
如果迭代次数受到限制,则可以在rtl代码中使用循环。一些工具还支持使用初始块来指定加电条件。
彼得·格林

这个问题/答案实际上是Google给我的第一个答案
-Drewster,

3

“寄存器传送级别”代码是根据位于它们之间的寄存器和组合逻辑描述的代码,旨在用作综合工具的输入。该代码遵循该语言的可综合子集[1]。没有明确的延迟,所有时序均基于时钟沿。通常避免使用代表电平触发的锁存器的结构。寄存器通常以少量时钟为时钟源,其详细信息可以提供给时序分析器。通常期望组合逻辑[2]稳定在单个时钟周期内,这限制了它的复杂性。它比门级模型高,但它仍然定义了每个寄存器在每个时钟周期上具有什么值。

“行为”代码通常是在更高级别上描述用于仿真的行为的代码,但并非旨在可合成。它可用于描述仿真中设计周围的环境。在取代单个模块的详细RTL设计之前,可以将其用作设计的第一步,以使总体设计正确。

[1]允许的确切子集在综合工具之间有所不同。
[2]如果没有在一个周期内稳定下来,那么模拟和合成可能会得出不同的结果,并且时序分析器将显示违规,除非明确告知不要这样做。


2

更广义的定义。

行为代码:根据定义,它定义了数字组件的行为。它没有提供有关如何将其实施到实际硬件(综合)中的信息。它不会提供有关如何实现寄存器和门以执行所需操作的信息。它更像是用C语言编写算法或FSM。

RTL:这是数字组件的更精确形式。它提供了有关如何将代码实现为实际硬件(综合后)的信息。它还提供信息,说明如何在寄存器和门之间传输数据。


1

它是相同的语言,但是使用了不同的样式。有了经验,您可以迅速将它们区分开,以下是每种的一些特征:

行为Verilog代码通常看起来更像是在一个initial begin块中从上到下运行的顺序计算机程序。您可能会发现在顶级行为模块中没有定义输入/输出端口,因为输出可能是输出到模拟器工具的,例如$display()带有的控制台或文件系统$open或带有$dumpfile和的波形转储器$dumpvars。注意使用较长的仿真时间等待(例如)#4000和调用任务实现的语句之间的延迟wishbone_master.checked_read(addr, value)。对于这些更高级别的构造,尚不知道与之等效的综合技术。

用于综合的Verilog始终具有输入/输出端口,因为没有连接的端口,该模块没有副作用,可以消除[1]。延迟可能是通过计算某些特定时钟的周期来实现的。请注意,某些Verilog系统功能(例如,$clog2(PARAMETER)可能在代码中允许用于综合),因此,$function两种方式均不能保证的存在。合成代码往往包含许多独立的“过程”,每个过程都有一个敏感度列表。某些技术确实允许initial begin块用于内存初始化,因此这又不能保证。

最终,设计人员知道了编写代码的目的,并将使用综合工具集或在模拟器中适当地调用它。

[1],但某些IP模块可能会与内部芯片设施进行后门连接,例如JTAG

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.