提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
由于 Cyclone4 系列内部 RAM 资源有限,特别是 EP4CE6 内部存储器只有 270Kbits。
所以NIOS II 的 onchip_ram 最大只能设置为 16384bytes,超过的话 FPGA 综合会出错。
而 且 在 编 写 程 序 时 必 须 在 Nios II => BSP Editer 设 置 里 勾 选 enable_reduced_device_drivers 和
enable_small_c_library,不然的话编译会出错,提示内存溢出。
所以很有必要为 NIOS II 增加 SDRAM 外存,首先需要在 SOPC 中增加 SDRAM 控制器。
一、SDRAM Controller
-
在 SOPC 界面左侧库列表中选择 Memories and Memory Controllers 下 External
Memory Interfaces 下 SDRAM Interfaces 里的 SDRAM Controller,并点击 Add。 -
我的开发板选用的是 W9864G6KH-6,根据器件资料把数据位宽改为 16,行地址改为12,列地址改为 8。
-
点击 Timing,根据资料更改如下:
这里我使用的系统的时钟是48M. -
点击 Finish,生成 SOPC
-
在 NIOS II 的 cpu 设置中把 Exception Vector 改为 sdram。
-
在顶层文件中例化 SOPC,我们可以看到 SOPC 生成的 SDRAM 信号
-
我们注意到 SOPC 没有生成提供给 SDRAM 的同步时钟,那么我们需要在 SOPC 之外给SDRAM 提供同步时钟。根据相关资料,SDRAM 的同步时钟应该要比 NIOS II 的时钟相位延迟 60 度。在这里我们调用 FPGA 内部锁相环来产生 SDRAM时钟。在 Quartus 环境下点击菜单 Tools,选中 MegaWizard Plug-In Manager。
-
PLL锁相环配置。
问题
一.SDRAM设置
在Nios II IDE 中下载时出现
Using cable "ByteBlasterII [LPT1]", device 1, instance 0x00
Pausing target processor: OK
Reading System ID at address 0x01001058: verified
Initializing CPU cache (if present)
OK
Downloading 00800000 ( 0%)
Downloaded 1KB in 0.0s
Verifying 00800000 ( 0%)
Verify failed between address 0x800000 and 0x8001FF
Leaving target processor paused
找不到SDRAM、地址不存在的错误。
原因是搞错了SDRAM的型号并查错了PDF,导致SDRAM控制IO错乱。