热度 14| ||
SweRV-EH2 IP 使用总结
Source: https://github.com/chipsalliance/Cores-SweRV-EH2
1.配置篇
1.1 熟悉swerv.config 文件中配置选项的含义
与FW开发人员,验证人员等共同决定各配置选项参数。
注意:
a,以下选项
{inst,data}_access_enable[0-7] : default 0
{inst,data}_access_addr[0-7] : default 0x00000000
{inst,data}_access_mask[0-7] : default 0xffffffff
配置了也不起作用,都是默认状态。
b,没有配置线程的选项,但可以在生成的文件中修改来达到双线程效果。
2.FW篇
2.1 根据IP 路径下 tools/Makefile 文件熟悉如何生成hex代码文件
注意cmark_iccm.ld 链接器文件,用于划分代码,数据的memory分布区域。
2.2 配置中断向量表,后续调试过程都会触发异常/中断。
2.3 熟悉常见的异常和中断,便于后期调试。
2.4 仿真用(前),采用通用的printf基础函数库,设定打印内容指向的硬件地址,便于后续将打印信息打印到terminal控制台里。
2.5 FPGA调试用,实现UART的相关代码,便于后期上FPGA调试时,将printf的信息打印到PC里。
3.验证篇
3.1. 验证人员需将FW hex代码通过backdoor的方式注入到cpu内部的ICCM,DCCM。须熟悉ICCM,DCCM的底层memory结构,bank数量及分布,才能正确写入hex可执行代码。
3.2 仿真用(后),printf在硬件端的实现,验证人员在与FW人员约定的硬件地址(比如DCCM最后一个地址)里取出printf打印出的ASCII 码,并用$write函数打印到terminal终端里,方便debug。
3.3调试常规流程,查看ifu,lbu等总线是否有异常;查看trace_*等信号,熟悉常见的异常和中断,前期调试,多会出现异常和中断。
4.warning&error
4.1 读取ICCM的数据,CPU将通过lsu总线来读取,如需要此功能,可将lsu总线通过AXI bridge接到CPU的DMA接口上。
4.2
Warning-[ENUMASSIGN] Illegal assignment to enum variable
eh2/ifu/eh2_ifu_mem_ctl.sv, 560
" rvdff #(($bits(eh2_err_stop_state_t) * 6'b1)) icache_ecc_1.err_stop_stateff( .clk (active_clk), .din (err_stop_state_thr), .dout (err_stop_state_thr_ff), .rst_l (rst_l));"
Only expressions of the enum type can be assigned to an enum variable.
The type logic [(WIDTH - 1):0] is incompatible with the enum
'eh2_err_stop_state_t'
Expression: dout
Use the static cast operator to convert the expression to enum type.
resolved:
typedef logic [$bits(eh2_err_stop_state_t)-1:0] eh2_err_stop_state_t_bits;//eh2_def.sv 33 line
eh2_err_stop_state_t_bits err_stop_state; //eh2_ifu_mem_ctl.sv 457 line
eh2_err_stop_state_t_bits [pt.NUM_THREADS-1:0] err_stop_state_thr;//eh2_ifu_mem_ctl.sv 406 line
eh2_err_stop_state_t_bits [pt.NUM_THREADS-1:0] err_stop_state_thr_ff;//eh2_ifu_mem_ctl.sv 407 line
4.3. all $error
Error-[EEST] $error elaboration system task
msg:
location: file
eh2/lib/beh_lib.sv
line 561
path: rvdffiee
resolved: add "initial" in line 561
4.4 无法识别eh2_param.vh中的语法
解决办法:替换 pt 结构体,将”pt.”替换成”pt_”, “:”替换成“=”,主要思路是将struct类型的对象换成普通的parameter定义,其他细节也需要处理。此外,相应的其他.sv文件的“pt.”也要批量替换成“pt_”
4.5. eh2_mem.sv undriver 各种undriver
line:115
assign btb_sram_pkt.wayhit_f1='0;
assign btb_sram_pkt.wayhit_p1_f1='0;
assign btb_sram_pkt.tag_match_way0_f1='0;
assign btb_sram_pkt.tag_match_way0_p1_f1='0;
assign btb_sram_pkt.tag_match_vway1_expanded_f1='0;
assign btb_vbank0_rd_data_f1='0;
assign btb_vbank1_rd_data_f1='0;
assign btb_vbank2_rd_data_f1='0;
assign btb_vbank3_rd_data_f1='0;
4.6. bus_rsp_valid_q, bus_rsp_ready_q, bus_rsp_write_q, bus_rsp_error_q;bus_rsp_rdata_q 各类无驱动warning, 不要处理。由于它采用了隐式接口,所以会报,实际上是有连接的。
eh2_lsu_bus_intf.sv line:245
4.7 spyglass 会无法识别SV语法,需要使用VC_Static工具。
使用VC_Static工具得到的report需要分析,会有很多undriver的情况。不影响使用,就暂时不要处理。
4.8 有问题可以去github上问开发者。
附录:
NIC400 IP(BUS bridge IP) user guide
#/bin/tcsh
#/tools/arm/AMBADesigner_r3p9/ADCL/doc/
source /tools/arm/AMBADesigner_r3p9/etc/setup.csh
source /tools/arm/AMBADesigner_r3p9/AMBADesigner/etc/setup.csh
source /tools/arm/ad_3p_tools/perl_5_8_8/linux//etc/setup.csh
source /tools/arm/ad_3p_tools/tcl_8_4_13/linux//etc/setup.csh
source /tools/arm/ad_3p_tools/python_2_4_3/linux//etc/setup.csh
source /tools/arm/ad_3p_tools/xalan_1_8_0/linux//etc/setup.csh
source /tools/arm/ad_3p_tools/xercesc_2_5_0/linux//etc/setup.csh
source /tools/arm/AMBADesigner_r3p9/etc/setup.csh
adcanvas&
玉林枫: 你好,我最近在使用SWERV EL2,发现ICCM中编写代码先写sw 后写lw,但执行结果确是先执行lw在执行sw,看了下文档需要使用fence指令,我想问的是,如果使用C编写代 ...
tfpwl_lj: C语言没有对应fence的语句。只能是手动嵌入fence指令。具体网上搜一下怎么在C语言中嵌入汇编指令。我这边做硬件,暂时不涉及到写这样的C代码。 ...
玉林枫: 就硬件而言,您那边ICCM/DCCM作何使用,按照这个特性ICCM只能使用汇编编写,难道是将一些实时性强的代码,比如说中断?本来我打算仅仅使用ICCM/DCCM即可,现在看 ...
tfpwl_lj: ICCM只是存放代码的SRAM,靠近CPU,实时性强,访问速度快。它里面的代码用汇编或者C编译都可以。硬件仿真可以backdoor的方式来访问ICCM,做成了真实的芯片,可以 ...
玉林枫: 多谢,我的问题解决了,我使用的VCS仿真器,ICCM DCCM没有初始化,lw指令进行DCCM读取,读出来x,进而导致仿真失败,对DCCM随便初始化一个值,程序即可正确运行 ...