verilog的语法之一.ppt

上传人:sh****n 文档编号:11550169 上传时间:2020-04-28 格式:PPT 页数:43 大小:838KB
返回 下载 相关 举报
verilog的语法之一.ppt_第1页
第1页 / 共43页
verilog的语法之一.ppt_第2页
第2页 / 共43页
verilog的语法之一.ppt_第3页
第3页 / 共43页
点击查看更多>>
资源描述
2020/4/28,1,VerilogHDL在不同抽象层次的描述VerilogHDL代码的基本结构及特点仿真与测试,内容提要,2020/4/28,2,Verilog的特点(1),既能进行面向综合的电路设计,也能进行电路的模拟仿真多层次上对设计系统进行描述,从开关级、门级、寄存器传输级(RTL)到行为级,设计规模任意灵活的电路描述风格:行为、结构、数据流或混和,2020/4/28,3,Verilog的特点(2),行为描述语句(条件、赋值、循环等)类似于软件高级语言,便于使用内置各种基本逻辑门(and,or,nand,etc.)以及开关级元件(pmos,nmos,cmos)用户定义原语(UDP):组合、时序逻辑,2020/4/28,4,VerilogHDL在不同抽象层次的描述,前面提起过硬件描述语言不同抽象层次的描述,其中有系统级,行为级,RTL级,门级和开关级,VerilogHDL在系统级描述上稍有缺陷,但在其他层次上都有很强的优势。,2020/4/28,5,VerilogHDL在不同抽象层次的描述,在不同抽象层次上的描述形式:,门级描述modulearray_buf(in,out,en);input3:0in;output4:0out;inputen;/*instance*/bufif1array_buf0(out0,in0,en);bufif1array_buf1(out1,in1,en);bufif1array_buf2(out2,in2,en);bufif1array_buf3(out3,in3,en);endmodule,RTL级modulemux(out,a,b,sel);outputout;inputa,b,sel;assignout=(sel=0)?a:bendmodule,行为级/算法级sum=0;for(i=0;i7;i=i+1)beginsum=sum+Ai;endsum_out=sum;,2020/4/28,6,VerilogHDL在不同抽象层次的描述VerilogHDL代码的基本结构及特点仿真与测试,内容提要,2020/4/28,7,VerilogHDL代码的基本结构及特点,VerilogHDL是由称之为module的模块组成的,一个完整的VerilogHDL模块由以下五个部分组成:,1.模块定义行2.端口类型说明3.数据类型说明4.描述体5.结束行,2020/4/28,8,VerilogHDL代码的基本结构及特点,muduledff_pos(data,clk,q);inputdata,clk;outputq;regq;always(posedgeclk)q=data;endmodule,例一:一个上升沿D触发器的描述,模块定义行,端口类型说明,数据类型说明,描述体部,结束行,2020/4/28,9,VerilogHDL代码的基本结构及特点,muduledff_pos(data,clk,q);inputdata,clk;outputq;regq;always(posedgeclk)q=data;endmodule,例一:一个上升沿D触发器与电路的对应,2020/4/28,10,VerilogHDL代码的基本结构及特点,例二:一个二选一的mux,modulemux(out,a,b,sel);outputout;inputa,b,sel;assignout=(sel=0)?a:b;endmodule,2020/4/28,11,例三:一个二选一的muxmodulemux(out,a,b,sel);inputa,b,sel;outputout;regout;always(seloraorb)if(!sel)out=a;elseout=b;endmodule,VerilogHDL代码的基本结构及特点,行为级描述,2020/4/28,12,例四:一个二选一的muxmodulemux(out,a,b,sel);inputa,b,sel;outputout;notu1(ns1,s1);and#1u2(sela,a,nsl);and#1u3(selb,b,sel);or#2u4(out,sela,selb);endmodule,VerilogHDL代码的基本结构及特点,门级描述,2020/4/28,13,VerilogHDL代码的基本结构及特点,例五:缓冲器阵列,门级描述modulearray_buf(in,out,en);input3:0in;output3:0out;inputen;/*instance*/bufif1array_buf0(out0,in0,en);bufif1array_buf1(out1,in1,en);bufif1array_buf2(out2,in2,en);bufif1array_buf3(out3,in3,en);endmodule,2020/4/28,14,moduleadder(count,sum,a,b,cin);input2:0a,b;inputcin;outputcount;output2:0sum;assigncount,sum=a+b+cin;endmodule,VerilogHDL代码的基本结构及特点,例六:3位全加器,2020/4/28,15,moduleadder4(cout,sum,ina,inb,cin);output3:0sum;outputcout;input3:0ina,inb;inputcin;assigncout,sum=ina+inb+cin;endmodule,VerilogHDL代码的基本结构及特点,例七:4位全加器,2020/4/28,16,4位全加器综合后的RTL级视图,VerilogHDL代码的基本结构及特点,2020/4/28,17,4位全加器综合后的门级视图,2020/4/28,18,Testbench(4位加法器),timescale1ns/1nsincludeadder4.vmoduleadder_tp;reg3:0a,b;regcin;wire3:0sum;wirecout;integeri,j;adder4adder(sum,cout,a,b,cin);always#5cin=cin;initialbegina=0;b=0;cin=0;for(i=1;i16;i=i+1)#10a=i;end,initialbeginfor(j=1;j16;j=j+1)#10b=j;endinitialbegin$monitor($time,%d+%d+%b=%b,%d,a,b,cin,cout,sum);#160$finish;endendmodule,2020/4/28,19,仿真结果(4位加法器),2020/4/28,20,modulecount4(out,reset,clk);output3:0out;inputreset,clk;reg3:0out;always(posedgeclk)beginif(reset)out=0;elseout=out+1;endendmodule,VerilogHDL代码的基本结构及特点,例八:4位计数器,2020/4/28,21,4位计数器综合后的RTL级视图,2020/4/28,22,4位计数器综合后的门级视图,2020/4/28,23,Testbench(4位计数器),timescale1ns/1nsincludecount4.vmodulecoun4_tp;regclk,reset;wire3:0out;parameterDELY=100;count4mycount(out,reset,clk);always#(DELY/2)clk=clk;initialbeginclk=0;reset=0;#DELYreset=1;#DELYreset=0;#(DELY*20)$finish;endendmodule,2020/4/28,24,仿真结果(4位计数器),2020/4/28,25,VerilogHDL代码的基本结构及特点,模块描述,模块定义行端口类型说明数据类型说明描述体结束行,过程块1过程块2,.,VerilogHDL行为/RTL描述中模块的构成框架,过程语句(initial/always),块语句(begin-end/fork-join),与一般高级语言不同的是,VerilogHDL的模块之间以及过程块之间都是并行的。,2020/4/28,26,VerilogHDL代码的基本结构及特点,例九:一个移位寄存器,moduleshift(dataout,datain,clr,clk);ouput7:0dataout;inputdatain,clr,clk;regclk;reg7:0dataout;always#10clk=clk;always(posedgeclk)beginif(!clr)dataout=8b0;elsebegindataout=dataout1;dataout0=datain;endendendmodule,2020/4/28,27,VerilogHDL在不同抽象层次的描述VerilogHDL代码的基本结构及特点仿真与测试,内容提要,2020/4/28,28,模块的测试,如何检查上述例子其功能是否正确?需要有测试激励信号输入到被测模块需要记录被测模块的输出信号需要把用功能和行为描述的Verilog模块转换为门级电路互连的电路结构(综合)。需要对已经转换为门级电路结构的逻辑进行测试(门级电路仿真)。需要对布局布线后的电路结构进行测试。(布局布线后仿真)。,2020/4/28,29,模块的测试,2020/4/28,30,模块的测试,测试模块常见的形式:modulet;reg;/被测模块输入/输出变量类型定义wire;/被测模块输入/输出变量类型定义initialbegin;end/产生测试信号always#delaybegin;end/产生测试信号Testedmdm(.in1(ina),.in2(inb),.out1(outa),.out2(outb);/被测模块的实例引用initialbegin.;.;.end/记录输出和响应endmodule,2020/4/28,31,模块的测试,测试模块中常用的过程块:,always,所有的过程块都在0时刻同时启动;它们是并行的,在模块中不分前后。initial块只执行一次。always块只要符合触发条件可以循环执行。,2020/4/28,32,模块的测试,如何描述激励信号:modulet;rega,b,sel;wireout;/引用多路器实例mux2_m(out,a,b,sel);/加入激励信号initialbegina=0;b=1;sel=0;#10b=0;#10b=1;sel=1;#10a=1;#10$stop;end,2020/4/28,33,模块的测试,如何观察被测模块的响应:在initial块中,用系统任务$time和$monitor$time返回当前的仿真时刻$monitor只要在其变量列表中有某一个或某几个变量值发生变化,便在仿真单位时间结束时显示其变量列表中所有变量的值。例:initialbegin$monitor($time,“out=%ba=%bsel=%b”,out,a,b,sel);end,2020/4/28,34,模块的测试,如何把被测模块的输出变化记录到数据库文件中?(文件格式为VCD,大多数的波形显示工具都能读取该格式)可用以下七个系统任务:$dumpfile(“file.dump”);/打开记录数据变化的数据文件$dumpvars();/选择需要记录的变量$dumpflush;/把记录在数据文件中的资料转送到硬盘保存$dumpoff;/停止记录数据变化$dumpon;/重新开始记录数据变化$dumplimit();/规定数据文件的大小(字节)$dumpall;/记录所有指定信号的变化值到数据文件中,2020/4/28,35,模块的测试,如何把被测模块的响应变化记录到数据库文件中?举例说明:$dumpvars;/记录各层次模块中所有信号的变化$dumpvars(1,top);/只记录模块top中所有信号的变化$dumpvars(2,top.u1);/记录top模块中实例u1和它以下一层子模块所有信号的变化$dumpvars(0,top.u2,top.u1.u13.q);/记录top模块中实例u2和它本层所有信号的变化,还有top.u1.u13.q信号的变化。$dumpvars(3,top.u2,top.u1);/记录top模块中u2和u1所有信号的变化(包括其两层以下子模块的信号变化)。,2020/4/28,36,模块的测试,如何把被测模块的响应变化记录到数据库文件中?举例说明:下面的Verilog代码段可以代替测试文件中的系统任务$monitorinitialbegin$dumpfile(“vlog.dump”);$dumpvars(0,top);end,2020/4/28,37,仿真与测试,仿真的要素:测试对象DUT(DeviceUnderTest)测试的激励(测试矢量)测试结果的报告支持的工具:工作站环境:VerilogXL,NC_Verilog(Cadence)PC环境:Modelsim(modeltechnology),2020/4/28,38,仿真与测试,例十:对一个二选一MUX模块的测试,待测模块:,modulemux(a,b,sel);outputout;inputa,b,sel;assignout=(sel=0)?a:b;endmodule,2020/4/28,39,例十:对一个二选一MUX模块的测试,测试信号输入,输出响应,2020/4/28,40,仿真与测试,例十:对一个二选一MUX模块的测试,测试模块:,moduletest_for_mux;rega,b,s;muxmux1(out,a,b,s);initialbegina=0;b=1;s=0;#10a=1;#10b=0;#10s=1;#10b=1;#10a=0;#10$finish;endinitial$monitor($time,”a=%bb=%bs=%bout=%b”a,b,s,out);endmodule,测试对象的调用,测试激励,报告测试结果,2020/4/28,41,仿真与测试,例五:对一个二选一MUX模块的测试,测试结果:,#0a=0b=1s=0out=0#10a=1b=1s=0out=1#20a=1b=0s=0out=1#30a=1b=0s=1out=0#40a=1b=1s=1out=1#50a=0b=1s=1out=1,2020/4/28,42,编程的代码风格,规范化/*/*Module:counter/*Author:Tom/*Data:2002/03/22/*Purpose:/*Version:/*Level:/*Description:/*/可读性:大量的注释语句,2020/4/28,43,小结,VerilogHDL语言的基本模块结构moduleendmodule模块可层次嵌套综合上层模块实例引用端口定义分号,除了endmodule测试矢量、仿真的概念,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!