如何在Verilog中将Signed Binary转换为Integer?

时间:2013-11-16 01:36:19

标签: verilog

我正在尝试将签名的二进制数转换为verilog中的整数以进行综合显示,我有几个问题。以下是我的代码,

.....
if(acc[i][j]>10)               //acc is a 2d register

begin
  m_reg <= j-const_10;        // const_10 is 16'b0000000000001010
  m_int <= m_reg;              
  $display("Current value of M(bits)=%b",m_reg);
  $display("Current value of M(int)=%d",m_int);
end
else
....
  1. j可以小于10,这意味着m_reg可以是负数。在这种情况下,我假设m_reg会给我一个带符号的二进制负数。

  2. 如果是,如何将其转换为要显示的整数,因为我猜m_int = m_reg只会给我无符号。

1 个答案:

答案 0 :(得分:2)

显示时所有数据都是'二进制'我们可以选择以二进制显示,十六进制十进制。输入数据时,我们有相同的选择,但设置和存储的内容保持不变。

这些都是一样的:

a = 4'b1111;
a = 4'd15;
a = 4'hf;

以给定格式显示:

$display("Binary  %b", a);
$display("Decimal %d", a);
$display("Hex     %h", a);

不显示前导0,至少对于小数,因此可以使用最小宽度。

$display("min of 2 Decimal   %2d", a);

处理已签名的号码:将reglogicwire声明为signed,或在展示时进行转换。

reg        [3:0] a;
reg signed [3:0] a_s;

initial begin
  a   = 4'b1111; // is this 15 or -1 depends on if you read as signed
  a_s = 4'b1111; // -1
  #1ns;
  $display("Decimal converted to signed %d", $signed(a));
  $display("Signed Decimal              %d", a_s);
end