我正在尝试将签名的二进制数转换为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
....
j可以小于10,这意味着m_reg可以是负数。在这种情况下,我假设m_reg会给我一个带符号的二进制负数。
如果是,如何将其转换为要显示的整数,因为我猜m_int = m_reg只会给我无符号。
答案 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);
处理已签名的号码:将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