作者renj (地下情人)
看板Electronics
標題Re: [問題] verilog問題
時間Wed May 2 02:12:08 2007
※ 引述《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
推 Aragom:一個8-bit變數a可表示為0~255的unsign或是-128~127之sign 05/02 03:32
→ Aragom:是unsign/sign在電路設計中根本是存乎於designer的腦中 05/02 03:33
→ Aragom:而非coding本身 05/02 03:34
→ Aragom:去把邏輯設計的課本或是計概課本翻出來就可以知道 05/02 03:34
→ Aragom:舉例:a[3:0]=4'b0011,b[3:0]=4'b1000,a+b=4'b1011(11/-5) 05/02 03:35
→ Aragom:還有若是兩變數運算得令一變數如c=a+b,abc最好都是同寬 05/02 03:42