Verilog基本语法概述
一、概述
Verilog 是一种用于数字逻辑电路设计的硬件描述语言,可以用来进行数字电路的仿真验证、时序分析、逻辑综合。
既是一种 行为级(可用于电路的功能描述) 描述语言又是一种 结构性(可用于元器件及其之间的连接) 描述语言。
二、Verilog模块基本概念
模块(block)是Verilog的基本单位,除了编译指令,其他的所有的设计代码都必须放在一个或多个模块中。
一个模块内部可以使用其他模块,称为实例。上层模块可以引用底层任意层次模块的变量,模块内部可以包含若干个 “块”。
三、Verilog模块总结
-
Verilog中的标示符可以是任意一组字母、数字、$符号和下划线符号的组合,但标示符的第一个字符必须是字母或者下划线。标示符区分大小写 -
Verilog程序是有模块组成的,每个模块嵌套在module和endmodule声明语句中。模块是可以进行层次嵌套的 -
每个
Verilog源文件中只准有一个顶层模块,其他为子模块 -
每个模块要进行端口定义,并说明输入输出端口,然后对模块的功能进行行为逻辑描述
-
程序书写格式自由,一行可以写几个语句,一个语句可以分几行写
-
除了endmodule语句,begin…end语句,fork…join语句外,每个语句和数据定义的最后必须有分号
-
可用
/*...*/和//...对程序的任何部分做注释 ,加上必要的注释,以增强程序的可度性和可维护性。
四、Verilog用于模块的测试
检查程序的功能是否正确要求:
-
需要有测试激励信号输入到被测模块
-
需要记录被测模块的输出信号
-
需要把用功能和行为描述的Verilog模块转换为门级电路互连的电路结构(综合)
-
需要对已经转换为门级电路结构的逻辑进行测试(门级电路仿真)
-
需要对布局布线后的电路结构进行测试 (布局布线后仿真)
何为仿真?为何要仿真?
仿真是对电路模块进行动态的全面测试,通过观测被测试模块的输出信号是否符合要求可以调试和验证逻辑系统的设计和结构是否准确,并发现问题及时修改。
仿真可以在几个层面上进行?每个层面的仿真有什么意义?
-
仿真有:前(RTL)仿真,逻辑网表仿真,门级仿真和布线后仿真;
-
前仿真:前(RTL)仿真,逻辑网表仿真,门级仿真;可以调试和验证逻辑系统的设计和结构准确与否,并发现问题及时修改。
-
布线后仿真:分析设计模块运行是否正常;
模块的结构
Verilog 的基本设计单元是"模块(block)"
verilog 模块的结构由在module和endmodule关键字之间的4个主要部分组成:
module block1(a,b,c,d); //端口定义input a,b,c;output d; //I/O声明wire x; //信号类型声明assign d = a | x;assign x = (b &~c); //功能描述
endmodule
五、逻辑功能的定义
在Verilog中有3种方法可以描述电路的逻辑功能:
1. 用assign语句(连续赋值语句,常用于描述组合逻辑)
assign x = (b &~c);
2.用元件例化(instance 门元件例化)
and(门元件关键字) u_and3(例化原件名)(f,a,b,c);
注1:元件例化即是调用Verilog提供的元件;
注2:元件例化包括门元件例化和模块元件例化;
注3:每个实例元件的名字必须唯一,以避免与其他调用元件的实例相混淆;
注4:例化元件名也可以省略。
3.用"always"块语句
always @(posedge clk) //当时钟上升沿到来时执行一遍块内语句
beginif(load)out = data; //同步预置数据elseout = data + cin +1; //加1计数
end
注1:”always“块语句常用于描述时序逻辑,也可描述组合逻辑;
注2:”always“块可用多种手段来表达逻辑关系,如用if…else语句或case语句;
注3:”always“块语句与assign语句是并发执行的,assign语句一定要放在”always“块语句之外。
模块结构模板:
module <顶层模块名> (<输入输出端口列表>);output 输出端口列表;input 输入端口列表;//更推荐
module <顶层模块名> (output 输出端口列表,input 输入端口列表
);//1.使用assign语句定义逻辑功能
wire 结果信号名;
assign <结果信号名> =表达式;//2.使用always块定义逻辑功能
always@(<敏感信号表
begin//过程赋值语句//if语句//case语句//while,repeat,for循环//task,function调用
end//3.文件例化
<module_name > <instance_name>(<port_list>);//模块元件例化<gate_type_keyword > <instance_name>(<port_list>);//门元件例化
endmodule
六、标示符
任何用Verilog语言描述的东西都可以通过其名字来识别,这个名字被称为标示符;
如源文件名,模块名,端口名,变量名,常量名,实例名等
标示符可由字母,数字,$和下划线组成,但第一个字符必须是字母或下划线,不能是$和数字
在Verilog中标示符是区分大小写的,且不能与关键字同名。
相关文章:
Verilog基本语法概述
一、概述 Verilog 是一种用于数字逻辑电路设计的硬件描述语言,可以用来进行数字电路的仿真验证、时序分析、逻辑综合。 既是一种 行为级(可用于电路的功能描述) 描述语言又是一种 结构性(可用于元器件及其之间的连接)…...
论文阅读:C2VIR-SLAM: Centralized Collaborative Visual-Inertial-Range SLAM
前言 论文全程为C2VIR-SLAM: Centralized Collaborative Visual-Inertial-Range Simultaneous Localization and Mapping,是发表在MDPI drones(二区,IF4.8)上的一篇论文。这篇文章使用单目相机、惯性测量单元( IMU )和UWB设备作为…...
蓝桥杯刷题day01——字符串中的单词反转
题目描述 你在与一位习惯从右往左阅读的朋友发消息,他发出的文字顺序都与正常相反但单词内容正确,为了和他顺利交流你决定写一个转换程序,把他所发的消息 message 转换为正常语序。 注意:输入字符串 message 中可能会存在前导空…...
Python---引用变量与可变、非可变类型
引用变量 在大多数编程语言中,值的传递通常可以分为两种形式“ 值 传递 与 引用 传递”,但是在Python中变量的传递基本上都是引用传递。 变量在内存底层的存储形式 a 10 第一步:首先在计算机内存中创建一个数值10(占用一块…...
GDOUCTF2023-Reverse WP
文章目录 [GDOUCTF 2023]Check_Your_Luck[GDOUCTF 2023]Tea[GDOUCTF 2023]easy_pyc[GDOUCTF 2023]doublegame[GDOUCTF 2023]L!s![GDOUCTF 2023]润!附 [GDOUCTF 2023]Check_Your_Luck 根据 if 使用z3约束求解器。 EXP: from z3 i…...
Day43力扣打卡
打卡记录 子数组的最小值之和(乘法原理 单调栈) 大佬的题解 class Solution:def sumSubarrayMins(self, arr: List[int]) -> int:n len(arr)# 左边界 left[i] 为左侧严格小于 arr[i] 的最近元素位置(不存在时为 -1)left, s…...
elementui的table合并列,三个一组
<el-table :span-method"objectSpanMethod" :cell-style"iCellStyle" :data"tableData" height"63vh" border style"width: 100%; margin-top: 6px"><el-table-column type"index" label"序号"…...
HarmonyOS-Service服务开发(一)
文章目录 创建新项目启动Serviceets获取service的bundleName DataAbility开发指导开发Data步骤创建Data 创建新项目 ServiceAbility开发指导 在config.json中也有配置出现 启动Service ets获取service的bundleName 项目的bundleName service的bundleName 这里serviceAbil…...
FLASK博客系列4——再谈路由
最近好像拖更有点久了。抱歉抱歉~ 今天我们继续来聊聊路由(其实就是我上次偷懒剩下一点没讲完)。 通过上次的文章,我们基本了解了Flask中的路由,是不是比较简单呢?别急,今天来点猛料。 一、路由之HTTP方法绑…...
sql之left join、right join、inner join的区别
sql之left join、right join、inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 举例如下࿱…...
京东秒杀之秒杀详情
1 编写前端页面(商品详情) <!DOCTYPE html> <head><title>商品详情</title><meta http-equiv"Content-Type" content"text/html; charsetUTF-8" /><script type"text/javascript" src&…...
mobaxterm 下载、安装、使用
下载 官网 MobaXterm free Xserver and tabbed SSH client for Windows 下载页面 MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Download 点击下载 安装 双击安装 勾选协议 修改安装路径 ,等待安装完成 使用 启动 新建连接 输入主机用户名和密…...
办公技巧:Word中插入图片、形状、文本框排版技巧
目录 一、插入图片排版技巧 二、添加形状排版技巧 三、插入“文本框”排版技巧 我们平常在制作word时候经常会遇到插入选项卡下的图片、形状和文本框这三种情况下,那么如何使得Word文档当中添加这三个元素的同时,又能保证样式美观呢,今天小…...
apple macbook M系列芯片安装 openJDK17
文章目录 1. 查找openjdk版本2. 安装openjdk3. 多jdk之间的切换 在这里我们使用 brew 命令查找并安装。 1. 查找openjdk版本 执行:brew search openjdk,注意:执行命令后,如果得到的结果中没有红框内容,则需要更新一下…...
C语言——打印出所有的“水仙花数”
所谓水仙花数,是指一个3位数,其各位数字立方和等于该数本身。水仙花数是指一个三位数,它的每个位上的数字的立方和等于它本身。例如,153是一个水仙花数,因为1^3 5^3 3^3 153。 #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>…...
<HarmonyOS第一课>应用程序框架 【课后考核】
【习题】应用程序框架 判断题 一个应用只能有一个UIAbility。错误(False)创建的Empty Ability模板工程,初始会生成一个UIAbility文件。正确(True)每调用一次router.pushUrl()方法,页面路由栈数量均会加1。错误(False) 单选题 API9及以上,r…...
自动驾驶学习笔记(十一)——高精地图
#Apollo开发者# 学习课程的传送门如下,当您也准备学习自动驾驶时,可以和我一同前往: 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 高精地图 地图采集 底图制作 地图…...
HCIA-H12-811题目解析(2)
1、【单选题】 在以太网这种多点访问网络上PPPOE服务器可以通过一个以太网端口与很多PPPOE客户端建立起PPP连接,因此服务器必须为每个PPP会话建立唯一的会话标识符以区分不同的连接PPPOE会使用什么参数建立会话标识符? 2、【单选题】PPP协议定义的是OSI参考模型中…...
Docker-简介、基本操作
目录 Docker理解 1、Docker本质 2、Docker与虚拟机的区别 3、Docker和JVM虚拟化的区别 4、容器、镜像的理解 5、Docker架构 Docker客户端 Docker服务器 Docker镜像 Docker容器 镜像仓库 Docker基本操作 1、Docker镜像仓库 镜像仓库分类 镜像仓库命令 docker lo…...
Codeforces Round 911 (Div. 2)(C dp D gcd 分解+容斥 E tarjan+dp)
A.手玩题: 可以通过最后一个样例,如果是长度为3的连续O,直接在两边放就行,然后一直用中间的水填到其他地方 #include<bits/stdc.h> using namespace std; const int N 3e510,mod 998244353; #define int long long int n…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...
【Java多线程从青铜到王者】单例设计模式(八)
wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本,sleep也是可以指定时间的,也就是说时间一到就会解除阻塞,继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒),wait能被notify提前唤醒…...
