IP例化和几个基于FPGA芯片实现的Demo工程分享
Memory type选择简单双口ram,memory size设置位宽8bit深度1024。
设置完成后,生成的module声明如下。(完整模块可参考代码)
然后编写顶层文件并且在顶层例化PLL和RAMA、RAMB。
顶层文件中主要是对ram的输入口进行时序操作,包括ramA、ramB的读地址,写地址、使能信号和输入输出数据,详细代码笔记中不再赘述,可以直接参考代码。
可综合模块编写完成后,编写仿真模块并使用仿真软件进行仿真。
由于本次工程使用到了安路的IP库,因此也需要在modelsim中添加相应的安路仿真库,添加方法如下:
首先在modelsim的安装目录下面编辑modelsim的初始化文件modelsim.ini,右键属性后,将它的只读属性取消,然后用文本文件(本工程使用的是notepad++)编辑。
在modelsim.ini的[library]列表下添加安路的仿真库文件目录,安路所有的仿真库文件都在安路的编译软件TD安装目录下的sim文件夹中,此处将其所有的库文件都复制进了modelsim的文件夹里,若不复制,也可直接输入安路文件夹的路径。
保存后退出,打开modelsim并创建工程,编译通过后,进入仿真步骤,在simulate状态栏下选择start simulate,如下图:
选择后进入到如下页面:
选择仿真的顶层并且关闭优化选项。
同一个窗口打开libraries页面并在search libraries栏右侧选择add,下拉列表选择对应的ef3的库文件。
设置完成后点击OK进入仿真即可。
本次实验中遇见问题和调试如下:
01
刚开始pll没有输出信号,因此打开了pll查看波形发现pll波形如下:
发现是置位了reset信号导致的,查看代码发现如下:
复位信号直接连接到了pll的置位信号,由于复位信号是低电平有效而置位信号是高电平有效,因此导致了pll一直处于复位的情况。更改后,直接将pll复位信号置0,代码和仿真结果正常,如下所示:
02
PLL问题解决后,观测数据整体读写情况。
初步观测可以发现,rama读使能信号只转变了一次,而ramb的读使能始终未能跳变,返回代码查看发现:
逻辑判断时未将rama的写使能信号置1的条件写出来。
ramb的写使能同理:
修改后,代码如下:
波形仿真如下:
粗看基本符合rama、ramb交替读写的功能,观测rama、ramb时序交替细节。
在rama和ramb写使能信号转换时,发现空了一拍,再查看代码,发现rama、ramb写使能在条件判断时,使用的判断逻辑是不一样的,导致ramb_wren的置位会在rama_wren置位后的下一拍进行。
因此更改ramb_wren的判断条件,使之与rama_wren的一样,都以写地址为条件判断再仿真。
可观测到,时序正常。
quick start & GPIO Demo
本次demo实现功能如下:FPGA控制LED D1闪烁,MCU控制LED D2常亮。
图片新闻
最新活动更多
-
即日-11.13立即报名>>> 【在线会议】多物理场仿真助跑新能源汽车
-
11月20日火热报名中>>> 2024 智能家居出海论坛
-
11月28日立即报名>>> 2024工程师系列—工业电子技术在线会议
-
11月29日立即预约>> 【上海线下】设计,易如反掌—Creo 11发布巡展
-
11月30日立即试用>> 【有奖试用】爱德克IDEC-九大王牌安全产品
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论