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

Yosys生成含DFF的BLIF无法被ABC读取的问题求助

问题原因与解决办法

错误原因分析

  1. Liberty库加载失败:报错提到无法识别.h后缀文件,说明你的mycells.lib中包含include语句引用了.h文件,ABC的通用read命令无法解析该后缀,导致库文件加载不完整,后续找不到DFF定义。
  2. DFF单元不匹配或未定义:
    • 要么mycells.lib中没有定义名为DFF的时序单元;
    • 要么Yosys生成的BLIF中DFF的端口(如C作为时钟端)与Liberty库中DFF的端口命名(如部分库用CLK)不匹配;
    • 重复的dfflibmap操作可能干扰了DFF的映射流程。

解决步骤

1. 修复Liberty库文件加载问题

  • 替换/include内容:打开mycells.lib,找到引用.h文件的include语句,将.h文件的内容直接复制粘贴到mycells.lib中并删除原include行;或者将.h文件重命名为.lib,修改include路径为新文件名。
  • 使用ABC专用命令加载库:ABC中加载Liberty库必须用read_liberty命令,而非通用的read命令,修改ABC脚本为:
read_liberty ./yosys-yosys-0.23/manual/PRESENTATION_Intro/mycells.lib 
read_blif ./designs/aes_core.blif

2. 确保Liberty库中存在正确的DFF定义

检查mycells.lib,确认包含端口匹配的DFF单元定义,示例如下:

cell(DFF) {
  area : 1.0;
  pin(D) { direction : input; }
  pin(Q) { direction : output; }
  pin(C) { direction : input; clock : true; }
  timing() {
    // 按需添加时序约束信息
  }
}

如果库中DFF的时钟端口名为CLK,需修改Yosys的dfflibmap步骤添加端口映射,或调整Liberty中的端口名为C以匹配BLIF输出。

3. 优化Yosys综合脚本

原脚本中abc前后重复调用dfflibmap,且使用-prepare选项(用于生成映射模板),这可能导致DFF未正确映射到库单元。调整脚本如下:

read_verilog ./designs/apbtoaes128/trunk/rtl/*.v
hierarchy -check -top aes_core
proc
techmap -map ./oss-cad-suite/share/yosys/adff2dff.v
synth
# 先映射DFF到库单元,再执行ABC组合逻辑映射
dfflibmap -liberty ./yosys-yosys-0.23/manual/PRESENTATION_Intro/mycells.lib 
abc -liberty ./yosys-yosys-0.23/manual/PRESENTATION_Intro/mycells.lib
write_blif -gates ./designs/aes_core.blif

该脚本会将设计中的DFF直接替换为mycells.lib中定义的单元,生成的BLIF将使用库中实际的DFF名称,避免ABC找不到对应单元。

4. 额外排查点

  • 检查BLIF文件中DFF的端口名与Liberty库中的定义是否完全一致(ABC对大小写敏感);
  • 如果Liberty中的DFF包含复位/置位端口,需确保Yosys综合时保留或处理这些端口逻辑,避免端口不匹配;
  • 使用Yosys的write_liberty命令导出映射后的库,验证DFF单元是否正确生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:25:27