这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
icore4tfpga_20 [2020/03/07 09:43] zgf 创建 |
icore4tfpga_20 [2024/04/10 11:26] (当前版本) zhaowenzhe [六、 实验步骤及实验结果] |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | | **银杏科技有限公司旗下技术文档发布平台** |||| | ||
+ | |技术支持电话|**0379-69926675-801**||| | ||
+ | |技术支持邮件|Gingko@vip.163.com||| | ||
+ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
+ | | V1.0 | 2020-03-07 | gingko | 初次建立 | | ||
+ | |||
+ | |||
===== 实验二十:基于单口RAM的ARM+FPGA 数据存取实验 ===== | ===== 实验二十:基于单口RAM的ARM+FPGA 数据存取实验 ===== | ||
行 9: | 行 16: | ||
- iCore4T 双核心板。 | - iCore4T 双核心板。 | ||
- | - Blaster(或相同功能)仿真器。 | + | - iTool A(或相同功能)仿真器。 |
- | - JLINK(或相同功能)仿真器。 | + | - USB Type C 线缆。 |
- | - Micro USB线缆。 | + | |
- Keil MDK 开发平台。 | - Keil MDK 开发平台。 | ||
- Quartus开发平台。 | - Quartus开发平台。 | ||
行 19: | 行 25: | ||
* RAM全称是Random Access Memory(随机存取存储器),是与处理器进行数据交互的存储器。既可向指定地址单元写入信息也可从指定地址单元中读取信息,掉电后数据丢失,属于易失性存储器。 | * RAM全称是Random Access Memory(随机存取存储器),是与处理器进行数据交互的存储器。既可向指定地址单元写入信息也可从指定地址单元中读取信息,掉电后数据丢失,属于易失性存储器。 | ||
* 单口RAM IP核是FPGA内部常用的一种存储单元,只有一组数据线和地址线,因此不能同时进行读写操作。其操控时序比较简单,以时钟上升沿作为触发事件,在上升沿到来前保证地址和数据稳定即可将数据准确的写入对应的地址单元中,读取时,也是如此。其读写时序如图20.1所示。 | * 单口RAM IP核是FPGA内部常用的一种存储单元,只有一组数据线和地址线,因此不能同时进行读写操作。其操控时序比较简单,以时钟上升沿作为触发事件,在上升沿到来前保证地址和数据稳定即可将数据准确的写入对应的地址单元中,读取时,也是如此。其读写时序如图20.1所示。 | ||
+ | * 20.1(a) 读时序图 | ||
{{ :icore4t:icore4t_fpga_20_1_a_.png?direct |20.1(a) 读时序图}} | {{ :icore4t:icore4t_fpga_20_1_a_.png?direct |20.1(a) 读时序图}} | ||
+ | * 20.1(b) 读时序图 | ||
{{ :icore4t:icore4t_fpga_20_1_b_.png?direct |20.1(b) 写时序图}} | {{ :icore4t:icore4t_fpga_20_1_b_.png?direct |20.1(b) 写时序图}} | ||
- | |||
* 本实验基于ARM+FPGA构架,通过SPI实现ARM与FPGA之间通信,以单口RAM作为FPGA内部的数据存储器,实现ARM对数据的读写功能。 | * 本实验基于ARM+FPGA构架,通过SPI实现ARM与FPGA之间通信,以单口RAM作为FPGA内部的数据存储器,实现ARM对数据的读写功能。 | ||
==== 四、 RAM IP核调用 ==== | ==== 四、 RAM IP核调用 ==== | ||
1、新建一个工程名为pll的工程,然后点击Tool ->Megawizard Plug-In Manager,如图20.2所示。 | 1、新建一个工程名为pll的工程,然后点击Tool ->Megawizard Plug-In Manager,如图20.2所示。 | ||
- | {{ :icore4t:icore4t_fpga_20_1.png?direct |图20.2}} | + | {{ :icore4t:icore4t_fpga_20_2.png?direct |图20.2}} |
2、在下面界面中保持默认,直接Next即可,如图20.3所示。 | 2、在下面界面中保持默认,直接Next即可,如图20.3所示。 | ||
- | {{ :icore4t:icore4t_fpga_20_2.png?direct |图20.3}} | + | {{ :icore4t:icore4t_fpga_20_3.png?direct |图20.3}} |
3、在该界面中选择单口RAM IP核、芯片类型、硬件描述语言类型及IP核相关文件存储位置,如图20.4所示。 | 3、在该界面中选择单口RAM IP核、芯片类型、硬件描述语言类型及IP核相关文件存储位置,如图20.4所示。 | ||
- | {{ :icore4t:icore4t_fpga_20_3.png?direct |图20.4}} | + | {{ :icore4t:icore4t_fpga_20_4.png?direct |图20.4}} |
4、在该对话框中设置数据位宽及RAM的存储深度,选择单时钟控制还是双时钟控制,本例程选择单时钟控制,如图20.5所示。 | 4、在该对话框中设置数据位宽及RAM的存储深度,选择单时钟控制还是双时钟控制,本例程选择单时钟控制,如图20.5所示。 | ||
- | {{ :icore4t:icore4t_fpga_20_4.png?direct |图20.5}} | + | {{ :icore4t:icore4t_fpga_20_5.png?direct |图20.5}} |
5、在该对话框中设置输出端口是否用寄存器缓存,本例程选择不缓存;增加读使能控制信号,这样方便对时钟的读写进行分时控制,如图20.6所示。 | 5、在该对话框中设置输出端口是否用寄存器缓存,本例程选择不缓存;增加读使能控制信号,这样方便对时钟的读写进行分时控制,如图20.6所示。 | ||
- | {{ :icore4t:icore4t_fpga_20_5.png?direct |图20.6}} | + | {{ :icore4t:icore4t_fpga_20_6.png?direct |图20.6}} |
- | 6、在此对话框保持默认设置,直接Nrxt即可,如图20.7所示。 | + | 6、在此对话框保持默认设置,直接Next即可,如图20.7所示。 |
- | {{ :icore4t:icore4t_fpga_20_6.png?direct |图20.7}} | + | {{ :icore4t:icore4t_fpga_20_7.png?direct |图20.7}} |
7、直接Next即可,如图20.8所示。 | 7、直接Next即可,如图20.8所示。 | ||
- | {{ :icore4t:icore4t_fpga_20_7.png?direct |图20.8}} | + | {{ :icore4t:icore4t_fpga_20_8.png?direct |图20.8}} |
8、该界面选择是否生成网表,默认为不选择,一般直接Next即可,如图20.9所示。 | 8、该界面选择是否生成网表,默认为不选择,一般直接Next即可,如图20.9所示。 | ||
- | {{ :icore4t:icore4t_fpga_20_8.png?direct |图20.9}} | + | {{ :icore4t:icore4t_fpga_20_9.png?direct |图20.9}} |
9、选择要生成的IP核相关文件,没特殊需求直接默认即可,如图20.10所示。 | 9、选择要生成的IP核相关文件,没特殊需求直接默认即可,如图20.10所示。 | ||
- | {{ :icore4t:icore4t_fpga_20_9.png?direct |图20.10}} | + | {{ :icore4t:icore4t_fpga_20_10.png?direct |图20.10}} |
==== 五、 代码讲解 ==== | ==== 五、 代码讲解 ==== | ||
行 73: | 行 80: | ||
==== 六、 实验步骤及实验结果 ==== | ==== 六、 实验步骤及实验结果 ==== | ||
- | 1、将硬件正确连接,如图20.11所示。 | + | * 1、将硬件正确连接,如图20.11所示。 |
- | {{ :icore4t:icore4t_fpga_20_10.png?direct |图20.11}} | + | {{ :icore4t:icore4t_ide_1_37.jpg?600 |图20.11}} |
- | 4、打开putty串口调试工具,打开设备管理器查看对应的端口信息,在putty中打开对应的端口,用于打印串口信息及控制RAM读写; | + | * 2、打开putty串口调试工具,打开设备管理器查看对应的端口信息,在putty中打开对应的端口,用于打印串口信息及控制RAM读写; |
- | 5、将编写好的FPGA代码进行编译,并下载到开发板中; | + | * 3、将编写好的FPGA代码进行编译,并下载到开发板中; |
- | 6、将编写好的ARM代码编译,并下载到开发板中,putty工具中会打印相应的SPI通信相关信息(若想多次测试,查看结果在putty中输入“test”即可); | + | * 4、将编写好的ARM代码编译,并下载到开发板中,putty工具中会打印相应的SPI通信相关信息(若想多次测试,查看结果在putty中输入“test”即可); |
- | 7、观察实验现象及putty终端打印信息——FPGA_LED闪烁,putty终端打印如图20.12所示. | + | * 5、观察实验现象及putty终端打印信息——FPGA_LED闪烁,putty终端打印如图20.12所示. |
- | {{ :icore4t:icore4t_fpga_20_11.jpg?direct |图20.12}} | + | {{ :icore4t:icore4t_fpga_20_12.png?direct |图20.12}} |
==== 七、 拓展实验 ==== | ==== 七、 拓展实验 ==== | ||