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