Verilog中基本的数据类型

Verilog中共有19种数据类型。

基本的四种类型: reg型、wire型、integer型、parameter型。

其他类型:large型、medium型、small型、scalared型、time型、tri型、trio型、tril型、triand型、trior型、trireg型、vectored型、wand型和wor型。

这14中数据类型除time外都与基本逻辑单元建库有关。

 

A、常 量

(1)数 字

整数,整型常量即整常数有以下4种进制表示形式:1)二进制(b或B);2)十进制(d或D);3)十六进制(h或H);4)八进制(o或O)。

数字表达式分为三种:

1)<位宽><进制><数字>,这是最完整的形式。

2)<进制><数字>,数字的位宽采用默认位宽(不同的机器系统不同,至少32位)。

3)<数字>,采用默认进制(十进制)。

示例:(位宽指的是时间所占位数,而不是指十六进制有几位。如示例二,每一位十六进制数字需要4位二进制数字表示,所以2位十六进制的位宽为8)

8'b10101100    //位宽为8的二进制数字10101100

8'ha2               //位宽为8的十六进制数字a2

x值和z值:在数字电路中,x代表不定值,z代表高阻值。一个x可以定义十六进制的4位,八进制的3位。z的表示方式同x相同,另外z亦可以用“?”来表示。(case块中用得较多)

4'b10x0            //位宽为4的二进制数从低位数起第二位为不定值

4'b101z            //位宽为4的二进制数从低位数起第一位为高阻值

12'dz               //位宽为12的10进制数,其值为高阻值(形式一)

12'd?               //位宽为12的10进制数,其值为高阻值(形式二)

8'h4x               //位宽为8的十六进制数,其低4位为不定值

负数:在位宽前面加一个减号,减号必须在数字定义表达式的最前面。

-8'd5               //代表5的补数(采用8位二进制表示)

下划线:用于区别开数字的表达式以提高程序的可读性。不能用在位宽和进制的地方,只能用在数字之间(数字前也不可以)。

16'b1010_1011_1111_1010    //合法形式

常量未加标志时,默认为32位的十进制数,字母用八位的ASCII值表示。

"AB"=16'b01000001_01000010             //字符串AB,为十六进制数16'h4142

 

(2)参数型(parameter)

用parameter来定义一个标志符代表一个常量,称作符号常量,他可以提高程序的可读性和可维护性。parameter是参数型数据的关键字,在每一个赋值语句的右边都必须是一个常数表达式。即该表达式只能包含数字或先前已经定义的参数。

parameter     msb=7;                 //定义参数msb=7

parameter     r=5.7;                   //定义r为一个实型参数5.7

parameter     byte_size=8,byte_msb=byte_size-1;        //利用常数表达式赋值

参数型常量经常用于定义延迟时间和变量宽度。在模块和实例引用时,可以通过参数传递改变在被引用模块或实例中已经定义的参数。

本书(1)(p31)介绍了两种方法:

1)引用实例时,通过参数的传递来改变已经定义的参数值。    Decode   #(4,0) D1(A4,F16)

2)在多层次的模块中,改变参数需要使用defparam命令。     defparam   Test.T.B1.P=2;         //Test、T、B1分别是高层模块中的底层模块实例。

 

B、变 量

  网络数据类型表示结构实体之间的物理连接。网络数据类型的变量不能储存数值,而且必须受到驱动器(门或连续赋值语句assign)的驱动。

(1)wire型,默认为高阻值z。

网络数据类型包括 wire型 和 tri型 数据。

wire用于表示单个门驱动或者连续赋值语句驱动的网络数据类型;

tri型则用来表示多驱动器驱动的网络型数据。

如果没有定义wire和tri的逻辑强度,在多驱动元的情况下逻辑值会发生冲突,从而产生不确定值。(z的优先级最低,x的优先级最高)

 
wire / tri01xz

0

0xx0
1x1x

1

x

xxxx

z

01xz

 

 

 

 

 

 

 

 

wire经常用来表示以assign为关键字的组合逻辑信号。Verilog程序模块中输入输出的信号类型默认时自动定义为wire型。参数定义格式如下;

wire [n-1,0] 数据名1,数据名2...数据名i;          //表示共有 i 条总线,每台总线内有n条线路。或者 wire [n,1] 数据名1,数据名2...数据名i;

[n-1,0] 和 [n,1] 表示该数据的位宽为n。如:

wire      a;            //定义了1个1位的wire数据

wire    [7,0] b;       //定义了1个8位的wire数据

wire    [4,1] a,b;    //定义了2个4位的wire数据

 

(2)reg型,默认为不定值x。

寄存器是存储单元的抽象,寄存器数据类型的关键字是reg。常用来表示always模块内的指定信号,代表触发器。在always模块内被赋值的每一个信号都必须定义成reg型。格式与wire型类似:

reg [n-1,0] 数据名1,数据名2,...数据名i;

reg [n,1]  数据名1,数据名2,...数据名i;

reg数据可以赋正值,也可以赋负值。但是当一个reg数据是一个表达式的操作式时,它的值被当做无符号值,即正值。如:4位的reg被赋值为-1,在表达式中为+15.

reg型只是表示被定义的信号将被用在always模块中,并不是说reg型数据就一定是存储器或触发器的输出。

 

(3)memory型(特殊的reg)

在Verilog中通过对reg数据建立数组来对存储器进行建模,用来买哦书RAM ROM和reg文件。verilog中没有多维数组存在,memory型数据是通过扩展reg型数据的地址范围实现的。存储器的地址索引必须是常数表达式(n-1,m-1等必须是常量,符号常量也可以)。如:

reg      [n-1,0] 存储器名[m-1,0];

reg      [n-1,0] 存储器名[m,1];

在这里[n-1,0]定义了存储器中每一个存储单元的大小,即n位寄存器。存储器名后面的[m-1,0],表示定义的存储器中有多少个这样的寄存器。

reg     [7,0] mem[255,0];           //256个8位寄存器的存储器mem

reg     [n-1,0] rega;                   //一个n位的寄存器

reg     mema[n-1,0]                   //n个1位的寄存器形成的存储器

rega = 0;                                  //合法,对n位的寄存器赋值位0

mema = 0;                               //非法,不能对完整的存储器直接赋值

mema[3] = 0;                          //合法,将mema中第三个存储单元赋值为0

  • 18
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Verilog,logic数据类型是对reg数据类型的改进。它除了可以作为一个变量之外,还可以被连续赋值、门单元和模块所驱动。logic是一个更合适的名字,用来表示任何可以使用线网的地方。与reg不同的是,logic不能拥有多个结构性驱动。因此,在连接不同模块时,可以使用logic数据类型来驱动端口。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [【SystemVerilog数据类型(1)logic](https://blog.csdn.net/m0_52840978/article/details/122150271)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【SystemVerilog基础】1.数据类型](https://blog.csdn.net/weixin_38967029/article/details/125508409)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【SystemVerilog数据类型】~ 数据类型、Logic 类型、数组(定宽数组、动态数组、队列、关联数组、链表)](https://blog.csdn.net/qq_40549426/article/details/125192249)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值