作者andy2007 (...)
看板Electronics
标题[问题] verilog 进位问题
时间Sat Dec 28 20:02:59 2013
各位前辈好,初学Verilog,有一问题想请教大家
我在进行verilog的加法与减法运算时,要观察他们的进位值
於是写下了以下程式码(部分内容)
reg [3:0] A;
reg [3:0] B;
reg [3:0] S;
reg carry;
A = 4'b0111;
B = 4'b1001;
========加法部分========
{carry,S} = A + B;
verilog模拟出来的结果为:
S = 0000
carry = 1 (这是OK的,和用手算的结果一样)
========减法部分========
{carry,S} = A + ~B + 1'b1; (也就是A-B)
S = 1110 (结果和用手算的一样)
但是进位却是...
carry = 1 (为什麽?不是应该为零的吗?)
我用手算的结果也是carry = 0,请问是什麽地方出问题了呢?
(代表说进位的检察不能用这种写法吗?)
谢谢各位前辈指点迷津 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.214.89
1F:→ er230059:你的sum是负的阿 carry是1没错啊 12/28 21:28
2F:→ er230059:对不起刚刚耍笨了 2补数加减法器的carry是舍弃的 12/28 21:33
3F:→ er230059:可能是{carry,S}被当成是5bit的sum了吧 12/28 21:35
4F:推 weop388:若把~B写成写成 {1'b0, ~B} 呢 12/28 22:00
5F:→ weop388:左边是5-bit,右边的变数要做有号数运算应该也要extend到5 12/28 22:04
6F:→ weop388:-bit,这样结果应该就对了? (太久没写,有错多包涵) 12/28 22:05
7F:→ weop388:我写A-B都是直接写成 {1'b0, 4'b0111} - {1'b1, 4'b1001} 12/28 22:10
8F:推 pupucar:直接宣告signed写A-B就好了 不用假会 12/30 12:39