类型为wire或类似数据类型的wire的信号需要连续分配值。 例如,考虑用于连接电路板上的部件的电线。 只要将+ 5V电池应用于导线的一端,连接到导线另一端的组件将获得所需的电压。
在Verilog中,这个概念是通过一个赋值语句实现的,其中任何连接或其他类似的连接(比如数据类型)都可以使用一个值连续驱动。该值可以是常量,也可以是由一组信号组成的表达式。 赋值语法以关键字Assign开头,后跟信号名,可以是单个信号,也可以是不同信号网络的串联。驱动强度和延迟是可选的,主要用于数据流建模,而不是集成到实际硬件中。对右侧的表达式或信号求值并赋值给左侧的nets的表达式。 assign <net_expression> = [drive_strength] [delay] <expression of different signals or constant value>延迟值对于为gates指定延迟非常有用,并且用于在真实的硬件中建模定时行为,因为该值指示了何时应该用所评估的值分配网络(net)。 规则使用assign语句时,需要遵循一些规则:
【1】LHS应该始终是标量或向量网络,或者标量或向量网络的串联,而绝对不能是标量或向量寄存器;
【2】RHS可以包含标量或向量寄存器和函数调用;
【3】只要RHS上的任何操作数的值发生变化,LHS就会使用新值进行更新;
【4】Assign语句也称为连续分配,并且始终处于活动状态。
在下面的例子中,一个叫out的网络是由一个信号表达式连续驱动的,i1和i2用逻辑&构成表达式。
如果将wire转换为端口并进行合成,我们将在合成后得到如下所示的RTL示意图。
|