在sv/verilog中,我们常用的是整数(int, longint),小数可以用(real),对小数的处理大致分为三种:
1. 四舍五入
2. 向上取整
3. 向下取整
这三种如何实现呢?
1.四舍五入
如果除数和被除数均为整数,可以通过乘以1.0来实现
i.e. 164*8*1.0/28 =47
bit[7:0] a = 10;
bit[7:0] b1,b2;
initial begin
b1 = a/6;
b2 = a*1.0/6;
$display("b1 = %0d,b2= %0d",b1,b2);
end
result : b1 = 1,b2 = 2
2. 向上取整
通过系统函数$ceil即可实现
$ceil(164*8/28) = 47
3. 向下取整
通过系统函数$floor实现
$floor(164*8/28) = 46
164*8/28 = 46(默认条件下,即向下取整)
特別說明:
- $ceil和$floor只參數接受int 和real類型,不接受bit類型或int unsigned;
- 對於int 類型,它代表有符號整數,其取值範圍是-32'h7fffffff ~ 32'h7ffffffe,不是0~ffffffff;
data type | desrciption |
bit | 雙狀態,單比特 |
int unsigned | 雙狀態,32比特無符號整數 |
int | 雙狀態,32比特有符號整數 |
byte | 雙狀態,8比特有符號整數 |
shortint | 雙狀態,16比特有符號整數 |
longint | 雙狀態,64比特有符號整數 |
integer | 四狀態,32比特有符號整數 |
time | 四狀態,64比特無符號整數 |
real | 雙狀態,雙精度浮點數 |
byte unsigned | 雙狀態,8比特無符號整數 |