微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 一个看似简单的问题

一个看似简单的问题

时间:10-02 整理:3721RD 点击:
reg型数据的默认初始值是不定值。reg型数据可以赋正值,也可以是负值。但当一个reg型数据是一个表达式中的操作数时,它的值被当作是无符号值,既是正值。例如,当一个4位寄存器用做表达式中的操作数时,如果开始寄存器被赋以值-1,则在表达式中进行运算时,其值被认为是+15。
请问为什么是15,如何得来的?

in verilog 95, in fact, there's no such things about signed or unsigned numbers. It's just some bits.
e.g. reg[3:0] num;
initial begin
  num = 4'd15; // then num is 0xf.
end
And 0xf is simply 0x1's 2's complement...
in other words, say, would'd like to do something like:
reg[3:0] a;
reg[3:0] b;
reg[7:0] c;
initial begin
  a = -1;
  b = -1;
  c = a * b;
end
c would be 0xe1, not 1...
So you'd have to take care of your sign instead.
In v2k, it's better, there's a reserved word called signed.
reg[3:0] signed a;
reg[3:0] signed b;
reg[7:0] signed c;
now c = 1.

负数是以补码存在的,-1的补码是11111111。

-1的补码应该01111(寄存器4位,符号位1位)

好东西阿
大家鼓掌

111
.........

这是一个,看似简单,实际也很简单的问题。

4楼哥们,汗一个,不要误导啊.....
看似简单,其实就是这么简单,4位操作数,-1 补码本来就是1111

-1的8bit补码明显是11111111。
原码:1(符号位)000 0001
反码:1(符号位)111 1110
补码:1(符号位)111 1111(反码加1)

补码a

-1的4BIT补码是1111.被UNSIGNED一下就成15了

没有规定位宽都是32位的,-1补码是FFFFFFFF
赋值给reg的时候只取低4位

忘掉负数,世界就亲近了
数字逻辑中负数都是用2‘s补码表示的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top