不会用FPGA仿真FLASH模型库?看看这个你就会了
一、 仿真模型的获取
本次使用的FLASH芯片为MICRON镁光公司的芯片,仿真模型可以到官网下载,具体下载步骤如下:
1. 搜索镁光官网,进入官网后,拉到最下面,点击蓝色字体SUPPORT;
2. 出现如下画面,点击红框中的蓝色字体Search sim models;
图1.1 support界面
3. 接下来选择自己所用的芯片类型,我这里用的是N25Q32,属于Serial NOR FLASH,因此在左边的筛选条件中选择Serial NOR FLASH,右边的搜索结果会出现所需要的仿真模型压缩包,点击download即可。
图1.2 模型筛选界面
二、 仿真模型初步处理
解压下载的压缩包后,会得到如下的几个文件:
图2.1 解压模型压缩包
其中code文件夹内是N25Qxxx.v文件,是仿真模型的顶层文件;include文件夹中包含一些N25Qxxx文件所需的include文件,用户可以在其中定义配置参数,从而改变仿真模型的特征;top文件夹中包含了一些模型本身仿真的文件,可以用来仿真器件。
关于配置参数,是在include文件夹中的UserData.h文件中进行用户参数配置,如图2.2,当我们需要使用其他器件时,可以将图中的N25Q032A13E换成所需器件名称,该名称在DevParam.h文件中已被定义,目前文件中已被定义的类型有N25Qxxx系列、MT25QLxxx系列、MT25QUxxx系列、MT25TUxxx系列、MT25TLxxx系列。下面是一些文件名定义和非易失存储器值的定义。
在DevParam.h文件中,包含了上述器件所有的器件端口以及属性定义,其中我所使用的N25Q032A13E器件的定义如图2.3所示,里面包含了仿真所需的端口定义以及相关信息,一般来说我们不需要修改,保持默认就好。
图2.2 UserData.h文件
图2.3 器件端口定义
三、 添加测试文件
通过添加信号激励,包括时钟信号、复位信号、行列信号以及控制信号等,完成测试文件的编写。要注意添加include文件以及glbl.v文件,添加方式在下文有介绍,并且添加仿真模型的端口信号以及define信号。如图3.1所示:
图3.1 仿真文件部分信号定义
四、 Modelsim编译error解决方法
1. modelsim找不到include文件
问题截图如下:
图4.1 找不到`include文件
原因有两点:
1、 由于存放仿真工程的目录下没有放置include文件夹;
2、 代码中引用include文件夹中的文件时,没有指定地址。
这两个原因都会造成modelsim软件在编译时,无法识别到include文件夹中的文件,从而报错。
解决方法:
a. 将include文件路径添加到引号中,这样可以让仿真软件能找到包含文件,如图4.2所示:
图4.2 修改include路径
要注意N25Qxxx模块中除了最上面有include,下面还有几十个,所以可以选择全部替换,将所有的路径进行修改。除了N25Qxxx文件,include包含文件中也存在include,所以它们也需要进行一一修改,直到modeisim编译通过。
b. 将include文件夹放在仿真工程目录下。如图4.3所示,将include文件夹放到仿真工程目录下,编译也可以通过。方法b较方法a更简单。
图4.3 文件夹存放位置
2. 错误提示:couldn’t execute “D:modeltech64_10.5win64sccom”:no such file or directory.即无法执行sccom文件,提示没有这样的文件,该文件为编译c语音的编译库文件。错误如图4.4所示:
图4.4 编译错误
出现这样的错误是因为,我们在添加文件到modelsim的过程中,可能会误把include文件夹中的.h文件添加进去,但是modelsim一般没有可以编译.h文件的库,除非下载一个相应的编译库,于是就出现了这个问题。但其实我们不需要添加.h文件到modelsim中,这是我在最开始做仿真时出现的问题,大家以后做仿真的时候可以注意下。
3. 非法输入输出端口。
错误提示如图4.5:
图4.5 非法端口连接
出现这样的错误是因为,HOLD_DQ3在N25Qxxx.v文件中的端口定义类型为inout,如图4.6所示:
图4.6 HOLD_DQ3端口类型
但是在测试顶层文件中,对该端口的赋值为1’b1,如图4.7所示,这样在编译时可以通过,但是在开始仿真时会报错。于是对该代码进行了修改,修改方式如图4.8所示,新建一个wire变量,将其作为三态门,连接到HOLD_DQ3,问题解决。
图4.7 源程序
图4.8 修改程序
五、 检查仿真结果
通过查阅芯片的用户手册,向FLASH芯片发送相关指令。DQ0信号为输入FLASH芯片信号,DQ1为FLASH芯片输出信号。
向flash芯片发送的第一个命令为0x06,功能为写使能,如图5.1,可以看到正常按照时序发送指令。
图5.1 写使能命令
第二个命令为擦除指令0xD8,以及制定写入Block的地址和写入数据容量大小等。如图5.2所示:
图5.2 擦除指令
第三个命令为读寄存器是否繁忙,指令为0x05,此时flash芯片将繁忙状态寄存器的值反馈,DQ1为反馈数据。如图5.3所示:
图5.3 检测是否繁忙
到此,便完成了FLASH芯片的仿真过程。
六、 心得体会
从开始的不会下载仿真模型到成功仿真出结果,期间遇到了很多问题,但是把一个一个的问题进行解决,坚持下去,也就没什么了。遇到问题及时咨询同事,多去网上查查资料,要敢于尝试,可能会走弯路,但是就算这次做错了,那下次就不会再犯相同的错误了。
各位FPGA爱好者们,我后续还会更新一些在学习FPGA的过程中总结的心得,欢迎大家一起学习讨论。如果本篇文章中有你不理解的地方,欢迎找我提问!
本文来自星空下投稿,不代表胡巴网立场,如若转载,请注明出处:https://www.hu85.com/348358.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 xxxxx@qq.com 举报,一经查实,本站将立刻删除。