Verilog中的整数常量

在verilog中整数常量的表示是比较复杂的,在这根据IEEE verilog 2005版标准做了一下梳理

两大基本格式

1. 十进制表示法,被视为有符号整数。

2. 基数表示法,<位宽><进制><数字>    

  1)无位宽和进制即十进制表示法,表示有符号整数。

  2)<进制><数字>                                 

  3)<位宽><进制><数字>  

 

关于x,z和?

x代表不确定值,z代表高阻,?是z的同意替换。x和z在16, 8和二进制中的解释分别是4位,3位和1位。其中10进制表示中不能包含x和z,除非整个10进制仅用一个x或z表示,代表每一位都是x或z。

 

关于填充

对于无符号整数,若给定数值位数小于指定尺寸则左边补0,若数值最左边是x或z则补x或z。若给定数值位数大于指定尺寸,则在左边进行截断。对于未指定尺寸的表示形式,至少填充到32位。

 

关于s标志

基数格式由一个“撇号+可选的s+基数指示字母”s指示数值解释成有符号整数还是有符号整数。例如4’[s]b1111加s代表数值为有符号整数解释成-1,不加s代表无符号整数解释成7,实际存储的二进制内容是不变的(尺寸范围内最高位为符号位其余位为数据位)。

s标志只影响对后面数值的解释,不影响数值的内容。

 

关于正负号

正负号应放在尺寸之前,放在数值前是不合法的语法。前为负号取数值的补码,如-4’b0011,指的是3的补码1101,ISE测试中将他赋给8位总线时赋值结果为1111_1101。实际标准中并没规定超过指定尺寸位数如何取值,实际应用中中应尽量让右值长度等于左值的长度。

在于s的组合中比较麻烦,文档给了这样一个例子:

-4 'sd15 // this is equivalent to -(-4'd 1), or '0001'

因此在解释有负号和s的基数时,要先根据尺寸内的最高位确定数值的符号,再按照负号的规则进行处理。

用ise进行综合测试

4’hf赋给8位的总线,赋值结果为{0000_1111}

4’shf赋给8位的总线,赋值结果为{1111_1111}}

-4’hf赋给8位的总线,赋值结果为{1111_0001};   

-4’shf赋给8位的总线,赋值结果为{0000_0001}。  

 

IEEE标准中有尺寸的负数和有尺寸的符号整数赋给寄存器时会进行负号拓展,而不管寄存器自身是否有符号的。IEEE标准未规定尺寸外的比特位如何处理,尺寸外的数值结果倾向于编译器的特性。S影响对数值的解释(即根据尺寸内最高符号位进行符号拓展),不影尺寸内比特位的结果,4’shf解释为-1所以最高位四位都是1。而负号则是最后处理的,对之前解释的值进行取补码( two's complement)操作,尺寸范围内的值是从低位截断的结果。

如果仅考虑尺寸内比特位的结果,则遇S不变化,遇负号各位取反再加1。为了避免意外结果,赋值时,整数应有足够的尺寸进行赋值。

 

 

Example 1—Unsized constant numbers
659 // is a decimal number 
'h 837FF // is a hexadecimal number 
'o7460 // is an octal number 
4af // is illegal (hexadecimal format requires 'h)

Example 2—Sized constant numbers
4'b1001 // is a 4-bit binary number 
5 'D 3 // is a 5-bit decimal number 
3'b01x // is a 3-bit number with the least 
       // significant bit unknown 
12'hx // is a 12-bit unknown number 
16'hz // is a 16-bit high-impedance number 

Example 3—Using sign with constant numbers
8 'd -6 // this is illegal syntax 
-8 'd 6 // this defines the two's complement of 6, 
        // held in 8 bits—equivalent to -(8'd 6) 
4 'shf // this denotes the 4-bit number '1111', to 
       // be interpreted as a 2's complement number, 
       // or '-1'. This is equivalent to -4'h 1 
-4 'sd15 // this is equivalent to -(-4'd 1), or '0001'
16'sd? // the same as 16'sbz 

Example 4—Automatic left padding
reg [11:0] a, b, c, d;
initial begin
a = 'h x; // yields xxx
b = 'h 3x; // yields 03x
c = 'h z3; // yields zz3
d = 'h 0z3; // yields 0z3
end
reg [84:0] e, f, g; 
e = 'h5; // yields {82{1'b0},3'b101}
f = 'hx; // yields {85{1'hx}}
g = 'hz; // yields {85{1'hz}}

Example 5—Using underscore character in numbers
27_195_000 
16'b0011_0101_0001_1111 
32 'h 12ab_f001

最后关于下划线,放在数字中任何地方都可以,除了开头。

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blanklog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值