FPGA基础 -- Verilog 表达式之操作符
🌟 一、Verilog 操作符全景图(类别总览)
类型 | 示例操作符 | 功能说明 | ||
---|---|---|---|---|
算术运算符 | + - * / % | 适用于有符号或无符号数 | ||
位运算符 | `~ & | ^ ^~ ~^` | 按位操作,每一位独立处理 | |
逻辑运算符 | `&& | !` | 逻辑判断,结果只有0或1 | |
比较运算符 | == != > < >= <= | 判断两个操作数关系 | ||
移位运算符 | << >> <<< >>> | 逻辑与算术移位 | ||
连接操作符 | {} | 拼接多个信号 | ||
条件操作符 | ? : | 三目选择符 | ||
赋值操作符 | = <= | 阻塞赋值、非阻塞赋值 | ||
其他特殊符号 | === !== | 包括 x/z 的比较 |
🧠 二、常用操作符详解 + 通俗比喻
1. 算术操作符:+ - * / %
👉 类比:你在厨房做饭,+
是加调料,-
是减少糖分,*
是倍量放水。
reg [7:0] a, b, result;
result = a + b; // 加法,电路中使用加法器
注意:/
和 %
在综合时较贵,FPGA 内部用 LUT 逻辑搭乘分块实现除法器或余数电路。
2. 位运算符:~ & | ^ ^~ ~^
👉 类比:这是“口罩操作”——每个位戴不戴口罩影响最终输出。
运算符 | 含义 | 示例 | 结果 | ||
---|---|---|---|---|---|
~a | 按位取反 | ~8'b00001111 | 8'b11110000 | ||
a & b | 按位与 | 8'b1100 & 8'b1010 | 8'b1000 | ||
`a | b` | 按位或 | `8’b1100 | 8’b1010` | 8'b1110 |
a ^ b | 异或 | 不同为1,相同为0 | |||
^~ 或 ~^ | 同或 | 与异或相反 |
💡 特点:位运算非常适合并行处理,通常用于掩码、滤波、控制寄存器中的某几位。
3. 逻辑运算符:&& || !
👉 类比:这像电路的“开关联动”机制。逻辑运算只关心0或非0。
if (a > 0 && b < 10) ...
⚠️ 逻辑运算有“短路”特性,类似 C 语言,第二个条件可能不会被计算。
4. 比较操作符:== != < > <= >=
👉 类比:这像小学生比较分数谁高谁低。
if (a == 8'd100) ...
特别的:
===
和!==
:会判断x
或z
(未知/高阻);- 常用于仿真阶段的断言和行为判断。
5. 移位操作符:<< >> <<< >>>
👉 类比:工人左移/右移箱子,有的用空盒补,有的复制边界盒。
运算符 | 类型 | 功能 | 补零? |
---|---|---|---|
<< | 逻辑左移 | 空位补0 | 是 |
>> | 逻辑右移 | 空位补0 | 是 |
<<< | 算术左移 | 与逻辑左移一样 | 是 |
>>> | 算术右移 | 符号位补全 | 否 |
例子:
8'b10000000 >>> 1 = 8'b11000000 // 如果是有符号数
6. 连接操作符 {}
👉 类比:拼积木。多个信号拼成一个更大总线。
assign result = {a[3:0], b[3:0]}; // 连接为8位总线
7. 条件操作符 ? :
👉 类比:打电话问“你要大杯还是小杯?”
assign result = (sel == 1'b1) ? a : b;
FPGA 综合中会转化为 MUX(多路选择器)逻辑。
8. 赋值操作符 =
和 <=
运算符 | 类型 | 语义 | 应用 |
---|---|---|---|
= | 阻塞赋值 | 立刻执行 | 组合逻辑建模 |
<= | 非阻塞赋值 | 时钟边沿后赋值 | 时序逻辑建模 |
举个反例说明差异:
// 错误写法:使用阻塞赋值建模时序逻辑
always @(posedge clk)a = b; // 错误!容易出现竞态// 正确写法
always @(posedge clk)a <= b;
🔍 三、操作符综合特性简述
- 多数操作符综合为 LUT 和组合逻辑;
/
%
一般需调用除法器 IP;- 移位运算在移位数为常量时资源少,动态移位则需 barrel shifter;
- 条件操作符通常综合为 MUX;
&a
表示对a
各个位求 归约与(例如全为1则输出1);!a
是逻辑非,~a
是位反,不可混用!
📘 四、练习建议
- 写一个 4bit 加法器 + 比较器;
- 使用
{}
拼接 2 个 8bit 信号为一个 16bit 总线; - 用
? :
模拟一个 2:1 多路选择器; - 分别用阻塞和非阻塞赋值写一个时钟寄存器模块,对比行为仿真结果。