系统运行程序的时候,其实并没有在FLASH上直接运行,这点和MCS51单片机有很大的不同,因为在FLASH上运行程序会读取FLASH,而读取FLASH的时间远远长于读取SRAM或SDRAM 的时间,因此我们还需要一个运行程序和装载数据的存储器。
下面让我们来实现它:
继续在左边原件栏中寻找原件模块,双击On-Chip Memory(RAM or ROM)选项,加入FPGA内部的RAM单元来做程序运行的RAM。
上图是一个缺省参数,可以把TOTAL MEMORY SIZE 改为8Kbytes以便以后运行稍微大点的程序。
确定参数无误后,点击FINISH。
现在我们有了保存程序的EPCS和运行程序的RAM,也就完成了存储器的构成。
6.3. 添加控制LED的PIO
拥有了CPU和存储器,只剩下了IO口了,这里我们使用PIO控制模块来控制外部的LED灯。
找到OTHER下面的PIO选项,如上图
使用8bit宽度(我们有8个LED灯,与IO口线一一对应),方向选择输出口Output ports only
点FINISH确定
7. 设置必要的参数
7.1. 设置时钟
我们使用系统缺省的50MHz来运行CPU,所以这里可以不用修改,如果以后需要尝试修改,可修改下面红色框图中的内容:
7.2. 对模块进行改名
用鼠标右键点击目标栏中的各个选择的模块,这时会弹出一个菜单,选择RENAME即可改名。
改后的名字,可做参考,但绝对不能有中文和空格(包括其他标点符号,连字符除外)以及数字作为开头!!这和C语言的命名规则相同,这些名字最后要转换为C语言里面的宏名。
7.3. 自动规划地址和IRQ号
为了避免模块在删除和添加过程中造成的地址空洞或地址相互覆盖,建议做好系统后,完成一次自动规划地址和IRQ号,如下两图所示:
点击Auto-Assign Base Addresses完成自动地址规划
点击Auto-Assign IRQs自动完成IRQ号码的规划
7.4. 设置正确的复位地址和异常地址
点击NIOSII MORE “MYCPU” Settings选项页:
上图是缺省状态下的分配表,这个表是不正确的,无法完成断电后系统的启动工作,我们需要做如下设置:
点击MEMORY MODULE下的RAM项目,选择EPCS_CONTROLLER,如下所示: