




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Verilog HDL的语法基础,本章的主要内容,Verilog HDL的特点,Verilog HDL的描述模式,模块和端口注释常量,变量和逻辑值运算符,操作数参数,编译指令系统任务和函数程序示例,Verilog HDL的3.1特点,并行性:所谓的并行性是指可以同时做几件事情。Verilog语言不考虑代码顺序,几个代码块可以同时执行;软件语言必须按顺序执行。如果前一句不成功,下一句就不能执行。计时:可以用Verilog语言来描述过去的时间和相应的事件;但是软件语言不能。互连:互连是硬件系统中的一个基本概念,Verilog语言中的线变量可以很好地表达这一功能;但是软件语言没有这样的描述。3.2
2、Verilog HDL的描述Verilog HDL设计有三种方式:数据流描述:采用赋值语句,赋值连续,数据实时变化,赋值对象一般定义为线类型。行为级描述:总是或初始语句被使用,赋值对象通常被定义为reg类型,它不一定形成一个寄存器。结构化模型:通过实例化现有的功能模块进行建模。在设计中,我们经常混合使用这三种描述。Verilog HDL是一种区分大小写的语言,相同的词汇,大写和小写是不同的符号。图31典型Verilog设计描述图,3.3模块和端口,模块是Verilog的基本描述单元,可以大到复杂系统,小到一些基本逻辑门单元,主要用于描述某一设计的功能或结构及其与其他功能模块通信的外部端口。对于
3、模块,需要一个模块名称来标记该模块,并且必须在端口列表中的括号后使用。结束。通常,模块有一个端口列表,端口之间用“,”分隔。然而,在仿真语言中没有端口列表,因为仿真是一个封闭的系统,并且端口已经在内部被实例化。端口声明部分需要声明端口的方向和位宽。模块模块名称(端口列表);/端口定义声明;输入、输出、输入输出/内部变量和参数声明线、寄存器、函数、任务、参数、定义等功能/模块实现数据流描述:分配行为级别描述:初始、始终结构化描述:模块实例化其他用户原语endmodule,例如31端口声明/端口声明输入433600 a;/5输入信号inout b,信号名称为a;/双向信号b输出6:0 c;/名为C
4、的信号输出总线信号,有些设计会将端口的声明部分和端口列表一起写入,每个信号都可以在端口中进行标注。示例32 Verilog HDL 2001端口声明模块计数器(输入clk,/全局时钟信号input reset_l,/全局复位信号output 733600 CNT/8位数据总线);在模块内部变量声明中,有线网络没有数据访问功能。一般来说,输入的默认定义是线路,输出信号可以是线路或寄存器。定义为线的线网不能在“总是”语句中分配,只能连续分配。注册类型可以访问上次分配给它的值。定义为reg类型的网络只能在总是和初始语句中分配,不能连续分配。注意:所有关键字必须是小写的。定义为reg的网络不一定生成寄
5、存器。虽然信号和内部变量定义的声明只需要出现在被调用的语句之前,但是代码风格通常需要在语句执行之前定义,这样可以提高代码的可读性。在声明之后,是函数执行语句,包括总是语句、初始语句、赋值语句、任务、函数、模块实例化等等。它可以用一种没有顺序的混合方式来描述,但需要注意的是,初始语句只能在仿真程序中使用,而不能生成实际的电路。每个模块都应该以“endmodule”结尾。,3.4注释,Verilog HDL提供了两种注释方式:一种以“/”开头,注释一行的其余部分。示例33以“/”开头的注释分配a=b?c :d;/输出是一个双输入选择器,例如34:注释赋值a=b?c :d;/注释下面的函数语句/*如
6、果(b) a=c,则总是(*)开始;否则a=d。End */,3.5常量、变量和逻辑值,常量是不可更改的值,例如4d8,它表示宽度为4位的十进制整数8。在Verilog中,有三种不同类型的常量:整数类型、实数类型和字符串类型。整数常数可以直接用十进制数来表示。基数记数法的格式如下:当设定的位宽小于实际位宽时,左边多余的数字会自动被切掉,否则,左边不足的位置加0。如果长度不显示,数字的位宽取决于其自身的长度。如果遇到X或Z,如4hx,位宽度大于实际数字。此时,左侧不是用0填充,而是用X填充,变量分为两种类型:丝网类型和寄存器类型。网络类型表示电路之间的互连,没有访问功能。它有许多子类型:线,tr
7、i,tri0,tri1,wor,wand,trireg,supply1,supply0等等。线可以用于综合逻辑设计,而其他通常用于模拟程序。另外,trireg类型的变量除了未初始化状态的X状态外,都处于Z状态。寄存器类型表示数据访问,它占用模拟器中的存储空间。寄存器类型有很多子类型,包括寄存器、整数、时间、实数、实时等等。Reg可用于表示具有一个或多个位的寄存器,或一个访问器。示例35寄存器和存取器reg a由reg表示;/1位寄存器a reg 4:0 b;/5位寄存器breg7:0c1033601/10*8的存取器寄存器可以通过位来访问,但是存取器必须通过地址来访问。通常,for语句用于为访
8、问者赋值。定义为reg的变量可以生成寄存器或MUX,因此它取决于具体的函数执行。X-state是一个未确定的状态,它描述了信号未初始化的情况,并表示它不关心casex和casez语句。z状态表示高阻抗条件,用于表示三态建模。在真实的电子世界和集成软件中,不会有X态,只有亚稳态。Verilog的四个逻辑值为0、低、假、逻辑低、地、VSS、负插入、1、高、真、逻辑高、电源、VDD、正插入、X、不确定性:逻辑值因逻辑冲突、HiZ、高阻抗、三态、无驱动源、3.6运算符、Verilog HDL语言和c而无法确定。绝大多数运算符的使用方式与c语言相同,如IEEE-sa标准板IEEE标准Verilog硬件描
9、述语言17匹配2001。按位运算符对操作数的每一位进行运算,以获得新的操作数,具体运算符如下所示。表31位运算符,示例36位运算符示例A=4b 1011 B=4b 1101 c=4b 1011 A=4b 0100 A/参数A B=0;/参数B C=2b 0 x;/参数C D=2b10/参数甲/参数乙=2b10/参数B A,B=4B00102A,3B=10B 00 _ 0010 _ 1010,不同操作符的状态不同,数值运算必须遵循从高到低的优先级顺序。为了避免这种混淆和错误并提高代码的可读性,最好用“()”来区分表35的优先级表,以及例310的简单运算符操作A. (a b)=!(真)=假(a b
10、) | | (a=b)=真| |假=真(2)a | | b=(1 | 0 | 0)|(0 | 1 | 1)=真| |真=真(3) a。它们主要包括:定义宏(def)、条件编译指令(ifdef、else、endif)、包含文件、时间单位和时间刻度等。在每个模块前增加一条时间刻度编译指令,可以保证在仿真过程中按照时间刻度设置时间单位和精度来编译延时信息,直到遇到下一个时间刻度或复位指令。时标格式:时标1ns/100ps表示延迟单位为1ns,精度为100ps。define表示定义宏。是一个全局变量,可以被多个文件使用,直到它被发送到def。在示例312中,定义用于定义总线宽度为8的总线。条件编译指令
11、的格式一般如下:ifdef NORMAL参数A=B;否则参数甲=丙;Endif如果宏NORMAL已经被预先定义,编译器将执行参数A=B;语句,否则执行参数A=C;声明。3.10系统任务和系统功能,显示任务显示任务用于显示和输出信息,将特定信息输出到标准输出设备,其基本语法结构如下:task _ name (format _ specification,argument _ list 1);表36显示了任务编译指令的基本信息表。$display用于显示变量值、字符串和其他信息,这通常用于Verilog HDL断言。它的基本格式如下:$ display(时间=% t,系统正常/n ,$ time)
12、;当系统运行到该语句时,将显示当时的实时时间如下(假设50.002ns):在时间=50.002ns时,系统正常,文件输入输出任务文件输入输出任务主要分为三个部分:文件打开和关闭、文件数据读取和文件输出。文件的打开和关闭通常用两个关键词来表示:fopen和fclose。$fopen和$fclose一起使用,这意味着打开一个文件并关闭一个文件。基本格式如下:/打开文件整数文件点=$ fopen(文件名);/关闭文件$fclose(文件点);要打开一个文件,你需要操作它。通常有两种方法:一种是将监控检测到的信息写入文件,另一种是从文件中读取数据。数据通常从文本文件中读取,并保存在访问器中。第一种方法
13、类似于显示任务,也分为显示、写入、探测和监视系统任务,除了这些任务最终将数据显示到文件中,因此需要文件指针表37、文件输入指令基本信息表、$ read mem和$readmemh来从文件中读取数据。文本文件包含空格、注释和二进制或十六进制数字。数字由空格隔开。起始地址对应于访问者最左边的索引。示例313文件输入和输出任务操作示例整数数据输出;数据输出=$fopen(“数据输出”);$fdisplay(Data_OUT,“在时间%t,系统关闭/否”,$ time);$fclose(数据输出);时间刻度任务时间刻度任务unit时间刻度用于给出指定模块的时间单位和时间精度。基本格式如下。$ prin
14、ttimescale(模块路径);$ printtimescale(模块路径);时标task $timeformat用于指示%t格式如何定义如何报告时间信息。它的基本格式如下。$timeformat(unit_number,perision,后缀,numeric _ field _ width);模拟控制任务有两个主要系统任务:$完成和$停止。它们之间的主要区别是$finish强制模拟器退出并将控制权返回给操作系统,而$stop只是暂停模拟,因此模拟器不会被迫退出,并且可以向模拟器发送交互命令。时序检查任务时序检查任务主要用于检测和报告信号的各种时序是否满足系统要求,包括建立时间、保持时间和时钟周期。表38时间序列验证任务的基本信息表,表39实数转换函数的基本信息表,概率分布函数概率分布函数一般用于生成一系列随机数来验证系统功能是否正确。通常,概率分布函数是$random(种子)。根据种子变量seed的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《公差配合与技术测量》课件-第3章 第12部分(跳动的检测)
- 绿色建筑2025推广策略报告:绿色建筑评价体系构建研究
- Unit+3+Family+Matters+Developing+Ideas高中英语外研版(2019)必修第一册
- 感知健康与慢病管理
- 太平AI面试题及答案
- 探梅陈鉴之试题及答案
- 兼并贷款管理办法
- 内乡县管理办法
- 内部凭证管理办法
- 内部道路管理办法
- 2025年高级育婴员(三级)《理论知识》试卷真题(后附答案及解析)
- 2025年入党积极分子培训班结业考试试题及答案
- 预售奖励管理办法
- 2024年云南大学图书馆招聘真题
- 胖东来收银管理管理制度
- 结核病临床技能竞赛试题及答案2025版
- 2025版保姆家政服务合同范本家政服务规范详细版
- 《高危新生儿分类分级管理专家共识(2023)》解读 4
- 2025年初中英语教师进城考试试卷及答案
- 破伤风防治健康宣教大纲
- 2026上海高考数学试卷试题真题及答案详解(精校打印)
评论
0/150
提交评论