网站大量收购独家精品文档,联系QQ:2885784924

《Xilinx FPGA设计与实践教程》课件_第7章.pptVIP

《Xilinx FPGA设计与实践教程》课件_第7章.ppt

  1. 1、本文档共188页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

【程序7-17】用函数的方式实现2位比较器。

moduleeq2_function

(

inputwire[1:0]a,b,

outputregaeqb

);

rege0,e1;

always@*

begin

#2e0=equ_fnc(a[0],b[0]);

#2e1=equ_fnc(a[1],b[1]);

aeqb=e0e1;

end//函数定义

functionequ_fnc(inputi0,i1);

begin

equ_fnc=(~i0~i1)|(i0i1);

end

endfunction

endmodule2.自定义任务

和函数相比,任务则显得更加灵活。它可以有输入、输出以及双向交互,并且可以包含时序控制。任务定义的语法规则如下:

task任务名

端口及数据类型声明语句

语句一

语句二

语句n

endtask任务的调用和变量传递的语法如下:

任务名(端口1,端口2,…,端口n);

任务的使用中需要遵循如下几条原则:

(1)任务可以定义自己的仿真时间单位;

(2)函数不能启动任务,而任务可以启动其他的任务和函数;

(3)函数至少要有一个输入变量,而任务可以没有或有多个任何类型的变量;

(4)函数返回一个值,而任务则不返回值。

下面举例采用任务的方式实现2位比较器,如程序7-18所示。【程序7-18】用任务的方式实现2位比较器。

moduleeq2_task

(

inputwire[1:0]a,b,

outputregaeqb

);

rege0,e1;

always@*

begin

equ_tsk(2,a[0],b[0],e0);

equ_tsk(2,a[1],b[1],e1);

aeqb=e0e1;

end//任务定义

taskequ_tsk

(

inputintegerdelay,

inputi0,i1,

outputeq1

);

begin

#delayeq1=(~i0~i1)|(i0i1);

end

endtask

endmodule7.5.7TestBench举例

1.测试向量产生模块

在程序5-4所示的TestBench中,测试向量部分非常复杂而繁琐。如果能够针对各种操作设置一系列操作,那么代码就会显得组织性更强且容易读。所以可以采用一个单独的任务来完成一种操作,如定义一个装载二进制数据的任务:

taskload_data(inputwire[N-1:0]data_in);

begin

@(negedgeclk);//等待时钟下降沿

load=1‘b1;

d=data_in;

@(negedgeclk);

load=1b0;

end

endtask在这个任务中,在两个下降沿之间load有效,保证data、data_in放在数据线d上。同样,可以用同样的方法定义其他的任务,包括:

(1)?clr_counter_async:产生一个reset脉冲异步清零计数器;

(2)?clr_counter_sync:通过激活ayn_clr信号一个时钟周期对计数器同步清零;

(3)?count:使能计数器计数一定的时钟周期;

(4)?initialize:为仿真设置初始值并产生一个reset脉冲。有了这些任务程序,测试向量程序就可以用一种精简的方式来写了:

initial

begin

initialize(); //初始化

count(12,1); //上升计数12个时钟周期

count(6,0); //下降计数5个时钟周期

load_data(3‘b011); //置数3’b011

count(2,1); //上升计数2个时钟周期

文档评论(0)

酱酱 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档