Verilog 赋值

2024 年 8 月 29 日 | 4 分钟阅读

将值放入变量和线网称为赋值。有三种必要的形式

  1. 过程式
  2. 连续性
  3. 过程连续

合法的左侧值

一个赋值有两个部分,右侧 (RHS) 和左侧 (LHS),中间有一个等号 (=) 或小于等于号 (<=)。

赋值类型左侧
过程式
  • 变量(向量或标量)
  • 整数、向量寄存器或时间变量的位选择或部分选择。
  • 内存字。
  • 上述任何内容的串联。
连续性
  • 线网(向量或标量)
  • 向量线网的位选择或部分选择。
  • 位选择和部分选择的串联。
过程连续
  • 变量或线网(标量/向量)
  • 向量线网的部分选择或位选择。

RHS 可以包含任何计算结果为最终值的表达式,而 LHS 指示将 RHS 的值分配到的变量或线网。

过程赋值

过程赋值发生在诸如 initial, always, taskfunctions 的过程中,用于将值放入变量中。变量将保存该值,直到下一次对同一变量的赋值。

当模拟在模拟期间执行此语句时,该值将被放入变量中。这可以通过使用控制流语句(例如 if-else-if、循环case 语句 机制)来修改和控制,从而达到我们想要的方式。

变量声明赋值

可以在声明变量时将其初始值放入变量中。赋值没有持续时间,并且保留该值,直到下一次对同一变量进行赋值。

注意:不允许将变量声明赋值给数组。

如果变量在声明期间以及在 initial 块中 0 时刻被初始化,如下所示,则评估顺序无法保证,因此可能具有 8'h05 或 8'hee。

连续赋值

这用于将值分配给标量和向量线网。每当 RHS 发生变化时,它就会发生。

它提供了一种对组合逻辑建模的方法,而无需指定门互连,并且更容易用逻辑表达式驱动线网。

每当 b 或 c 更改其值时,RHS 中的整个表达式都将被评估并使用新值更新。

线网声明赋值

这允许我们在声明线网的同一语句上进行连续赋值。

注意:只能进行一次声明赋值,因为线网只能声明一次。

过程连续赋值

这些是允许表达式连续分配给变量或线网的过程语句。这些是两种类型。

1. Assign deassign: 它将覆盖对变量的所有过程赋值,并使用 deassign 停用它。

变量的值将保持不变,直到变量通过过程或过程连续赋值获得新值。

assign 语句的 LHS 不能是部分选择、位选择或数组引用,但它可以是变量或变量的组合。

2. Force release: 这些类似于 assign deassign 语句,但也可以应用于线网和变量。

LHS 可以是线网的位选择、线网的部分选择、变量或线网,但不能是数组的引用以及变量的位或部分选择。

force 语句将覆盖对变量进行的所有其他赋值,直到使用 release 关键字将其释放。