一、前言
欢迎小伙伴们光临寒舍!!如果本文有帮助还请小伙伴们点个小小的赞和关注,谢谢!!
其实,C语言和Verilog两个就像哥哥和弟弟一样,所以Verilog继承了哥哥很大一部分的优点,这也就意味着,它与C哥相同点颇多,像数据类型和运算符等等。
(运算符:Verilog中的运算符(包含介绍 对比 易错点)-CSDN博客)
在Verilog中,我们的数据类型有19种之多,最常用的有四种(reg型;wire型;interger型;parameter型),其中包含从语言中出现的常量和变量。
今天我们主要讲述,常量中的整数。
它有与C语言一模一样的进制,有与C语言一模一样的进制转换,所以在这不多赘述,
( 详见:C语言 和 数字电路设计 中的整数的进制转换-CSDN博客。)
我们主要讲述一下两者的不同,verilog的特殊点:
二、不同点:x & z
除了在C语言和数字电路中用的0(低电平)和1(高电平)以外,verilog还多加了两个状态,x和z : 因为Verilog是一种硬件描述语言,它与电路的结构和测试有关,所以需要这两种输入的状态可能情况。
x:不定状态,可为0,同时也可为1;
z:高阻状态,相当与电路中的电阻无限大,呈现断路状态。
(为了方便与字母z进行区分,也可表示成“?”,常见与各种有关仿真软件上)
三、基数表示法
格式:[size]'base value
size为位宽,表示其整数位数的大小长度;'base为进制,表示为进制的字母如b,0等(注意:一定要有”'"这个符号在进制字母前);value就是整数化成相应进制的数字大小。
8'b10101100 //位宽为8的数的二进制表示,'b表示二进制
7'ha2 //位宽为7的数的十六进制表示,'h表示十六进制
4'b10x0 //位宽为4的二进制数,从低位数起第2位为不定值
4'b101z //位宽为4的二进制数,从低位数起第1位为高阻值
12'dz //位宽为12的十进制数,其值为高阻值(第1种表达方式)
12'b? //位宽为12的十进制数,其值为高阻值(第2种表达方式)
8'h4x //位宽为8的十六进制数,其低4位值为不定值(见下说明)
注释: Verilog中没有表明位长,其位长都默认为32位,并且在字母用8位ASCII表示;
I..补位
1. 如果定义的长度比为常量指定的长度长,通常在左边填0补位。但是如果数最左边一位为×或z,则在左边补相应的 x 或者 z:
- 10'b10 左边添0占位 ,为0000000010
- 10'bx0x1 左边添x 占位 , 为××x×××x0x
2. x 或 z 在十六进制值中代表4位 x 或 z,
在八进制中代表3位 x 或 z,在二达制中代表1位 x 或 z:
- 7'Hx (扩展的x),即xxxxxxx
- 4'hZ (扩展的z),即zzzz
- 8'h4x (扩展的x),即4xxxx
3. 如果长度定义得更小,那么最左边的位相应地被截断:
- 3'b1001_0011 = 3'b011
- 5'H0fff = 5'H1F
II..负数表示:
通常在表示位宽的数字前面加一个减号来表示负数:
-6'd15 = -15
- 15在5位二进制中的形式为 5'b10001,在6位二进制中的形式为 6'b11_0001:
算法演示:
口诀:先取正,在取反+1:
-15,看15 = 5'b01111,取反+1得 = 11000+1= 11001
同理,15 = 6'b001111,取反+1 = 110000+1 = 110001
III..错误写法注意:
- 1. 4' b32 '与b之间存在空格
- 2. 4'b-13 数前有负数
- 3. 4-'b34 4和'间有负数
- 4. (3+1)'b23 位长不能为表达式