Yosys 综合
实例
一般 FPGA IDE 的第一步都是RTL 综合(Synthesis)。之后就能看到数字电路图了。然后可以做RTL 级的仿真模拟。
直接上代码,这里我们看一个简单的加法器来学习。
module adder(input [7:0] a,input [7:0] b, input ci, // carry inoutput [7:0] sum, output co // carry out
);wire [8:0] tmp; // 多一位是为了输出进位assign tmp = a + b + ci; // 算上进位assign sum = tmp [7:0];assign co = tmp [8]; // 输出进位
endmodule
如何综合
写一个yosys脚本:
read_verilog adder.v
hierarchy -check
proc; opt; memory; opt; fsm; opt
show -format dot -prefix ./adder_rtl
write_json out.json
这个 .ys
文件是用于 yosys
工具的脚本,它指定了如何对 Verilog 设计文件进行综合。本脚本的作用是读取一个 Verilog 文件,并执行一系列综合步骤,最后生成一个 JSON 格式的输出文件以及一个 RTL (寄存器传输级) 图。以下是对脚本各部分的详细解释:
-
读取设计
read_verilog adder.v
read_verilog
命令读取指定的 Verilog 文件 (adder.v
) 并将其载入到yosys
的设计数据库中。这个文件应该包含你要综合的硬件描述代码。
-
层次结构检查
hierarchy -check
hierarchy
命令检查设计的模块层次结构,确保所有的模块引用都是一致的,并且所有的子模块都能找到。-check
选项会在检查过程中报告任何发现的问题。
-
高级综合步骤
proc; opt; memory; opt; fsm; opt
- 这一系列命令执行了多步优化和转换处理:
proc
:处理进程,转换所有的进程 (always 块) 成为数据流图 (DFG)。opt
:优化设计,执行一系列常规优化步骤以简化和优化电路。memory
:处理和优化存储器 (RAM, ROM),将其转换成适当的实现。opt
:再一次优化设计,以利用前一步的转换可能带来的新优化机会。fsm
:处理有限状态机 (FSM),将 FSM 转换成最优实现。opt
:最后再进行一次优化,确保所有前面的转换和优化都得到充分利用。
- 这一系列命令执行了多步优化和转换处理:
-
展示设计
show -format dot -prefix ./adder_rtl
show
命令生成设计的图形表示。-format dot
选项指定输出格式为 DOT 格式 (Graphviz 使用的图形描述语言),-prefix ./adder_rtl
选项指定生成的文件前缀为./adder_rtl
。最终会生成一个./adder_rtl.dot
文件,该文件可以用 Graphviz 工具进行可视化。
-
生成 JSON 输出
write_json out.json
write_json
命令将当前设计写入 JSON 格式文件out.json
。这个文件包含了综合后的设计信息,可以用于其他工具进行进一步处理或分析。
运行脚本:
yosys ./synthesis_rtl.ys
这时我们可以看到out.json
和 adder_rtl.dot
文件。
查看 RTL 原理图
.dot 文件如何看呢?运行如下命令即可。我用的是Ubuntu22.04, dot
应该已经默认安装了。
dot -Tpng adder_rtl.dot > adder_rtl_dot.png