专栏名称: 嵌入式微处理器
关注这个时代最火的嵌入式微处理器,你想知道的都在这里。
目录
相关文章推荐
要资讯  ·  大商所期货品种之玉米和玉米淀粉(下) ·  3 天前  
BCG波士顿咨询  ·  借力AI,推动车企创造更多现实价值 ·  3 天前  
要资讯  ·  大商所期货品种之玉米和玉米淀粉(上) ·  4 天前  
51好读  ›  专栏  ›  嵌入式微处理器

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

嵌入式微处理器  · 公众号  ·  · 2024-07-26 13:00

正文

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


一、先找到RTL


很幸运,在这个开源项目的根目录里,正好有一个file list:cv32e40p_manifest.flist。尝试用verdi打开看看是否缺文件:
# 设rtl目录的环境变量export DESIGN_RTL_DIR=rtlverdi -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:
set top cv32e40p_coreset_svf ${top}.svf
# read libraryset stdlib_path ../libset ss_lib wc.dbset 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 rtlanalyze -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_designuniquify
# sdc:开源项目里自带source -echo -verbose ../constraints/cv32e40p_core.sdccheck_timing
# compilecompile
# reportreport_constraints -all_violators > vio.rptreport_area -nosplit -hierarchy > area.rpt
# output netlist and sdcchange_names -rules verilogwrite_file -format verilog -hierarchy -output ${top}_syn.vwrite_sdc -nosplit ${top}_syn.sdc


四、运行脚本


dc_shell-t -f syn.tcl


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


鼠标点点,结果如下图:



END

作者:陈锋

来源:ExASIC


版权归原作者所有,如有侵权,请联系删除







请到「今天看啥」查看全文