在YOSYS内运行ABC返回'警告:检测到1个多输出门'

时间:2016-12-08 14:32:21

标签: abc yosys

使用YOSYS时,我调用abc命令:     each thread

abc -liberty mycells3.lib是一个简单的自定义技术库,基于YOSYS发行版中提供的示例库,我在其中添加了ADDER单元格(名为FAX1):

mycells3.lib

运行时,我收到以下警告: library(demo) { cell(BUF) { area: 6; pin(A) { direction: input; } pin(Y) { direction: output; function: "A"; } } } cell(XOR) { area: 0; pin(A) { direction: input; } pin(B) { direction: input; } pin(Y) { direction: output; function: "(A^B)"; } } cell(AND) { area: 10; pin(A) { direction: input; } pin(B) { direction: input; } pin(Y) { direction: output; function: "A*B"; } } cell(NOT) { area: 0; pin(A) { direction: input; } pin(Y) { direction: output; function: "A'"; } } cell(DFF) { area: 18; ff(IQ, IQN) { clocked_on: C; next_state: D; } pin(C) { direction: input; clock: true; } pin(D) { direction: input; } pin(Q) { direction: output; function: "IQ"; } } cell(FAX1) { area : 10; pin(A) {direction : input; } pin(B) {direction : input;} pin(C) {direction : input;} pin(S) {direction : output; function : "((A^B)^C)";} pin(C) {direction : output; function : "C^((A^C)*(B^C))";} } } } 事实上我的模块中没有使用这个单元格(也可能是由于其他原因引起的,但我的问题与这个事实无关)。 我知道自由格式和ABC支持单元格中的多个输出。我的问题是如何使ABC的YOSYS接口接受多个输出单元?

我知道这是可能的,因为Qflow使用带有多个输出的单元格的自由文件ABC,例如,在文件“osu​​035_stdcells.lib”中,我们将YC和YS作为同一单元格的输出

ABC: Warning: Detected 1 multi-output gates (for example, "FAX1")

1 个答案:

答案 0 :(得分:1)

Qflow只使用ABC通过yosys,和Clifford一样,我不知道ABC能够用多个输出映射门。这与标准单元库包含具有多个输出的门的事实没有任何关系。 Yosys处理具有多个输出的触发器,但这是在ABC之外完成的(仅限组合)。解决这个问题的另一种方法是在结构上编写部分verilog代码;也就是说,您可以通过明确写出对FAX和HAX的调用,在verilog源文件中实例化一个加法器。 Yosys将把它们作为“黑盒子”实例进行处理,而不进行优化,否则它们将通过放置和布线正常处理。