《CPLD FPGA设计与应用基础教程》课件第五章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《CPLD FPGA设计与应用基础教程》课件第五章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CPLD FPGA设计与应用基础教程 CPLD FPGA设计与应用基础教程课件第五章 CPLD FPGA 设计 应用 基础教程 课件 第五
- 资源描述:
-
1、第第五五章章 任务及函数任务及函数LOREM IPSUM DOLOR目 录CONCENT5.1任务5.2 函数5.3 系统任务和系统函数5.4 命名事件5.5 层次路径名5.6 共享任务和函数 5.1任务GRADUATION THESIS5.1任务任务类似于一段程序,它只能在模块内部的行为所调用,因而不能使用连续赋值语句来调用任务。任务没有返回值,而是直接通过output或inout端口输出。任务可以包含时序控制和时延等时序信息,也可以包含各种事件控制逻辑,同时也可以调用其他任务或函数,并且可以有各种端口参数。5.1任务任务5.1.1任务声明任务声明任务以关键字task开始,以关键字endta
2、sk结束。其基本语法如下:task task_name;port declaration;task declaration;local variable declaration;beginprocedural_statement;endendtaskport decalaration是可选的,可以有输入(input)、输出(output)和双向(inout)的端口声明,也可以缺省。通过输入端口或者双向端口来传递参数并交由任务处理;处理完毕的数据通过输出端口或者双向端口交由调用它的模块进行处理。端口并不像模块的端口那样传递真实的电信号,而是传递数据。5.1任务任务【例5-1】采用任务实现对两个1
3、6位宽的操作数的与、或、异或逻辑,其示意图如图5-1所示。task bitwise_oper;input 15:0 a;input 15:0 b;output 15:0 ab_and,ab_or,ab_xor;begin#10 ab_and=a&b;ab_or=a|b;ab_xor=a b;endendtask5.1任务5.1.2 任务调用任务调用 任务调用和其他高级编程语言中的函数调用很类似,但它只能在过程语句中调用。也就是说,它只能在always语句块和initial语句块中被调用,因此任务的output和inout参数必须为reg型。任务可以调用其他任务,任务可以嵌套调用自己,甚至可以被
4、自己调用的任务再调用。任务调用的基本语法格式是:task_name(expression1,expression2,expressionN);系统调用任务后,任务计算的结果通过output和inout端口实现数据传递给系统中调用该任务的代码。调用的参数和任务中的端口声明的顺序必须一一对应。5.2函数GRADUATION THESIS5.2函数函数定义函数定义函数和任务很类似,也可以用来描述共同代码段。但函数与任务不同的是,函数只能返回一个值,并且不能包含任何时延信息,也不能调用其他任务。另外,函数必须至少要有一个输入,不允许有output和inout。函数可以调用其他的函数。因为函数里面不带有
5、触发器,所以一般可用于综合成具体的电路逻辑。5.2函数5.2.1 函数声明函数声明函数以关键字function开始,以关键字endfunction结束。函数的作用是实现组合逻辑,因此函数里不能有任何时延控制逻辑。函数返回值默认为标量reg型。如果需要指明特定的数据类型和位宽,需要显式声明。函数声明的基本格式如下:function range or type function_name;input declaration;other decalaration;begin statement;endendfunction5.2函数5.2.2 函数调用函数调用函数调用和任务调用相同,均需指明函数名和
6、输入参数名,其基本格式如下:function_name(expression1,expression2,expressionN);函数内部声明的寄存器是静态的,当函数返回的时候,数值仍然维持不变。当函数执行完毕时,返回值会出现在调用函数的位置。5.2函数假设设计一个内存协议,需要调用奇偶校验函数,其Verilog HDL代码如下:module parity;.reg 31:0 addr;reg parity;always(addr)begin/invoke the function calc_parity twice parity=calc_parity(addr);$display(“Par
7、itycalculated=%b”,calc_parity(addr);end/define Function calc_parity function calc_parity;input 31:0 address;begin/return the xor of all address bits.calc_parity=address;end endfunction.endmodule5.3系统务和系统函数GRADUATION THESIS5.3系统任务和系统函数Verilog HDL不仅可以用户定义任务和函数,而且还有预先定义好的内建的系统任务和系统函数,用户可以直接以关键字的形式直接调用。
8、根据用途不同,系统任务和系统函数大致可以分为几类:l显示任务l仿真控制任务l随机建模任务l文件输入输出任务l时间标度任务lPLA建模任务l变换函数l概率分布函数l字符格式化l命令行参变量5.3系统任务和系统函数5.3.1 显示任务显示任务Verilog HDL提供了三种类型的显示任务,分别是:显示和写任务、连续监控任务以及选通的监控任务。其关键字分别是$display,$write,$monitor以及$strobe。其根本语法格式如下:task_name(format_specification1,argument_list1,format_specification2,argument_l
9、ist2,format_specificationN,argument_listN);如:$display($time,“:a=%b,b=%h,c=%o,d=%d”,a,b,c,d);表示一旦调用$display任务,则把此刻的a、b、c和d的值分别显示出来,并显示当时的时刻。5.3系统任务和系统函数四类显示任务的区别如下:显示任务类型任务描述$display用于行为级描述中。当该任务被调用时,把指定信息及行结束字符打印到标准输出设备$write和$display的作用相同,只是在该任务被调用时,只把指定信息打印到标准输出设备,不输出行结束字符$monitor一旦任务中的任意一个变量发生变化时
10、就把指定信息打印到标准输出设备。需要注意的是,$monitor任务不能用来监控时间变量或返回时间值的函数。$monitor信息必须是在每次仿真时间阶段结束的时候才会打印,这样每个变量在每次仿真时间阶段结束时都会显示其最终值。$strobe用于行为级描述中。$display信息必须是在每次仿真时间阶段结束的时候才会打印,这样每个变量在每次仿真时间阶段结束时都会显示其最终值。表 5 1 显示任务具体区别和描述5.3系统任务和系统函数【例5-3】各类显示任务的应用举例说明integer watchdog;initial begin watchdog=500;$display(“Implement t
11、he display task,watchdog value is%d”,watchdog);$strobe(“Implement the stroble task,watchdog value is%d”,watchdog);watchdog=1000;$display(“Implement the display task again,watchdog value is%d”,watchdog);$write(“Implement the write task,watchod value is”);$write(“%dn”,watchdog);end仿真结果显示为:Implement th
12、e display task,watchdog value is 500Implement the display task again,watchdog value is 1000Implement the write task,watchdog value is 1000Implement the stroble task,watchdog value is 10005.3系统任务和系统函数5.3.2仿真控制任务仿真控制任务在正常状态下,Verilog HDL提供了两类系统任务来结束仿真。其关键字分别是$finish和$stop。$finish系统任务被调用时,意味着仿真器退出仿真环境,并
13、把控制权交还给操作系统。$stop系统任务被调用时,只是把仿真挂起,不会退出仿真环境。其基本格式为关键字加“;”。如:$finish;$stop;。5.3.3文件输入输出任务文件输入输出任务仿真数据不仅需要实时显示,也需要随时保存以便在未来的某个时间内查阅。或者,当要给的仿真激励需要大量数据时,如果在Testbench里面直接显式写入数据,不仅浪费时间,而且可读性差,代码可重复利用率低,容易出错。采用文件输入输出任务可以很好的解决此问题。和C语言一样,Verilog HDL的文件输入输出任务包含如下子任务:文件打开($fopen)、文件关闭($fclose)、写入文件($fdisplay、$f
14、write、$fmonitor、$fstrobe、$fflush)以及从文件中读取数据($readmemh、$readmemb等)。各文件输入输出任务的描述如表5-2所示。5.3系统任务和系统函数任务类型关键字描述文件打开$fopen打开一个文件文件关闭$fclose关闭一个文件写入文件$fdisplay和显示任务一样,只是输出到文件中$fwrite$fmonitor$fstrobe$fflush把输出缓冲内的资料输出到指定文件中读取文件$readmemb从文件中读取二进制存储数据并将数据加载到存储器中$readmemh从文件中读取十六进制存储数据并将数据加载到存储器中$fread从文件中读取
15、二进制数据到存储器中$fgetc从文件中每次读取一个字符$fgets从文件中每次读取一行$ungetc把一个字符插入文件中$frewind重新回到文件的开始处$fseek移动到偏移量指定的位置$ftell返回以文件开始处为基础的偏移量$fscanf从文件中读取格式化数据$ferror在执行完一个读取任务后,帮助判断出错的原因5.3系统任务和系统函数文件模式具体说明r,rb打开文件并从文件的头开始读。如果文件不存在则报错w,wb打开文件并从文件的头开始写。如果文件不存在则创建新文件a,ab打开文件并从文件的末尾开始写。如果文件不存在则创建文件r+,r+b,rb+打开文件并从文件的头开始读写。如果
展开阅读全文