zoukankan      html  css  js  c++  java
  • 【翻译】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。

  • 相关阅读:
    Nginx负载均衡+代理+ssl+压力测试
    Nginx配置文件详解
    HDU ACM 1690 Bus System (SPFA)
    HDU ACM 1224 Free DIY Tour (SPFA)
    HDU ACM 1869 六度分离(Floyd)
    HDU ACM 2066 一个人的旅行
    HDU ACM 3790 最短路径问题
    HDU ACM 1879 继续畅通工程
    HDU ACM 1856 More is better(并查集)
    HDU ACM 1325 / POJ 1308 Is It A Tree?
  • 原文地址:https://www.cnblogs.com/halflife/p/1977508.html
Copyright © 2011-2022 走看看