DIY编程器网

标题: 基于FPGA的片上可编程系统(SOPC)设计之:典型实例-基于NIOS II处理器的“Hello LED” ... [打印本页]

作者: admin    时间: 2014-10-12 16:33
标题: 基于FPGA的片上可编程系统(SOPC)设计之:典型实例-基于NIOS II处理器的“Hello LED” ...
        8.4  典型实例14:基于NIOSII处理器的“Hello LED”程序设计

        8.4.1  实例的内容及目标

        1.实例的主要内容

        本节旨在通过给定的工程实例——“Hello LED”来熟悉Altera软嵌入式系统的软硬件设计方法。同时使用基于Altera FPGA的开发板将该实例进行下载验证,完成工程设计的硬件实现。本节主要讲解下面一些知识点。
        ·  Quartus II SOPC Builder使用方法。
        ·  NIOSII IDE软件开发流程。
        通过这些知识点,按照本节实例的实现过程,读者可以迅速掌握Altera软嵌入式软硬件设计方法。
         
        2.实例目标

        通过详细的流程讲解,读者应达到下面的目标。
        ·  熟悉Quartus II SOPC builder使用方法。
        ·  熟悉NIOSII IDE软件设计方法。
         
        8.4.2  实例详解

        本实例使用图解的方式将整个流程一步一步展现给读者,使读者能够轻松掌握开发的流程。
         
        本实例重点在于熟悉使用QuartusⅡ和SOPC Builder来创建一个NiosⅡ嵌入式处理器系统,并通过软件编程实现对实验板上面的LED灯的控制,具体实现过程如下。
        (1)新建工程。
        新建一个工程目录“sopc_led”,在此目录下建立一个名为“sopc_led”的Quartus II工程,并新建一个顶层图,保存于工程中。
        (2)SOPC Builder定制NIOSII处理器。
        用SOPC Builder定制NiosII处理器及其外设。打开“Tools”/“SOPC Builder”,如图8.30所示。
             

        图8.30  打开Tools--SOPC Builder

         
        指定系统名字,本例中我们输入niosii_c。单击“OK”按钮进入SOPC定制界面。
       

        图8.31  SOPC Builder界面

         
        为“Target”选择“Unspecified Board”,为“Clock(MHz)”选择时钟频率为50.0,为“Target Device Family”选择目标器件系列为Cyclone。
        在SOPC定制界面的左边,我们可以看到有很多功能模块,用户可以按照需要将这些模块添加到所设计的系统中。
         
        首先,我们需要一个CPU。选择“NiosII Processor”/“Altera Corporation”,弹出Altera NiosII对话框,我们选择一个经济型的CPU核,即NiosII/e,如图8.32所示。
       

        图8.32  加入NIOSII CPU

         
        单击“JTAG Debug Module”标签页,选择第一级调试支持Level1:特点是占用逻辑资源少,编译速度快,不包括缓存,如图8.33所示。
       

        图8.33  设置CPU调试模型

         
        单击“Finish”按钮完成NiosII CPU的配置工作。项目中会增加一个NiosII处理器,名字为cpu_0,为了简便起见,没有将它改名。改名的方法是:单击右键,选择“Rename”,输入名字后回车即可,如图8.34。
       

        图8.34  定制CPU完成图

         

        (3)SOPC Builder定制JTAG串口。
        在左侧器件池中双击“JTAG UART Interface”,使用默认参数设置,如图8.35所示。
        它是NiosII系统嵌入式处理器新添加的接口元件,通过内嵌在Altera FPGA内部的联合测试行动组(JTAG)电路,在PC主机和FPGA之间进行串行字符流通信。特点是在运行时在调试区输入信息可以与FPGA进行交互。
         
        (4)SOPC Builder定制计时器。
        在左侧器件池中双击“Interval Timer”。定时器对于HAL系统库中的器件驱动非常有用,比如JTAG UART驱动使用定时器来实现10s的暂停。选择“Interval Timer”,在设置向导中周期选择1 msec,预设置中选择Full-featured,如图8.36所示。
              

         图8.35  JTAG UART参数设置                图8.36  计时器设置

         
        (5)SOPC Builder定制外部Flash。
        在左侧器件池中双击“Compact Flash Interface”。在“Presets”中选自定义Custom,地址宽度21bits,带宽16bits。由于Flash是通用设备,所以时序标签使用默认设置。如图8.37和8.38所示。
           

        图8.37  Flash带宽设参数置界面       图8.38  Flash时序参数设置界面

         
        (6)SOPC Builder定制外部SDRAM。
        通常的系统都需要用户指定一个内存空间,这个内存是指RAM,可以是片上的,也可以是片外的SDRAM或SRAM等。如果用户程序较大,超出了FPGA所能定制的最大片上RAM容量,则也可以将程序放在SDRAM中运行。在左侧器件池中双击“SDRAM controller”。
        在“Presets”中选择“micron MT48LC4M32B2-7 chip”,其他的参数设置可以使用系统的默认选项,如图8.39所示。
         
        (7)SOPC Builder定制外部RAM总线。
        添加外部RAM总线(Avalon Tri-State Bridge)。软件使用Avalon接口来连接片上元件和Avalon主从端口。
            

        图8.39  SDRAM参数设置

         

        在Nios开发板上,要实现Nios系统与FPGA片外存储器通信,就必须在Avalon总线和连接外部存储器的总线之间添加一个桥,这个桥就是Avalon三态总线,如图8.40所示。
       

        图8.40  添加外部RAM总线

         

        (8)SOPC Builder定制串行通信设备UART。
        通用串行总线RS-232协议是我们最常用的通信协议,所以把它也添加到我们的系统里。注意选择所需的数据帧格式,如图8.41所示。
         

        (9)SOPC Builder定制LCD液晶模块。
        使用标准16027字符型液晶显示器。
         
        (10)SOPC Builder定制system id。
        在SOPC Builder中使用默认定制的system id。
         
        (11)SOPC Builder定制PIO。
        添加4个LED和输入设备按键开关PIO,这是一个标准SOPC一般所需要的设备。
         
        (12)SOPC Builder指定基地址和中断编号。
        首先修改Flash的基地址为0x00000000,之后在Flash上单击右键锁定基地址,如图   8.42所示。
       

        图8.41  串行通信设备UART参数设置

       

        图8.42  锁定Flash基地址

         

        然后,选择“System”/“Auto-Assign Base Addresses”,让系统自动分配基地址,如图8.43所示。
       

        图8.43  自动分配系统设备地址

         
        最后,选择“System”/“Auto-Assign IRQs”,让系统自动分配中断,如图8.44所示。
       

         

        (13)SOPC Builder NIOSII CPU其他设置。
         
        单击“Nios II More “cpu_0”Settings”选项卡,进行处理器设定。在本实例中,将“Reset Address”修改为“ext_flash”,“Exception Address”修改为“sdram”,“Break Location”使用默认值,如图8.45所示。
       

        图8.45  自动分配系统设备中断编号

         
        (14)生成软嵌入式系统IP核。
        单击“System Generation”选项卡,进行最后的设定并生成系统。选中“HDL Generate system module logic in Verilog”。如果需要仿真,也选择“Simulation Create ModelSim(tm) project files”,然后单击“Generate”按钮,执行系统生成的任务。
        然后,耐心地等待系统的生成。一般没有问题的话,可以看到系统提示“SUCCESS: SYSTEM GENERATION COMPLETED”。如果看到此信息,则说明系统被正确生成了。如果失败,请返回并检查、修改。
         
        (15)在Quartus II工程中添加上述NIOS系统。
        类似向Quartus II工程添加功能模块一样,将所定制的NiosII软核CPU添加到本例工程中。双击工程顶层图空白处,弹出“Symbol”对话框,在“Project”下面可以找到刚才建立的niosii_c模块,如图8.46所示。
       

        图8.46  在QuartusII中添加IP核

         
        单击“OK”按钮将其niosii_c添加到顶层图中。
         
        (16)在Quartus II工程中添加端口分配管脚编译。
        首先在Quartus II中将NIOS等端口添加至工程中,并为工程添加相应的管脚约束,然后即可对工程进行编译。
         
        (17)设计该工程软件。
        首先在Altera SOPC Builder中,点击Run Nios II IDE,启动Nios II IDE,如图8.47所示。
       

        图8.47  打开NIOSII IDE软件

         
        接下来我们要设计该工程的软件。运行Nios IDE,在Nios II IDE中,选择“File”/“New”/“Project”选项,开启“New Project”对话框,选择“C/C++Application”,如图8.48所示。
       

        图8.48  新建软件工程

         

        然后单击“Next”按钮,进入下一步,在模板中选择“Hello LED”,如图8.49所示。
        单击“SOPC Builder System”右边的“Browse”按钮打开目录对话框,从该工程目录下找到“niosii_c.ptf”,因为NiosII IDE必须从这个文件获取该系统的相关信息。单击“Finish”按钮,即建立一个名为Hello_LED_0的模板。
         
        打开项目中的文件:hello_led.c,根据需要进行修改。在本实例程序中,“PIO_0_BASE”名称中的“PIO_0”应改为SOPC Builder定义时的名称,如图8.49中的“Hello_LED_0”。
         
       

        图8.49  采用设计模板

         
        (18)编译软件。
        右键单击“hello_led_0”,在弹出的菜单中选择“Build Project”。(为使编译过程更加顺利,此时最好关闭杀毒软件和其他占用电脑资源较大的软件)。
         
        如果无误,可以看到以下信息:Build completed。如果看到了这条提示,表示软件编译成功,可以看到程序占用空间等信息。
       

         
        (19)下载验证。
        最后我们还要回到QuartusⅡ里面选择“Tools”菜单里面的“Programmer”,下载整个配置到FPGA中去。
        然后在NiosII环境中单击“Run As NiosII Hardware”按钮将C程序下载到实验板中。
        本实例最终的硬件实现现象是led跑马灯。
         
        8.4.3  小结

        本节讲解了一个完整的软嵌入式设计流程。虽然此实例实现的功能比较简单,但对于初学者来说,是一个不错的入门实例。其中硬件设计部分(SoPC builder)包括开发板上所有设备,以后读者可以在此硬件平台上建立多个软件运行。




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2