第3讲Verilog行为描述.ppt_第1页
第3讲Verilog行为描述.ppt_第2页
第3讲Verilog行为描述.ppt_第3页
第3讲Verilog行为描述.ppt_第4页
第3讲Verilog行为描述.ppt_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3讲Verilog行为描述,授课教师:邹兴平电邮地址:zou_xingping,2020/5/16,2,内容提纲,行为描述构成框架块语句赋值语句高级程序语句任务与函数,2020/5/16,3,Verilog模块的基本结构,Modulename(ports)/模块定义portdeclarations/端口类型说明Datatypedeclarations/数据类型说明Functionality/描述体TimingspecificatonEndmodule/结束行,2020/5/16,4,行为描述和结构描述,模块的描述方式也称建模方式行为级建模(系统级、算法级、RTL级)模块内部只包含过程块和连续赋值语句结构级建模(门级和开关级)只包含模块实例和基本元件实例混合建模方式:行为级和结构级,2020/5/16,5,一、VerilogHDL行为描述的构成框架,1、过程块的组成模块定义参数定义/可选端口类型说明数据类型说明描述体结束行描述体有多个并行的过程块组成,2020/5/16,6,2.过程块,VerilogHDL的行为描述以过程块为基本组成单位,一个模块的行为描述由一个或多个并行运行的过程块组成。过程块的定义:过程语句(initial和always)(事件控制敏感表)(斜体部分可缺省)块语句开始表示符:块名,有名块,可缺省块内局部变量说明:可缺省过程赋值语句或高级程序语句块语句结束标识符,2020/5/16,7,过程块,过程语句:initial和always事件控制敏感表只在语句后出现,以激活过程语句的执行,只有always有敏感表块语句标识符:串行块标识符:begin-end并行块标识符:fork-join过程块在块名、局部变量缺省,且只有一条过程描述语句时,块语句标识符也可缺省,2020/5/16,8,3.过程语句initial和always,都从0时刻开始执行initial无触发条件,只执行一次;always以触发条件执行,或无触发条件时一直执行一个module的行为描述中可以有多个initial和always语句,即有多个过程块存在,且相互独立,并行运行都不能嵌套使用,2020/5/16,9,举例:产生2个时钟的行为描述,moduleclk_gen_demo(clock1,clock2);outputclock1,clock2;regclock1,clock2;initialbeginclock1=0;clock2=1;endalwaysbegin#50clock1=clock1;endalwaysbegin#100clock2=clock2;endendModule,2020/5/16,10,二、块语句,由块标识符begin-end和fork-join界定的一组行为描述语句是行为描述的打包处理,形式上与一条语句相一致只能出现在行为描述中,但不局限于过程语句之后,在高级程序语句中也需要用到块语句,2020/5/16,11,1.串行块begin-end,按语句排列顺序串行执行可以有额外的时间延时(前一条执行结束下一条开始前的延时),但只是用于仿真(替代器件延时信息),不用于综合用带延时的行为描述进行功能仿真,便于观察功能模块执行的内部细节;而在逻辑综合时,综合工具将忽略描述中的延时信息,2020/5/16,12,举例,带延时的串行块描述begin#10reg_a=reg_b;#10reg_c=reg_a;end不带延时的串行块描述beginreg_a=reg_b;reg_c=reg_a;end/不改变结果,但不利仿真过程顺序执行过程,2020/5/16,13,仿真与综合,用带延时的行为描述进行功能仿真综合后用工艺库的逻辑块延时参数和线负载模型延时参数替代了描述中的延时信息综合后产生的电路连接网表(Netlist)中附加了上述延时参数,从而网表的模拟过程中大致能观察到实际的延时和执行过程,2020/5/16,14,2.并行块fork-join,块中的每条语句都同时开始执行,与先后顺序无关,延时都相对于块的起始执行时刻并行块起始执行时刻就是流程控制转入并行块的时刻,块结束时刻则是执行时间最长的语句结束的时刻并行块的行为描述可以理解为电路上电后各模块同时开始工作的过程,2020/5/16,15,举例,带延时的串行行块描述begin#10reg_a=reg_b;#10reg_c=reg_a;end带延时的并行块描述fork#10reg_a=reg_b;#10reg_c=reg_a;join,2020/5/16,16,举例,modulewave_gen_para(wav);outputwav;regwav;initialforkwave=0;#50wave=1;#100wave=1;#150wave=1;#200wave=1;joinendmodule,2020/5/16,17,3.有名块,格式:begin:快名end或fork:块名join,2020/5/16,18,有名块的块名作用,便于实现对块语句的有效控制用disable语句终止或提前结束有名块的执行过程允许在块内引入局部变量可定义只在块内起作用的变量变量名可以和块外的其他变量名相同一定是寄存器类型,2020/5/16,19,三、赋值语句,1.过程赋值语句过程块中的赋值语句均称过程赋值语句过程赋值语句只能对寄存器类变量赋值,2020/5/16,20,过程赋值举例,Reg_a=8b1011_1100;reg_a3=1b0;Reg_a7:4=4b1010;mem_a3=8h5dcarry,sum=reg_a+reg_b;/用连接符整体赋值,2020/5/16,21,2.过程赋值语句的两种延时模式,1)外部模式格式:=;过程:定时控制求表达式赋值举例:1.延时控制:#延时量#10reg_a=reg_b;2.事件控制:(事件控制敏感表)(clock)reg_a=reg_b;,2020/5/16,22,事件控制分类,(信号名)信号名有变化就触发事件例:(clock)a=b;(posedge信号名)信号名有上升沿就触发事件例:(posedgeclock)a=b;,2020/5/16,23,(negedge信号名)信号名有下降沿就触发事件例:(negedgeclock)a=b;(敏感事件1or敏感事件2or)敏感事件之一触发事件没有其他组合触发信号名可以是任何数据类型的标量或矢量例:(posedgeresetorposedgeclear)reg_out=0;,2020/5/16,24,1)内部模式格式:=;过程:求表达式延时赋值举例:1.延时控制:#延时量reg_a=#10reg_b;2.事件控制:(事件控制敏感表)reg_a=(clock)reg_b;,2020/5/16,25,比较,外部延时fork#10reg_a=reg_b;#10reg_b=reg_a;join内部延时forkreg_a=#10reg_b;reg_b=#10reg_a;join,2020/5/16,26,敏感事件列表在always过程块中的使用,实现组合逻辑功能事件表达式不能包含posedge和negedge所以输入信号都要出现在敏感事件列表中实现时序逻辑功能可以任意表达式不要求输入信号出现在敏感表中,2020/5/16,27,3.阻塞过程和非阻塞过程,过程赋值语句中,赋值算符“=”称为阻塞型赋值。在串行块中,前一语句的赋值结束前,后一语句不能被执行,故称之为阻塞执行过程非阻塞赋值算符“=”不受前面语句执行的影响,直接由块起始时刻开始执行同一块中建议不混用=和=非阻塞赋值提供了在串行块中的一种并行执行的表达方法,2020/5/16,28,举例:阻塞赋值,moduledemo_seri_block(a,b,c,clk);inputa,clk;outputb,c;always(posedgeclk)beginb=a;c=b;endendmodule,2020/5/16,29,综合结果,2020/5/16,30,举例:并行赋值,moduledemo_pal_block(a,b,c,clk);inputa,clk;outputb,c;always(posedgeclk)forkb=a;c=b;joinendmodule,2020/5/16,31,2020/5/16,32,举例:非阻塞赋值,moduledemo_seri_block(a,b,c,clk);inputa,clk;outputb,c;always(posedgeclk)beginb1;endendendmodule,2020/5/16,59,举例:另一种描述方式,moduledemo_count(var,count);parametervar_size=8,cnt_size=4;inputvar_size:0var;ouputcnt_size:0count;integeri;regcnt_size:0count;,2020/5/16,60,always(var)begincount=0;i=0;while(ivar_size);begincount=count+tmp_vari;i=i+1;endendendmodule,2020/5/16,61,循环语句for,格式for(表达式1;表达式2;表达式3)块语句for语句可以看作是while的一种简约表达形式,2020/5/16,62,举例:综合应用,moduledemo_decode();/portanddatatypedeclarationalways(posedgeclock)begincasez(opcode)3b1?:alu_out=acc;3b000:while(bloc_wr_enable)repeat(5)(posedgeclock)beginramaddress=data_bus;address=address+1;end,2020/5/16,63,3b011:begin:loadintegeri;for(i=0;iready;endendmodule,2020/5/16,73,统计模块,modulebit_count(number,count);input15:0number;output3:0count;reg3:0count;reg15:0num_buf;integeri;alwaysbegintop.ng.readynum_buf=nunber;count=0;for(i=0,i1;endop_a=resultendendtaskendmodule,2020/5/16,79,disabletask举例,Moduletmp;taskdemo_procedure;.beginif(a=0)disabledemo_procedure;endendtaskendmodule,2020/5/16,80,2.函数,格式function函数名;输入端口与类型说明;局部变量说明;块语句endfunction,2020/5/16,81,说明,与任务一样,位于模块内部函数不能调用任务,而任务可以调用函数任务可以无输入变量和I/O变量,而函数只能有输入变量,且至少有一个函数名就是输入变量名,通过函数名返回值,而任务通过I/O端口实现传值函数中不能出现任何类型的定时控制描述,也不允许有wait语句和disable语句,而任务则可以函数可以出现在连续赋值语句的右端表达式中,2020/5/16,82,举例:用function实现译码器中的乘法器,Moduledemo_dec_fun;reg15:0mem0:1023;reg9:0pc;reg31:0acc;reg15:0ir;initialpc=0;alwaysbeginir=mempc;case(ir15:13)3b111:acc=multiply(acc,memir12:0);endcase#100pc=pc+1;end,2020/5/16,83,续,Function32:1multiply(op_a.op_b);input32:1op_a;input16:1op_b;reg32:1shift_opa,r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论