EDAVerilog语言学习教程.pptx
《EDAVerilog语言学习教程.pptx》由会员分享,可在线阅读,更多相关《EDAVerilog语言学习教程.pptx(80页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 格式:regn-1:0 数据名1,数据名2,数据名i;或 regn:1 数据名1,数据名2,数据名i;例:reg rega;reg3:0 regb,regc;可以赋正值也可以赋负值,但当一个reg型数据是一个表达式中的操作数时,它的值被当作无符号值,即正值。如regb被赋值为-1,在表达式中被认为是?Verilog语言第1页/共80页例:寄存器的声明和使用 reg reset;initial begin reset=1b1;#100 reset=1b0;end reg signed 63:0 m;integer i;Verilog语言第2页/共80页 3)整数、实数和时间寄存器类型integ
2、er(通用寄存器数据类型,用于对数量进行操作)例:integer counter;/一般用途,做为计数器 inital counter=-1;real 实常量和实寄存器数据类型使用,默认值为0 例:real delta;real delta;initial initial beginbegin delta=4e10;delta=4e10;delta=2delta=2.13;13;endend integer i;integer i;initialinitial i=delta;/i i=delta;/i的的值为值为2 2 Verilog语言第3页/共80页 time 保存仿真时间,通过系统函数
3、$time可以得到当前的仿真时间例:例:time sve_sim_time;initial save_sim_time=$time;4)向量向量线网和寄存器类型的数据均可声明为向量(位宽大于线网和寄存器类型的数据均可声明为向量(位宽大于1)。若没有指定位)。若没有指定位宽,则默认为标量(宽,则默认为标量(1位)。位)。例:例:wire a;wire 7:0 bus;wire 31:0 busA,busB,busC;reg clock;reg 0:40 virtual_addr;/最高有效位为第最高有效位为第0位位Verilog语言第4页/共80页向量域选择对上例中向量,可以指定它的某一位或若干
4、个相邻位busA 7bus 2:0/不可以写成bus0:2,高位应写在范围说明的左侧virtual_addr 0:1可变的向量域选择可变的向量域选择+:width 从起始位开始递增,位宽为width-:width 从起始位开始递减,位宽为widthVerilog语言第5页/共80页Verilog语言reg255:0 data1;reg0:255 data2;reg7:0 byte;byte=data1 31-:8;从第31位算起,宽度为8位,相当于data131:24byte=data1 24+:8;byte=data2 31-:8;从第31位算起,宽度为8位,相当于data124:31byt
5、e=data2 24+:8;/起始位可以是变量,但宽度必须为常数for(j=0;j=31;j=j+1)byte=data1(j*8)+:8;data1(byteNum*8)+:8=8b0;第6页/共80页 5)数组数组Verilog中允许声明中允许声明reg,integer,time,real,realtime及其向量类型的及其向量类型的数组,对数组的维数没有限制,线网数组也可用于连接实例的端口数组,对数组的维数没有限制,线网数组也可用于连接实例的端口integer count 0:7;reg bool31:0;time chk_point 1:100;/由由100个时间检查变量组成的数组个时
6、间检查变量组成的数组reg 4:0 port_id 0:7;/由由8个端口标识变量组成的数组,端口变量的位个端口标识变量组成的数组,端口变量的位 宽为宽为5integer matrix 4:00:255;/二维的整数型数组二维的整数型数组reg 63:0 array_4d 15:07:07:0255:0;/四维四维64位寄存器型数组位寄存器型数组wire 7:0 w_array17:05:0;/声明声明8位线型变量的二维数组位线型变量的二维数组Verilog语言第7页/共80页count5=0;chk_point100=0;port_id3=0;matrix 10=33559;/第第1行第行第
7、0列的整数型单元置为列的整数型单元置为33559array_4d000015:0=0;/把四维数组中索引号为把四维数组中索引号为0000的寄的寄存存 器型单元的器型单元的015位置为位置为0port_id=0;/非法非法matrix1=0;/非法非法Verilog语言第8页/共80页 6)memory类型通过扩展reg型数据的地址范围生成格式:regn-1:0 存储器名m-1:0;或者 regn-1:0 存储器名m:1;例:reg7:0 memea255:0;必须为常数必须为常数表达式表达式Parameter wordsize=16,memsize=256;regwordsize-1:0 me
8、mmemsize-1:0,wreitereg,readreg;Verilog语言第9页/共80页注意:regn-1:0 rega;reg meman-1:0;rega=0;等于等于 mema=0;?mema3=0;正确?正确?Verilog语言第10页/共80页 7)参数参数使用关键字使用关键字parameter在模块内定义常数,不能像变量那样赋值,但每在模块内定义常数,不能像变量那样赋值,但每个模块实例的参数值可以在编译阶段被重载(个模块实例的参数值可以在编译阶段被重载(defparam)parameter cache_line_width=256;/定义高速缓冲器宽度定义高速缓冲器宽度pa
9、rameter signed 15:0 WIDTH;/把参数把参数WIDTHWIDTH规定为有正负号,规定为有正负号,宽度为宽度为1616位位局部参数使用局部参数使用localparam定义,值不能改变,不能通过参数重载或定义,值不能改变,不能通过参数重载或有序参数列表或命名参数赋值来直接修改有序参数列表或命名参数赋值来直接修改例:状态机的状态编码例:状态机的状态编码loacalparam state1=4b0001,state2=4b0010,state3=4b0100,state4=4b1000;Verilog语言第11页/共80页 参数值的改写(方法之一)举例说明:module mod(
10、out,ina,inb);parameter cycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;endmodulemodule test;mod mk(out,ina,inb);defparam mk.cycle=6,mk.file=“./my_mem.dat”;endmodule Verilog语言第12页/共80页 参数值的改写(方法之二)举例说明:module mod(out,ina,inb);parameter cycle=8,real_constant=2.039,file=“/user1/jmd
11、ong/design/mem_file.dat”;endmodulemodule test;mod#(5,3.20,“./my_mem.dat”)mk(out,ina,inb);endmoduleVerilog语言第13页/共80页模块模块DUTDUT的边界的边界输入口输入口输出口输出口输出输出/入口入口netnet/registernet/registernetinoutVerilog语言 8)端口端口netnet可可以以将将端端口口看看成成是是由由相相互互连接的两个部分组成。连接的两个部分组成。第14页/共80页输入口(输入口(input)对于模块内部,必须为线网类型;从模块外部看,可以为
12、线网或对于模块内部,必须为线网类型;从模块外部看,可以为线网或reg型型输出口输出口(output)从模块内部看,可以是线网或从模块内部看,可以是线网或reg型;从外部看,必须为线网类型型;从外部看,必须为线网类型输入输入/输出口输出口(inout)从模块内部看,必须为线网类型;从外部看,也必须为线网类型从模块内部看,必须为线网类型;从外部看,也必须为线网类型对模块调用时,对模块调用时,Verilog允许端口的内、外具有不同的位宽,但允许端口的内、外具有不同的位宽,但Verilog仿真器会对此警告仿真器会对此警告Verilog允许模块实例的端口保持未连接状态,如调试端口允许模块实例的端口保持未
13、连接状态,如调试端口例:例:fulladd4 fa0(SUM,A,B,C_IN);Verilog语言第15页/共80页端口与外部信号的连接端口与外部信号的连接定义端口列表中的定义端口列表中的sumsum,c_outc_out,a a,b b,c_inc_in具有完全一致的顺序具有完全一致的顺序Verilog语言第16页/共80页非顺序端口连接非顺序端口连接Verilog语言第17页/共80页m1(SR_latch)激励(根层)激励(根层)n1(nand)n2(nand)Q,Qbar,S,Rq,qbar,set,resetVerilog语言 8)层次命名层次命名第18页/共80页stimulus
14、stimulus.qbar stimulus.qstimulus.reset stimulus.setstimulus.m1.Q stimulus.m1stimulus.m1.S stimulus.m1.Qbarstimulus.n1 stimulus.m1.RVerilog语言第19页/共80页门级建模1.门级(低级抽象层次)电路用逻辑门来描述 直观性 Verilog描述和电路逻辑图之间一一对应 Verilog语言通过提供预定义的逻辑门原语来支持用户使用 逻辑门设计电路第20页/共80页 Verilog基本门单元(primitives)大多数ASIC和FPGA元件库是用这些基本单元开发的。基
15、本单元名称基本单元名称功能功能andornotbufxornandnorxnor Logical And Logical Or Inverter Buffer Logical Exclusive Or Logical And Inverted Logical Or Inverted Logical Exclusive Or Inverted门级建模第21页/共80页门级建模第22页/共80页门级建模第23页/共80页 Verilog的条件基本单元这四种基本单元只能有三个引脚:output,input,enable基本单元名称基本单元名称 功能功能bufif1 条件缓冲器,逻辑条件缓冲器,逻辑
16、1 使能使能bufif0 条件缓冲器,逻辑条件缓冲器,逻辑 0 使能使能notif1 条件反相器,逻辑条件反相器,逻辑 1 使能使能notif0 条件反相器,逻辑条件反相器,逻辑 1 使能使能门级建模第24页/共80页门级建模第25页/共80页门级建模第26页/共80页门级建模门实例语句格式门实例语句格式gate_typeinstance_name(term1,term2,.,termN);instance_name为可选项;为可选项;gate_type为前面列出的某种门类型;为前面列出的某种门类型;各各term用于表示与门的输入用于表示与门的输入/输出端口相连的线网或寄存器。输出端口相连的线
17、网或寄存器。同一门类型的多个实例能够在一个结构形式中定义。同一门类型的多个实例能够在一个结构形式中定义。语法如下语法如下:gate_typeinstance_name1(term11,term12,.,term1N),instance_name2(term21,term22,.,term2N),.instance_nameM(termM1,termM2,.,termMN);第27页/共80页门级建模门实例数组门实例数组第28页/共80页门级建模 多输入门(多输入门(and,nand,nor,or,xor,xnor)多输入门实例语句的语法如下多输入门实例语句的语法如下:multiple_inpu
18、t_gate_typeinstance_name(OutputA,Input1,Input2,.,InputN);第29页/共80页门级建模 多输出门(buf,not)实例语句的基本语法如下实例语句的基本语法如下:multiple_output_gate_typeinstance_name(Out1,Out2,.OutN,InputA);第30页/共80页门级建模多路选择器i0i2i1i3s1s0out 74253第31页/共80页门级建模多路选择器门级描述多路选择器门级描述第32页/共80页门级建模多路选择器激励模块(略)第33页/共80页门级建模 门延迟上升延迟上升延迟:在门的输入发生变化
19、的情况下,:在门的输入发生变化的情况下,门的输出从门的输出从0,X,Z 变化为变化为1所需的时间所需的时间下降延迟下降延迟:门的输出从:门的输出从1,X,Z 变化为变化为0所所需的时间需的时间关断延迟关断延迟:门的输出从:门的输出从0,1,X 变化为变化为Z所所需的时间需的时间任何值变化到不确定值任何值变化到不确定值X,所需时间可以看为以上三种延迟值中最小的那个,所需时间可以看为以上三种延迟值中最小的那个第34页/共80页门级建模Verilog中门延迟说明类型例例:第35页/共80页门级建模总结:第36页/共80页门级建模最小最小/典型典型/最大延迟(对前面每类延迟来描述)最大延迟(对前面每类
20、延迟来描述)排列形式排列形式(最小:典型:最大)(最小:典型:最大)第37页/共80页门级建模实例Dbaceout#4#5Verilog描述描述第38页/共80页测试激励模块第39页/共80页第40页/共80页门级建模第41页/共80页模块的测试被测模块被测模块激激励励和和控控制制信号信号输输出出响响应应和验证和验证第42页/共80页测试模块常见的形式:module t;reg;/被测模块输入/输出变量类型定义 wire;/被测模块输入/输出变量类型定义 initial begin fork join end/产生测试信号 Testedmd m(.in1(ina),.in2(inb),.out
21、1(outa),.out2(outb);/被测模块的实例引用 initial begin .end /记录输出和响应 endmodule嵌套块嵌套块模块的测试第43页/共80页激励信号的描述:module t;reg a,b,sel;wire out;/引用多路器实例 mux2_m(out,a,b,sel);/加入激励信号 initial begin a=0;b=1;sel=0;#10 b=0;#10 b=1;sel=1;#10 a=1;#10$stop;end模块的测试第44页/共80页观察被测模块的响应:$time 返回当前的仿真时刻$monitor 只要在其变量列表中有某一个或某几个变量
22、值发生变化,便在仿真单位时间结束时显示其变量列表中所有变量的值。initial begin$monitor($time,“out=%b a=%b sel=%b”,out,a,b,sel);end模块的测试第45页/共80页如何把被测模块的输出变化记录到数据库文件中?可用以下几个系统任务:$fopen(“”);/打开记录数据变化的数据文件$fdisplay(,p1,p2,pn);/写文件$fmonitor(,p1,p2,pn);/写文件$fclose();/关闭文件%m /显示层次$strobe /选通显示模块的测试第46页/共80页值变转储文件(VCD):$dumpfile(“file.dum
23、p”);/打开VCD数据库用于记录$dumpvars();/选择需要记录的模块实例或模块实例信号$dumpflush;/将VCD数据保存到磁盘$dumpoff;/停止记录数据变化$dumpon;/重新开始记录数据变化$dumplimit();/规定VCD文件的大小(字节)$dumpall;/记录所有指定信号的变化值模块的测试第47页/共80页下面的下面的 Verilog 代码段可以代替测试文件中的系统任务代码段可以代替测试文件中的系统任务$monitor initial begin$dumpfile(“vlog.dump”);$dumpvars(0,top);end模块的测试0代表转储代表转储
24、top下下各层的所有信号各层的所有信号第48页/共80页1.连续赋值语句数据流建模的基本语句,数据流建模的基本语句,用于对线网赋值用于对线网赋值。必须以关键词。必须以关键词assign开开始,语法如下:始,语法如下:continuous_assign:=assign drive_strength delay3 list_of_net_assignments;list_of_net_assignments:=net_assignment ,net_assignmentnet_assignment:=net_value=expressiondrive_strength是可选项,默认为是可选项,默认
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDAVerilog 语言 学习 教程
限制150内