ImageVerifierCode 换一换
格式:PPT , 页数:121 ,大小:641.50KB ,
资源ID:2728029      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2728029.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(verilog语言学习17-22.ppt)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

verilog语言学习17-22.ppt

1、第17章 Verilog中的高级结构学习内容:学习内容:任务和函数的定义和调用任务和函数的定义和调用怎样使用命名块怎样使用命名块怎样禁止命名块和任务怎样禁止命名块和任务有限状态机(有限状态机(FSM)及建模)及建模Verilog的任务及函数的任务及函数结构化设计是将任务分解为较小的,更易管理的单元,并将可重用代结构化设计是将任务分解为较小的,更易管理的单元,并将可重用代码进行封装。这通过将设计分成模块,或任务和函数实现。码进行封装。这通过将设计分成模块,或任务和函数实现。任务(任务(task)通常用于调试,或对硬件进行行为描述通常用于调试,或对硬件进行行为描述可以包含时序控制(可以包含时序控制

2、(#延迟,延迟,,wait)可以有可以有input,output,和,和inout参数参数可以调用其他任务或函数可以调用其他任务或函数函数函数(function)通常用于计算,或描述组合逻辑通常用于计算,或描述组合逻辑不能包含任何延迟;函数仿真时间为不能包含任何延迟;函数仿真时间为0只含有只含有input参数并由函数名返回一个结果参数并由函数名返回一个结果可以调用其他函数,但不能调用任务可以调用其他函数,但不能调用任务Verilog的任务及函数的任务及函数任务和函数必须在任务和函数必须在module内调用内调用在任务和函数中不能声明在任务和函数中不能声明wire所有输入所有输入/输出都是输出都

3、是局部局部寄存器寄存器任务任务/函数执行完成后才返回结果。函数执行完成后才返回结果。例如,若任务例如,若任务/函数中有函数中有forever语句,则永远不会返回结果语句,则永远不会返回结果任务任务下下面面的的任任务务中中含含有有时时序序控控制制和和一一个个输输入入,并并引引用用了了一一个个module变变量量,但没有输出、输入输出和内部变量,也不显示任何结果。但没有输出、输入输出和内部变量,也不显示任何结果。时序控制中使用的信号(例如时序控制中使用的信号(例如ck)一定不能作为任务的输入,因为)一定不能作为任务的输入,因为输入值只向该任务传送一次。输入值只向该任务传送一次。moduletop;

4、regclk,a,b;DUTu1(out,a,b,clk);always#5clk=!clk;taskneg_clocks;input31:0number_of_edges;repeat(number_of_edges)(negedgeclk);endtaskinitialbeginclk=0;a=1;b=1;neg_clocks(3);/任务调用任务调用a=0;neg_clocks(5);b=0;endendmodule任务任务任务可以有任务可以有input,output和和inout参数。参数。传传送送到到任任务务的的参参数数和和与与任任务务I/O说说明明顺顺序序相相同同。尽尽管管传传送送

5、到到任任务务的的参参数数名名称称与与任任务务内内部部I/O说说明明的的名名字字可可以以相相同同,但但在在实实际际中中这这通通常常不不是是一一个个好好的的方法。参数名的唯一性可以使任务具有好的模块性。方法。参数名的唯一性可以使任务具有好的模块性。可以在任务内使用时序控制。可以在任务内使用时序控制。在在Verilog中任务定义一个新范围(中任务定义一个新范围(scope)要禁止任务,使用关键字要禁止任务,使用关键字disable。主要特点:主要特点:从从代代码码中中多多处处调调用用任任务务时时要要小小心心。因因为为任任务务的的局局部部变变量量的的只只有有一一个个拷拷贝贝,并并行调用任务可能导致错误

6、的结果。在任务中使用时序控制时这种情况时常发生。行调用任务可能导致错误的结果。在任务中使用时序控制时这种情况时常发生。在在任任务务或或函函数数中中引引用用调调用用模模块块的的变变量量时时要要小小心心。如如果果想想使使任任务务或或函函数数能能从从另另一个模块调用,则所有在任务或函数内部用到的变量都必须列在端口列表中。一个模块调用,则所有在任务或函数内部用到的变量都必须列在端口列表中。任务任务下下面面的的任任务务中中有有输输入入,输输出出,时时序序控控制制和和一一个个内内部部变变量量,并并且且引引用用了了一个一个module变量。但没有双向端口,也没有显示。变量。但没有双向端口,也没有显示。任务调

7、用时的参数按任务定义的顺序列出。任务调用时的参数按任务定义的顺序列出。module mult(clk,a,b,out,en_mult);input clk,en_mult;input 3:0 a,b;output 7:0 out;reg 7:0 out;always(posedge clk)multme(a,b,out);/任务调用任务调用 task multme;/任务定义任务定义 input 3:0 xme,tome;output 7:0 result;wait(en_mult)result=xme*tome;endtaskendmodule函数(函数(function)函数中不能有时序控

8、制,但调用它的过程可以有时序控制。函数中不能有时序控制,但调用它的过程可以有时序控制。函数名函数名f_or_and在函数中作为在函数中作为register使用使用module orand(a,b,c,d,e,out);input 7:0 a,b,c,d,e;output 7:0 out;reg 7:0 out;always(a or b or c or d or e)out=f_or_and(a,b,c,d,e);/函函数数调调用用 function 7:0 f_or_and;input 7:0 a,b,c,d,e;if (e=1)f_or_and=(a|b)&(c|d);else f_or_

9、and=0;endfunctionendmodule函数函数主要特性:主要特性:函数定义中不能包含任何时序控制语句。函数定义中不能包含任何时序控制语句。函数至少有一个输入,不能包含任何输出或双向端口。函数至少有一个输入,不能包含任何输出或双向端口。函数只返回一个数据,其缺省为函数只返回一个数据,其缺省为reg类型。类型。传送到函数的参数顺序和函数输入参数的说明顺序相同。传送到函数的参数顺序和函数输入参数的说明顺序相同。函数在模块(函数在模块(module)内部定义。内部定义。函数不能调用任务,但任务可以调用函数。函数不能调用任务,但任务可以调用函数。函数在函数在Verilog中定义了一个新的范

10、围(中定义了一个新的范围(scope)。虽虽然然函函数数只只返返回回单单个个值值,但但返返回回的的值值可可以以直直接接给给信信号号连连接接赋赋值值。这在需要有多个输出时非常有效。这在需要有多个输出时非常有效。o1,o2,o3,o4=f_ or_ and(a,b,c,d,e);函数函数要要返返回回一一个个向向量量值值(多多于于一一位位),在在函函数数定定义义时时在在函函数数名名前前说说明明范范围。函数中需要多条语句时用围。函数中需要多条语句时用begin和和end。不管在函数内对函数名进行多少次赋值,值只返回一次。下例中,不管在函数内对函数名进行多少次赋值,值只返回一次。下例中,函数还在内部声明

11、了一个整数。函数还在内部声明了一个整数。module foo;input 7:0 loo;output 7:0 goo;/可以持续赋值中调用函数可以持续赋值中调用函数 wire 7:0 goo=zero_count(loo);function 3:0 zero_count;input 7:0 in_ bus;integer I;begin zero_count=0;for(I=0;I 8;I=I+1)if(!in_bus I)zero_count=zero_count+1;end endfunctionendmodule函数函数函数返回值可以声明为其它函数返回值可以声明为其它register类

12、型:类型:integer,real,或或time。在任何表达式中都可调用函数在任何表达式中都可调用函数module checksub(neg,a,b);output neg;reg neg;input a,b;function integer subtr;input 7:0 in_a,in_b;subtr=in_a-in_b;/结果可能为结果可能为负负 endfunction always (a or b)if(subtr(a,b)0)neg=1;else neg=0;endmodule函数函数函数中可以对返回值的个别位进行赋值。函数中可以对返回值的个别位进行赋值。函数值的位数、函数端口甚至函

13、数功能都可以参数化。函数值的位数、函数端口甚至函数功能都可以参数化。.parameter MAX_BITS=8;reg MAX_BITS:1 D;function MAX_BITS:1 reverse_bits;input MAX_BITS-1:0 data;integer K;for(K=0;K MAX_BITS;K=K+1)reverse_ bits MAX_BITS-(K+1)=data K;endfunctionalways (posedge clk)D=reverse_bits(D);.命名块命名块(namedblock)在关键词在关键词begin或或fork后加上后加上:对块进行命

14、名对块进行命名module named_ blk;.begin:seq_blk.end.fork:par_blk.join.endmodule在命名块中可以声明局部变量在命名块中可以声明局部变量可以使用关键词可以使用关键词disable禁止一个命名块禁止一个命名块命名块定义了一个新的范围命名块定义了一个新的范围命名块会降低仿真速度命名块会降低仿真速度禁止命名块和任务禁止命名块和任务module do_arith(out,a,b,c,d,e,clk,en_mult);input clk,en_mult;input 7:0 a,b,c,d,e;output 15:0 out;reg 15:0 ou

15、t;always(posedge clk)begin:arith_block/*命名块命名块*reg 3:0 tmp1,tmp2;/*局部变量局部变量*tmp1,tmp2=f_or_and(a,b,c,d,e);/函数调函数调用用 if(en_mult)multme(tmp1,tmp2,out);/任务任务调用调用 end always(negedge en_mult)begin/中止运算中止运算 disable multme;/*禁止任务禁止任务*disable arith_block;/*禁止命名块禁止命名块*end/下面下面定义任务和函数定义任务和函数 endmodule禁止命名块和任务

16、禁止命名块和任务disable语句终结一个命名块或任务的所有活动。也就是说,在一个语句终结一个命名块或任务的所有活动。也就是说,在一个命名块或任务中的所有语句执行完之前就返回。命名块或任务中的所有语句执行完之前就返回。语法:语法:disable或或disable当当命命名名块块或或任任务务被被禁禁止止时时,所所有有因因他他们们调调度度的的事事件件将将从从事事件件队队列列中中清除清除disable是典型的不可综合语句。是典型的不可综合语句。在在前前面面的的例例子子中中,只只禁禁止止命命名名块块也也可可以以达达到到同同样样的的目目的的:所所有有由由命命名块、任务及其中的函数调度的事件都被取消。名块、任务及其中的函数调度的事件都被取消。有限状态机有限状态机隐式状态机隐式状态机FSM不需要声明状态寄存器不需要声明状态寄存器仿真效率高仿真效率高只适合于线性的状态改变只适合于线性的状态改变大多数综合工具不能处理大多数综合工具不能处理显式显式FSM:利于结构化利于结构化易于处理缺省条件易于处理缺省条件能处理复杂的状态改变能处理复杂的状态改变所有综合工具都支持所有综合工具都支持有限状态机有限状态机在在

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1