欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    Verilog语言规则.ppt

    • 资源ID:5452082       资源大小:1.59MB        全文页数:66页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Verilog语言规则.ppt

    第9章 Verilog语言规则,9.1 文字规则整数和实常数,Verilog 语言中常数可以是整数、实数和字符串:整数可以标明位数也可以不标明位数,表示方法:位宽进制数字 其中位宽表明该数用二进制的几位来表示 进制可以是二(b)、八(O)、十(d)或十六(h)进制 数字可以是所选基数的任何合法的值包括 不定值 x 位和高阻值 z(?)。如:64hff01 8b1101_0001 h83a-8d5 实常数可以用十进制表示也可以用科学浮点数表示,如:32e-4(表示0.0032)4.1E3(表示 4100),4个16进制数共64位,下划线不能出现在位宽和进制间,位宽可以缺省,由机器系统决定!,负数写在前面,文字规则字符串,Verilog 语言中,字符串常常用于表示命令内需要显示的信息。用“”括起来的一行字符串,换新一行用“n”字符,与 C 语言一致。在字符串中可以用 C 语言中的各种格式控制符,如t,”,在字符串中可以用 C 语言中的各种数值型式控制符(有些不同),如:%b(二进制),%o(八进制),%d(十进制),%h(十六进制),%t(时间类型),%s(字符串类型),文字规则标识符,五、标识符 任何用Verilog HDL语言描述的“东西”都通过其名字来识别,这个名字被称为标识符。如源文件名、模块名、端口名、变量名、常量名、实例名等。标识符可由字母、数字、下划线和$符号构成;但第一个字符必须是字母或下划线,不能是数字或$符号!在Verilog HDL中变量名是区分大小写的!合法的名字:A_99_ZReset_54MHz_Clock$Module,不合法的名字:123a$datamodule7seg.v,标识符不能与关键字同名!,9.2 数据类型,一、数据类型数据类型是用来表示数字电路中的数据存储和传送单元。Verilog HDL中共有19种数据类型;其中4个最基本的数据类型为:integer型parameter型reg型wire型,其它数据类型:large型、medium型、scalared型、small型、time型、tri型、tri0型、tri1型、triand型、trior型、trireg型、vectored型、wand型、wor型等,二、常量在程序运行过程中,其值不能被改变的量,称为常量。数字(包括整数,x和z值,负数)parameter常量(或称符号常量),9.2 数据类型,三、变量在程序运行过程中,其值可以改变的量,称为变量。其数据类型有19种,常用的有3种:网络型(nets type)寄存器型(register type)数组(memory type),s型变量,定义输出始终随输入的变化而变化的变量。表示结构实体(如门)之间的物理连接。常用nets型变量:wire,tri:连线类型(两者功能一致)wor,trior:具有线或特性的连线(两者功能一致)wand,triand:具有线与特性的连线(两者功能一致)tri1,tri0:上拉电阻和下拉电阻supply1,supply0:电源(逻辑1)和地(逻辑0),nets型变量不能储存值!,9.2 数据类型,wire型变量最常用的nets型变量,常用来表示以assign语句赋值的组合逻辑信号。模块中的输入/输出信号类型缺省为wire型。可用做任何方程式的输入,或“assign”语句和实例元件的输出。,wire 数据名1,数据名2,数据名n;,wiren-1:0 数据名1,数据名2,数据名m;或 wiren:1 数据名1,数据名2,数据名m;,每条总线位宽为n,共有m条总线,wire型向量(总线),格式,9.2 数据类型,定义对应具有状态保持作用的电路元件(如触发器、寄存器等),常用来表示过程块语句(如initial,always,task,function)内的指定信号。常用register型变量:reg:常代表触发器integer:32位带符号整数型变量real:64位带符号实数型变量time:无符号时间变量,纯数学的抽象描述,2.register型变量,9.2 数据类型,register型变量与nets型变量的根本区别是:register型变量需要被明确地赋值,并且在被重新赋值 前一直保持原值。register型变量必须通过过程赋值语句赋值!不能通过assign语句赋值!在过程块内被赋值的每个信号必须定义成register型!,9.2 数据类型,reg型变量定义在过程块中被赋值的信号,往往代表触发器,但不一定就是触发器(也可以是组合逻辑信号)!,reg 数据名1,数据名2,数据名n;,regn-1:0 数据名1,数据名2,数据名m;或 regn:1 数据名1,数据名2,数据名m;,每个向量位宽为n,共有m个reg型向量,例 reg4:1 regc,regd;/regc,regd为4位宽的reg型向量,reg型向量(总线),格式,9.2 数据类型,用reg型变量生成组合逻辑举例:module rw1(a,b,out1,out2);input a,b;output out1,out2;reg out1;wire out2;assign out2=a;always(b)out1=b;endmodule,过程赋值语句,连续赋值语句,电平触发,Verilog中reg与wire的区别,reg型变量既可生成触发器,也可生成组合逻辑;wire型变量只能生成组合逻辑。,9.2 数据类型,用reg型变量生成触发器举例:module rw2(clk,d,out1,out2);input clk,d;output out1,out2;reg out1;wire out2;assign out2=d endendmodule,过程赋值语句,连续赋值语句,边沿触发,9.2 数据类型,定义由若干个相同宽度的reg型向量构成的数组。Verilog HDL通过reg型变量建立数组来对存储器建模。memory型变量可描述RAM、ROM和reg文件。memory型变量通过扩展reg型变量的地址范围来生成:,regn-1:0 存储器名m-1:0;或 regn-1:0存储器名m:1;,每个存储单元位宽为n,共有m个存储单元,3.memory型变量数组,Quartus II不支持!,Verilog HDL中的变量名、参数名等标记符是对大小写字母敏感的!,9.2 数据类型,含义不同 例 regn-1:0 rega;/一个n位的寄存器 reg mema n-1:0;/由n个1位寄存器组成的存储器,必须指明存储单元的地址!,赋值方式不同 一个n位的寄存器可用一条赋值语句赋值;一个完整的存储器则不行!若要对某存储器中的存储单元进行读写操作,必须指明该单元在存储器中的地址!例 rega=0;/合法赋值语句 mema=0;/非法赋值语句 mema8=1;/合法赋值语句 mema1023:0=0;/合法赋值语句,memory型变量与reg型变量的区别,9.3 操作符,一、算术操作符二、逻辑操作符三、位操作符四、关系操作符五、等式操作符,内容概要,六、缩减操作符七、缩位操作符八、条件操作符九、位拼接操作符十、操作符的优先级,9.3 操作符,操作符按功能分为9类:算术操作符逻辑操作符关系操作符等式操作符缩位操作符条件操作符位操作符移位操作符位拼接操作符,操作符按操作数的个数分为3类:单目操作符带一个操作数 逻辑非!,按位取反,缩位操作符,移位操作符双目操作符带两个操作数 算术、关系、等式操作符,逻辑、位操作符的大部分三目操作符带三个操作数 条件操作符,9.3 操作符,一、算术操作符,双目运算符,进行整数除法运算时,结果值略去小数部分,只取整数部分!%称为求模(或求余)操作符,要求%两侧均为整型数据;求模运算结果值的符号位取第一个操作数的符号位!例-11%3 结果为-2进行算术运算时,若某操作数为不定值x,则整个结果也为x。,MAX+PLUS II不支持“/”和“%”运算!Quartus II都支持!,9.3 操作符,例 除法和求模运算的区别,注意/和%的区别!,9.3 操作符,9/4=2,9%4=1,arithmetic.vwf,9.3 操作符,二、逻辑操作符逻辑操作符把它的操作数当作布尔变量:非零的操作数被认为是真(1b1);零被认为是假(1b0);不确定的操作数如4bxx00,被认为是不确定的(可能为零,也可能为非零)(记为1bx);但4bxx11被认为是真(记为1b1,因为它肯定是非零的)。,进行逻辑运算后的结果为布尔值(为1或0或x)!,9.3 操作符,“&”和“|”的优先级除高于条件操作符外,低于关系操作符、等式操作符等几乎所有操作符;逻辑非“!”优先级最高。例(ab)&(bc)可简写为:ab&bc(a=b)|(x=y)可简写为:a=b|x=y(!a)|(ab)可简写为:!a|ab,为提高程序的可读性,明确表达各操作符之间的优先关系,建议使用括号!,为提高程序的可读性,明确表达各操作符之间的优先关系,建议使用括号!,9.3 操作符,三、位操作符,单目操作符,位运算其结果与操作数位数相同。位操作符中的双目操作符要求对两个操作数的相应位逐位进行运算。两个不同长度的操作数进行位运算时,将自动按右端对齐,位数少的操作数会在高位用0补齐。例 若A=5b11001,B=3b101,则A&B=(5b11001)&(5b00101)=5b00001,9.3 操作符,例&操作符和&(按位与)的区别,&运算的结果为1位的逻辑值,注意&和&的区别!,被认为是 1b1,被认为是 1bx,逻辑与结果为 1bx,9.3 操作符,四、关系操作符,双目操作符,括号内先运算!,算术运算先运算!,运算结果为1位的逻辑值1或0或x。关系运算时,若关系为真,则返回值为1;若声明的关系为假,则返回值为0;若某操作数为不定值x,则返回值为x。所有的关系操作符优先级别相同。关系操作符的优先级低于算术操作符。例 asize-1等同于:a(size-1)size-(1a)不等同于:size-1a,9.3 操作符,五、等式操作符,双目操作符,运算结果为1位的逻辑值1或0或x。等于操作符(=)和全等操作符(=)的区别:使用等于操作符时,两个操作数必须逐位相等,结果才为1;若某些位为x或z,则结果为x。使用全等操作符时,若两个操作数的相应位完全一致(如同是1,或同是0,或同是x,或同是z),则结果为1;否则为0。所有的等式操作符优先级别相同。=和!=操作符常用于case表达式的判别,又称为“case等式操作符”。,MAX+PLUS II和Quartus II都不支持!,9.3 操作符,例 if(A=1bx)$display(“AisX”);/当A为不定值时,式(A=1bx)的运算结果为x,则该语句不执行 if(A=1bx)$display(“AisX”);/当A为不定值时,式(A=1bx)的运算结果为1,该语句执行,表3-1“=”的真值表,表3-2“=”的真值表,等于运算的结果可能为1或0或x,全等于运算的结果只有1或0,9.3 操作符,六、缩位操作符,单目操作符,运算法则与位操作符类似,但运算过程不同!对单个操作数进行递推运算,即先将操作数的最低位与第二位进行与、或、非运算,再将运算结果与第三位进行相同的运算,依次类推,直至最高位。运算结果缩减为1位二进制数。例reg3:0 a;b=|a;/等效于 b=(a0|a1)|a(2)|a3,注意缩减操作符和位操作符的区别!,9.3 操作符,七、移位操作符,单目操作符,只有当右操作数为常数时MAX+PLUS II支持!,左移会扩充位数!,用法:An 或 A3=4b0001;4b10014=4b0000 4b10011=5b10010;4b10012=6b100100;16=32b1000000,将操作数右移或左移n位,相当于将操作数除以或乘以2n。,右移位数不变,但右移的数据会丢失!,9.3 操作符,八、条件操作符,三目操作符,信号=条件?表达式1:表达式2,条件操作符为?:用法:,例 数据选择器assign out=sel?in1:in0;,当条件为真,信号取表达式1的值;为假,则取表达式2的值。,sel=1时out=in1;sel=0时out=in0,9.3 操作符,九、位拼接操作符位拼接操作符为 用于将两个或多个信号的某些位拼接起来,表示一个整体信号。用法:,信号1的某几位,信号2的某几位,信号n的某几位,例如在进行加法运算时,可将进位输出与和拼接在一起使用。例1 output 3:0 sum;/和 output cout;/进位输出 input3:0 ina,inb;input cin;assign cout,sum=ina+inb+cin;/进位与和拼接在一起例2 a,b3:0,w,3b101=a,b3,b2,b1,b0,w,1b1,1b0,1b1,9.3 操作符,可用重复法简化表达式,如:4w/等同于w,w,w,w还可用嵌套方式简化书写,如:b,3a,b/等同于b,a,b,a,b,a,b,也等同于b,a,b,a,b,a,b,用于表示重复的表达式必须为常数表达式!,在位拼接表达式中,不允许存在没有指明位数的信号,必须指明信号的位数;若未指明,则默认为32位的二进制数!如1,0=64h00000001_00000000,注意1,0不等于2b10,9.3 操作符,十、操作符的优先级,表3-3 操作符的优先级,为提高程序的可读性,建议使用括号来控制运算的优先级!例(ab)&(bc)(a=b)|(x=y)(!a)|(ab),9.4 基本语句,表3-4 Verilog HDL的语句,9.4 基本语句,一、initial语句,initial begin 语句1;语句2;语句n;end,MAX+PLUS 和Quartus 均不支持!,格式,利用initial语句生成激励波形。,initial begin inputs=b000000;#10 inputs=b011001;#10 inputs=b011011;#10 inputs=b011000;#10 inputs=b001000;end,不可综合!常用在测试文件中,用途,在仿真的初始状态对各变量进行初始化;在测试文件中生成激励波形作为电路的仿真信号。,9.4 基本语句,parameter size=16;reg3:0 addr;reg reg1;reg7:0 memory0:15;initial begin reg1=0;for(addr=0;addrsize;addr=addr+1);memoryaddr=0;end,对各变量进行初始化。,9.4 基本语句,二、forever语句无条件连续执行forever后面的语句或语句块。,forever 语句,forever begin end,或,常用在测试模块中产生周期性的波形,作为仿真激励信号。常用disable语句跳出循环!,注:不同于always语句,不能独立写在程序中,一般用在initial语句块中!,格式,initial begin:Clocking clk=0;#10 forever#10 clk=!clk;endinitial begin:Stimulus disable Clocking;/停止时钟 end,一般情况下是不可综合的!常用在测试文件中,9.4.3 编译指示语句,一、define语句二、include语句三、timescale语句四、条件编译语句ifdef else endif,内容概要,一、define语句宏定义语句用一个指定的标志符(即宏名)来代表一个字符串(即宏内容)。,define 标志符(即宏名)字符串(即宏内容),例 define IN ina+inb+inc+ind宏展开在编译预处理时将宏名替换为字符串的过程。,“编译预处理”是Verilog HDL编译系统的一个组成部分。编译预处理语句以西文符号“”开头注意,不是单引号“”!在编译时,编译系统先对编译预处理语句进行预处理,然后将处理结果和源程序一起进行编译。,格式,9.4.3 编译指示语句,宏名可以用大写字母,也可用小写字母表示;但建议用大写字母,以与变量名相区别。define语句可以写在模块定义的外面或里面。宏名的有效范围为定义命令之后到源文件结束。在引用已定义的宏名时,必须在其前面加上符号“”!使用宏名代替一个字符串,可简化书写,便于记忆,易于修改。预处理时只是将程序中的宏名替换为字符串,不管含义是否正确。只有在编译宏展开后的源程序时才报错。宏名和宏内容必须在同一行中进行声明!,关于宏定义的说明,宏定义的作用:以一个简单的名字代替一个长的字符串或复杂表达式;以一个有含义的名字代替没有含义的数字和符号。,9.4.3 编译指示语句,例 module test;reg a,b,c,d,e,out;define expression a+b+c+d;assign out=expression+e;,经过宏展开后,assign语句为:assign out=a+b+c+d;+e;/出现语法错误!,宏定义不是Verilog HDL语句,不必在行末加分号!如果加了分号,会连分号一起置换!,错误!,9.4.3 编译指示语句,例 module test;reg a,b,c;wire out;define aa a+b define cc c+aa/引用已定义的宏名aa 来定义宏cc assign out=cc;,经过宏展开后,assign语句为:assign out=c+a+b;,在进行宏定义时,可引用已定义的宏名,实现层层置换。,9.4.3 编译指示语句,二、include语句文件包含语句一个源文件可将另一个源文件的全部内容包含进来。,include“文件名”,MAX+PLUS II和Quartus 都不支持!通常用在测试文件中。,将file2.v中全部内容复制插入到include“file2.v”命令出现的地方,格式,9.4.3 编译指示语句,避免程序设计人员的重复劳动!不必将源代码复制到自己的另一源文件中,使源文件显得简洁。(1)可以将一些常用的宏定义命令或任务(task)组成一个文件,然后用include语句将该文件包含到自己的另一源文件中,相当于将工业上的标准元件拿来使用。(2)当某几个源文件经常需要被其他源文件调用时,则在其他源文件中用include语句将所需源文件包含进来。,使用include语句的好处,9.4.3 编译指示语句,例 用include语句设计16位加法器,adder模块,位拼接,改变被引用模块adder中的参数size为my_size,9.4.3 编译指示语句,一个include语句只能指定一个被包含的文件;若要包含n个文件,需用n个include语句。,include语句可出现在源程序的任何地方。被包含的文件若与包含文件不在同一子目录下,必须指明其路径!,include“aaa.v”“bbb.v”/非法!,include“parts/count.v”/合法!,关于文件包含的说明,include“aaa.v”include“bbb.v”/合法!,9.4.3 编译指示语句,可将多个include语句写在一行;在该行中,只可出现空格和注释行。,文件包含允许嵌套。,include“aaa.v”include“bbb.v”/合法!,9.4.3 编译指示语句,三、timescale语句时间尺度语句用于定义跟在该命令后模块的时间单位和时间精度。,timescale/,时间单位用于定义模块中仿真时间和延迟时间的基准单位;时间精度用来声明该模块的仿真时间和延迟时间的精确程度。在同一程序设计里,可以包含采用不同时间单位的模块。此时用最小的时间精度值决定仿真的时间单位。,格式,MAX+PLUS II和Quartus 都不支持!通常用在测试文件中。,9.4.3 编译指示语句,timescale 1ps/1ns/非法!timescale 1ns/1ps/合法!,时间精度至少要和时间单位一样精确,时间精度值不能大于时间单位值!,在timescale语句中,用来说明时间单位和时间精度参量值的数字必须是整数。其有效数字为1、10、100;单位为秒(s)、毫秒(ms)、微秒(us)、纳秒(ns)、皮秒(ps)、毫皮秒(fs)。,9.4.3 编译指示语句,例 timescale语句应用举例。timescale 10ns/1ns/时间单位为10ns,时间精度为1nsreg sel;initial begin#10 sel=0;/在10ns10时刻,sel变量被赋值为0#10 sel=1;/在10ns20时刻,sel变量被赋值为1 end,9.4.3 编译指示语句,9.4.4 任务和函数语句,三、task和function语句task和function语句分别用来由用户定义任务和函数。任务和函数往往是大的程序模块中在不同地点多次用到的相同的程序段。利用任务和函数可将一个很大的程序模块分解为许多较小的任务和函数,便于理解和调试。输入、输出和总线信号的值可以传入、传出任务和函数。,当希望能够对一些信号进行一些运算并输出多个结果(即有多个输出变量)时,宜采用任务结构。常常利用任务来帮助实现结构化的模块设计,将批量的操作以任务的形式独立出来,使设计简单明了。,1.任务(task),task;端口及数据类型声明语句;其他语句;endtask,(端口1,端口2,);,MAX+PLUS II不支持但Quartus 支持!,任务定义,任务调用,包含定时控制语句的任务是不可综合的!,9.4.4 任务和函数语句,任务的定义与调用。,task my_task;input a,b;inout c;output d,e;/执行任务工作相应的语句 c=foo1;d=foo2;/对任务的输出变量赋值 e=foo3;endtask,my_task(v,w,x,y,z);,任务定义,任务调用,当任务启动时,由v、w和x传入的变量赋给了a、b和c;当任务完成后,输出通过c、d和e赋给了x、y和z。,注1:任务的定义与调用必须在一个module模块内!注2:任务被调用时,需列出端口名列表,且必须与任务定义中的I/O变量一一对应!注3:一个任务可以调用其他任务和函数。,9.4.4 任务和函数语句,通过任务调用完成4个4位二进制输入数据的冒泡排序。,任务的定义,任务的调用,9.4.4 任务和函数语句,sort4.v的测试文件,$random为系统任务,返回一个32位的带符号的随机数;一般用法为:$random%b其中b0,它给出了一个范围在-b+1b-1之间的随机数。$random%15通过位拼接操作,产生一个014之间的随机数。,9.4.4 任务和函数语句,9.4.4 任务和函数语句,sort4.v的仿真波形task_Top.wlf,按从小到大的顺序排序,9.4.4 任务和函数语句,2.函数(function)函数的目的是通过返回一个用于某表达式的值,来响应输入信号。适于对不同变量采取同一运算的操作。函数在模块内部定义,通常在本模块中调用,也能根据按模块层次分级命名的函数名从其他模块调用。而任务只能在同一模块内定义与调用!,function 函数名;端口声明;局部变量定义;其他语句;endfunction,缺省则返回1位reg型数据,函数定义,可以综合!,9.4.4 任务和函数语句,(),注1:函数的调用是通过将函数作为调用函数的表达式中的操作数来实现的!,与函数定义中的输入变量对应!,注2:函数在综合时被理解成具有独立运算功能的电路,每调用一次函数,相当于改变此电路的输入,以得到相应的计算结果。,function7:0 gefun;/函数的定义 input 7:0 x;/进行运算 gefun=count;/赋值语句 endfunctionassign number=gefun(rega);/对函数的调用,函数调用,内部寄存器,9.4.4 任务和函数语句,函数的定义不能包含任何时间控制语句用延迟#、事件控制或等待wait标识的语句。函数不能启动(即调用)任务!定义函数时至少要有一个输入参量!且不能有任何输出或输入/输出双向变量。在函数的定义中必须有一条赋值语句,给函数中的一个内部寄存器赋以函数的结果值,该内部寄存器与函数同名。,函数的使用规则,9.4.4 任务和函数语句,例 利用函数对一个8位二进制数中为0的位进行计数。,9.4.4 任务和函数语句,count0s_function.vwf,9.4.4 任务和函数语句,例阶乘运算函数,函数名被赋予的值就是函数的返回值!,函数定义,9.4.4 任务和函数语句,tryfunct.v的测试模块,模块元件例化,对各变量进行初始化,并生成激励波形,产生时钟波形,9.4.4 任务和函数语句,tryfuncttop.v的仿真波形(用Modelsim编译、仿真),n的阶乘n!=n(n-1)(n-2)21,5的阶乘5!=5x4x3x2x1=120,9.4.4 任务和函数语句,表3-5 任务与函数的区别,9.5 用库元件实现结构描述,9.5 用库元件实现结构描述,

    注意事项

    本文(Verilog语言规则.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开