初始cpu的verilog文件用Yosys综合并导出为v文件

本文详细描述了使用Yosys工具对CPU文件进行综合,从测试文件可行性,到设置顶层模块、读取和映射库文件、执行synth指令,以及解决synth.v文件中未知模块的问题。作者还介绍了yosys常用命令及其功能,包括hierarchy和synth等。
摘要由CSDN通过智能技术生成

记录用yosys综合得到synth.v文件的过程

1.一定要测试初始cpu文件的可行性,tb来test确认都能pass以后再开始,不然这里错后面全错全部重来。

我的cpu文件用到了:

2.打开yosys并读取以上文件

在此文件夹打开终端

1.在终端输入:

yosys

打开yosys软件

然后输入:

read_verilog cpu_singlecycle.v; read_verilog decode_assign.v; read_verilog execute_assign.v; read_verilog rf.v; read_verilog single_port_async_ram.v; read_verilog dff.v; read_verilog configurations.v

看到每个最后一行都是“successfully”就ok,如下:

2.设置顶层模块并使用synth指令来综合:

synth -top cpu

3.找你想用的pdk的lib库,把它放到这个目录下,eg:

我是用的pdk45nm,用到了stdcells的lib和v文件来源: mflowgen/freepdk-45nm: ASIC Design Kit for FreePDK45 + Nangate for use with mflowgen (github.com)

目前只用到stdcells.lib文件后续,也会用到stdcells.v文件,可以先下载下来。 

4.把上面的stdcells.lib映射进来:

dfflibmap -liberty stdcells.lib
abc -liberty stdcells.lib
clean

5.把结果写入synth.v文件:

write_verilog synth.v
这些指令的含义在文章末尾可以找到。

最后我们就得到了synth.v文件:

打开后内容大概是这样:

可看到原本的代码变成了各种门 和非常多的线。

验证synth文件的可行性:

创建一个新文件夹为下一步仿真做准备,放入相关文件(synth和configuration,反正提示缺啥放啥就行),运行:

iverilog -o v.out cpu_tb_t2.v synth.v

发现报错未知模块

这是因为我们synth内部不是用了很多门吗,这些门定义存放在刚刚的stdcells.v文件内,所以现在就是把刚刚下载的stdcells.v放到相同目录下的时候了。

在synth文件前面加入inculde:

`include "stdcells.v"

这里我用到的是我自己用脚本修改过的文件

 

然后把其它提示需要补充的文件放进来,就可以看到PASS验证通过:

(中间省略)

 

可知道我们生成的这个synth是可以成功运行在初始cpu代码下运行的指令的,可以进入下一步:仿真。











YosysHQ/yosys: Yosys Open SYnthesis Suite (github.com)

ascend-freepdk45/lib at master · marlls1989/ascend-freepdk45 (github.com)

yosys常用命令及含义:
   abc                  使用ABC进行技术映射 use ABC for technology mapping

   check               检查设计中的明显问题 check for obvious problems in the design

  clean               移除未使用的电池和电线 remove unused cells and wires

 dfflibmap           触发器技术映射 technology mapping of flip-flops

 fsm                 提取和优化有限状态机 extract and optimize finite state machines

hierarchy            检查、扩展和清理设计层次结构

memory              将存储器转化成基础单元 translate memories to basic cells

 opt                 执行简单的优化 perform simple optimizations

proc                将进程转换为网表 translate processes to netlists

read_verilog        从Verilog文件中读取模块 read modules from Verilog file

 synth               通用综合脚本 generic synthesis script

 write_verilog        将设计写入Verilog文件write design to Verilog file

hierarchy相关语法:

  hierarchy [-check] [-top <module>]

 -check 检查设计层次结构。当使用未知模块作为单元格类型时,将生成错误。

  -top <module> 使用指定的顶层模块构建设计层次结构。其它模块(未使用的模块)将被删除。当使用-top选项时,将在指定的top模块上设置'top'属性。否则,带有'top'属性集的模块将隐式地被用作顶级模块,如果这样的模块存在的话。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值