集成电路设计的开源EDA软件Yosys
Yosys是verilogrtl综合的一个框架。它目前拥有广泛的Verilog-2005支持,并为各种应用领域提供了一套基本的综合算法。选定功能和典型应用:
处理几乎所有可合成的Verilog-2005设计
正在将Verilog转换为BLIF/EDIF/BTOR/SMT-LIB/simple RTL Verilog/etc。
用于检查属性和等价性的内置形式化方法
映射到ASIC标准单元库(Liberty文件格式)
映射到Xilinx 7系列和Lattice iCE40 FPGA
自定义流的基础和/或前端
YOSYS可以通过使用合成脚本组合现有的通行(算法),并通过扩展YOSYS C++代码库来添加额外的通道来执行任何合成任务。
Yosys是一种基于ISC许可证(一种与GPL兼容的许可证,与MIT许可证或2条款BSD许可证类似)授权的自由软件。
Yosys 是2012年开始的项目,至今还在更新(cliffordwolf/yosys · GitHub)
自带一个cmos的标准库,类似于Synopsys GTECH
它的内部库映射算法使用的是 Berkeley ABC ABC: A Simple System for Sequential Synthesis and Verification
最新的(OSX 10.10 + XCode 6.1)可以编译通过,只需打开Makefile中的clang选项即可
这个小玩意儿足以胜任集成电路综合的教学任务(EDA工具教学的部分除外)
示例用法
Yosys使用合成脚本进行控制。例如,下面的Yosys合成脚本从verilog文件mydesign.v读取一个设计(顶部模块为mytop),并使用Liberty文件中的单元库将其合成为门级网络列表迈锡尔.lib并将合成结果作为Verilog netlist写入synth.v:
# read design
read_verilog mydesign.v
# elaborate design hierarchy
hierarchy -check -top mytop
# the high-level stuff
proc; opt; fsm; opt; memory; opt
# mapping to internal cell library
techmap; opt
# mapping flip-flops to mycells.lib
dfflibmap -liberty mycells.lib
# mapping logic to mycells.lib
abc -liberty mycells.lib
# cleanup
clean
# write synthesized design
write_verilog synth.v
synth命令提供了一个良好的默认脚本,可作为简单合成脚本的基础:
# read design
read_verilog mydesign.v
# generic synthesis
synth -top mytop
# mapping to mycells.lib
dfflibmap -liberty mycells.lib
abc -liberty mycells.lib
clean
# write synthesized design
write_verilog synth.v
截图
这个页面包含简单的Yosys合成脚本的例子,以及合成设计的“show”命令输出的屏幕截图。(“show”命令使用GraphViz生成示意图。)
简单RTL网络列表
# read design
read_verilog counter.v
hierarchy -check
# high-level synthesis
proc; opt; fsm; opt; memory; opt
Download:show_rtl.ys
module counter (clk, rst, en, count);
input clk, rst, en;
output reg [3:0] count;
always @(posedge clk)
if (rst)
count = 4d0;
else if (en)
count = count + 4d1;
endmodule
Download:counter.v
CMOS门级网表
# read design
read_verilog counter.v
hierarchy -check
# high-level synthesis
proc; opt; fsm; opt; memory; opt
# low-level synthesis
techmap; opt
# map to target architecture
dfflibmap -liberty cmos_cells.lib
abc -liberty cmos_cells.lib
# split larger signals
splitnets -ports; opt
Download:show_cmos.ys
library(demo) {
cell(NOT) {
area: 3;
pin(A) { direction: input; }
pin(Y) { direction: output;
function: A; }
}
cell(BUF) {
area: 6;
pin(A) { direction: input; }
pin(Y) { direction: output;
function: A; }
}
cell(NAND) {
area: 4;
pin(A) { direction: input; }
pin(B) { direction: input; }
pin(Y) { direction: output;
function: (A*B); }
}
cell(NOR) {
area: 4;
pin(A) { direction: input; }
pin(B) { direction: input; }
pin(Y) { direction: output;
function: (A+B); }
}
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; }
}
}
Download:cmos_cells.lib
粗粒度网表
# read design
read_verilog counter.v
hierarchy -check
# high-level synthesis
proc; opt; fsm; opt; memory; opt
# mapping coarse-grain cells
extract -map coarse_cells.v
Download:show_coarse.ys
module MACRO_INC(in, out);
input [3:0] in;
output [3:0] out;
assign out = in + 4d1;
endmodule
module MACRO_DFF(clk, rst, en, d, q);
input clk, rst, en;
input [3:0] d;
output reg [3:0] q;
always @(posedge clk)
q = rst ? 4d0 : en ? d : q;
endmodule
Download:coarse_cells.v
|集成电路设计的开源EDA软件Yosys
input 软件 集成电路设计的开源EDA软件Yosys