RTL和行为verilog之间的区别

电器工程 数字逻辑 验证日志 视频文件 高密度脂蛋白
2022-01-19 08:45:21

有人能告诉我 RTL 和行为 Verilog 代码有什么区别吗?这两个层次的设计之间是否有明确的界限?

4个回答

行为代码是更高级别的,通常无法合成。循环、延迟和“初始”语句等结构是行为性的。

RTL 代码是较低级别的,旨在进行综合。它将电路定义为互连的寄存器和对这些寄存器之间的信号执行的操作的组合。

取自 Yahoo Answers 并立即通过 Google 找到!

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

“行为”代码通常是在更高级别描述行为以用于模拟的代码,但它并非旨在可综合。它可用于描述模拟中围绕您的设计的环境。它可以用作设计中的早期步骤,以便在各个模块的详细 RTL 设计被超越之前使整体设计到位。

[1] 允许的确切子集因综合工具而异。
[2] 如果它没有在单个周期内稳定下来,那么仿真和综合可能会给出不同的结果,并且时序分析器将显示违规,除非明确告知不要这样做。

更广义的定义。

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

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

这是同一种语言,但使用了不同的风格。凭借经验,您可以快速区分它们,以下是它们的一些特征:

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

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

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

[1] 某些 IP 块除外,这些 IP 块可能与内部芯片设施建立后门连接,例如 JTAG