前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >把riscv core代码变成网表最少需要几步

把riscv core代码变成网表最少需要几步

作者头像
ExASIC
发布2022-06-21 15:55:09
8250
发布2022-06-21 15:55:09
举报
文章被收录于专栏:ExASICExASIC

逻辑综合其实可以很简单,下面以github上一个riscv core cv32e40p的代码(https://github.com/openhwgroup/cv32e40p)为例介绍一下怎么从零开始做综合。

一、先找到RTL。

很幸运,在这个开源项目的根目录里,正好有一个file list:cv32e40p_manifest.flist。尝试用verdi打开看看是否缺文件:

代码语言:javascript
复制
# 设rtl目录的环境变量
export DESIGN_RTL_DIR=rtl
verdi -sv -f cv32e40p_manifest.flist

二、阅读getting start文档

按照文档里的描述,需要把bfm里仿真用的clock gate换成具体工艺里的icg。

文档链接:

https://docs.openhwgroup.org/projects/cv32e40p-user-manual/getting_started.html

三、写综合脚本

分几小步:

  • 读库
  • 读RTL
  • 读SDC(开源项目里自带,省了很多事儿)
  • compile
  • 检查时序和面积
  • 写出网表和sdc

下面是示例脚本syn.tcl:

代码语言:javascript
复制
set top cv32e40p_core
set_svf ${top}.svf

# read library
set stdlib_path ../lib
set ss_lib wc.db
set search_path [concat $search_path $stdlib_path]
set target_library [list $ss_lib]
set synthetic_library [list dw_foundation.sldb]
set link_library [list * $ss_lib $synthetic_library]

# read rtl
analyze -format sverilog -vcs "
        +incdir+../rtl/include
        +incdir+../rtl/../bhv
        +incdir+../rtl/../bhv/include
        +incdir+../rtl/../sva
" {
    ../rtl/include/cv32e40p_apu_core_pkg.sv
    ../rtl/include/cv32e40p_fpu_pkg.sv
    ../rtl/include/cv32e40p_pkg.sv
    ../rtl/../bhv/include/cv32e40p_tracer_pkg.sv
    ../rtl/cv32e40p_if_stage.sv
    ../rtl/cv32e40p_cs_registers.sv
    ../rtl/cv32e40p_register_file_ff.sv
    ../rtl/cv32e40p_load_store_unit.sv
    ../rtl/cv32e40p_id_stage.sv
    ../rtl/cv32e40p_aligner.sv
    ../rtl/cv32e40p_decoder.sv
    ../rtl/cv32e40p_compressed_decoder.sv
    ../rtl/cv32e40p_fifo.sv
    ../rtl/cv32e40p_prefetch_buffer.sv
    ../rtl/cv32e40p_hwloop_regs.sv
    ../rtl/cv32e40p_mult.sv
    ../rtl/cv32e40p_int_controller.sv
    ../rtl/cv32e40p_ex_stage.sv
    ../rtl/cv32e40p_alu_div.sv
    ../rtl/cv32e40p_alu.sv
    ../rtl/cv32e40p_ff_one.sv
    ../rtl/cv32e40p_popcnt.sv
    ../rtl/cv32e40p_apu_disp.sv
    ../rtl/cv32e40p_controller.sv
    ../rtl/cv32e40p_obi_interface.sv
    ../rtl/cv32e40p_prefetch_controller.sv
    ../rtl/cv32e40p_sleep_unit.sv
    ../rtl/cv32e40p_core.sv
    ../rtl/cv32e40p_clock_gate.sv
}
elaborate ${top}
check_design
uniquify

# sdc:开源项目里自带
source -echo -verbose ../constraints/cv32e40p_core.sdc
check_timing

# compile
compile

# report
report_constraints -all_violators > vio.rpt
report_area -nosplit -hierarchy > area.rpt

# output netlist and sdc
change_names -rules verilog
write_file -format verilog -hierarchy -output ${top}_syn.v
write_sdc -nosplit ${top}_syn.sdc

四、运行脚本

代码语言:javascript
复制
dc_shell-t -f syn.tcl

五、确认RTL与网表逻辑一致

鼠标点点,结果如下图:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ExASIC 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档