verilog - HDL合成中的 "net"是什么

标签 verilog hdl synthesis

我是电路综合的初学者,我经常遇到net这个词,但我一直找不到它的标准定义。在我看来,它指的是任何类型的“黑匣子”,它接收输入并产生输出。因此它可以是大电路内的子电路,也可以是门阵列。我的理解正确吗?

最佳答案

不,你的理解不正确。

Verilog

在 Verilog 中,net 有一个精确的定义:

IEEE 1800-2012 规定:

6.5 Nets and variables

There are two main groups of data objects: variables and nets. These two groups differ in the way in which they are assigned and hold values.

A net can be written by one or more continuous assignments, by primitive outputs, or through module ports. The resultant value of multiple drivers is determined by the resolution function of the net type. A net cannot be procedurally assigned.

网络可以是多种类型之一,例如:wiresupply0wand,但迄今为止最常见的类型是电线

IEEE 1800-2012 继续说道:

Variables can be written by one or more procedural statements, including procedural continuous assignments. The last write determines the value. Alternatively, variables can be written by one continuous assignment or one port.

变量和网络的行为之间的主要区别在于它们从多个位置分配时的行为,如两个引号中的粗体文本所突出显示:

对于一个网络,如果您从多个位置分配给它,则其结果值由解析函数决定,对于内置网络类型(电线等)。解析函数的行为取决于网络类型,这就是网络类型之间的差异。因此,例如,对于wire,如果1'b01'b1都分配给它,则结果值将是1'bx(未知)如果两个赋值具有相同的强度。分辨率函数旨在模拟真实的电子设备。 (用户定义的网络类型和驱动强度也增加了复杂性,但我们在讨论中不考虑这些。)

对于一个变量,如果您从多个位置给它赋值,则其结果值由最后写入的值决定(就像普通的软件变量一样)。因此,例如,如果分配了 1'b0,然后分配了 1'b1,则结果值为 1'b1因为该值是最后分配的。不涉及解析函数,也没有任何驱动强度的概念。

网络和变量都用于对组合逻辑和顺序逻辑进行建模。何时可以使用网络以及何时可以使用变量是有规则的,并且使用哪个变量的选择受这些规则的约束(在上面的引号中给出)。这些在 verilog 中是严格的,但在 System-Verilog 中已经放宽到这样的程度:如果您不使用三态逻辑进行设计,则不需要 System-Verilog 中的网络。

VHDL 具有完全相同的区别。 Verilog 网络的 VHDL 等效项是信号; Verilog 变量的 VHDL 等效项是变量。然而,VHDL 中关于使用哪个位置的规则是不同的,而且更严格(这并不奇怪)。

电子产品

在电子学中,网络是指电流流过的一 block 金属。换句话说,网络是一个地方和另一个地方之间的连接。从物理上来说,它可以是 PCB 走线、电缆、接合线或 IC 上的金属连接。一般来说,在数字电子产品中,它最有可能是 IC 上的金属连接。

综合

因此,为了回答您的问题,如果有人在谈论逻辑合成器的输出(门级网表)时使用术语“网络”,那么他们几乎肯定意味着第二个想法:门级网表使用的任何格式的构造对一个门与另一个门之间的连接进行建模。由于综合器通常将其门级网表输出为 Verilog,因此门之间的这些连接可能无论如何都使用 Verilog 网络 进行建模(可能是电线)。

关于verilog - HDL合成中的 "net"是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42576340/

相关文章:

verilog - 使用 with 代替 iff 的功能覆盖问题

simulation - 为什么我的带有时钟的 SIM 卡永远不会完成?

verilog - 启用的模拟行为

verilog - 什么是在编译时抛出错误的 LINT/综合安全语句?

verilog - 我如何知道我的代码是否可综合? [Verilog]

Verilog 代码将进行模拟,但不会进行综合。

arrays - Icarus verilog 转储内存数组 ($dumpvars)

vhdl - 综合全局实例计数

android - 如何将我的应用程序的内部存储的读/写权限授予 TextToSpeech/MediaPlayer?

vhdl - 用于发送串行字节的简单 VHDL 测试平台程序?