- 1、本文档共54页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2015年
Verilog硬件描述语言Verilog HDL
主讲 陈付龙
计算机科学与技术系
第5讲 Verilog HDL行为建模方法
学习目标
结构化过程always和initial
定义阻塞(blocking)和非阻塞(non-blocking)过程性赋值语句。
理解行为级建模中基于延迟的时序控制机制。学习使用一般延迟、内嵌赋值延迟和零延迟。
理解行为级建模中基于事件的时序控制机制。学习使用一般事件控制、命名事件控制和事件OR(或)控制。
在行为级建模中使用电平敏感的时序控制机制。
使用if和else解释条件语句。
使用case,casex和casez语句讲解多路分支。
理解while,for,repeat和forever等循环语句。
定义顺序块和并行块语句。
理解命名块和命名块的禁用。
在设计实例中进行行为级建模。
5.1 结构化过程语句
在Verilog中有两种结构化的过程语句:initial语句和always语句,它们是行为级建模的两种基本语句。其他所有的行为语句只能出现在这两种结构化过程语句里。
与C语言不同,Verilog在本质上是并发而非顺序的。Verilog中的各个执行流程(进程)并发执行,而不是顺序执行的。
每个initial语句和always语句代表一个独立的执行过程,每个执行过程从仿真时间0开始执行,并且这两种语句不能嵌套使用。
initial语句
所有在initial语句内的语句构成了一个initial块。initial块从仿真0时刻开始执行,在整个仿真过程中只执行一次。
如果一个模块中包括了若干个initial块,则这些initial块从仿真0时刻开始并发执行,且每个块的执行是各自独立的。
如果在块内包含了多条行为语句,那么需要将这些语句组成一组,一般是使用关键字begin和end将它们组合为一个块语句;如果块内只有一条语句,则不必使用begin和end。
由于initial块语句在整个仿真期间只能执行一次,因此它一般被用于初始化、信号监视、生成仿真波形等目的。
在变量声明的同时进行初始化
同时进行端口/数据声明和初始化
always语句
always语句包括的所有行为语句构成了一个always语句块。该always语句块从仿真0时刻开始顺序执行其中的行为语句;在最后一条执行完成后,再次开始执行其中的第一条语句,如此循环往复,直至整个仿真结束。
always语句通常用于对数字电路中一组反复执行的活动进行建模。例如时钟信号发生器,每半个时钟周期时钟信号翻转一次。在现实电路中只要电源接通,时钟信号发生器从时刻0就有效,一直工作下去。
5.2 过程赋值语句
过程赋值语句的更新对象是寄存器、整数、实数或时间变量。这些类型的变量在被赋值后,其值将保持不变,直到被其他过程赋值语句赋予新值。
用法:
过程赋值语句的左侧值可以是:
1. reg,整型数、实型数、时间寄存器变量或存储器单元。
2. 上述各种类型的位选(例如,addr [ 0 ])。
3. 上述各种类型的域选(例如,addr [ 31 : 16 ])。
上面三种类型的拼接。
Verilog包括两种类型的过程赋值语句:阻塞赋值和非阻塞赋值语句
阻塞赋值语句
阻塞赋值语句使用“=”作为赋值符,在一个begin-end块中表现为串行行为。
1.如果右侧表达式的位宽较宽,则将保留从最低位开始的右侧值,把超过左侧位宽的高位丢弃;
2.如果左侧位宽大于右侧位宽,则不足的高位补0;
非阻塞赋值使用“=”作为赋值符。
注意:不要在同一个always块中混合使用阻塞和非阻塞赋值语句。
非阻塞赋值语句的应用
对程序:
有如下的特点:
1.在每个时钟上升沿到来时读取in1,in2,in3和reg1,计算右侧表达式的值;
2.对左值的赋值由仿真器调度到相应的仿真时刻,延迟时间由语句中内嵌的延迟值确定。在本例中,对reg1的赋值需要等一个时间单位,对reg2的赋值需要等到时钟信号下降沿到来的时刻,对reg3的赋值需要等一个时间单位;
3.每个赋值操作在被调度的仿真时刻完成。注意,对左侧变量的赋值使用的是由仿真器保存的表达式“旧值”。在本例中,对reg3赋值使用的是reg1的“旧值”,而不是在此之前对reg1赋予的新值,reg1的“旧值”是在赋值事件调度时由仿真器保存的。
使用非阻塞赋值来避免竞争
采用阻塞赋值完成
产生了竞争的情况:a = b和b = a,具体执行顺序的先后取决于所使用的仿真器,因此这段代码达不到交换a和b值的目的 。
在每个时钟上升沿到来的时候,仿真器读取每个操作数的值,进而计算表达式的值并保存在临时变量中;当赋值的时候,仿真器将这些保存的值赋予非阻塞赋值语句的左侧变量。
5.3 基于延迟的时序控制
Verilog提供了
您可能关注的文档
- 上海版小学语文一年级上名师辅导答案.doc
- 上海版小学语文一年级上答案.doc
- 上海奥特斯配电系统设计方案中英文版答案.doc
- 清明节(中英文)答案.ppt
- 清凉湾公园景观设计方案——浅谈景观设计人性化、生态化的延续答案.doc
- 清理撒煤斜巷作业规程2010.9.30答案.doc
- 人教版小学数学四年级上册课本练习答案.ppt
- 上海2010、11、15某教师公寓大火相关答案.doc
- 上海2002年6年级天姿国色小学语文第10单元第10节课_看云识天气答案.ppt
- 清洁剂培训答案.ppt
- 半导体材料性能提升技术突破与应用案例分析报告.docx
- 半导体设备国产化政策支持下的关键技术突破与应用前景报告.docx
- 剧本杀市场2025年区域扩张策略研究报告.docx
- 剧本杀行业2025人才培训体系构建中的市场需求与供给分析.docx
- 剧本杀行业2025年人才培训行业人才培养模式创新与探索.docx
- 剧本杀行业2025年内容创作人才需求报告.docx
- 剧本杀行业2025年区域市场区域剧本市场消费者满意度与市场竞争力研究报告.docx
- 剧本杀市场2025年区域竞争态势下的区域合作策略分析报告.docx
- 剧本杀行业2025人才培训与行业人才培养模式创新.docx
- 剧本杀行业剧本创作人才心理素质培养报告.docx
文档评论(0)