You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Verilog译码器映射为AND/OR/NAND/XOR/NOT标准单元实现方法

4输入20位译码器映射到基础标准逻辑单元的实现方案

原设计源码

module my_decoder(
    input [3:0] in,
    output reg[19:0] out
    );

    always@(*) begin
        case (in)
            4'd0: out= 20'd114912;
            4'd1: out= 20'd114912;
            4'd2: out= 20'd180324;
            4'd3: out= 20'd409644;
            4'd4: out= 20'd917535;
            4'd5: out= 20'd395532;
            4'd6: out= 20'd137988;
            4'd7: out= 20'd16128;
            4'd8: out= 20'd16128;
            4'd9: out= 20'd16128;
            4'd10: out= 20'd137988;
            4'd11: out= 20'd395532;
            4'd12: out= 20'd917535;
            4'd13: out= 20'd409644;
            4'd14: out= 20'd180324;
            4'd15: out= 20'd114912;
        endcase
    end

endmodule

已尝试方案的可行调整技巧

Sympy生成逻辑表达式优化

默认SOP/POS生成逻辑不会主动提取XOR结构,做两个调整即可解决:

  • 调用逻辑最小化接口时开启XOR允许参数,比如使用sympy.logic.minimize函数时传入allow_xor=True,工具会自动识别可替换为XOR的对称子项,大幅降低表达式复杂度。
  • 生成最小化表达式后不需要额外工具做NAND转换,直接按照德摩根定律改写即可:两级SOP结构可以直接映射为两级NAND结构,所有与项替换为NAND输出加一级反相,或项替换为输入反相的NAND,反相器本身可以用输入短接的NAND实现,不需要单独保留NOT门的优化流程。

你当前设计本身存在强对称性:输出满足out(in) = out(in ^ 4'b1111),也就是输入按位取反时输出完全一致,提取这个XOR公共项后,逻辑规模可以直接缩减一半。

Vivado综合流程调整

不要使用默认面向FPGA的综合配置,按以下步骤设置即可输出纯门级网表:

  • 新建工程时目标器件选择Generic(通用工艺),不要选择具体FPGA型号。
  • 综合设置中关闭LUT映射选项,开启use_xor_gates、use_nand_gates优化开关,优化策略选择Area(面积优先)。
  • 综合完成后执行write_verilog -mode gate命令,导出的网表就仅包含NOT、AND、OR、NAND、XOR五类基础单元,不会出现LUT结构。

Yosys综合流程简化

不需要编写带物理参数的完整.lib库,仅需编写一个只包含逻辑功能描述的极简单元库即可,整个文件内容不超过20行,示例结构如下:

library(generic_gates) {
  cell(not) {
    pin(A) { direction: input; }
    pin(Y) { direction: output; function: "~A"; }
  }
  cell(and2) {
    pin(A,B) { direction: input; }
    pin(Y) { direction: output; function: "A & B"; }
  }
  cell(or2) {
    pin(A,B) { direction: input; }
    pin(Y) { direction: output; function: "A | B"; }
  }
  cell(nand2) {
    pin(A,B) { direction: input; }
    pin(Y) { direction: output; function: "~(A & B)"; }
  }
  cell(xor2) {
    pin(A,B) { direction: input; }
    pin(Y) { direction: output; function: "A ^ B"; }
  }
}

写好库文件后,在yosys中依次执行以下脚本即可完成映射:

read_verilog my_decoder.v
hierarchy -check
proc; opt; techmap -map 你的极简库文件路径
opt_clean
write_verilog gate_level_decoder.v

整个配置过程耗时不超过10分钟,远低于完整.lib编写的工作量。

低工作量优化路径

由于设计只有4位输入,总共仅16种输入组合,不需要完全依赖EDA工具优化,可以先做人工结构提取再配合工具映射:

  • 第一步先利用对称性做输入变换:令s = in[3],低3位a[2:0] = in[2:0] ^ {3{s}},变换后所有输出仅和a有关,和s无关,直接把需要优化的逻辑从4输入降为3输入,规模砍半。
  • 第二步对3位输入的8种组合,逐位列出输出真值表,3输入逻辑的最优门级实现可以直接通过固定的3输入逻辑最优映射表得到,不需要复杂算法优化。
  • 第三步统一做NAND转换,把所有AND/OR结构替换为NAND实现,最终结果完全符合单元使用要求。

内容的提问来源于stack exchange,提问作者gudise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:15:31