Verilog实战学习到RiscV - 1 : Yosys 综合

Yosys 综合

实例

一般 FPGA IDE 的第一步都是RTL 综合(Synthesis)。之后就能看到数字电路图了。然后可以做RTL 级的仿真模拟。

直接上代码,这里我们看一个简单的加法器来学习。

module adder(
  input  [7:0] a,
  input  [7:0] b, 
  input        ci, // carry in

  output [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 (寄存器传输级) 图。以下是对脚本各部分的详细解释:

  1. 读取设计

    read_verilog adder.v
    
    • read_verilog 命令读取指定的 Verilog 文件 (adder.v) 并将其载入到 yosys 的设计数据库中。这个文件应该包含你要综合的硬件描述代码。
  2. 层次结构检查

    hierarchy -check
    
    • hierarchy 命令检查设计的模块层次结构,确保所有的模块引用都是一致的,并且所有的子模块都能找到。-check 选项会在检查过程中报告任何发现的问题。
  3. 高级综合步骤

    proc; opt; memory; opt; fsm; opt
    
    • 这一系列命令执行了多步优化和转换处理:
      • proc:处理进程,转换所有的进程 (always 块) 成为数据流图 (DFG)。
      • opt:优化设计,执行一系列常规优化步骤以简化和优化电路。
      • memory:处理和优化存储器 (RAM, ROM),将其转换成适当的实现。
      • opt:再一次优化设计,以利用前一步的转换可能带来的新优化机会。
      • fsm:处理有限状态机 (FSM),将 FSM 转换成最优实现。
      • opt:最后再进行一次优化,确保所有前面的转换和优化都得到充分利用。
  4. 展示设计

    show -format dot -prefix ./adder_rtl
    
    • show 命令生成设计的图形表示。-format dot 选项指定输出格式为 DOT 格式 (Graphviz 使用的图形描述语言),-prefix ./adder_rtl 选项指定生成的文件前缀为 ./adder_rtl。最终会生成一个 ./adder_rtl.dot 文件,该文件可以用 Graphviz 工具进行可视化。
  5. 生成 JSON 输出

    write_json out.json
    
    • write_json 命令将当前设计写入 JSON 格式文件 out.json。这个文件包含了综合后的设计信息,可以用于其他工具进行进一步处理或分析。

运行脚本:

yosys ./synthesis_rtl.ys

这时我们可以看到out.jsonadder_rtl.dot 文件。

查看 RTL 原理图

.dot 文件如何看呢?运行如下命令即可。我用的是Ubuntu22.04, dot 应该已经默认安装了。

dot -Tpng adder_rtl.dot > adder_rtl_dot.png

Adder RTL 原理图

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿Boris

我们都是技术人,我们相互支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值