我正在尝试将带符号的二进制数转换为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 只会给我无符号的。
显示时所有数据都是“二进制”,我们可以选择以二进制、十进制或十六进制进行可视化。输入数据时,我们有相同的选择,但设置和存储的内容保持不变。
这些都是一样的:
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
系统验证
编写并测试两个函数和两个过程。