Re: [問題] verilog問題

看板Electronics作者 (地下情人)時間17年前 (2007/05/02 02:12), 編輯推噓1(105)
留言6則, 1人參與, 最新討論串3/13 (看更多)
※ 引述《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
一個8-bit變數a可表示為0~255的unsign或是-128~127之sign
05/02 03:32, 1F

05/02 03:33, , 2F
是unsign/sign在電路設計中根本是存乎於designer的腦中
05/02 03:33, 2F

05/02 03:34, , 3F
而非coding本身
05/02 03:34, 3F

05/02 03:34, , 4F
去把邏輯設計的課本或是計概課本翻出來就可以知道
05/02 03:34, 4F

05/02 03:35, , 5F
舉例:a[3:0]=4'b0011,b[3:0]=4'b1000,a+b=4'b1011(11/-5)
05/02 03:35, 5F

05/02 03:42, , 6F
還有若是兩變數運算得令一變數如c=a+b,abc最好都是同寬
05/02 03:42, 6F
文章代碼(AID): #16DuBv__ (Electronics)
討論串 (同標題文章)
文章代碼(AID): #16DuBv__ (Electronics)