如标题所示,结构 Verilog 和行为 Verilog 之间的主要区别是什么?
6 回答
根据 IEEE 标准,这些术语没有严格的定义。然而,通常,结构是指使用模块实例来描述设计(尤其是对于较低级别的构建块,例如与门和触发器),而行为是指使用always
模块来描述设计。
门网表总是结构性的,而 RTL 代码通常是行为性的。RTL 通常具有时钟门和同步器单元的实例。
结构
这里的功能是使用基本组件定义的,例如反相器、MUX、加法器、解码器、基本数字逻辑门等。就像连接和布置可用于实现功能的电路的不同部分一样。
行为的
Verilog 中的行为描述用于以算法的方式描述设计的功能。Verilog 中的行为建模使用类似于 C 语言结构的结构。此外,这分为 2 个子类别。
- (a)连续
将数据分配给输出是连续的。这将使用显式的“分配”语句或通过在其声明期间为其分配一个值来实现。在分配的情况下,输入的任何变化都会立即影响输出。因此输出将被声明为
wire
- (b)程序
这里的数据分配不是连续进行的,而是发生在敏感度列表中指定的特定事件上。这种类型的建模方案是使用诸如“always”或“initial”之类的程序块来实现的。
在这里,必须将输出变量定义为,
reg
因为它们需要保持先前的值,直到在指定的敏感度列表发生任何变化后发生新的赋值。
希望这可以帮助 :)
结构 Verilog 通常指的是可合成的(具有准确且有意义的硬件实现)的 Verilog 代码,通常以寄存器传输级别 (RTL) 编写。另一方面,行为 Verilog 通常是对更高级别的硬件或功能的行为描述。行为代码不必是可合成的,例如,当您在按时间尺度缩放的 verilog 代码中定义延迟时,合成器在将代码转换为逻辑和硬件时不会考虑它,而是具有模拟目的。结构和行为 VHDL 也是如此。
行为不使用逻辑门描述您可以使用已经在 verilog 中定义的 And,Or,Not 门,而结构使用逻辑门描述您需要一个名为 (And/Or/Not) 的模块并描述它的作用& / | /~。
结构 Verilog 用简单的词处理原语,如和、或、非等。原语从库中调用/推断,并与输入输出端口连接。例子
module structural(y,a,b);
input a,b;
output y;
and a1 (y,a,b); // and is the primitive inferred and a1 is the instance name.
endmodule
行为verilog处理系统的逻辑或行为。它处理复杂的逻辑实现,这就是为什么在工业上都实现称为 RTL 的系统行为模型。一旦前端工程师使用 SV/UVM 验证行为 RTL,然后此 RTL 将转换为门级,即用于综合的结构。
有关详细信息,请参阅 Samir Palnitkar 编写的 verilog 书。
Verilog既是一种行为语言,又是一种结构语言。根据设计的需要,每个模块的内部可以在四个抽象级别上定义。结构 Verilog 描述了一个模块如何由更简单的模块或基本原语(如门或晶体管)组成。行为 Verilog 描述了如何将输出计算为输入的函数。
行为级别
-> 这是 Verilog HDL 提供的最高抽象级别。主要使用“always”和“initial”块构建。
数据流级别
-> 在这个级别,通过指定数据流来设计模块。条件描述使用“分配”关键字。
门级
-> 模块根据逻辑门和这些门之间的互连来实现。
Switch level
-> 这是 Verilog 提供的最低级别的抽象。一个模块可以通过交换机、存储节点以及它们之间的互连来实现。