当前位置: 首页 > news >正文

FPGA基础 -- Verilog 表达式之操作符

🌟 一、Verilog 操作符全景图(类别总览)

类型示例操作符功能说明
算术运算符+ - * / %适用于有符号或无符号数
位运算符`~ &^ ^~ ~^`按位操作,每一位独立处理
逻辑运算符`&&!`逻辑判断,结果只有0或1
比较运算符== != > < >= <=判断两个操作数关系
移位运算符<< >> <<< >>>逻辑与算术移位
连接操作符{}拼接多个信号
条件操作符? :三目选择符
赋值操作符= <=阻塞赋值、非阻塞赋值
其他特殊符号=== !==包括 x/z 的比较

🧠 二、常用操作符详解 + 通俗比喻

1. 算术操作符+ - * / %

👉 类比:你在厨房做饭,+ 是加调料,- 是减少糖分,* 是倍量放水。

reg [7:0] a, b, result;
result = a + b;  // 加法,电路中使用加法器

注意:/% 在综合时较贵,FPGA 内部用 LUT 逻辑搭乘分块实现除法器或余数电路。


2. 位运算符~ & | ^ ^~ ~^

👉 类比:这是“口罩操作”——每个位戴不戴口罩影响最终输出。

运算符含义示例结果
~a按位取反~8'b000011118'b11110000
a & b按位与8'b1100 & 8'b10108'b1000
`ab`按位或`8’b11008’b1010`8'b1110
a ^ b异或不同为1,相同为0
^~~^同或与异或相反

💡 特点:位运算非常适合并行处理,通常用于掩码、滤波、控制寄存器中的某几位。


3. 逻辑运算符&& || !

👉 类比:这像电路的“开关联动”机制。逻辑运算只关心0或非0

if (a > 0 && b < 10) ...

⚠️ 逻辑运算有“短路”特性,类似 C 语言,第二个条件可能不会被计算。


4. 比较操作符== != < > <= >=

👉 类比:这像小学生比较分数谁高谁低。

if (a == 8'd100) ...

特别的:

  • ===!==:会判断 xz(未知/高阻);
  • 常用于仿真阶段的断言和行为判断。

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 是位反,不可混用!

📘 四、练习建议

  1. 写一个 4bit 加法器 + 比较器;
  2. 使用 {} 拼接 2 个 8bit 信号为一个 16bit 总线;
  3. ? : 模拟一个 2:1 多路选择器;
  4. 分别用阻塞和非阻塞赋值写一个时钟寄存器模块,对比行为仿真结果。

相关文章:

  • FPGA基础 -- Verilog语言要素之数组
  • CMake指令:set_property和get_property
  • Tomcat本地部署Maven Java Web项目
  • Spring Boot + MyBatis + Redis Vue3 Docker + Kubernetes + Nginx
  • python大学生志愿者管理系统-高校志愿者管理信息系统
  • C++智能指针(详细解答)
  • 渣土车辆定位与监管:科技赋能城市建筑垃圾管理
  • 小米ROM下载安装
  • Java 常用类 Time API:现代时间处理的艺术
  • 项目的难点
  • 游戏技能编辑器之状态机的设计与实现
  • Visual Studio Code 的 AI 特性:开启智能编程新时代
  • 【图像处理入门】10. 计算机视觉基础:从人脸识别到文档矫正
  • 云计算-Raft算法报告-raft与paxos对比
  • opensuse安装腾讯会议
  • 第七天 Labview进阶(7.4 NI Vision简单使用)
  • OpenCV——图像形态学
  • OpenCV 图像仿射变换之旋转
  • Diffusion 扩散模型详解:驱动高质量 3D 内容生成的核心机制 (AI+3D 产品经理笔记 S2E05)
  • 使用扣子空间生成html个人主页
  • 梭子手做鱼网站/网站开发建站
  • 官方网站后台怎样做超链接/wordpress免费建站
  • wordpress网站主题/网页代码大全
  • 部门网站建设方案/北京seo公司华网白帽
  • 产品经理兼职做网站报酬/自己如何做链接推广
  • 色流网站怎么做/免费seo刷排名