verilog语言及程序设计.ppt

上传人:本田雅阁 文档编号:2127941 上传时间:2019-02-19 格式:PPT 页数:42 大小:258.51KB
返回 下载 相关 举报
verilog语言及程序设计.ppt_第1页
第1页 / 共42页
verilog语言及程序设计.ppt_第2页
第2页 / 共42页
verilog语言及程序设计.ppt_第3页
第3页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《verilog语言及程序设计.ppt》由会员分享,可在线阅读,更多相关《verilog语言及程序设计.ppt(42页珍藏版)》请在三一文库上搜索。

1、Verilog语言及程序设计,四川华迪信息技术有限公司 Version1.1,阻塞语句在verilog中的应用,阻塞语句,顾名思义,即本条语句具有影响下一条语句的作用,如果该条语句没有执行完,那么下条语句不可能进入执行状态的 阻塞语句最能体现verilog HDL和C语言之间的血缘关系,比如,在时钟沿触发的always进程里,若先执行b=c,再执行a=b,那么本质上,在一个时钟沿触发里面,a=c成立,即是说,不要b变量,直接在进程里赋值a=c,结果是一样的。这和c语言中b=c,a=b性质相同,非阻塞语句在verilog中的应用,非阻塞语句,顾名思义,本条语句不影响下一条语句的作用,更能体现硬件

2、电路的特点。这正是非阻塞语句广泛应用于时序逻辑电路的原因。 如果在一个时钟沿触发的always进程里面,b=c,a=b那么就不可能直接在进程里面赋值a=c.因为c的值要经过两个时钟延迟才传到a里面,如果c为1,b为0,a为1的话,那么在在非阻塞语句的进程里面, 第一个时钟沿到来,a为0,第二个时钟沿到来,a为1 (注:在一次触发进程里,无论是阻塞和非阻塞语句,每条语句只能执行一次),阻塞语句与非阻塞语句使用注意事项,阻塞语句是顺序执行的,而非阻塞语句是同时执行的 大体原则:阻塞语句运用于组合逻辑电路设计,非阻塞语句运用于时序逻辑电路设计 不要在同一个always块里面混合使用“阻塞赋值”和“非

3、阻塞赋值”,Verilog的特点,Verilog易学易用(与C语言相似),功能强大,使用 广泛。 可以在不同层次描述数字系统 开关级描述 寄存器传输级描述 门级描述 基本设计单元是“模块”(block)包括: 接口描述 逻辑功能描述,Verilog HDL程序基本结构,Verilog的基本设计单元是“模块”(BLOCK) 模块由两部分组成:一部分描述接口,另一部分描述逻辑功能。 按照模块接口的描述,一个模块可以在另一个模块中使用;逻辑功能的描述可以使用连续赋值语句(描述数据流行为)、过程结构(时序行为)、开关级原语、门级原语和用户定义的原语等方式。,模块的基本结构,Module(); 端口说明

4、(input,out,inout) 参数定义 数据类型定义 连续赋值语句(assign) 过程块(initial和always) 行为描述语句 低层模块实例 任务和函数 延时说明块 endmodule,模块的基本结构说明,是模块惟一的标识符; 是由模块的输入、输出和双向端口组成的端口列表,这些列表用来与其他模块进行连接; 数据类型定义部分用来指定模块内所用的数据对象为寄存器型、存储器型或连线型; 过程块包括initial过程块和always过程块两种,行为描述语句只能出现在这两种过程块中; 延时说明块用来对模块各个输入和输出端口间的路径延时进行说明。,模块调用,调用模块实例的一般格式: ();

5、 Verilog HDL程序是由模块组成的,每个模块的内容都包含在“Module”和“endmodule”之间。 每个模块都要进行端口定义,说明输入、输出端口。,模块的描述方式,Verilog HDL模块代表硬件上的逻辑实体,其范围可以从简单的门到整个电路系统. 模块可以根据所采用的不同描述方式而分为行为描述和结构描述两类,也可采用两种方式的组合。,Verilog 语言要素,标识符(identifier) 用来表示各种变量、参数或构件的名称,可以是任意一组字母、数字、$符号和_(下划线)符号的组合,但第一个字符必须是字母或下划线,区分大小写 转义标识符 可以在一条标识符中包含任何可打印字符。转

6、义标识符以“”(反斜杠)符号开头,以空白结尾(空白可以是一个空格、一个制表符或换行符),Verilog 语言要素,关键字 Verilog HDL定义了一系列保留字(关键字)。 在编写Verilog HDL程序时,变量的定义不要与关键字冲突。 注意只有小写的关键字才是保留字。 注释 在 Verilog HDL里有两种形式的注释: / 是单行注释 /* */ 是多行注释,格式,Verilog HDL 区分大小写,即大小写的标识符是不同的。 源程序书写格式自由,可跨越多行编写,也可在一行内编写。,系统任务和函数,以字符开始的标识符表示系统任务或系统函数。任务提供了一种封装行为的机制。这种机制$可以在

7、设计的不同部分被调用。任务可以返回0个或多个值。函数除只能返回一个值以外与任务相同。 函数在0时刻执行,即不允许延迟,而任务可以带有延迟。,常见系统任务和函数,显示任务 $display,$write,$strobe,$monitor,$monitoron,$monitoroff 模拟控制任务 $finish, $stop 模拟时间函数 $time,$stime,$realtime,常用任务和函数,概率分布函数 $ramdom(seed) 其它 $setup, $hold, $setuphold, $width, $period, $skew, $recovery, $nochange, $r

8、toi, $itor, $realtobits, $bitstoreal, $printtimescale, $timeformat等,编译指令,以(反引号)开始的某些标识符是编译器指令。 在Verilog 语言编译时,特定的编译器指令在整个编译过程中有效(编译过程可跨越多个文件),直到遇到其他不同的编译程序指令。,一些编译指令,define , undef ifdef , else, endif default_nettype include resetall timescale,值集合,Verilog HDL有四种基本的值 0:逻辑0或“假”; 1:逻辑1或“真”; x:未知; z:高阻。

9、,说明,在门的输入或一个表达式中为“z”的值通常解释成“x”,此外x和z是不区分大小写的。 下划线符号()可以随意用在整数或实数中,它们就数量本身没有意义,仅用以提高可读性。唯一的限制是下划线不能用做首字符。,常量,整型 十进制数格式 ,如100 基数表示法 ,如4b1101 实数型 十进制计数法 科学计数法 字符串型 双引号内的字符序列,不能分成多行书写,参数,参数是一个常量。 经常用于定义时延和变量的宽度。 使用参数说明的参数只被赋值一次。 参数说明形式如下(见P233) 参数值也可以在编译时被改变。改变参数值可以使用参数定义语句或通过在模块初始化语句中定义参数值。,数据类型,Verilo

10、g HDL有两大类数据类型 线网 表示结构化元件间的物理连线 有wire,tri,wor,trior,wand,triand,trireg,tri1,tri0 ,supply0 ,supply1等类型。 寄存器 表示一个抽象的数据存储单元 有reg,integer,time,real,realtime 等类型。,表达式中的运算符,(1)算术运算符(,/ ,%) (2)位运算符(,&,|,) (3)逻辑运算符(&,|,!,) (4)关系运算符(,=,) (7)连接和复制运算( | | ) (8)归约运算符(&,|,&,|,) (9)条件运算符(?:) (10)优先级别(见P237表11.6),内

11、置基本门,(1)多输入门 and, nand, or, nor, xor, xnor (2)多输出门 buf, not (3)三态门 bufif0, bufif1, notif0, notif1 (4)上拉、下拉电阻 pullup, pulldown (5)MOS开关 cmos, nmos, pmos, rcmos, rnmos, rpmos (6)双向开关 tran, tranif0, tranif1, rtran, rtranif0, rtranif1,连续赋值语句,连续赋值语句用于数据流行为建模,适用于组合逻辑电路,主要用于对线网wire类型变量的赋值。 语法格式 assign 驱动强度

12、 #时延值 线网标识符表达式,连续赋值语句,连续赋值语句没有保持的概念,只要右端表达式中操作数的值发生变化,表达式即被重新计算;如果结果值有变化,新结果就赋给左边的线网。 连续赋值语句之间是并发的,与书写的先后顺序无关,行为建模语句,行为建模有以下内容: 过程结构 时序控制 语句块 过程性赋值 条件语句 循环语句,过程结构,以下两种语句是为一个设计的行为建模的主要机制 initial语句 always语句 一个模块中可以包含任意多个initial或always语句 所有的initial和always语句在0时刻开始并行执行,时序控制,时延控制 表示在语句执行前的“等待时延”。 使用格式有两种:

13、 时延值 (最小时延:典型时延:最大时延) 例:3 c a;,事件控制,边沿触发事件控制 主要有正边沿(posedge)和负边沿(negedge)两种 例:always (posedge clk) count=count+1; 电平敏感事件控制 进程语句或进程中的过程语句一直延迟到列出的控制信号有变化才执行 例:always (a or b) c=ab;,语句块,顺序语句块 格式:begin 标识符 语句1; ;语句n; end 其中标识符是可选项 语句块中的语句按给定次序顺序执行 并行语句块 格式:fork 标识符语句1; ;语句n; join 其中标识符是可选项 语句块中的语句并行执行,过

14、程性赋值,它是在initial语句或always语句内的赋值,只能对寄存器数据类型的变量赋值 阻塞性赋值 () 阻塞性赋值是指立即赋值 非阻塞性赋值 () 非阻塞性赋值是在语句块结束后,块内的非阻塞性赋值语句同时进行赋值,if条件语句,if条件语句 3种格式 if (表达式) 语句; if (表达式) 语句1; else 语句2; if (表达式1) 语句1; else if (表达式2) 语句2; else if (表达式n) 语句n; else 语句n1;,Case条件语句,语法格式: case(控制表达式) 分支表达式1: 语句1; 分支表达式2: 语句2; 分支表达式n: 语句n; d

15、efault: 语句n1; Endcase case可以换为casex或casez ,这三者使用形式上一样,但功能上有所差别。,case、casez和casex的差别,case、casez和casex的差别,case、casez和casex的差别,case、casez和casex的差别,从表中可以看出三者差别如下: case是将所有逻辑值进行比较; casez则将高阻情况z情况忽略; casex则进一步将高阻z和未定x均忽略不计。,循环语句,Forever 语法格式: forever 语句 功能:将语句永远执行下去,主要用于产生时钟变量等 Repeat 语法格式:repeat(循环次数表达式) 语句 功能:执行指定循环次数,循环语句,While 语法格式:while (条件表达式) 语句 功能:执行过程赋值语句直到指定的条件为假 For 语法格式: for (循环下标初值;循环条件;循环下标增量) 过程语句 功能:按照指定的次数重复执行过程赋值语句若干次,华迪电子实训中心 2006.10,谢 谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1