文档详情

edaverilog语言

san****019
实名认证
店铺
PPT
3.61MB
约81页
文档ID:70866150
edaverilog语言_第1页
1/81

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,格式: reg[n-1:0] 数据名1,数据名2,……,数据名i; 或 reg[n:1] 数据名1,数据名2,……,数据名i; 例: reg rega; reg[3:0] regb,regc; 可以赋正值也可以赋负值,但当一个reg型数据是一个表达式 中的操作数时,它的值被当作无符号值,即正值 如regb被赋值为-1,在表达式中被认为是??,Verilog语言,例:寄存器的声明和使用 reg reset; initial begin reset=1`b1; #100 reset=1`b0; 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] //不可以写成bus[0:2],高位应写在范围说明的左侧 virtual_addr [0:1],可变的向量域选择,[+:width] 从起始位开始递增,位宽为width [-:width] 从起始位开始递减,位宽为width,Verilog语言,Verilog语言,reg[255:0] data1; reg[0:255] data2; reg[7:0] byte; byte=data1 [31-:8];从第31位算起,宽度为8位,相当于data1[31:24] byte=data1 [24+:8]; byte=data2 [31-:8];从第31位算起,宽度为8位,相当于data1[24:31] byte=data2 [24+:8]; //起始位可以是变量,但宽度必须为常数 for (j=0;j=31;j=j+1) byte=data1[(j*8)+:8]; data1 [(byteNum*8)+:8]=8`b0;,5) 数组,Verilog中允许声明reg,integer,time,real,realtime及其向量类型的数组,对数组的维数没有限制,线网数组也可用于连接实例的端口,integer count [0:7]; reg bool[31:0]; time chk_point[ 1:100];//由100个时间检查变量组成的数组 reg [4:0] port_id [0:7];//由8个端口标识变量组成的数组,端口变量的位 宽为5 integer matrix [4:0][0:255];//二维的整数型数组 reg [63:0] array_4d [15:0][7:0][7:0][255:0];//四维64位寄存器型数组 wire [7:0] w_array1[7:0][5:0];//声明8位线型变量的二维数组,Verilog语言,count[5]=0; chk_point[100]=0; port_id[3]=0; matrix [1][0]=33559; //第1行第0列的整数型单元置为33559 array_4d[0][0][0][0][15:0]=0; //把四维数组中索引号为[0][0][0][0]的寄存 器型单元的0~15位置为0 port_id=0; //非法 matrix[1]=0; //非法,Verilog语言,6) memory类型 通过扩展reg型数据的地址范围生成格式: reg[n-1:0] 存储器名[m-1:0]; 或者 reg[n-1:0] 存储器名[m:1]; 例: reg[7:0] memea[255:0];,必须为常数表达式,Parameter wordsize=16, memsize=256 ; reg[wordsize-1:0] mem[memsize-1:0], wreitereg, readreg;,Verilog语言,注意: reg[n-1:0] rega; reg mema[n-1:0]; rega=0; 等于 mema=0; ?? mema[3]=0;正确??,Verilog语言,7) 参数,使用关键字parameter在模块内定义常数,不能像变量那样赋值,但每个模块实例的参数值可以在编译阶段被重载(defparam),parameter cache_line_width=256;//定义高速缓冲器宽度 parameter signed [15:0] WIDTH;//把参数WIDTH规定为有正负号, 宽度为16位,局部参数使用localparam定义,值不能改变,不能通过参数重载或有序参数列表或命名参数赋值来直接修改 例:状态机的状态编码 loacalparam state1=4`b0001, state2=4`b0010, state3=4`b0100, state4=4`b1000;,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_type[instance_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_type[instance_name](OutputA,Input1,Input2,.,InputN);,门级建模,④ 多输出门(buf,not),实例语句的基本语法如下: multiple_output_gate_type[instance_name](Out1,Out2,.OutN,InputA);,门级建模,多路选择器,i0,i2,i1,i3,s1,s0,out,74253,门级建模,多路选择器门级描述,门级建模,多路选择器激励模块(略),门级建模,⑤ 门延迟,上升延迟:在门的输入发生变化的情况下,门的输出从0,X,Z 变化为1所需的时间,下降延迟:门的输出从1,X,Z 变化为0所需的时间,关断延迟。

下载提示
相似文档
正为您匹配相似的精品文档