HDL实现特殊加法器
比如,3'b010,从bit[2]到bit[0]依次相加,结果为3'b110,
再者,3'b110,从bit[2]到bit[0]依次相加,结果为3'b001,
各位大侠有什么简单高效的方法没?
给位大侠,帮帮小弟了。
都没人回复啊大侠快快现身
这不光是累加,
3'b010->3'b110,
3'b110->3'b001,
lz得先说说,怎么个累加法可以得出上面的结果?
我们通常的加法不是从低位开始加、进位的嘛
这里我想从高位到低位加、进位
就是从高位到低位进行加法,
小编,快快现身吧
偶在线等待呢
可以把输入数据反过来,不就是从低位到高位加了吗,不知道我理解对了吗
是可以反过来,这种方法我想过啦,但是要是数据比较大,得来回翻转两次,我想找个更简洁的实现方式,但是很遗憾,我的小脑壳还没想出来呢
翻转数据不占面积啊
综合面积还是有差别的
反转在实际电路实现的时候无非两根线之间怎么样连接,反转两次不会增加电路的复杂度和面积。
没有翻转面积为::::::::
Number of ports: 41
Number of nets: 267
Number of cells: 202
Number of combinational cells: 195
Number of sequential cells: 6
Number of macros: 0
Number of buf/inv: 83
Number of references: 84
Combinational area: 3225.000000
Noncombinational area: 207.000000
Net Interconnect area: undefined (No wire load specified)
Total cell area: 3432.000000
Total area: undefined
翻转操作::::::
Number of ports: 41
Number of nets: 256
Number of cells: 192
Number of combinational cells: 185
Number of sequential cells: 6
Number of macros: 0
Number of buf/inv: 79
Number of references: 64
Combinational area: 3965.000000
Noncombinational area: 208.000000
Net Interconnect area: undefined (No wire load specified)
Total cell area: 4173.000000
Total area: undefined
这里的翻转操作时通过for循环实现,两次综合的RTL的差距在于多了一个翻转的for循环操作
你是用assign直接赋值翻转吗?
assign b[3:0] = {a[0], a[1], a[2], a[3]};
我用for循环实现,因为32bit位宽,通过assign 赋值没什么区别。我验证下
做个真值表查表吧
使用assign赋值不利用参数化设计
你莫用for,试试assign a1[31:0] = a[0:31]; assign b1[31:0] = b[0:31];
资源差别应该不大。
