Verilog 组合电路:仅当选择线路为高电平时输出2s补码

Verilog 组合电路:仅当选择线路为高电平时输出2s补码,verilog,register-transfer-level,asic,Verilog,Register Transfer Level,Asic,我想设计一个实现以下逻辑的门级组合电路。不使用加法器也能做到吗 ... 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的补码逻辑中,并产生一个比加法器电

我想设计一个实现以下逻辑的门级组合电路。不使用加法器也能做到吗

...
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的补码逻辑中,并产生一个比加法器电路消耗更少的门电路。这真的有可能吗?

尝试使用卡诺图并仅求解(~in+1)项。如果设置K映射并一次求解一位结果

// 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或输入D


如果您再做一些K映射,您可能会找到结果位a和B的逻辑表达式

您的描述用的是什么语言?请编辑您的问题以包含正确的标记(例如
verilog
vhdl
或类似标记)。如果你想在没有多路复用器的情况下完成这项工作,那么你可能应该去掉这个标签?谢谢你指出这一点。我已经编辑了这个问题。你可以使用16个条目的LUT来进行2的赞美转换。不过,我很想看看它和4b加法器之间的门差异。