Verilog HDL语言设计实验指导书(2004)(5)
实验三 函数和任务的应用设计
一 、实验目的
1、掌握函数在模块设计中的使用;
2、掌握任务在结构化Verilog HDL设计中的应用。
二、实验原理、内容及步骤
1、 函数在模块设计中的使用
函数可以在模块不同位置执行共同代码。函数只能返回一个值,它不能包含任何时延或时序控制(必须立即执行),并且它不能调用其它的任务。
函数必须带有至少一个输入,在函数中允许没有输出或输入输出说明。函数可以调用其它的函数。 函数说明部分可以在模块说明中的任何位置出现,函数的输入是由输入说明指定。如果函数说明部分中没有指定函数取值范围,则其缺省的函数值为1位二进制数。函数定义在函数内部隐式地声明一个寄存器变量,该寄存器变量与函数同名并且取值范围相同。函数通过在函数定义中显式地对该寄存器赋值来返回函数值。对这一寄存器的赋值必须出现在函数定义中。
函数调用是表达式的一部分。与任务相似,函数定义中声明的所有局部寄存器都是静态的,即函数中的局部寄存器在函数的多个调用之间保持它们的值。
下例是函数调用的一个简单示范,采用同步时钟触发运算的执行,每个clk时钟周期都会执行一次运算。并且在测试模块中,通过调用系统任务$display在时钟的下降沿显示每次计算的结果。
模块源代码:
module tryfunct(clk,n,result,reset);
output[31:0] result; input[3:0] n; input reset,clk; reg[31:0] result;
always @(posedge clk) //clk的上沿触发同步运算。
begin
if(!reset) //reset为低时复位。
result<=0;
else
14
begin end
result <= n * factorial(n)/((n*2)+1);
end
function [31:0] factorial; //函数定义。
input [3:0] operand; reg [3:0] index; begin end
factorial = operand ? 1 : 0;
for(index = 2; index <= operand; index = index + 1) factorial = index * factorial;
endfunction
endmodule
测试模块源代码: `include \`timescale 1ns/100ps `define clk_cycle 50 module tryfuctTop;
reg[3:0] n,i; reg reset,clk; wire[31:0] result; initial
begin end
n=0; reset=1; clk=0; #100 reset=0; #100 reset=1; for(i=0;i<=15;i=i+1)
begin end
#200 n=i;
#100 $stop;
always #`clk_cycle clk=~clk;
15
tryfunct tryfunct(.clk(clk),.n(n),.result(result),.reset(reset)); endmodule
上例中函数factorial(n)实际上就是阶乘运算。必须提醒大家注意的是,在实际的设计中,我们不希望设计中的运算过于复杂,以免在综合后带来不可预测的后果。经常的情况是,我们把复杂的运算分成几个步骤,分别在不同的时钟周期完成。
仿真波形(部分):
2、 任务在结构化设计中的应用
一个任务就像一个过程,它可以从描述的不同位置执行共同的代码段。共同的代码段用任务定义编写成任务,这样它就能够从设计描述的不同位置通过任务调用被调用。任务可以包含时序控制,即时延控制,并且任务也能调用其它任务和函数。
任务可以没有或有一个或多个参数。值通过参数传入和传出任务。除输入参数外(参数从任务中接收值),任务还能带有输出参数(从任务中返回值)和输入输出参数。任务的定义在模块说明部分中编写。
任务调用:
? 一个任务由任务调用语句调用。任务调用语句给出传入任务的参数值和接收结果的变量值; ? 任务调用语句是过程性语句,可以在always 语句或initial 语句中使用;
? 任务调用语句中参数列表必须与任务定义中的输入、输出和输入输出参数说明的顺序匹配。
此外,参数要按值传递,不能按地址传递;
? 任务能够包含定时控制,任务可在被调用后再经过一定时延才返回值;
? 任务调用语句是过程性语句,所以任务调用中的输出和输入输出参数必须是寄存器类型的; ? 任务可以带有时序控制,或等待特定事件的发生。但是,输出参数的值直到任务退出时才传
递给调用参数。
实例应用:利用task和电平敏感的always块设计比较后重组信号的组合逻辑。可以看到,利用task非常方便地实现了数据之间的交换,如果要用函数实现相同的功能是非常复杂的;另外,task也避免了直接用一般语句来描述所引起的不易理解和综合时产生冗余逻辑等问题。
模块源代码:
//----------------- sort4.v ------------------ module sort4(ra,rb,rc,rd,a,b,c,d);
output[3:0] ra,rb,rc,rd; input[3:0] a,b,c,d; reg[3:0] ra,rb,rc,rd; reg[3:0] va,vb,vc,vd;
16
always @ (a or b or c or d)
begin end
{va,vb,vc,vd}={a,b,c,d};
sort2(va,vc); //va 与vc互换。 sort2(vb,vd); //vb 与vd互换。 sort2(va,vb); //va 与vb互换。 sort2(vc,vd); //vc 与vd互换。 sort2(vb,vc); //vb 与vc互换。 {ra,rb,rc,rd}={va,vb,vc,vd};
task sort2;
inout[3:0] x,y; reg[3:0] tmp; if(x>y)
begin end
tmp=x; //x与y变量的内容互换,要求顺序执行,所以采用阻塞赋值方式。 x=y; y=tmp;
endtask
endmodule
值得注意的是task中的变量定义与模块中的变量定义不尽相同,它们并不受输入输出类型的限制。如此例,x与y对于task sort2来说虽然是inout型,但实际上它们对应的是always块中变量,都是reg型变量。
测试模块源代码: `timescale 1ns/100ps `include \module task_Top;
reg[3:0] a,b,c,d;
wire[3:0] ra,rb,rc,rd; initial
begin
a=0;b=0;c=0;d=0; repeat(5) begin
#100 a ={$random};
17
end
b ={$random}; c ={$random}; d ={$random};
#100 $stop;
sort4 sort4 (.a(a),.b(b),.c(c),.d(d), .ra(ra),.rb(rb),.rc(rc),.rd(rd));
endmodule
仿真波形(部分):
三、 实验设备及实验注意事项
1.Modelsim6.0和Sypnify Pro7.3及以上版本EDA软件
Modelsim是美国Mentor Graphics公司的子公司Model Technology的产品,属于编译型的Verilog/VHDL混合型仿真 …… 此处隐藏:2199字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [基础教育]2016-2022年中国钢芯铝绞线市场现状调
- [基础教育]语文部编版初一语文下册练习题 句式变
- [基础教育]南京继续教育参考答案--深入学习贯彻习
- [基础教育]国旗下讲话稿——珍惜时间好读书
- [基础教育]北师大版六年级数学下册圆锥的体积教学
- [基础教育]人教版-音乐-四年级下册-四年级下册音
- [基础教育]乔布斯2019年斯坦福大学毕业典礼致辞.d
- [基础教育]2015年加油站安全知识竞赛试题及答案
- [基础教育]2020年教师年度考核个人工作总结
- [基础教育]2019年中考历史试题-2019年大庆市初中
- [基础教育]初三仁爱英语第一轮总复习教案
- [基础教育]SG-A094电气配管安装工程隐蔽验收记录
- [基础教育]冀教版小学数学三年级下册第六单元教材
- [基础教育]青岛版(五制)小学科学二年级下册16《制
- [基础教育]2018-2019年初中科学初一中考真卷测试
- [基础教育]幼儿园大班期末简短评语精选
- [基础教育]2018云南临沧公务员考试申论技巧:这样
- [基础教育]学校食堂经营管理方案
- [基础教育]新中国砥砺奋进的七十年原文
- [基础教育]真空泵的选型及常用计算公式
- 高职田径课程教学现状与对策
- 全髋关节置换术在老年股骨颈骨折患者中
- 青人社厅函〔2016〕576号(附件)工资
- cp101-07砂子检验作业指导书 - secret
- 微观经济学 第八章 博弈论 习题
- 2014高考真题(词语运用)汇编及答案
- 2018年人教版七年级语文下册《第三单元
- 苏教版数学四年级上册第一单元试题 - M
- 四川大学新闻与传播考研2000-2010年真
- 浙江万里学院英语专业四年制本科教学计
- 最新2018马年事业祝福语-范文word版(2
- 最全模具行业术语英文翻译
- 皮亚杰的发展心理学理论
- 64篇高考情景式默写 练习题及答案
- 仿写(学生稿)
- 《SQL Server数据库技术》试卷A
- 第七章作业答案
- 江苏省赣榆县海头高级中学高中语文必修
- 浙江省2001年10月自考正常人体解剖学答
- 2012英语重点短语




