我想设计一个实现以下逻辑的门级组合电路。是否可以在不使用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的补码逻辑中,并产生一个门电路,它比加法器电路消耗更少的门。真的有可能吗?
答案 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的逻辑表达式