Verilog的基本语法

FPGA之道(33)Verilog数据类型 在Verilog语言中,主要有三大类数据类型,即寄存器数据类型、线网数据类型和参数数据类型。从名称中,我们可以看出,真正在数字电路中起作用的数据类型应该是寄存器数据类型和线网数据类型,它们共同遵守Verilog的四值逻辑系统。 阅读详情

      模块是设计的基本单元,在Verilog中包括行为建模(用于综合和仿真)和结构建模(用于综合)

       在Verilog中,begin和end充当了C语言中大括号的角色,在这两个关键词之间是程序的内容部分;

      模块基本结构:module   module_name(Portlist);//注意此处有分号

                           endmodule   //注意此处没有分号

       端口声明:input、output、inout表示端口数据流的方向;

                      端口的数据宽度:[width:0];    后面紧跟着端口名;

                       示例:

                             input [7:0] port1;

                             声明了一个端口数据宽度为8位,名为port1的输入端口。

     

         数据类型有网络数据类型(表示进程间的物理连接)和寄存器数据类型(表示暂时存储的变量,但不一定表示硬件电路中的物理寄存器),wire和tri都表示一个节点,但是tri表示三态节点,supply0表示逻辑0,supply1表示逻辑1;寄存器类型的变量只能在进程声明、任务或者功能中赋值reg型变量,不能是逻辑门的输出或者assign语句的输出;wire数据类型可以是input、output和inout中的任意一种,但是,寄存器类型的端口只能是output类型;

         在Verilog中默认的数据为32位的十进制数;数字可以为sized和unsized两种类型,一般来说最好要指明数字的宽度、进制,这里的宽度是指将其转化为二进制数后数据的宽度,`d表示十进制,`b表示二进制,`h表示十六进制,`o表示八进制,如果为负数,则在最前面加符负号,举例:-8`h89表示数据宽度为8的负的十六进制数,为sized的类型,可以在数字中间加”_“,提高程序的可读性;

         操作符:+、- 、*、/、&、^、|、!、&&、||、>、<、>=、<=、==、!=、>>、<<、?:、{}等;

         连续赋值语句:assign,左手侧必须是ret数据类型,右手侧可以是net、寄存器或者函数的调用,每当右手侧的操作数发生变化时就会立即更新左手侧的net型数据,在赋值号左侧加上#(time)可以模型逻辑提供仿真延迟,但不会综合成具体的硬件电路;

        进程赋值:initial模块:用于初始化仿真的行为声明,监视、波形和其他进程,会被仿真器忽略,在整个仿真中只执行一次,且是顺序执行;always模块:用于行为声明,来描述电路的功能;每个always和initial模块代表不同的进程,进程之间并行从仿真时间0开始,而进程内的语句顺序执行,注意:always模块和initial模块不能嵌套;

       在进程内部有两类赋值语句,阻塞赋值和非阻塞赋值,阻塞赋值(=)按照模块中指定的顺序执行,有先后顺序之分,而非阻塞赋值(<=)是并发执行,无先后之分;在进程中尽量要避免阻塞赋值这种方式,因为执行过程不好控制。这两种赋值语句的左手侧必须是reg寄存器类型;

       在Verilog综合后的电路中有两种电路类型,组合电路和时序电路,都是用always语句来说明要实现的功能,组合电路对组合逻辑中使用的所有输入敏感,而时序逻辑电路对时钟及控制信号敏感,要注意区分,举例:

                always@(a or b or c)会被编译器综合成组合逻辑电路,

                always@(posedge clk or negedge clk)会被编译器综合成时序逻辑电路,always@后面的括号中的内容叫做敏感信号列表,只要敏感信号一变化就会执行后面的内容;

       行为声明:行为声明有三种,一种是用if·····else来表示,另一种用case语句来表示,这两种表达方式有很大的区别,当使用if·····else语句时,内部的条件语句是顺序评估的,有先后顺序依次执行;而case语句先对执行条件进行分析评估,然后没有优先级的执行相应的内部语句,来完成相应的功能,default关键词是默认的执行状况。这两种语句必须放在always或者initial模块中;因此当自己的模块功能需要设置优先级时就用if·····else语句,否则就用case语句,执行效率最优化原则;还有一个循环声明,用于重复运算,如:forever、while、for和repeat,这几种语句都是用来仿真的,forever语句会无限次的执行,而repeat可以指定执行次数,例如:repeat(8),while和for语句会按照条件是否成立来选择性的执行,注意,在C语言中for循环中的计数变量是可以改变的,而在Verilog中,其内部的计数变量是不可以改变的,一般在电路实现时不用for循环,因为它会生成很多锁存器,并且会将语句展开,浪费FPGA的逻辑资源;

         case语句一般被译成复用器,而if·····else语句一般被译成选择器;另外还有两种case的变形形式,casez和casex,casez语句不关心z处代表的值,而casex语句会不关心z和x处的值,但一定要注意所有的case形式内部的各条件必须是唯一的表达式,不能有歧义,确保在某种状况下只有一个条件是正确的,且一定要加上default这种默认的状况,否则会生成锁存器,影响电路的功能实现;

未完待续~~~

 

【个人向1】Verilog基础:运算符、基本语法 个人学习总结1 - Verilog最基础部分。个人向! 里面有些重点出现在招聘机考题中,个人尽力总结,小白也可以看! 参考:数字逻辑基础与Verilog设计(英文原书第3版)McGrawHill Education。 参考:机械工业出版社中文翻译版 - 国外电子与电气工程技术丛书。 参考:数字IC设计入门。 此文章包括Verilog运算符、Verilog基础语法。 个人NTU在读,欢迎指正。基础模块的代码详见下一篇文章。 阅读详情

相关推荐

Verilog基本语法初学

(一)概述 1、空白符(White Space) 空格、换行、换页、Tab等; 是代码错落有致,提高可读性。 2、注释(Comment) 单行注释:“ // ”; 多行注释:“ /* ”~“ */ ”。 3、标识符(Identifier) 字母、数字、_、$,最长1023个字符。 4、关键字(Key Word) 所有的关键字都是小写的。 5、运算符(Operator) (二)常量 1、整数(Integer) +/-<位宽>’<进制><数字> (1)较长的数之间可用下划线分

weixin_43629222的博客 2237

Verilog中未指明长度数据的长度

Unsized numbers Numbers that are specified without a <base format> specification are decimal numbers by default. Numbers that are written without a <size> specification have a default number of bits that is simulator- and machine-specific (must

956

System Verilog基本语法

在入门FPGA、ASIC设计时,记录整理了System Verilog基本语法以及一些注意事项,方便大家一起学习讨论。

Anton_wzd的博客 2359

【VerilogHDL】模块

【VerilogHDL】模块模块基本语法2选1多路选择器实例模块描述方式行为级或算法级的描述方式(行为级建模)4bit 的二进制行波计数器(带进位)数据流描述方式(数据流级建模)门级描述方式(门级建模)开关级描述方式(开关级建模) 模块基本语法 Module&amp;amp;lt;模块名&amp;amp;gt;(&amp;amp;lt;端口列表&amp;amp;gt;) 端口说明 参数定义 数据类型定义 连续赋值语句(assign) 过程块(init.

我不写博客谁写博客之自我提升 3625

FPGA Verilog基本语法及模块说明

FPGA开发 Verilog基本语法 module模块结构

m0_67638836的博客 1898

【Verilog HDL数字系统设计】【笔记】Verilog HDL的基本语法

Verilog HDL 基本语法 Verilog HDL程序的基本结构 Verilog HDL程序由模块组成 一个完整的模块由模块端口定义和模块内容组成 模块内容包括I/O声明,信号类型声明和功能表述 基本结构 module 模块名(端口定义); I/O声明; //代码 功能描述; //代码 endmodule 语法: module 与 endmodule 定义一个模块的起始与解释 module后跟模块名 模块名必须以英文字母开头可以包括英文字母,数字和下划线 除了endmodule,所有的

weixin_45727215的博客 1396

工作总结之全网最全的103个Verilog关键字总结(下)

Verilog是一种硬件描述语言,用于描述数字电路的行为和结构。它是一种结构化的语言,可以用于描述数字电路的时序和组合逻辑。 Verilog和C/C++语言类似,关键字(或关键词)也叫保留字,Verilog中有许多关键字,其中always、and、assign、begin、buf、bufif0和bufif1是常用的关键字。在Verilog HDL中,所有的关键字是事先定义好的确认符,用来组织语言结构。关键字是用小写字母定义的,因此在编写原程序时要注意关键字的书写,以避免出错。下面是Verilog HDL

SteveRocket's-Blog 7698

verilog 基本语法 {}大括号的使用-基础小知识(五)

{}的基本使用是两个,一个是拼接,一个是复制,下面列举了几种常见用法。

Paul 安的博客 3万+

Verilog基础:强度建模与net型信号的多驱动问题(一)

本文介绍了Verilog HDL中的强度建模特性,重点阐述了其仿真用途(无法影响综合结果)。文章详细说明了strength0和strength1的强度等级划分(如supply0、strong0、pull0等),并通过强度比例尺展示了各强度等级的连续关系。同时解释了门级建模和连续赋值语句中强度声明的语法规则,指出默认强度为(strong0,strong1),并通过多个代码示例演示了不同强度配置下的信号表示方法。

保持终身学习的能力,温故而知新 5699

Verilog HDL基本语法

Verilog HDL基本语法 #Verilog HDL程序模块结构 模块端口定义 模块端口定义用来声明设计电路模块的输入输出端口。端口定义格式如下 module 模块名(端口1,端口2,端口3,…); 在端口定义的圆括弧中,是设计电路模块与外界联系的全部输入输出端口信号或引脚,它是设计实体对外的一个通信界面,是外界可以看到的部分(不包含电源和接地端),多个端口名之间用“,”分隔。 例如,mod...

Angaam的博客 624

(20)Verilog基本语法(三)

(20)Verilog基本语法(三) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)Verilog基本语法(三) 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1)FPGA入门与提升文章目的是为了让想学FPGA的小伙伴快速入门以及能力提升; 2)FPGA基础知识; 3)Verilog HDL基本语法; 4)FPGA入门实例; 5)FPGA设计输入,包括代码输入、原语输入; 6)FPGA设计技巧; 7)FPGA时钟设计; 8)F

m0_46498597的博客 240

verilog基本语法

介绍了Verilog中的基本语法,并给出示例

vyvyvyvtfr的博客 1734

(27)Verilog基本语法(十)

(27)Verilog基本语法(十) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)Verilog基本语法(十) 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1)FPGA入门与提升文章目的是为了让想学FPGA的小伙伴快速入门以及能力提升; 2)FPGA基础知识; 3)Verilog HDL基本语法; 4)FPGA入门实例; 5)FPGA设计输入,包括代码输入、原语输入; 6)FPGA设计技巧; 7)FPGA时钟设计; 8)F

m0_46498597的博客 499

verilog基本语法总结

verilog基本语法教程

ssnape的博客 6457

一图文带您认识磁编码器

磁编码器是以磁电原理技术生产的编码器。 磁编码器工作原理: 当电流通过一个位于磁场中的导体的时候,磁场会对导体中的电子产生一个垂直于电子运动方向上的的作用力,从而在垂直于导体与磁感线的方向上产生电势差。 如果让施加在这个导体上的磁场以电流流经路径为轴线,按照上图箭头所示的方向旋转,那么这个霍尔电势差就会因为磁场与导体之间角度的改变而发生变化,而这个电势差的变化趋势,与之前一文中次级线圈旋转时的输出电压一样,是一条正弦曲线。因此,基于这个通电导体两侧的电压,就可以反推计算出磁场旋转的角度了。 .

encoder_yang的博客 2万+

RV1126 MIPI CSI-2驱动RGB888图像采集的V4L2实战解析

本文详细解析了在RV1126平台上通过MIPI CSI-2接口采集RGB888格式图像的完整V4L2实战流程。核心内容包括设备树(DTS)配置、内核驱动适配、Media Controller链路调试,以及使用v4l2-ctl工具进行图像抓取与验证的方法,旨在帮助开发者打通从硬件连接到稳定采集RGB888图像数据的关键环节。

weixin_29161719的博客 166

【Verilog】Verilog 基础【1】基本语法

Verilog 基础语法

Tranquil_ovo的博客 2467

IoT 平台架构全景图:从设备到 AI 的完整技术体系深度解析

随着物联网设备规模进入百万级时代,IoT 平台架构已经从简单的设备接入系统演变为完整的数据平台。本文从系统架构师视角,深度解析 IoT 平台的完整技术体系,包括设备接入、MQTT 通信、消息流平台、数据平台与 AI 决策系统,并结合主流云平台实践,构建从设备到 AI 的完整 AIoT 架构认知。

moton2017的博客 856

【Verilog】基本语法1

仿真是按照仿真时间进行的,Verilog使用一个特殊的时间寄存器数据类型来保存仿真时间时间变量通过使用关键字time来声明,其宽度与具体实现有关,最小为64位。在Verilog中,术语register意味着一个保存数值的变量,与实际电路中由边沿触发的触发器构成的硬件寄存器不同。在仿真时的任意过程寄存器的值都可以通过赋值改变。

weixin_74743335的博客 1557

prometheus 从入门到精通(史上最全)

Prometheus(由go语言开发)是一套开源的监控&报警&时间序列(按照时间排序)数据库的组合。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。它可以监控主机,服务,容器,支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。原文链接:https://blog.youkuaiyun.com/qq_45277554/article/details/130917620时间序列数据。

流水_鱼鱼的博客 1万+

workbench拓扑优化教程_拓扑优化实例-轮毂的优化

拓扑优化实例-轮毂的优化ANSYS Workbench的新版本集成了topology optimization模块,为用户的拓扑优化提供的很好的应用。通过拓扑优化topology optimization模块的使用可以对拓扑有较好的理解,该模块拓扑优化可以简单概括为一句话:如何在合适的位置去除确定的材料使用量,而相应的刚度变化影响最小。本例以汽车轮毂为例,来确定轮毂的辐条形状。1.建立模型DM中可...

weixin_39581739的博客 3043

Verilog 语言基本语法

verilog语法基本结构;数据类型及变量,常量;运算符;赋值语句,条件语句,循环语句

m0_56115959的博客 1745

Windows下构建ImGui.Net

工具 Visual Studio 2017 操作 下载项目 git clone https://github.com/mellinoe/ImGui.NET.git 编译 右键以下两个项目并调试: ImGui.NET.SampleProgram ImGui.NET.SampleProgram.XNA Error fix 中间遇到一些问题: SDK版本不对 去微软官网下载安装对应版本 由于设置了代理被远程服务器拒绝连接 关闭代理(也许在环境变量中) nuget源无对应资源,404 NOT FOUN

jojozym的博客 1489

FPGA学习:Verilog基本语法

前言 这学期的数电课进行了很大的改革,要求学生使用FPGA开发板进行课内实验,还有专门的数电实验课,课程结束后还有为期两周的课程设计,近几年,由于深度学习、异构计算等的兴起,FPGA的地位也是显著上升,FPGA强大的并行计算能力决定了它极高的上限,当然对设计人员的要求也是很高的。本来我是不怎么想学FPGA的,但是学校这么安排,而且自己看了看也觉得有点意思,所以学一学也是挺不错的,...

a568713197的博客 5620

论文必备 - YOLO26统计数据集中大、中、小目标数量,附完整代码和详细使用步骤

数据集是由微软开发维护的大型图像数据集。数据集标注类型对应任务包括物体检测、关键点检测、实例分割、stuff分割(没有特定形状的物体),全景分割人体关键点, 人体密度检测等。官网数据规模和样本特点数据规模大:总共包含32.8万张图像)。其中标注过的图像超过 20 万张,拥有 150 万个目标实例,数据量丰富,能够为模型训练提供充足的信息。类别丰富:包含80个目标类别和91个“stuff”类别。目标类别涵盖了日常生活中常见的各种物体,如人、动物、交通工具、生活用品等;stuff。

Limiiiing的博客 266

APP签名验证全栈破解:Frida Hook绕过+算法逆向+Python一键调用(附可运行脚本)

做过APP逆向和爬虫的同学,肯定都被签名验证折磨过:改了一行代码重新打包,APP直接闪退;抓包看到接口有个sign参数,翻遍JS找不到加密逻辑;好不容易找到加密函数,一调用就崩溃。客户端APK签名校验服务端接口签名验证。前者防止你篡改APP,后者防止你伪造请求。很多人卡在第一步,改完APK就闪退,根本没机会碰接口。本文基于真实项目实战,分享一套通用的签名验证破解方案。从客户端APK签名校验的Frida Hook绕过,到服务端sign算法的逆向还原,最后用Python实现一键调用。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 964
下一篇: arm启动代码分析
enjoymylinux
博客等级 码龄17年 54粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值