app开发者平台在数字化时代的重要性与发展趋势解析
672
2022-11-22
【翻译】ModelSim指南 V (ModelSim)(Verilog)(Digital Logic)
7
查看和初始化内存
简介
本课将学习如何查看和初始化内存。把以下作为内存定义并列出:
l 寄存器、线变量和标准逻辑数列
l 整数数列
l VHDL里除了标准逻辑之外的列举类型的信号元数列
本课所用的设计文件
安装时自带的范例。
扩展阅读
用户手册:Memory and Memory Data Windows。
命令参考:mem display,mem load, mem save, and radix。
编译并加载设计
1. 创建一个新目录并拷贝所用的文件。
从如下路径拷贝所有的文件。
(ps 我用的免费的ModelSim ase 6.5b版缺少这个文件)。
2. 启动ModelSim并切换至练习的目录。
a) 选择File > Change Directory切换至第一步创建的目录。
3. 创建工作库并编译设计。
a) 在ModelSim提示符后输入vlib work。
b) 在ModelSim提示符后输入vlog *.v编译设计的所有verilog文件。
4. 加载设计。
a) 在主窗口的Library标签,单击work库前的‘+’。
b) 双击设计单元ram_tb来加载设计。
查看内存及其内容
在Memory窗口列出设计中的所有内存实例,显示每个实例的范围。深度和宽度。双击一个实例打开一个窗口显示它的内存数据。
1. 打开Memory窗口并查看一个内存实例的数据。
a) 如果Memory窗口还没打开,选择View > Memory List。
一个Memory窗口如图7-1所示。
b) 双击内存列表的/ram_tb/spram1mem实例以查看它的内容。
打开一个Memory Data窗口,显示spram1的内容。第一列显示地址,其他列显示数值。
如果用的是Verilog范例,数据将是X(图7-2),因为还没仿真。
c) 在Memory窗口双击/ram_tb/spram2/mem。打开第二个Memory Data窗口。对每个内存实例,都可这样查看。
2. 仿真设计。
当仿真停止,打开了一个Source窗口,显示ram_tb的源码。
b) 单击Memory …spram1/mem标签以前台显示Memory数据窗口。如图7-4.
3. 修改实例/ram_tb/spram1/mem的值。
a) 在spram1的Memory Data窗口任意地方右击并选择Properties。
b) 打开属性对话框(图7-6)
c) 在Address Radix,选择Decimal。这只改变地址的表示方式。
d) 选择Words per line并输入1.
e) 单击OK。
设置后的结果显示如图7-7。如果显示的结果不符,检查设置的地址表示方式而不是数据的表示方式,缺省,数据设置为有符号的。
浏览内存
可浏览指定地址的内存或包含特定数据的部分。首先,要指定一个地址。
1. 使用Goto查找一个指定的地址。
a) 在地址列任意地方右击并选择Goto(图7-9)。
弹出Goto对话框。
b) 在Goto Address栏输入30.
c) 单击OK。
窗口的首行显示指定的地址。
2. 直接编辑地址。
a) 要快速移动到指定的地址,如下操作:
1) 在地址列双击地址38.
2) 输入地址100(图7-10)。
3) 确定。
将跳至地址100.
3. 再试试查找一个特定的数据。
a) 在数据列任意地方右击并选择Fimd。
打开Find in对话框(图7-11)。
b) 在Find data输入11111010并单击Find Next。
数据将滑动到首次匹配的地址,多次单击Find Next可找到更多。
c) 单击Close关闭对话框。
导出内存数据
可将内存数据导出到一个文件,稍后在仿真时加载。
1. 从/ram_tb/spram1/mem实例导出内存到一个文件。
a) 确定/ram_tb/spram1/men打开并选择。
b) 选择File > Export > Memory Data打开导出内存数据对话框(图7-12)。
c) 在Address Radix选择Decimal。
d) 在Data Radix选择Binary。
e) 在Lime Wrap,设为1 word per line。
f) 在Filename栏输入data_mem.mem。
g) 单击OK。
可在编辑器查看导出的数据。
内存数据可作为重载的文件导出,简单的省略地址信息。因为没有指定地址,可在任意地方重载内存数据。
2. 从/ram_tb/sparm2/mem实例导出一个重载内存数据文件。
a) 在Memory Data窗口选择/ram_tb/sparm2/mem实例。
b) 在内存数据上右击并选择Properties。
c) 在Properties对话框,设置Address Radix为Decimal;Data Radix为Binary;Line Wrap为1 words per Line。单击OK确定。
d) 选择File > Export > Memory Data打开Export Memory对话框。
e) 在Address Range,指定起始地址为0,结束地址为250.
f) File Format选择MTI和No address,这样可在内存的其他位置或其他内存重载。
g) 设置Address Radix为Decimal;Data Radix为Binary。
h) Line Wrap为1 words per Line。
i) 文件名设为reloc.mem,然后单击OK。在接下来的初始化部分将用到这个文件。
内存初始化
在ModelSim里,有3种方式初始化内存:从导出的内存文件,从填充模式,或是以上2种都用。
首先,试试只从一个文件来初始化。将用到先前导出的一个文件data_mem.mem。
1. 查看实例/ram_tb/spram3/mem。
a) 在Memories标签双击/ram_tb/spram3/mem实例。
将打开一个新的Memory Data窗口,显示/ram_tb/spram3/mem内容。一旦初始化完成,就会发现变化。
b) 右击并选择Properties打开Properties对话框。
c) 设置Address Radix为Decimal;Data Radix为Binary。Line Wrap为1 words per Line,并单击OK。
2. 从一个文件初始化spram3。
a) 在数据列任意地方右击并选择Import Data Patterns打开Import Memory 对话框(图7-13)。
缺省的加载类型只有文件。
b) 在Filename栏输入data_mem.mem。
c) 单击OK。
实例/ram_tb/spram3/mem的地址将从data_mem.mem更新(图7-14)。
下一步,将试验从一个文件和填充模式导入。将用先前导出的250个地址数据的重载文件reloc.mem来初始化spram3。也用填充模式初始化50个额外的地址输入。
3. 导入/ram_tb/spram3/mem实例。
a) 右击spram3的数据列并选择Import Data Patterns打开Import Memory对话框。
b) 在Load Type,选择Both File and Data。
c) 在地址范围,选择Addresses并输入0作为起始地址,300作为结束地址。
这意味着将加载从0到300的文件。但是,reloc.mem只包含251个地址数据。从251到300的地址将用填充数据加载。
d) 在File Load,选择MTI文件格式并在Filename栏输入reloc.mem。
e) 在Data Load,选择Increment的Fill Type。
f) 在Fill Data栏设为0.
g) 单击OK。
h) 通过在地址列的任意地方双击并输入250来查看地址250附近的数据。
可以看到指定范围内的数据已被新数据覆盖。当然,也可以看到从地址251开始的新加的数据。
现在,在结束本节之前,清除已查看的内存实例。
4. 在Memory Data窗口右击并选择Close All。
交互调试命令
Memory Data窗口也可用于交互调试。这是一个很有用的特性。
打开一个内存实例并修改它的特征显示。
在Memories窗口双击实例/ram_tb/dpram1/mem。
在Memory Data窗口右击dpram1并选择Properties。
将Address和Data的表示方式改为Hexadecimal。
选择Words per line并输入2.
单击OK。结果如图7-16.
从一个填充模式初始化一定范围的内存。
右击/ram_tb/dpram1/mem的数据列并选择Change打开Change Memory对话框(图7-17)。
选择Addresses并输入0x00000006作为骑士地址,0x00000009作为结束地址。这里的“0x”16进制的记号是可选的。
选择Random作为Fill Type。
输入0作为Fill Data。
单击OK。
指定范围的数据被随机生成的替代(图7-48)。
高亮显示修改内容。
可在地址数据区高亮显示修改。
高亮显示地址0x0000000c:0x0000000e的数据,如图7-19.
右击高亮显示的数据并选择Change。
打开Change memory对话框(图7-20)。注意Addresses栏已填充你选择的。
选择Value作为Fill Type。
在Fill Data栏输入34 35 36。
单击Ok。
数据改为刚输入的值(图7-21)。
编辑数据。
一次编辑一个值:
在数据列双击任意值。
输入值并确定。若要取消修改,按ESC。
本课小结
本课到此结束。继续下课,先结束仿真。
1. 选择Simulate > End Simulate。单击Yes。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~