在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 typedesrciption
bit雙狀態,單比特
int unsigned雙狀態,32比特無符號整數
int雙狀態,32比特有符號整數
byte雙狀態,8比特有符號整數
shortint雙狀態,16比特有符號整數
longint雙狀態,64比特有符號整數
integer四狀態,32比特有符號整數
time四狀態,64比特無符號整數
real雙狀態,雙精度浮點數
byte unsigned雙狀態,8比特無符號整數

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐