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…...
终极指南:如何编写专业的 colors.js 单元测试确保颜色功能稳定可靠
终极指南:如何编写专业的 colors.js 单元测试确保颜色功能稳定可靠 【免费下载链接】colors.js get colors in your node.js console 项目地址: https://gitcode.com/gh_mirrors/co/colors.js colors.js 是一款为 Node.js 控制台提供颜色和样式的实用工具&am…...
如何在3分钟内完成Unity游戏自动翻译:XUnity.AutoTranslator终极指南
如何在3分钟内完成Unity游戏自动翻译:XUnity.AutoTranslator终极指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为外语Unity游戏的语言障碍而烦恼吗?XUnity.AutoTranslat…...
蓝桥杯与CACC算法实战:从‘田地丈量’看矩形面积交并的C++高效求解
1. 从田地丈量到算法实战:为什么矩形面积计算这么重要? 第一次参加蓝桥杯时,我盯着"田地丈量"这道题看了足足十分钟。屏幕上那些坐标点仿佛在跳舞,明明是最基础的矩形面积问题,却因为要考虑边界和重叠变得异…...
LRCGet:离线音乐库的智能歌词同步解决方案
LRCGet:离线音乐库的智能歌词同步解决方案 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 在数字音乐时代,我们收藏了成千上万的…...
抖音批量下载终极指南:5分钟掌握无水印视频采集
抖音批量下载终极指南:5分钟掌握无水印视频采集 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖…...
Everything 1.5史诗级升级了:不止搜文件名,可以搜文件内容了
今早翻旧文档,记不清“2026预算表”的文件名。用Everything 1.5的全文搜索,输关键词秒出结果。突然觉得,好工具像记忆的“放大镜”,模糊的事儿也能拎清。 咱就是说,搜文件不该费劲儿。 Everything 搜文件名快。 …...
深入解析AMD Ryzen处理器硬件调试:5大核心功能实战指南
深入解析AMD Ryzen处理器硬件调试:5大核心功能实战指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…...
抖音直播WebSocket数据采集实战指南:从零搭建实时弹幕监控系统
抖音直播WebSocket数据采集实战指南:从零搭建实时弹幕监控系统 【免费下载链接】DouyinLiveWebFetcher 抖音直播间网页版的弹幕数据抓取(2025最新版本) 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher 抖音直播数…...
告别枯燥界面:PHI-3 PIXEL QUEST复古AI对话平台效果实测
告别枯燥界面:PHI-3 PIXEL QUEST复古AI对话平台效果实测 1. 项目概览 1.1 核心特点 PHI-3 PIXEL QUEST是一款将微软Phi-3-mini语言模型与80年代街机/红白机视觉美学完美融合的本地对话实验平台。与传统AI对话界面不同,该项目通过以下创新设计实现了独…...
OpenClaw 大结局——接入个人
背景 StreamJsonRpc 是微软官方维护的用于 .NET 和 TypeScript 的 JSON-RPC 通信库,以其强大的类型安全、自动代理生成和成熟的异常处理机制著称。在 HagiCode 项目中,为了通过 ACP (Agent Communication Protocol) 与外部 AI 工具(如 iflow …...
