Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

Modelsim的仿真之路(Memory小技能)

续上

许久没更新了,间歇性来写写,还是继续Modelsim中关于内存的操作,涉及的文件可在文末自行获取,本篇对应memory的文件夹。

~Show Time~

图片[1]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

准备

把文件准备好后,启动软件,将路径设置成文件对应的路径,然后

命令行示例

#依次进行即可,路径对应自己的
cd E:/Soft_File/Sim_File/memory
vlog *.v

库里面出现work库,且包含以下编译后的内容

图片[2]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

双击ram_tb载入仿真,并选择Memory List的窗口

图片[3]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

双击spram1对应的mem,会直接在右窗口加载mem中的地址与值,由于还没启动仿真,所以这时还是未知态

图片[4]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

点击运行的图标,或者命令行:run -all,仿真在$stop处停止,然后再返回mem的数据列表,可以看到数据已经更新为运行值了

图片[5]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

显示设置

有时为了方便分析,就需要对数据重新排列,比如我们数据是个8bit的,然后想让其与地址一一对应,可以按下面的使用过程进行

在窗口内右键,然后点Properties

图片[6]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

出现的窗口可以对显示做设置,把地址改成10进制显示,数据改为无符号十进制,每行只显示1个值(千万别把words看成word的了,和字长啥的没关系)

图片[7]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

设置好后,OK就会出现显示地址递增对应数据的结果

图片[8]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

数据定位

排好数据后,肯定还需要掌握搜索定位的功能,如果想按地址进行定位,就在地址的队列中右键,然后点Goto

图片[9]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

然后输入要定位到的地址值,比如输100

图片[10]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

OK后就直接跳到了对应的地址

图片[11]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

此外还可以直接进行相对地址的跳转,比如想让233的地址出现在111地址的位置,就直接在111上双击,然后输入233,回车后直接进行跳转

图片[12]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

图片[13]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

如果是数据中有特征信息,想从数据上进行定位,就在数据列中右键,然后Find

图片[14]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

比如搜个233的数据,如果具有重复,还需要找,就点Find Next继续查找

图片[15]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

导出数据

如果想把运行至某时刻时的数据做保存(本例程已经直接运行至停止的位置),可以使用Export进行导出,在Memory List界面选中要导出的对应内存变量或者直接在想导出的那个Memory Data中右键,然后Export…

图片[16]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

出现窗口中设置导出的数据范围和格式信息,此处就只导出0~233地址的数据,格式MTI(Verilog的格式可以导出后用于后续代码直接进行读取做初始化),地址和数据采用刚刚同样的配置,然后修改好文件名后就OK

图片[17]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

接着就可以用其他软件打开查看了图片[18]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

最后再导出个无地址信息的数据,待会需要用到

图片[19]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

图片[20]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

初始化内存

打开spram3的mem,方便分析初始化的效果,把属性设成和刚刚spram1的一样

图片[21]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

数据界面右键,然后Import

图片[22]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

选择刚刚导出的文件,其他设置如下,然后OK

图片[23]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

数据发生更新,然后定位到233的地址,可以明显看到把数据全部完成新的初始化

图片[24]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

接下来再演示下指定位置,且在可用数据小于指定长度时填充其他数据,进行初始化,为方便看,先定位到1000的地址处

图片[25]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

然后Import,在地址范围处填好起止地址,然后文件要选无地址信息的那个文件

图片[26]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

1000处的地址开始发生更新

图片[27]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

跳转到1233的位置,从1234的地址开始填充从0开始的递增数,直到1500地址处停止

图片[28]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

图片[29]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

手动赋值

打开spram2的mem

图片[30]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

接着数据处右键,点Change或者直接选中要修改的区域后再点Change

图片[31]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

出现的界面填写要覆盖的地址区域以及要填充的数字,设置好后,OK

图片[32]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

从0x11到0x22地址的数据都被从0开始的递增数覆盖

图片[33]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

除了这种批量性的修改数据值,还可以直接双击单个要改的,回车后即可实现直接单个修改

图片[34]-Modelsim的仿真之路(Memory小技能)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

结束

关于Memory的知识,大概就分享到这吧~

请登录后发表评论

    没有回复内容