作者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
1F:推 Aragom:一个8-bit变数a可表示为0~255的unsign或是-128~127之sign 05/02 03:32
2F:→ Aragom:是unsign/sign在电路设计中根本是存乎於designer的脑中 05/02 03:33
3F:→ Aragom:而非coding本身 05/02 03:34
4F:→ Aragom:去把逻辑设计的课本或是计概课本翻出来就可以知道 05/02 03:34
5F:→ Aragom:举例:a[3:0]=4'b0011,b[3:0]=4'b1000,a+b=4'b1011(11/-5) 05/02 03:35
6F:→ Aragom:还有若是两变数运算得令一变数如c=a+b,abc最好都是同宽 05/02 03:42