卢骏 · 2020年06月09日

pxp的ixcom模式,memory不能定义太大问题

定义4G大小空间的memory,位宽是128bit,地址位宽28bit,总共地址位宽32bit,4G大小。
1.png

在initial中,使用$readmemh系统函数,读取hex文件,载入到memory中。
2.png

在ixcom模式下,irun阶段编译,会报错,提示memory太大。因为EDA编译时,对于很多的memory,是通过hash的方式,来实现管理的,因此这样,就不能定义很大的memory。

此时,需要在ixcom编译阶段,加入以下选项:

 -ncelabargs "-sparsearray 10000000" 

该选项的意思是,在环境中,如果有memory超过了 10000000 大小,那么这个memory,使用hash的方式去管理。

这样,irun阶段的编译,就通过了。

但是在执行的时候,发现当swap到pxp上,执行的时候,pxp就卡住了。

为了解决pxp上会卡住,不能跑到问题。采用以下方案来进行解决。

首先在文件的初始化中,如果是pxp模式,就不要调用$readmemh函数来对memory进行初始化。

// in pxp mode, shouldn't use $readmemh to load hex   file to mem
// should use memory -load $readmemh mem_location -file hex_file in run_tcl

`ifndef PXP

initial

begin

    $display("memory model will be initialized");

    $readmemh("mem_init_ns.hex", mem);

  end
`endif

修改提供给xeDebug工具的执行tcl脚本,加入memory –load,将hex文件,载入到DUT中的memory中。

注意,该载入,需要在swap到pxp后之后,再进行载入。

  run 100ns
  xc xt0 zt0 tbrun
  memory -load
  %readmemh tbench_top.u_uto_tb.u_secure_mem.mem -file       mem_init.s.hex
  memory -load
  %readmemh tbench_top.u_uto_tb.u_non_seucre_mem.mem -       file mem_init_ns.hex
  run

使用以上方式,pxp仿真,就可以正常运行了。

更多相关阅读

IES low-power中的set_sim_control命令
UVM使用双顶层的用法
sv的dvfs的时钟实现

原文首发于骏的世界博客
作者:卢骏
更多IC设计相关的文章请关注IC设计极术专栏,每日更新。

推荐阅读
关注数
20192
内容数
1307
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息