当前位置:   article > 正文

自己动手写处理器之第二阶段(5)——ModelSim电路仿真_modelsim仿真电路图

modelsim仿真电路图

将陆续上传本人写的新书《自己动手写处理器》(尚未出版),今天是第九篇,我尽量每周四篇


2.8 仿真

      上一节实现了一个简化的处理器取指电路,需要通过仿真以验证其功能是否正确,直观的仿真思路就是:给出一个时钟信号,上述电路会在每个时钟信号上升沿将取指地址加1,同时从指令存储器中取出一条指令,观察取指地址是否依次递增,同时观察取出的指令是否是存储器中取指地址对应的指令,如果都符合,那么上述取指电路就实现正确。此处涉及到两个问题。

      1、如何在指令存储器中存储指令,也就是指令存储器初始化问题。

      2、如何给出时钟信号?

      本节将分别解答上述问题,在此基础上,使用ModelSim进行仿真。

2.8.1 系统函数

      初始化存储器有两种方法,一种是对存储器中每个存储单元依次给出初值,如下。

  1. rom[0] = 32'h00000000; //存储器rom的第0个元素初始化为0x00000000
  2. rom[1] = 32'h01010101; //存储器rom的第1个元素初始化为0x01010101
  3. rom[2] = 32'h02020202; //存储器rom的第2个元素初始化为0x02020202
  4. rom[3] = 32'h03030303; //存储器rom的第3个元素初始化为0x03030303
  5. ......

      另一种方法是使用系统函数$readmemh,这样更加方便,但是后者只能用于仿真中。

      除了$readmemh外,在Verilog HDL中还定义了很多系统函数,比如显示当前仿真时间的函数$time、显示信号值的函数$display、暂停仿真过程的函数$stop、结束仿真过程的函数$finish等。本书主要用到了$stop、$readmemh这两个系统函数。

      1、$stop

      $stop用于对仿真过程进行控制,暂停仿真,其使用格式如下。

  1. $stop(); // 使用格式一,不带参数
  2. $stop(n); // 使用格式二,带参数n,n可以等于0、1、2等值,含义如下:
  3. // 0:不输出任何信息;
  4. // 1:给出仿真时间和位置
  5. // 2:给出仿真时间和位置,还有其它一些运行统计数据

      当仿真程序执行到$stop语句时,将暂时停止仿真,此时设计者可以输入命令,对仿真器进行交互控制。

      2、$readmemh

      $readmemh函数用于读取文件,其作用是从外部文件中读取数据并放入存储器中。使用格式如下。

$readmemh("数据文件名", 存储对象);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/709105
推荐阅读
相关标签
  

闽ICP备14008679号