如何在Verilog中将有符号二进制转换为整数?

问题描述 投票:0回答:2

我正在尝试将带符号的二进制数转换为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 只会给我无符号的。

verilog
2个回答
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);

处理有符号数:将

reg
logic
wire
声明为
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

0
投票

系统验证
编写并测试两个函数和两个过程。

  1. 将数字的二进制表示形式转换为十进制的函数(过程) 表示。 这是一个BIT_VECTOR→INTEGER类型转换函数(程序)。最后 (右)二进制表示的最高位。 位向量的位数为 8。
  2. 将数字的十进制表示转换为二进制的函数(过程) 表示。 这是一个 INTEGER → BIT_VECTOR 类型的转换函数(过程)。首先 二进制表示的最高位。 位向量的位数为 8。
© www.soinside.com 2019 - 2024. All rights reserved.