版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
10.2函数关键字:function
endfunction如果程序中调用了一个函数,就隐含声明了一个名为function_identifier(函数标识符)的寄存器型变量,函数的输出结果将通过这个寄存器型变量传递回来函数的调用需要指明函数名和输入变量。在函数执行结束时,返回值传回到调用处。函数无输出端口,通过函数名返回单一值,至少要有一个输入在函数不能调用任务,只能调用其他函数函数的调用是通过将函数名作为表达式中的操作数调用时必须定义一个与函数名同范围的寄存器变量,接收函数的返回值。因此,函数的调用方式与任务的调用方式不同moduleparity;//偶效验位的计算...reg[31:0]addr;regparity;always@(addr)beginparity=calc_parity(addr);$display("Paritycalculated=%b",calc_parity(addr));end...functioncalc_parity;input[31:0]address;begincalc_parity=^address;endendfunction......endmodule10.2.1函数应用在函数第一次被调用时,它的返回值被用来设置寄存器变量parity;在第二次被调用时,它的返回值直接使用系统任务$display进行显示。偶校验位的计算,计算32位地址值的偶校验位,并返回校验位的值。偶校验是指被校验数中“1”的个数为偶数,校验位为0,否则为1,保证校验位加被校验数中“1”的个数为偶数functioncalc_parity(input[31:0]address);begincalc_parity=^address;endendfunction使用ANSIC风格的变量声明进行函数定义moduleshifter;`defineLEFT_SHIFT1'b0`defineRIGHT_SHIFT1'b1reg[31:0]addr,left_addr,right_addr;regcontrol;always@(addr)beginleft_addr=shift(addr,`LEFT_SHIFT);right_addr=shift(addr,`RIGHT_SHIFT);end
function[31:0]shift;input[31:0]address;inputcontrol;beginshift=(control==`LEFT_SHIFT)?(address<<1):(address>>1);endendfunctionendmodule左/右移位寄存器10.2.2自动(递归)函数VerilogHDL中的函数是不能进行递归调用的。在设计模块中,若某函数在两个不同的地方被同时并发调用,由于这两个调用同时对同一块地址空间进行操作,那么计算结果将是不确定的若在函数声明时使用了关键字automatic,那么该函数将成为自动的或可递归的,即仿真器为每一次函数调用动态地分配新的地址空间,每个函数调用对各自的地址空间进行操作。因此,自动函数中声明的局部变量不能通过层次名进行访问,而自动函数本身可以通过层次名进行调用moduletop;
functionautomaticintegerfactorial;input[31:0]oper;integeri;beginif(oper>=2)factorial=factorial(oper-1)*oper;elsefactorial=1;endendfunctionintegerresult;initialbeginresult=factorial(4);//调用4的阶乘$display(“Factorialof4is%0d”,result);end
endmodule递归(自动)函数10.2.3常量函数常量函数是一个带有某些限制的常规verilogHDL函数。这种函数能够用来引用复杂的值,因此可用来代替常量。moduleTwoPortRAM(w_clk,w_en,w_addr,w_data,r_clk,r_en,r_addr,r_data);parameterRAM_DEPTH=255;input[clogb2(RAM_DEPTH)-1:0]w_addr,r_addr;//函数clogb2(255)=8inputw_clk,w_en,r_clk,r_en;input[7:0]w_data;output[7:0]r_data;reg[7:0]r_data;reg[7:0]mem[63:0];always@(posedgew_clk)if(w_en)mem[w_addr]<=w_data;always@(posedger_clk)if(r_en)r_data<=mem[r_addr];functionintegerclogb2(inputintegerdepth);beginfor(clogb2=0;depth>0;clogb2=clogb2+1)depth=depth>>1;endendfunction
endmodule10.2.4带符号函数moduletop;--//带符号的函数声明//返回一个64位带符号数functionsigned[63:0]compute_signed(input[63:0]vector);----endfunction--//从上层模块调用带符号函数
if(compute_signed(vector)<-3)begin--end--endmodule10.3任务和函数的区别特性任务(Task)函数(Function)时序控制支持(如
#delay,
@event)不支持输入/输出端口支持input,
output,
inout仅支持input返回值无(通过output传递)通过函数名隐式寄存器返回单值调用范围可调用任务和函数仅可调用函数存储分配默认静态,需automatic支持动态分配同任务执行时间支持延时/事件控制零延时执行(组合逻辑任务和函数都必须在模块内进行定义,其作用范围仅局限于定义它们的模块任务用于代替普通的verilogHDL代码,其中可以包括延迟、时序、事件等语法结构,并且可以具有多个输出变量函数用于代替表示纯组合逻辑的verilogHDL代码,在仿真时刻0就开始执行,只能有一个输出。函数一般用于完成各类转换和常用的计算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年泉州虹山中学秋季教师招聘3人考前冲刺试卷含答案
- 2026湖南永州市新田县司法局司法协理员招聘5人考前冲刺试卷含答案详解【突破训练】
- 2026年下半年黑龙江省科学技术厅事业单位公开招聘工作人员1人考前冲刺试卷及完整答案详解【易错题】
- 2026年8月永修县艾城镇人民政府面向社会公开招聘工作人员模拟试卷及参考答案
- 胸外科手术与围术期管理
- 2026圣卢西亚旅游服务业行业竞争力格局现状提升投资机遇评估报告
- 2026中国稀土资源战略储备与国际竞争格局研究报告
- 2026中国污水处理设备行业政策支持与投资回报分析报告
- 2026中国新能源汽车车载空调行业市场供需分析及投资评估规划分析研究报告
- 2026中国智能工厂自动化生产线改造与效率提升研究报告
- GB/T 48023-2026数据中心冷板式液冷系统技术规范
- 妇产科医疗质量管理制度
- 《管理心理学》题库及答案
- 基层防汛工作知识培训
- 2026年浙江杭州市中考英语试题(附答案)
- 2025-2026学年第二学期期末考试高一语文试卷及答案
- 2026年浙江省安全员《B证》考试题库及答案
- 2026年高考语文全国卷二真题解读课件
- 2026美容仪器市场消费需求分析与竞争格局评估报告
- 精神科护理中的人文关怀与护理管理
- 安全施工方案简单版
评论
0/150
提交评论