【翻译】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. 创建一个新目录并拷贝所用的文件。

从如下路径拷贝所有的文件。

<install_dir>/examples/tutorials/verilog/memory to the new directory.

(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所示。

clip_image002

b) 双击内存列表的/ram_tb/spram1mem实例以查看它的内容。

打开一个Memory Data窗口,显示spram1的内容。第一列显示地址,其他列显示数值。

如果用的是Verilog范例,数据将是X(图7-2),因为还没仿真。

clip_image004

c) 在Memory窗口双击/ram_tb/spram2/mem。打开第二个Memory Data窗口。对每个内存实例,都可这样查看。

2. 仿真设计。

a) 在主窗口单击run –all图标clip_image006

当仿真停止,打开了一个Source窗口,显示ram_tb的源码。

b) 单击Memory …spram1/mem标签以前台显示Memory数据窗口。如图7-4.

clip_image008

3. 修改实例/ram_tb/spram1/mem的值。

a) 在spram1的Memory Data窗口任意地方右击并选择Properties。

b) 打开属性对话框(图7-6)

clip_image010

c) 在Address Radix,选择Decimal。这只改变地址的表示方式。

d) 选择Words per line并输入1.

e) 单击OK。

设置后的结果显示如图7-7。如果显示的结果不符,检查设置的地址表示方式而不是数据的表示方式,缺省,数据设置为有符号的。

clip_image012

浏览内存

可浏览指定地址的内存或包含特定数据的部分。首先,要指定一个地址。

1. 使用Goto查找一个指定的地址。

a) 在地址列任意地方右击并选择Goto(图7-9)。

弹出Goto对话框。

clip_image014

b) 在Goto Address栏输入30.

c) 单击OK。

窗口的首行显示指定的地址。

2. 直接编辑地址。

a) 要快速移动到指定的地址,如下操作:

1) 在地址列双击地址38.

2) 输入地址100(图7-10)。

clip_image016

3) 确定。

将跳至地址100.

3. 再试试查找一个特定的数据。

a) 在数据列任意地方右击并选择Fimd。

打开Find in对话框(图7-11)。

clip_image018

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)。

clip_image020

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)。

clip_image022

下一步,将试验从一个文件和填充模式导入。将用先前导出的250个地址数据的重载文件reloc.mem来初始化spram3。也用填充模式初始化50个额外的地址输入。

clip_image024

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开始的新加的数据。

clip_image026

现在,在结束本节之前,清除已查看的内存实例。

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.

clip_image028

从一个填充模式初始化一定范围的内存。

右击/ram_tb/dpram1/mem的数据列并选择Change打开Change Memory对话框(图7-17)。

clip_image030

选择Addresses并输入0x00000006作为骑士地址,0x00000009作为结束地址。这里的“0x”16进制的记号是可选的。

选择Random作为Fill Type。

输入0作为Fill Data。

单击OK。

指定范围的数据被随机生成的替代(图7-48)。

clip_image032

高亮显示修改内容。

可在地址数据区高亮显示修改。

高亮显示地址0x0000000c:0x0000000e的数据,如图7-19.

clip_image034

右击高亮显示的数据并选择Change。

打开Change memory对话框(图7-20)。注意Addresses栏已填充你选择的。

clip_image036

选择Value作为Fill Type。

在Fill Data栏输入34 35 36。

单击Ok。

数据改为刚输入的值(图7-21)。

clip_image038

编辑数据。

一次编辑一个值:

在数据列双击任意值。

输入值并确定。若要取消修改,按ESC。

本课小结

本课到此结束。继续下课,先结束仿真。

1. 选择Simulate > End Simulate。单击Yes。

原文地址:https://www.cnblogs.com/halflife/p/1977508.html