第6章 6-2数据类型

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
∥定义地址线的位宽为l0,可以对210个存储单元进行寻址 DATAWIDTH=8; ∥定义数据线的位宽为8,即每个储存单元有8位
定义参数型变量的值的方法:
1.
在引用模块时改变该模块的参数型变量值:
方法是在引用模块前添加#(参数1,参数2,...), 括号中按顺序列出模块中参数型变量所需的值。
[例6-5] 引用模块时更改parameter型变量的值
real
time
2014-9-9
《集成电路设计基础》
8
寄存器型的变量可以理解为实际电路中的寄存器, 它具有记忆特性,是一种存储元件,在输入信号消失后 它可以保持原有的数值不变。
寄存器型变量一般使用关键字reg进行定义; 可以在 定义时加入位宽, 其位宽的最低位和最高位的数值并 没有严格的约束
reg a,b reg [0:7] c;
//非法,企图写数组的整个第2行 //即企图从matrix[1][0] 直到matrix[1][255]
6-2 习题
1、声明下面的Verilog变量:
a. 一个名为a_in的8位向量线网;
b. 一个名为address的32位寄存器,第31位为最高有 效位;将此寄存器的值设置位十进制数3; c.一个名为count的整数; d.一个名为snap_shot的时间变量;
被定义为线网型或者寄存器型,如果不加定义,则默
认为线网型。
【例6—4】 定义wire型变量
module wire_def( a, b, out ); ∥端口声明 input a,b; output out; ∥变量类型定义 wire a,b //被声明为input型的变量只能被定义为线网型
∥对output型端口如果不加定义,则默认为wire型 assign out=a&b; endmodule //没有定义out的变量类型,默认为wire型
array_4d [0][0][0][0][15:0]=0 reg[4:0] port_id[0:7]; integer[0][0][0][0] matrix[4:0] [0:255] //把四维数组中索引号为 的寄存器型单元的 16位置0
port_id=0; matrix[1]=0 //非法,企图写整个数组
2. 可以在其他地方使用defparam语句改变参数型 变量的值 【例6-6】 引用模块之后修改parameter型变量的值。
module modify_parameter;
defparam
endmodule
top.ram2.ADDWIDTH=16;
∥使用defparam语句:修改RAM2的地址线位宽为16
《集成电路设计基础》 11
参数型变量使用关键词parameter定义,在同一个 模块中每个参数型变量的值必须为一个常量 在模块中使用参数型变量有两个好处:
一、可以增加程序的可读性和可维护性; 二、将有些变量定义为参数型以后,只要在调用时赋予 不同的值就可以构建不同的模型
parameter ADDWIDTH=l0
module ram (input1,input2,…output1,output2,…);
parameter ADDWIDTH=10,
DATAWIDTH=8;
… end module
/ /默认地址线位宽为10 / /默认数据线位宽为8
module top; …
/ *模块top用不同的地址线位宽和数据线位 宽构建两个不同的RAM模块*/
⑵ 如果多个驱动源的逻辑强度相同,则取值为不定态;
⑶ 在没有驱动源对wire型变量进行驱动时其默认的取值为高 阻(Z)。
•线网型变量一般使用关键字wire进行定义 wire a,b; //定义了两个位宽为1的wire型变量a和b wire [7:0] c; //定义了一个位宽为8的wire型变量c • net并不是关键字,它代表一组数据类型,包括wire、 tri、wand、wor、triand、trior、trireg等线网型的变量。 • 在端口声明中被定义为input或者inout型的端口只能 被定义为线网型变量,被声明为output型的端口可以
如果不明确地说明连接是何种类型,应该是指 wire 类型。
2014-9-9 《集成电路设计基础》 3
• 线网型(net)的变量可以理解为实际电路中的导 线, 它不可以储存任何值,并且一定要受到驱动器的 驱动时才有效。
⑴ 同时受到几个驱动源的驱动,此时该线网型变量的取值由逻 辑强度较高的驱动源决定;
1、声明下面的Verilog变量:
e. 一个名为delays的数组,该数组中包含20个integer类
型的元素;
f. 含有256个字的存储器MEM,每个字的字长为64位; g.一个值为512的参数cache_size;
6.2.3 参数(parameters)型
常用参数来声明运行时的常数。 可用字符串表示的任何地方,都可以用定义的参数来代替 参数是本地的,其定义只在本模块内有效。
module md1(out,in1,in2); …..
parameter cycle=20, prop_del=3,
setup=cycle/2-prop_del, p1=8, x_word=16’bx, file = “/user1/jmdong/design/mem_file.dat”; wire [p1:0] w1; …. 2014-9-9 endmodule //用参数来说明wire 的位宽
reg[4:0] port_id[0:7]; integer matrix[4:0] [0:255] count [5]= 0; //把数组中第5个整数型单元(32位)复位 chk_point[100]=0;
//把数组中第100个时间型单元(64位)复位
port_id[3]=0;
//把数组第3个寄存器型单元(5位)复位 reg[63:0] array_4d[15:0][7:0][7:0][255:0]; //把第1行第0列整数型单元(32位)置33559 matrix[1] [0]=33559;
ram #(12) ram1(input1,input2,…output1,output2,…); / /RAM1块:地址线位宽为12,数据线位宽仍然为8 ram #(20,4) ram2(input1,input2,…output1,output2,…); / /RAM2块:地址线位宽为20,数据线位宽为4 end module 在引用模块前添加 #(参数 1, 在引用模块前添加 #(参数 1, 参数 2, ...... ),括号中按顺序列 参数 2, ),括号中按顺序列 出模块中参数型变量所需的值。 出模块中参数型变量所需的值。
§ 6.2 数据类型
本节重点:
•掌握如何定义数据类型,包括线网、寄存器、数组、 参数。
Verilog 有三种主要的数据类型: Nets 表示器件之间的物理连接, 称为网络连接类型 Register 表示抽象的储存单元,称为寄存器/变量类型
Parameter 表示运行时的常数,称为参数类型
同的连接类型来与之对应,使其行为与实际器件一致。常见的有 以下几种。 类型 功能 对应于标准的互连线(缺省)
wire, tri supply1, supply2 对应于电源线或接地线 wor, trior 对应于有多个驱动源的线或逻辑连接
wand, triand trireg tri1, tri0 对应于有多个驱动源的线与逻辑连接 对应于有电容存在能暂时存储电平的连接 对应于需要上拉或下拉的连接
∥定义了两个位宽为1的reg型变量a和b ∥定义了一个位宽为8的reg型变量c
reg [-5,2] d; ∥定义了一个位宽为8的reg型变量d
最高位
寄存器型变量除了使用关键字reg进行定义外,还可
以用integer、real、time等关键字进行定义 ,但
integer、real、time型变量的位宽是固定的
6.2.1 线网型
•由模块或门驱动的连线。
a
nsl sela
out
selb
•驱动端信号的改变会立 刻传递到输出的连线上。
b
sl
nets
例如:右图上,selb的改变,会自动地立刻影响或门的输出。
2014-9-9 《集成电路设计基础》 2
连接(Nets) 类型变量的种类:
在为不同工艺的基本元件建立库模型的时候,常常需要用不
6.2.4 数组
•在verilog中允许声明reg,integer,time,real,realtime及
其向量类型的数组。
•对数组的维数没有限制,即可以声明任意维数的数组。
reg[7:0] mem[0:15]; 每个存储单元 有8位 //定义了一个8×16的存储器 一共有16个存 储单元
integer mem[0:7]; ∥定义了一个整形数组,相当于一个32 x 8的存储器 time mem[0:7]; ∥定义了一个时间型数组,相当于一个64×8的存储器 real mem[7:0]; ∥定义了一个实型数组,相当于一个64×8的存储器
6.2.2 寄存器(register)型
•register 型变量能保持其值,直到它被赋于新的值。
•register ቤተ መጻሕፍቲ ባይዱ变量常用于行为建模,产生测试的激励 信号。
•常用行为语句结构来给寄存器类型的变量赋值。
reg_a
reg_sel
a
sl
b nsl
sela
out
selb
reg_b
2014-9-9
《集成电路设计基础》
integer a,b; ∥定义a,b为整型变量,integer型变量的位宽为32 real a,b; ∥定义a,b为实型变位量,real型变量的位宽为64 time a; ∥定义a为时间型变量,time型变量的位宽为64
下面是常见的错误定义方式: ∥错误定义,整形不能定义位宽 integer [7:0] a; real [7:0] a,b; ∥错误定义,实型不能定义位宽
integer count [0:7];
//由8个计数变量组成的数组
reg bool [31:0];
//由32个1位的布尔寄存器变量组成的数组
//由100个时间检查变量组成的数组
time chk_point[1:100];
reg[4:0] port_id[0:7];
//由8个端口标识变量组成的数组,端口变量的位宽位5 integer matrix[4:0] [0:255] wire [7:0] w_array2 [5:0] wire w_array1[7:0] [5:0]; //二维的整数型数组 //声明8位向量的数组 //声明1位线型变量的二维数组
reg[63:0] array_4d[15:0][7:0][7:0][255:0]; //四维的64位寄存器型数组
注意:不要将数组和线网或寄存器变量混淆: 向量是一个单独的元件,它的位宽为n; integer count [0:7]; time chk_point[1:100]; 数组 是由多个元素组成,其中每个元件的位宽为n或1;
7
寄存器(register)类型变量的数据类型
寄存器类型变量共有四种数据类型:
类型 功能
.
reg integer
无符号整数变量,可以选择不同的位宽。 有符号整数变量,32位宽,算术运算可产 生2的补码。 有符号的浮点数,双精度。 无符号整数变量,64位宽(Verilog-XL仿真 工具用64位的正数来记录仿真时刻)
相关文档
最新文档