Verilog HDL 基础语法

news2024/10/6 8:37:20

一、逻辑值

0: 逻辑低电平,条件为假
1: 逻辑高电平,条件为真
z: 高阻态,无驱动
x: 未知逻辑电平

二、实际例子

1. 模块名一般与文件名相同

在这里插入图片描述
线网型变量会被映射成一条真实存在的物理连线。
寄存器型变量会被映射成一个寄存器。


2. 参数

parameter 与 localparam 都可以作为参数的关键字,进行参数的定义。

区别:
  1. 如果参数关键字使用 parameter,我们可以在顶层文件通过实例化,来对此功能模块中的参数进行修改。如截图中的红框所示。
  2. localparam 只能在模块内部使用,不能进行实例化。

在这里插入图片描述


3、常量

基数表示法
格式:[换算为二进制后位宽的总长度]['][数值进制符号][与数值进制符号对应的数值]

8'd171: 位宽是8bit,十进制的171。

[数值进制符号]中如果是[h]则表示十六进制,如果是[o]则表示八进制,如果是[b]则表示二进制,如果是[d]则表示十进制。

8'hab: 表示8bit的十六进制数 ab;
8'o253: 表示8bit的八进制数 2538'b1010_1011: 表示 8bit 的二进制数 1010_1011,下划线增强可读性。

[换算为二进制后位宽的总长度]:可有可无,verilog 会为常量自动匹配合适的位宽。
当总位宽大于实际位宽,则自动在左边补0,总位宽小于实际位宽,则自动截断左边超出的位数。
'd7与8’d7: 表示相同数值,8’d7换算为二进制就是8’b0000_0111,前面 5 位补 0;
2’d7 换算为二进制就是 2’b11,超过 2 位宽的部分被截断。
如果直接写参数,例如100,表示位宽为 32bit 的十进制数 100.


4、赋值方式

阻塞型赋值

声明 3 个变量,a 的值是 1,b 的值是2,c 的值是 3.
阻塞赋值可以理解为顺序执行,也就是说第一句语句执行完毕之后, 才会执行第二句语句。
在这里插入图片描述


非阻塞型赋值

非阻塞型赋值语句是并行执行的。即在同一时刻,多条语句是同时执行的。
声明 3 个变量,a 的值是 1,b 的值是2,c 的值是 3.
b 的值目前是 2,a 的值目前是 1. 在同一时刻,将 b 的值赋值给 a,将 a 的值赋值给 c.
在这里插入图片描述


三、算术运算符

+  (加法,如 assign c=a+b; 即把a与b的和赋值给c)
-  (减法,如 assign c=a-b; 即把a减b的差赋值给c)
*  (乘法,如 assign c=a*3; 即让a和3相乘,结果赋值给c,但是一般不用乘号)
/  (除法,如 assign c=a/2; 即让a和2相除,结果赋值给c,一般也不用除号)
%  (求模,或称为求余,要求%两侧均为整型数据,5%3的值为2,用在测试文件)

四、归约运算符、按位运算符

以 “&” 操作符为例,“&” 操作符有两种用途,既可以作为一元运算符(仅有一个参与运算的量),也可以作为二元运算符(有两个参与运算的量)。
当 “&” 作为一元运算符时表示归约与,&m 是将 m 中所有比特相与,最后的结果为 1bit。
例如:
&4’b1111=1&1&1&1=1’b1
&4b1101=1&1&0&1=1’b0

当 “&” 作为二元运算符时表示按位与,m&n 是将 m 的每个比特与 n 的相应比特相与,在运算的时候要保证 m 和 n 的比特数相等,最后的结果和 m(n) 的比特数相同。
例如:
4’b1010&4’b0101=4’b0000
4’b1101&4‘’b1111=4’b1101

“~&”、“ ^ ”、“ ~^ ”、“|”、“ ~|” 同理。


五、逻辑运算符

以 “&&” 操作符为例,“&&” 表示逻辑与,运算规则:逻辑与运算符号两边只有真或者假,非零表示真,零表示假,逻辑运算符两边都不为零则结果为 1,否则为 0。
例如:
a=4’ha, b=4’d0, c=a&&b, 则c的值为0.
“ ||(逻辑或)”、 “==(逻辑相等)”、“!=(逻辑不等)” 同理。


六、关系运算符

a<b      a小于b
a>b      a大于b
a<=b     a小于或等于b
a>=b     a大于或等于b
注:关系运算符一般在条件判断时用到,例如 if 的判断语句,如果 if 后面接的判断语句是真的,则返回值为1,
否则为0.

七、移位运算符

移位运算符是二元运算符,左移符号为 “<<”,右移符号为 “>>”,将运算符左边的操作数左移或右移指定的位数,用 0 来补充空闲位。
b <= a<<1; 即让 a 的每一位都往左移动1位,结果赋值给 b;
b<= a>>2; 即让 a 的每一位都往右移动2位,结果赋值给 b;

在应用移位运算符的时候一定要注意它的这个特性,那就是空闲位用 0 来填充,也就是说,一个二进制数不管原数值是多少,只要一直移位,最终全部会变为 0。

例如:4’b1000 >>3 后的结果为 4’b0001, 4’b1000>>4 的结果为 4’b0000。

移位运算符在使用时,可代替乘法和除法,左移一位可以看成是乘以 2,右移一位可以看成是除以 2,但要注意位宽的拓展。


八、位拼接运算符

位拼接运算符由一对花括号加逗号组成 “{,}”,拼接的不同数据之间用“,”隔开。
例如:将 8bit 的 a、3bit 的 b、5bit 的 c ,按顺序拼接成一个 16 位的 d, 表示方法为:d={a,b,c};


九、条件运算符

条件运算符,“ ?:”,是一个三元运算符,即有三个参与运算的量,条件表达式的一般形式为:表达式1 ?表达式2 :表达式3。
执行过程是:当表达式1 为真,则表达式2 作为条件表达式的值,否则以表达式3 作为条件表达式的值。
例如:当 a=6, b=7, c=(a>b)?a:b的结果为7。
要注意的是,使用条件表达式时 “?” 和 “:” 是一对,不可以只是用一个。


十、优先级

总的优先级关系为 :归约运算符 > 算数运算符 > 移位运算符 > 关系运算符 > “==” 和 “!=” > 按位运算符> “&&” 和 “‖” >条件运算符,总的来说是一元运算符 > 二元运算符 > 三元运算符。
如果在编写代码的时候对这些关系容易混淆,最好的方式就是使用 “()” 增加优先级。


十一、 if-else 条件分支语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


十二、case 分支控制语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


十三、系统函数

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/160760.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2、JavaScript快速入门

2.1 引入JavaScript 内部标签 <!-- 在script标签内写JavaScript(简称js)代码&#xff0c;代码块可以放在head中&#xff0c;也可以放在body中--> <script>// alert:弹窗alert(Hello,world!); //注意以分号结尾 </script>外部引入 hello.js alert(Hello,worl…

分享120个ASP源码,总有一款适合您

ASP源码 分享120个ASP源码&#xff0c;总有一款适合您 链接&#xff1a;https://pan.baidu.com/s/1WwTsUTLS_qLvP-TC1w-1vQ?pwdvxpk 提取码&#xff1a;vxpk 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c;大家下载…

OB0207 obsidian 自动获取url链接:auto-link-title插件使用

序号解读&#xff1a; 01——软件基础使用、基础语法 02——插件使用 03——综合实战 0 写在前面 Ob社区插件汇总&#xff1a;Airtable - OB社区插件汇总 - Johnny整理 - 每周更新 - B站 Johnny学Explore the "OB社区插件汇总 - Johnny整理 - 每周更新 - B站 Johnny学&qu…

过去一年渲染了3亿帧,助力了63.81亿票房、1150亿播放量丨瑞云渲染年度大事记

2022年&#xff0c;注定是充满未知和挑战的一年。抗疫三年&#xff0c;终于在2022年底迎来放开&#xff0c;我们怀着忐忑的心情告别了核酸、行程码和封控&#xff0c;成为了自己健康的第一负责人。这段时间大家应该都忙着和病毒做斗争吧&#xff0c;瑞云各个岗位的小伙伴们也都…

6.7、万维网(如HTTP超文本传输协议)

1、基本介绍 万维网 WWW (World Wide Web&#xff09;并非某种特殊的计算机网络\color{red}并非某种特殊的计算机网络并非某种特殊的计算机网络。 它是一个大规模的、联机式的信息储藏所&#xff0c;是运行在因特网上的一个分布式应用。 万维网利用网页之间的超链接\color{r…

Web进阶:Day5 移动适配、rem、less

Web进阶&#xff1a;Day5 Date: January 10, 2023 Summary: 移动适配、rem、less 移动适配 移动适配指网页元素的宽高都要随着设备宽度等比缩放 rem &#xff1a; 目前多数企业在用的解决方案 vw / vh&#xff1a;未来的解决方案 rem 目标&#xff1a;能够使用rem单位设置网…

2022年跨境物流指数研究报告

第一章 行业概况 指提供跨境物流服务的行业。跨境物流是指在电子商务环境下&#xff0c;依靠互联网、大数据、信息化与计算机等先进技术&#xff0c;物品从跨境电商企业流向跨境消费者的跨越不同国家或地区的物流活动。 图 物流运输行业产业链结构图 资料来源&#xff1a;资产…

Tapdata Cloud 场景通关系列:集成阿里云计算巢,实现一键云上部署真正开箱即用

【前言】作为中国的 “Fivetran/Airbyte”, Tapdata Cloud 自去年发布云版公测以来&#xff0c;吸引了近万名用户的注册使用。应社区用户上生产系统的要求&#xff0c;Tapdata Cloud 3.0 将正式推出商业版服务&#xff0c;提供对生产系统的 SLA 支撑。Tapdata 目前专注在实时数…

VS2010 安装NuGet NPIO 基础连接已经关闭:发送时发生错误

1.下载Nuget并安装 NuGet Package Manager - Visual Studio Marketplace 工具->扩展管理器可看见 2.安装NPOI 3. 如果遇见基础连接已经关闭:发送时发生错误 要把https://packages.nuget.org/改为https://www.nuget.org/api/v2/ VS2019要使用https://www.nuget.org/api/v…

OAuth2.0 详解

OAuth2.0介绍 OAuth&#xff08;Open Authorization&#xff09;是一个关于授权&#xff08;authorization&#xff09;的开放网络标准&#xff0c;允许用户授权第三方 应用访问他们存储在另外的服务提供者上的信息&#xff0c;而不需要将用户名和密码提供给第三方移动应用或分…

【日常系列】LeetCode《26·动态规划1》

数据规模->时间复杂度 <10^4 &#x1f62e;(n^2) <10^7:o(nlogn) <10^8:o(n) 10^8<:o(logn),o(1) lc 509【剑指 10-1】&#xff1a;斐波那契数列问题 - 动态规划入门 https://leetcode.cn/problems/fibonacci-number/ 提示&#xff1a; 0 < n < 30 #方案…

WebSocket概念及实现简易聊天室

WebSocket实现简易聊天室 1 WebSocket介绍 网络通信协议是HTML5开始提供的一个单个TCP连接上进行全双工通信协议 1.1 诞生原因&#xff08;http无状态、无连接&#xff09; ①HTTP协议&#xff1a; 由于HTTP协议是一种无状态、无连接、单向的应用层协议&#xff0c;通信请求只…

Java反射机制是什么?

Java 反射机制是 Java 语言的一个重要特性。在学习 Java 反射机制前&#xff0c;大家应该先了解两个概念&#xff0c;编译期和运行期。 编译期是指把源码交给编译器编译成计算机可以执行的文件的过程。在 Java 中也就是把 Java 代码编成 class 文件的过程。编译期只是做了一些…

Qt Creator添加自定义向导

文章目录一、前言二、前置说明三、wizard.json解析3.1、宏观结构3.2、微观解释3.2.1、向导信息3.2.2、定义变量3.2.3、页面定义3.2.4、文件生成四、实战一、前言 在Qt Creator中&#xff0c;当我们选择新建时&#xff0c;Qt自带了很多选项&#xff1b; 如果我们在开发过程中&a…

软件测试——使用mujava测试过程中

文章目录下载对应安装包步骤二、修改代码第二部分&#xff0c;修改对应测试文件下载对应安装包 分别下载junit.jar、mujava.jar和openjava.jar三个包&#xff0c;并设定对应系统路径。三个安装包的下载路径以mujava.jar为例子 设置系统环境变量&#xff0c;计算机》属性》高级…

golang实现一个linux命令ls命令(命令行工具构建)

希望2023可以听到这些话&#xff1a; 恭喜你得到了这份工作恭喜你的建议被采用了恭喜你被录取了恭喜你的考试顺利通过了恭喜你上岸了恭喜你升职了恭喜你加薪了恭喜你体检结果一切正常在这篇文章下面许个愿吧&#xff01; ls 命令 要实现ls&#xff0c;首先先我们复习一下ls命令…

FPGA知识汇集-ASIC向FPGA的移植

ASIC原型验证是整个验证环节中非常重要的步骤之一&#xff0c;也是将ASIC的代码移植到FPGA平台上最重要的原因&#xff0c;本文章的意义在于&#xff1a; 对于系统构架师&#xff0c;将帮助他们在选择商用模拟器还是自行设计方案之间做出更好的选择&#xff1b; 对于逻辑工程师…

一文读懂Go Http Server原理

hello大家好呀&#xff0c;我是小楼&#xff0c;这是系列文《Go底层原理剖析》的第二篇&#xff0c;依旧是分析 Http 模块&#xff0c;话不多说&#xff0c;开始。 从一个 Demo 入手 俗话说万事开头难&#xff0c;但用 Go 实现一个 Http Server 真不难&#xff0c;简单到什么程…

2、Eclipse安装与使用

目录 一、简介 二、下载 三、Eclipse安装 &#xff08;1&#xff09;找到Eclipse安装包&#xff0c;右键【以管理员身份运行】 2.因为是写Java程序&#xff0c;所以安装第一个喽 3.安装位置设置&#xff08;不建议C盘安装哦&#xff09;&#xff0c;点击【INSTALL】 3.点…

day02 数组 | 977、有序数组的平方 209、长度最小的子数组 59、螺旋矩阵II

1、题目 977、有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1…