Re: [問題] verilog問題
※ 引述《invalid (everlasting)》之銘言:
: ※ 引述《evered05 (evered)》之銘言:
: : 現在要寫一個16bit 2's complement的加法器
: : 我的想法是說用16bit 的fulladder去修改
: : 因為在a,b兩個輸入都為正或都為負且相加會overflow時才會發生錯誤
: : 所以想要加 if這個指令去控制,但是寫出來也不知道錯誤在哪邊....
: : 剛摸verilog跟他很不熟QQ
: : 就來請教板上的大家了~~
: 用signed宣告吧
: synopsys的coding style有特別提到
: 我覺得最要注意的是
: assign a[7:0]=b[7:0]+c[1:0];
: 跟
: assign a=b+c;
: 會有不同的行為
: 前者"不"會以2's complement的方式展開c (c=10-> 00000010)
: 後者就會 (c=10 -> 11111110)
: 反正就是在做datapath的話
: 要很小心sign的問題
這問題,之前也讓我覺得頗困擾的,到現在還沒一探究竟為何會這樣.
不知道有沒有哪位高手知道答案呢?
之前,我只知道不同的語法會有 signed 跟 unsigned 不同的運算結果.
但我還頗好奇這不同的語法,究竟合成得到的電路會有什麼差異呢?
所以,我有做了一些簡單的試驗,究竟不同的語法會合出怎樣的東西來..
如果看到這覺得太乏味的就先行 ← 吧 ^^"
1.
input signed [9:0] a, b;
output signed [10:0] c;
assign c = a + b;
結果: 9-bit signed 加法
2.
input signed [9:0] a, b;
output signed [10:0] c;
assign c = a + b[1:0];
//assign c[10:0] = a[9:0] + b[1:0];
結果: 好像是 9-bit + 2-bit 的 unsigned 加法... 有點忘了
(有待確認... 電腦剛好重灌 @@)
3.
input signed [9:0] a;
input signed [1:0] b;
output signed [10:0] c;
assign c = a + b;
結果: 還是 9-bit signed 加法
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.216.177.216
推
05/02 03:32, , 1F
05/02 03:32, 1F
→
05/02 03:33, , 2F
05/02 03:33, 2F
→
05/02 03:34, , 3F
05/02 03:34, 3F
→
05/02 03:34, , 4F
05/02 03:34, 4F
→
05/02 03:35, , 5F
05/02 03:35, 5F
→
05/02 03:42, , 6F
05/02 03:42, 6F
討論串 (同標題文章)