用户工具

站点工具


niosii_基于内部ram建立第一个软核
银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-07-03 gingko 初次建立

实验十八:基于内部RAM建立第一个软核

一、 实验目的与意义

  1. 掌握NiosII软核建立和使用方法。
  2. 掌握QuartusII的使用方法。

二、 实验设备及平台

  1. iCore4 双核心板点击购买
  2. Blaster(或相同功能)仿真器点击购买
  3. JLINK(或相同功能)仿真器。
  4. Micro USB线缆。
  5. Quartus开发平台。
  6. 电脑一台。

三、 实验步骤

1、打开QuartusII新建工程。 图18-1 2、按下图填写工程信息。然后点击Next。 图18-2 3、直接点击Next 图18-3 4、选择芯片系列和型号,CycloneIV E,封装为FBGA,引脚数为484,速度等级为8,芯片具体型号选择为EP4CE15F23C8。如下图,然后点击Next。 图18-4 5、按下图选择仿真工具,然后Next。 图18-5 6、这一步显示新建工程的一些信息摘要,点击Finish完成。 图18-6 7、至此一个新的工程就建立好了,但工程是空的,还需加入文件,接下来来建立顶层设计文件。 图18-7 8、点击菜单栏→New。 图18-8 9、在弹出的对话窗中选择Block Diagram/Schematic File,然后点击OK。 图18-9 10、在QuartusII主界面中出现Block1.bdf文件,如下图。 图18-10 11、点击Save As保存。 图18-11 12、使用默认名字保存即可。 图18-12 至此,QuartusII工程和顶层设计文件都已建立完成,接着设计nios软核。

13、点击菜单栏中的Tool→Qsys。 图18-13 14、弹出以下窗口。 图18-14 15、接下来添加IP核,在左边的Library里,选择Embeded Pocessors→Nios II Processor,点击Add…添加。 图18-15 16、选择Nois II/f,点击Finish。 图18-16 17、在左边的Library里,选择Menories and Memory Controllers→On-Chip→On-Chip Memory,点击Add…添加。 图18-17 18、将Total memory size 设为10240,然后点击Finish。 图18-18 19、在左边Library里,选择Peripherals→Debug and Performance→System ID Peripheral,点击Add…添加。 图18-19 20、修改下图中System ID的数字,System ID的数字可以任意设置,默认值为0,本例改为1234,然后点击Finish。 图18-20 21、在左边Library里,选择Peripherals→Microcontroller Peripherals→PIO(Parallel I/O),点击Add…添加。 图18-21 22、将下图的Width(1-32 bits)中8改为1,本例只用一个IO口,在Direction中选择output。 图18-22 23、至此,IP核添加完毕,添加过的IP核都显示在窗中,如下。 图18-23 24、右击pio_o,点击Rename修改名字,改为led。 图18-24 25、在led下的external_connection后面,点击Double-click to,并修改为fpga_led,修改后如下图: 图18-25 26、双击clk_0进入下面界面,将时钟更改为25M,然后点击finish。 图18-26 27、接下来是IP核的时钟线、信号线的连接,在nios中,只需将时钟和clk_0的时钟连接,右击nios2_qsys_0下的clk,在第一项nios_qsys_0.clk Connection中点击选中clk_0.clk,选中之后查阅时可发现在其前有对号,如下图: 图18-27 图18-28 28、按照上述方法将onchipmemory、sysid、led三个模块的时钟线与clk_0连接,连接后如图所示: 图18-29 29、在onchipmemory中,信号线(s1)需要和nios的数据线、指令线都连接,如下图所示。 图18-30 30、在sysid中,信号线(control)和nios的数据线连接,如下图所示。 图18-31 31、在led中,信号线(s1)需要和nois的数据线连接,如下图。 图18-32 32、连线完毕后,修改Nios内核,双击nios2_qsys_0,弹出如下界面,按照下图红框内容修改,然后点击Finish。 图18-33 33、在菜单里选择System→Creat Global Reset Net Work,连接复位线。 图18-34 34、在菜单栏里选择system→Assign Base Addresses,分配基地址。 图18-35 35、至此如果没有错误,左下角将显示0个错误,0个警告。 图18-36 36、在菜单栏里选择File→Save As 保存,保存到工程所在的文件中,命名为ledcore。 图18-37 图18-38 37、在菜单栏里选择Generate→Generate。 图18-39 38、点击Generate进行编译。 图18-40 39、编译完成后,点击close即可。 图18-41 40、关闭内核Qsys窗口,在建立的顶层文件led.bdf的空白处双击。 图18-42 41、弹出如下窗口,选择在Qsys中生成ledcore,然后点击OK。 图18-43 42、拖动鼠标至合适位置,单击左键放置。 图18-44 43、再次双击顶层文件led.bdf的空白处,在弹出的下面窗口中,在name下方输入VCC,点击OK。 图18-45 44、把VCC放在ledcore的rest_rest_n引脚附近,并连线(把VCC和rest_rest_n连接将鼠标放在引脚处.会自动出现连线标志),然后右击选择Generate Pins For Sysmblen Ports自动生成管脚,如下图: 图18-46 45、生成管脚,如下图所示: 图18-47 46、双击ledcore的input管脚,将名字修改为CLK_25M,点击OK;然后用同样的方法将output管脚的名字改为FPGA_LEDB,修改后如下图所示: 图18-48 47、点击Assignment,选择Device。 图18-49 48、弹出如下界面,点击Device and Pin Options… 图18-50 49、点击左边分类栏中的Unused Pins,在右边下拉菜单里选择As input tri_stated。 图18-51 50、点击左边分类栏中的Dual-Purpose pins,在右边的Vaule各下拉菜单中,都选择Used as reguar I/O,点击OK。 图18-52 51、会到主界面,点击Assignment,选择Setting。 图18-53 52、点击Files,在ledcore→synthesis找到ledcore.qip文件,再点击Add添加。 图18-54 53、文件添加完成后,为输入时钟CLK_25M和输出管脚FPGA_LEDB分配引脚,回到QuartusII主界面保存,然后编译至此,Nois软核建立完成,并下载到FPGA。 图18-55 54、打开Nios软件选择正确路径(与QuartusII路径相同)点击OK。 图18-56 图18-57 55、进入Nois主界面后,按下图所示建立新的工程模板。 图18-58 56、点击下图红框处,打开内核(即刚才生成的ledcore.sopcinfo文件)。 图18-59 57、在Projict Name中,给工程命名为led,在Template一栏中选择Hello word small,点击finish。 图18-60 58、在新建工程led中找到hello_world.c,右键选择rename。 图18-61 59、命名为main.c,点击OK。 图18-62 60、双击main.c将其打开,删除原有内容,并输入以下内容:

/*
* FILE                                : main.c
* DESCRIPTION                         : This file is main files.
* Author                              : XiaomaGee@Gmail.com
* Copyright                           :
*
* History
* --------------------
* Rev                                  : 0.00
* Date                                 : 09/05/2012
*
* create.
* --------------------
*/
//-----------------Include files-------------------------//
 
 
#include "stdio.h"
#include "unistd.h"
#include "system.h"
 
//-----------------define-------------------------------//
#define _LED
 
	typedef  struct {
			 volatile  unsigned  long  int DATA;
			 volatile  unsigned  long  int DIRECTION;
			 volatile  unsigned  long  int INTERRUPT_MASK;
			 volatile  unsigned  long  int EDGE_CAPTURE;
	 }PIO_T;
 
 #ifdef _LED
 #define LED		 ((PIO_T  *)(LED_BASE|1<<31))
 #endif
//-----------------Function------------------------------//
 
 
int main()
{
		LED->DIRECTION = 1;
        while (1) {
        		   LED->DATA = 1;
                   usleep(500000);
                   LED->DATA = 0;
                   usleep(500000);
       }
 
      return 0;
 
}

61、编写完成后如下图所示: 图18-63 62、点击保存,然后编译led工程,右击led,选择build project。 图18-64 图18-65 63、右击led选择Run As→3NiosII Hardware。 图18-66 64、可能出现以下窗口,在Target Connection中点击Refresh Connection。 图18-67 65、点击Run运行成功后iCore4板子上有led闪烁现象。 图18-68

四、 实验现象

  • iCore4板子上蓝色led闪烁
niosii_基于内部ram建立第一个软核.txt · 最后更改: 2022/03/22 10:30 由 sean