




已阅读5页,还剩76页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
sl,1) Net(网络连线):由模块或门驱动的连线。 驱动端信号的改变会立刻 传递到输出的连线上。 例如:右图上,selb的改 变,会自动地立刻影响或 门的输出。,nets,a,b,selb,sela,nsl,out,如果不明确地说明连接是何种类型,应该是指 wire 类型。,Verilog语言,2) 寄存器(reg)类型 数据储存单元的抽象。 默认初始值为X 常用行为语句结构来给寄存器类型的变量赋值。用来表示always块内的指定信号,a,b,sl,selb,nsl,out,reg_a,reg_sel,reg_b,常为寄存器或触发器的输出,Verilog语言,(在always块内被赋值的每个信号都必须定义成reg型),sela,格式: regn-1:0 数据名1,数据名2,数据名i; 或 regn:1 数据名1,数据名2,数据名i; 例: reg rega; reg3:0 regb,regc; 可以赋正值也可以赋负值,但当一个reg型数据是一个表达式 中的操作数时,它的值被当作无符号值,即正值。 如regb被赋值为-1,在表达式中被认为是?,Verilog语言,例:寄存器的声明和使用 reg reset; initial begin reset=1b1; #100 reset=1b0; end,reg signed 63:0 m; integer i;,Verilog语言,3) 整数、实数和时间寄存器类型 integer(通用寄存器数据类型,用于对数量进行操作) 例: integer counter;/一般用途,做为计数器 inital counter=-1; real 实常量和实寄存器数据类型使用,默认值为0 例:real delta; initial begin delta=4e10; delta=2.13; end integer i; initial i=delta; /i的值为2,Verilog语言,time 保存仿真时间,通过系统函数$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语言,向量域选择 对上例中向量,可以指定它的某一位或若干个相邻位,busA 7 bus 2:0 /不可以写成bus0:2,高位应写在范围说明的左侧 virtual_addr 0:1,可变的向量域选择,+:width 从起始位开始递增,位宽为width -:width 从起始位开始递减,位宽为width,Verilog语言,Verilog语言,reg255:0 data1; reg0:255 data2; reg7:0 byte; byte=data1 31-:8;从第31位算起,宽度为8位,相当于data131:24 byte=data1 24+:8; byte=data2 31-:8;从第31位算起,宽度为8位,相当于data124:31 byte=data2 24+:8; /起始位可以是变量,但宽度必须为常数 for (j=0;j=31;j=j+1) byte=data1(j*8)+:8; data1 (byteNum*8)+:8=8b0;,5) 数组,Verilog中允许声明reg,integer,time,real,realtime及其向量类型的数组,对数组的维数没有限制,线网数组也可用于连接实例的端口,integer count 0:7; reg bool31:0; time chk_point 1:100;/由100个时间检查变量组成的数组 reg 4:0 port_id 0:7;/由8个端口标识变量组成的数组,端口变量的位 宽为5 integer matrix 4:00:255;/二维的整数型数组 reg 63:0 array_4d 15:07:07:0255:0;/四维64位寄存器型数组 wire 7:0 w_array17:05:0;/声明8位线型变量的二维数组,Verilog语言,count5=0; chk_point100=0; port_id3=0; matrix 10=33559; /第1行第0列的整数型单元置为33559 array_4d000015:0=0; /把四维数组中索引号为0000的寄存 器型单元的015位置为0 port_id=0; /非法 matrix1=0; /非法,Verilog语言,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 memmemsize-1:0, wreitereg, readreg;,Verilog语言,注意: regn-1:0 rega; reg meman-1:0; rega=0; 等于 mema=0; ? mema3=0;正确?,Verilog语言,7) 参数,使用关键字parameter在模块内定义常数,不能像变量那样赋值,但每个模块实例的参数值可以在编译阶段被重载(defparam),parameter cache_line_width=256;/定义高速缓冲器宽度 parameter signed 15:0 WIDTH;/把参数WIDTH规定为有正负号, 宽度为16位,局部参数使用localparam定义,值不能改变,不能通过参数重载或有序参数列表或命名参数赋值来直接修改 例:状态机的状态编码 loacalparam state1=4b0001, state2=4b0010, state3=4b0100, state4=4b1000;,Verilog语言,参数值的改写(方法之一) 举例说明: module mod ( out, ina, inb); parameter cycle = 8, real_constant=2.039, file = “/user1/jmdong/design/mem_file.dat”; endmodule module test; mod mk(out,ina,inb); defparam mk.cycle=6, mk.file=“/my_mem.dat”; endmodule,Verilog语言,参数值的改写(方法之二) 举例说明: module mod ( out, ina, inb); parameter cycle = 8, real_constant=2.039, file = “/user1/jmdong/design/mem_file.dat”; endmodule module test; mod # (5, 3.20, “/my_mem.dat”) mk(out,ina,inb); endmodule,Verilog语言,模块DUT的边界,输入口,输出口,输出/入口,net,net/register,net/register,net,inout,Verilog语言,8) 端口,net,net,可以将端口看成是由相互连接的两个部分组成。,输入口(input) 对于模块内部,必须为线网类型;从模块外部看,可以为线网或reg型 输出口 (output) 从模块内部看,可以是线网或reg型;从外部看,必须为线网类型 输入/输出口(inout) 从模块内部看,必须为线网类型;从外部看,也必须为线网类型,对模块调用时,Verilog允许端口的内、外具有不同的位宽,但Verilog仿真器会对此警告 Verilog允许模块实例的端口保持未连接状态,如调试端口 例:fulladd4 fa0 (SUM, ,A,B,C_IN);,Verilog语言,端口与外部信号的连接,定义端口列表中的sum,c_out,a,b,c_in具有完全一致的顺序,Verilog语言,非顺序端口连接,Verilog语言,m1(SR_latch),激励(根层),n1(nand),n2(nand),Q, Qbar, S,R,q, qbar, set,reset,Verilog语言,8) 层次命名,stimulus stimulus.qbar stimulus.q stimulus.reset stimulus.set stimulus.m1.Q stimulus.m1 stimulus.m1.S stimulus.m1.Qbar stimulus.n1 stimulus.m1.R,Verilog语言,门级建模,1. 门级(低级抽象层次) 电路用逻辑门来描述 直观性 Verilog描述和电路逻辑图之间一一对应 Verilog语言通过提供预定义的逻辑门原语来支持用户使用 逻辑门设计电路, Verilog基本门单元(primitives) 大多数ASIC和FPGA元件库是用这些基本单元开发的。,门级建模,门级建模,门级建模, Verilog的条件基本单元 这四种基本单元只能有三个引脚:output, input, enable,门级建模,门级建模,门级建模,门级建模,门实例语句格式 gate_typeinstance_name(term1,term2,.,termN); instance_name为可选项; gate_type为前面列出的某种门类型; 各term用于表示与门的输入/输出端口相连的线网或寄存器。 同一门类型的多个实例能够在一个结构形式中定义。语法如下: gate_type instance_name1(term11,term12,.,term1N), instance_name2(term21,term22,.,term2N), . instance_nameM(termM1,termM2,.,termMN);,门级建模,门实例数组,门级建模, 多输入门(and,nand,nor, or,xor,xnor),多输入门实例语句的语法如下: multiple_input_gate_typeinstance_name(OutputA,Input1,Input2,.,InputN);,门级建模, 多输出门(buf,not),实例语句的基本语法如下: multiple_output_gate_typeinstance_name(Out1,Out2,.OutN,InputA);,门级建模,多路选择器,i0,i2,i1,i3,s1,s0,out,74253,门级建模,多路选择器门级描述,门级建模,多路选择器激励模块(略),门级建模, 门延迟,上升延迟:在门的输入发生变化的情况下,门的输出从0,X,Z 变化为1所需的时间,下降延迟:门的输出从1,X,Z 变化为0所需的时间,关断延迟:门的输出从0,1 , X 变化为Z所需的时间,任何值变化到不确定值X,所需时间可以看为以上三种延迟值中最小的那个,门级建模,Verilog中门延迟说明类型,例:,门级建模,总结:,门级建模,最小/典型/最大延迟(对前面每类延迟来描述),排列形式(最小:典型:最大),门级建模,实例,D,b,a,c,e,out,#4,#5,Verilog描述,测试激励模块,门级建模,模块的测试,测试模块常见的形式: module t; reg ; / 被测模块输入/输出变量类型定义 wire; / 被测模块输入/输出变量类型定义 initial begin fork join end / 产生测试信号 Testedmd m(.in1(ina), .in2(inb), .out1(outa), .out2(outb) );/ 被测模块的实例引用 initial begin . end / 记录输出和响应 endmodule,嵌套块,模块的测试,激励信号的描述: 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,模块的测试,观察被测模块的响应: $time 返回当前的仿真时刻 $monitor 只要在其变量列表中有某一个或某几个变量值发生变化,便在仿真单位时间结束时显示其变量列表中所有变量的值。 initial begin $monitor ($time, , “out=%b a=%b sel=%b”, out,a,b,sel); end,模块的测试,如何把被测模块的输出变化记录到数据库文件中? 可用以下几个系统任务: $fopen(“”); /打开记录数据变化的数据文件 $fdisplay(,p1,p2,pn); /写文件 $fmonitor(,p1,p2,pn); /写文件 $fclose (); /关闭文件 %m /显示层次 $strobe /选通显示,模块的测试,值变转储文件(VCD): $dumpfile(“file.dump”); /打开VCD数据库用于记录 $dumpvars(); /选择需要记录的模块实例或模块实例信号 $dumpflush; /将VCD数据保存到磁盘 $dumpoff; /停止记录数据变化 $dumpon; /重新开始记录数据变化 $dumplimit(); /规定VCD文件的大小(字节) $dumpall; /记录所有指定信号的变化值,模块的测试,下面的 Verilog 代码段可以代替测试文件中的系统任务$monitor initial begin $dumpfile(“vlog.dump”); $dumpvars(0,top); end,模块的测试,0代表转储top下 各层的所有信号,1.连续赋值语句,数据流建模的基本语句,用于对线网赋值。必须以关键词assign开 始,语法如下:,continuous_assign :=assign drive_strength delay3 list_of_net_assignments; list_of_net_assignments :=net_assignment ,net_assignment net_assignment :=net_value=expression,drive_strength是可选项,默认为strong1和strong0 delay3也可选,用于指定赋值的延迟,数据流级建模,强度相同信号间或Strong0和Strong1发生竞争,结果为X 只有treg类型线网可具有存储强度,为large、medium、small,模块的测试,数据流级建模,连续赋值语句特点,1、连续赋值语句左侧必须是一个标量或向量线网,或标量和向量线网的拼接,不能是向量或向量寄存器 2、连续赋值总处于激活状态,有任一个操作数变化,表达式都会被重新计算并赋给左边的线网 3、操作数可以是标量或向量的线网或寄存器,也可以是函数或调用 4、赋值延迟用于控制对线网赋予新值的时间,根据仿真单位进行说明,对于描述电路中的时序非常有用,数据流级建模,例:,数据流级建模, 隐式连续赋值 在线网声明的同时进行赋值,由于线网只能被声明一次,因此对线网的隐式声明赋值只能有一次,数据流级建模, 隐式线网声明,如果一个信号被用在连续赋值语句的左侧,则Verilog编译器认为该信号是一个隐式声明的线网,如果线网被连接到模块的端口上,则Verilog编译器认为隐式声明线网的宽度等于模块端口的宽度,数据流级建模,2.延迟 普通赋值延迟 在连续赋值语句中说明延迟值,惯性延迟:任何小于该延时值的变化都不能被传输下去,如果是传输延时没有这个限制。,(对于惯性延迟),惯性延时(inertial delay)通常在信号通过逻辑门的时候发生。脉冲宽度小于复制延迟的输入变化不会对输出产生影响。,原语门,开关,连续赋值语句和MIPD (module input port delay)的延迟只能是惯性延迟。,(对于传输延迟),传输延时(Transport delay)相当于信号通过了一条拥有固定延时的 传输线,数据流级建模, 隐式连续赋值延迟 用隐式连续赋值语句来说明对线网的赋值以及赋值延迟, 线网声明延迟,在声明线网时指定一个延迟,对该线网的任何赋值都会被推迟指定的时间,数据流级建模,四位脉冲进位计数器的RTL级建模,3. 操作符类型,最高,最低,优先级,注意“与”操作符的优先级总是比相同类型的“或”操作符高。,数据流级建模,+ 加 - 减 * 乘 / 除 % 模,将负数赋值给reg或其它无符号变量时用2的补码算术。 如果操作数的某一位是x或z,则结果为x 在整数除法中,余数舍弃 模运算中使用第一个操作数的符号, 算术操作符,数据流级建模, not & and | or xor xnor xnor,module bitwise (); reg 3: 0 rega, regb, regc; reg 3: 0 num; initial begin rega = 4b1001; regb = 4b1010; regc = 4b11x0; end initial fork #10 num = rega join endmodule,按位操作符对矢量中相对应位运算。 位值为x时不一定产生x结果。,当两个操作数位数不同时,位数少的操作数零扩展到相同位数。 a = 4b1011; b = 8b01010011; c = a | b; / a零扩展为 8b00001011, 按位操作符,数据流级建模,module logical (); parameter five = 5; reg ans; reg 3: 0 rega, regb, regc; initial begin rega = 4b0011; /逻辑值为“1” regb = 4b10xz; /逻辑值为“1” regc = 4b0z0x; /逻辑值为“x” end initial fork #10 ans = rega join endmodule,! not & and | or,逻辑操作符的结果为一位1,0或x。 逻辑操作符只对逻辑值运算。 如操作数为全0,则其逻辑值为false 如操作数有一位为1,则其逻辑值为true 若操作数只包含0、x、z,则逻辑值为x, 逻辑操作符,数据流级建模,module negation(); reg 3: 0 rega, regb; reg 3: 0 bit; reg log; initial begin rega = 4b1011; regb = 4b0000; end initial fork #10 bit = rega; / num = 0100 #20 bit = regb; / num = 1111 #30 log = !rega; / num = 0 #40 log = !regb; / num = 1 #50 $finish; join endmodule,! logical not 逻辑反 bit-wise not 位反,逻辑反的结果为一位1,0或x。 位反的结果与操作数的位数相同,数据流级建模,数据流级建模,& 缩减与非 & 缩减与 | 缩减或非 | 缩减或 缩减异或 缩减同或 缩减同或,只有一个操作数 对操作数逐位操作,产生一个一位结果, 缩减操作符,module shift (); reg 9: 0 num, num1; reg 7: 0 rega, regb; initial rega = 8b00001100; initial fork #10 num 3; / num = 00_0000_0001 #20 regb 3 ; / regb = 0000_0001 #30 num 2; /rega = 1111_1100 #50 num1 2;/num1=00_1111_1100 join endmodule, 逻辑右移(非循环) 算术右移 算术左移,移位操作符对其左边的操作位移位。 第二个操作数(移位位数)是无符号数 若第二个操作数是x或z,则结果为x 算术移位专用于负整型数右移,空缺位补1,移位操作符,integer a,b,c; a=0; b=-10; /二进制表示为:1111 1111 1111 1111 1111 1111 1111 0110 c=a+(b3); /结果为-2,由于算术运算,右移三位,空缺位补1,数据流级建模,module relationals (); reg 3: 0 rega, regb, regc; reg val; initial begin rega = 4b0011; regb = 4b1010; regc = 4b0x10; end initial fork #10 val = regc rega ; / val = x #20 val = regb = rega ; / val = 1 #40 val = regb regc ; / val = 1 #50 $finish; join endmodule, 大于 = 大于等于 = 小于等于,其结果是1b1、1b0或1bx。,无论x为何值,regbregc,rega和 regc的关系取决于x,关系操作符,数据流级建模,注意逻辑等与 case等的差别 2b1x=2b0x 值为0,因为不相等 2b1x=2b1x 值为x,因为可能不相等,也可能相等 2b1x=2b0x 值为0,因为不相同 2b1x=2b1x 值为1,因为相同,= 赋值操作符,将等式右边表达式的值拷贝到左边。,= =逻辑等,= = =case等,a = 2b1x; b = 2b1x; if (a = b) $display(“ a is equal to b“); else $display(“ a is not equal to b“);,a = 2b1x; b = 2b1x; if (a = b) $display(“ a is identical to b“); else $display(“ a is not identical to b“);,Case等只能用于行为描述,不能用于RTL描述。,相等操作符,数据流级建模,!= 逻辑不等,module equalities1(); reg 3: 0 rega, regb, regc; reg val; initial begin rega = 4b0011; regb = 4b1010; regc = 4b1x10; end initial fork #10 val = rega = regb ; / val = 0 #20 val = rega != regc; / val = 1 #30 val = regb != regc; / val = x #40 val = regc = regc; / val = x #50 $finish; join endmodule,其结果是1b1、1b0或1bx。 如果左边及右边为确定值并且不相等,则结果为1。 如果左边及右边为确定值并且相等,则结果为0。 如果左边及右边有值不能确定的位,但值确定的位相等,则结果为x。 !=的结果与= =相反,数据流级建模,! =不相同(case不等),module equalities2(); reg 3: 0 rega, regb, regc; reg val; initial begin rega = 4b0011; regb = 4b1010; regc = 4b1x10; end initial fork #10 val = rega = regb ; / val = 0 #20 val = rega != regc; / val = 1 #30 val = regb = regc; / val = 0 #40 val = regc = regc; / val = 1 #50 $finish; join endmodule,其结果是1b1、1b0或1bx。 如果左边及右边的值相同(包括x、z),则结果为0。 如果左边及右边的值不相同,则结果为1。 !=的结果与 = 相反,综合工具不支持,数据流级建模,?: 条件,module likebufif( in, en, out); input in; input en; output out; assign out = (en = 1) ? in : bz; endmodule module like4to1( a, b, c, d, sel, out); input a, b, c, d; input 1: 0 sel; output out; assign out = sel = 2b00 ? a : sel = 2b01 ? b : sel = 2b10 ? c : d; endmodule,条件操作符,数据流级建模,registger = condition ? true_value:false_value;,每个条件操作符必须有三个参数,缺少任何一个都会产生错误。 最后一个操作数作为缺省值。,若condition为真,则register=true_value; 若condition为假,则register=fa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业与劳动者签订劳动合同的保密协议与竞业限制条款
- 离婚双方股份分割与共同财产分割合同
- 物业管理公司员工劳动争议调解及仲裁协议
- 广告创意落地执行代理合同
- 注重团队建设提升团队执行力
- 促进话叫员工团队协同
- UML理论概述方案
- 零售业销售策略制定方案
- 2025重庆市万州区沙河街道办事处公益性岗位招聘1人笔试备考试题及答案解析
- 供给侧改革下农业企业融资策略研究-以江苏省农垦集团有限公司为例
- 高速通信管道迁改施工方案
- 《时尚品牌市场调研》课件
- 2025-2030年地域风味酱板鸭行业跨境出海战略研究报告
- 2025年一季度全院难免压疮风险评估上报总结分析(二篇)
- 网页设计的交互设计研究-洞察分析
- 微信零钱被冻结的保全复议申请书
- 2025-2030年中国微晶玻璃面板行业规模分析及投资前景规划研究报告
- 《矿山安全技能培训》课件
- 小学生班级安全小卫士
- 虚开增值税专用发票罪的入罪标准解读
- 2025年江苏南京市国企集团招聘笔试参考题库含答案解析
评论
0/150
提交评论