组合电路:输出2s仅在选择线为高时补充

时间:2017-11-12 04:18:46

标签: verilog register-transfer-level asic

我想设计一个实现以下逻辑的门级组合电路。是否可以在不使用Adder的情况下完成?

...
input  wire [3:0] in,
input  wire       sel,
output wire [3:0] out
...

assign out = ({4{sel}} & (~in + 1)) | ({4{~sel}} & in);

上述verilog代码将实现为-4个反相器,1个全加器和1个多路复用器。是否有可能进一步优化它?

这个想法是将sel合并到2的补码逻辑中,并产生一个门电路,它比加法器电路消耗更少的门。真的有可能吗?

1 个答案:

答案 0 :(得分:1)

尝试使用卡诺图并解决(~in + 1)项。如果您设置K-map并一次解决一位结果

// Input                               Result
// A B C D     -->  ~{A B C D}  --> ~{A B C D}+1  
// 0 0 0 0            1 1 1 1         0 0 0 0
// 0 0 0 1            1 1 1 0         1 1 1 1
// 0 0 1 0            1 1 0 1         1 1 1 0
// 0 0 1 1            1 1 0 0         1 1 0 1
// 0 1 0 0            1 0 1 1         1 1 0 0
// 0 1 0 1            1 0 1 0         1 0 1 1

...我会让你写下地图的其余部分......但是有些东西开始出现了。

结果位D始终与输入D相同 结果位C似乎是输入C XOR输入D

如果你再做一些K map,你可能会找到Result位A和B的逻辑表达式