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

用Cadence IC618和TSMC 180nm工艺,从零仿真一个2.4GHz双平衡吉尔伯特混频器

本文详细介绍了使用Cadence IC618和TSMC 180nm工艺从零开始仿真2.4GHz双平衡吉尔伯特混频器的完整流程。涵盖设计环境搭建、原理图设计、仿真配置、性能验证及版图设计等关键步骤,特别适合射频集成电路设计的学习者和实践者参考。通过实操技巧与工艺库结合的工程实践,帮助读者掌握混频器设计的核心技术。

weixin_30328063的博客 550

1.triton镜像使用

1)拉取镜像2)启动容器指定模型仓库时可以执行server下的./fetch_model.sh,见2.2部分GPU版本的启动CPU版本的启动区别只在于--gpus=1这个参数注意:docker19.03之前的版本使用gpu要指定显卡硬件名,docker19.03之后的需要安装nvidia-container-toolkit或nvidia-container-runtime安装之后要重启docker查看gpus参数是否安装成功重新执行我遇到了如下错误先使用非GPU版本的。

天启的博客 2077

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

Verilog 基础语法

Tranquil_ovo的博客 2467

SAP生产订单成本‘还原’实战:从标准成本到实际费用,一步步拆解差异来源(附物料分类账提示)

本文深入解析SAP生产订单成本差异分析的全过程,从标准成本到实际费用的追踪方法,揭示差异根源的六维分析法。特别强调物料分类账(CKMLCP)在成本还原中的关键作用,帮助财务人员精准定位价格差异、用量差异等问题,提升制造业成本管理的效率和准确性。

weixin_28705087的博客 533

【Verilog】基本语法1

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

weixin_74743335的博客 1557

Win11内核隔离无法打开的解决方案详解

内核隔离问题的解决需遵循"先硬件后软件"的排查原则,90%以上的案例可通过驱动清理或外设断开解决。对于必须禁用该功能的用户,建议定期使用Windows Defender进行全盘扫描,并保持系统更新至最新版本。技术决策需在安全性和兼容性之间取得平衡,本文提供的多维解决方案可帮助用户构建更稳定的Windows 11使用环境。

mmoo_python的博客 4829

手把手写深度学习(27):如果获得相机位姿态的plücker embedding?以RealEstate10K为例

用plücker embedding表示相机的位姿是一种非常常用的方法,这篇博客以RealEstate10K数据集为例子,详细讲解如何从相机的轨迹坐标中获得plücker embedding,用于下一步模型的学习。

沉迷单车的追风少年 2239

Verilog 语言基本语法

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

m0_56115959的博客 1745

小程序数据采集(3):PC端微信小程序降维调试与流量数据获取详解

本文提出了一种针对PC端微信小程序的逆向分析方法,通过利用PC端基于Chromium架构的天然优势,实现无需Root的降维打击。文章详细介绍了如何开启CEF远程调试协议、基于DevTools Protocol实现流量劫持、对抗PC端安全防线以及获取小程序本地存储数据的技术方案。相比移动端严苛的环境,PC端小程序在调试接口、网络拦截和数据存储等方面存在显著漏洞,为爬虫开发提供了更便捷的突破口。

数据知道的博客 828

FPGA学习:Verilog基本语法

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

a568713197的博客 5620

linux系统下XDMA驱动的安装与测试问题总结

先看两个常见的问题。一个是驱动安装问题,一个是驱动测试错误;error 512 能识别PCIE的设备,但是The kernel modle installed correctly, but no devices were recognized.

whm128的博客 3806

工业缺陷检测:基于深度学习的表面缺陷分类

工业缺陷检测:基于深度学习的表面缺陷分类 ,人工智能,计算机视觉,大模型,AI,在现代工业生产中,产品质量直接影响企业的竞争力和声誉,工业缺陷检测作为质量把控的重要环节,其技术的发展至关重要。传统的人工检测方式效率低、成本高且易受主观因素影响,难以满足大规模、高精度的生产需求。随着深度学习技术的蓬勃发展,基于深度学习的工业表面缺陷分类方法凭借强大的特征提取和模式识别能力,成为解决工业缺陷检测难题的有效途径。本文将深入探讨基于深度学习的工业表面缺陷分类技术,结合详细的代码示例和概念解析。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 3万+
下一篇: arm启动代码分析
enjoymylinux
博客等级 码龄17年 54粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值