1.2基础语法续

6)数字数值

数字声明时,合法的基数格式有 4 中,包括:十进制('d 或 'D),十六进制('h 或 'H),二进制('b 或 'B),八进制('o 或 'O)。数值可指明位宽,也可不指明位宽。

4'b1011 // 4bit 数值 32'h3022_c0de // 32bit 的数值

不指明位宽:

一般直接写数字时,默认为十进制表示,例如下面的 3 种写法是等效的:

counter = 'd100 ; //一般会根据编译器自动分频位宽,常见的为32bit counter = 100 ; counter = 32'h64 ;

二进制:4'b0101表示4位二进制数字0101; 十进制:4'd2表示4位十进制数字2(二进制0010) ;十六进制:4'ha表示4位十六进制数字a(二进制1010) 当代码中没有指定数字的位宽与进制时,默认为32位的十进制,比如100,实际上表示的值为32'd100。

负数表示

通常在表示位宽的数字前面加一个减号来表示负数。例如:

-6'd15  
-15

-15 在 5 位二进制中的形式为 5'b10001, 在 6 位二进制中的形式为 6'b11_0001。

需要注意的是,减号放在基数和数字之间是非法的。

整数的表示就是十进制或者科学计数法

30.123
1.2e4         //大小为12000
1_0001e4      //大小为100010000
字符串表示方法

字符串是由双引号包起来的字符队列。字符串不能多行书写,即字符串中不能包含回车符。Verilog 将字符串当做一系列的单字节 ASCII 字符队列。例如,为存储字符串 "www.runoob.com", 需要 14*8bit 的存储单元。这里和c语言的表示方法一样,str=" "。

数据类型

Verilog 最常用的 2 种数据类型就是线网(wire)与寄存器(reg),其余类型可以理解为这两种数据类型的扩展或辅助。

数据类型的设定,就是定义变量的类型,首先就是wire类型,先看wire类型的定义格式

wire   flag1, flag2 ;这个就是简单连接flag1和flag2两个硬件单元
wire [32-1:0]  a_data;这就是 定义线性变量adata的数据范围为32bit

上述最后一个定义的数据类型,也就引入一个定义叫做向量,很难理解为什么在硬件电路中会出现这种纯数学的概念,在菜鸟教程上给的定义就更数学定义一样,有点不知所谓。我简单的理解就是硬件所占据的存储空间。

其次寄存器reg用来表示存储单元,他会保持数据原有的值,直到被改写。

例如在 always 块中,寄存器可能被综合成边沿触发器,在组合逻辑中可能被综合成 wire 型变量。寄存器不需要驱动源,也不一定需要时钟信号。在仿真时,寄存器的值可在任意时刻通过赋值操作进行改写。

Verillog 还支持指定 bit 位后固定位宽的向量域选择访问。

[bit+: width] : 从起始 bit 位开始递增,位宽为 width。

[bit-: width] : 从起始 bit 位开始递减,位宽为 width。

数据类型当然少不了整数型

整数类型用关键字 integer 来声明。声明时不用指明位宽,位宽和编译器有关,一般为32 bit。reg 型变量为无符号数,而 integer 型变量为有符号数。‘

还有一些特殊的数据类型比如,

1.实数,实数的定义和使用方法和c语言一样,默认为0,整数只能接受整数部分

2.时间,time,通过调用系统函数 $time 获取当前仿真时间。

time       current_time ;
initial begin
       #100 ;
       current_time = $time ; //current_time 的大小为 100
end

3.数组,和c语言一样,数组没有维数限制,

4.还有一些复合数据类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值