视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Quartus2_NIOS2_SOPC
2025-10-04 09:05:18 责编:小OO
文档
Quartus II 6.0使用简介

一、创建工程

1、启动Quartus II 6.0软件,选择菜单File->New Project Wizard…打开工程创建向导。设置工程保存路径、工程名称和设计顶层实体名称(本例中都设定为Example)。设定好之后点击下一步

2、这一步中可以添加已经设计好的文件,如果没有可以直接进入下一步:

3、选择具体的可编程逻辑器件。此处选择Cyclone系列的EP1C12Q240C8。

4、选择其他的EDA辅助设计软件,Quartus II 6.0在对工程综合编译时会自动生成相应的中间文件供辅助设计软件分析(可不选)。

5、一个新的工程创建成功。

二、新建VHDL文件

1、打开菜单File->New,选择Device Design Files->VHDL File

2、编写具体的程序内容(注意VHDL文件的书写格式)。此处以一个3-8译码器为例进行说明:

具体的程序内容如下:

*************************3-8译码器*************************************

--fuction:以拨盘开关作为数据输入端,用发光二极管表示译码后的信息;

-- datain(0)-datain(2) 分别为c'b'a对应拨盘开关上的1-3号键;

--第一部分:库、程序包声明(下面为使用最为广泛的几个库和程序包)

library IEEE;

use IEEE.STD_LOGIC_11.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

--第二部分:实体说明

entity example is  --实体名必须和工程创建时声明的名称“example”一致

    Port (datain : in std_logic_vector(2 downto 0);   --输入端口说明

            dataout : out std_logic_vector(7 downto 0)  --输出端口说明

);

end example;

--第三部分:结构体(描述设计系统的行为和结构,是设计系统的具体实现)

architecture Behavioral of example is

begin

process(datain)    --进程(并行运行)

begin

   case datain is   --CASE语句

when "111"=>dataout<="10000000"; --条件选择

when "110"=>dataout<="01000000";

when "101"=>dataout<="00100000";

when "100"=>dataout<="00010000";

when "011"=>dataout<="00001000";

when "010"=>dataout<="00000100";

when "001"=>dataout<="00000010";

when "000"=>dataout<="00000001";

when others=>dataout<="11111111";

   end case;

end process;

end Behavioral;

*****************************************************************

3、保存VHDL文件

注意:文件名须和实体名“example”一致,为example.vhd。

三、编译综合

1、运行Processing->Start->Start Analysis&Synthesis菜单项或直接点击工具栏图标,进行逻辑综合。如果有错误项,再针对性修改,进行逻辑分析,直到逻辑通过为止。

2、硬件引脚分配。运行菜单项Assignments->Assignment Editor或者点击工具栏图标,再将左边中间工具栏的图标按下,将图标按上,将右上角的图标按下,这样再右边的窗口中就能够看到设计程序的实体中声明的所有输入输出端口。如下图所示:然后电路板的硬件设计情况对3个输入端口和8个输出端口分配引脚号。

3、对设计进行全综合(逻辑综合、资源分配、生成汇编文件、时间分析)。运行菜单项Processing->Start Compilation或者点击工具栏图标。

四、下载程序。

运行菜单项Tools->Programmer或者点击工具栏图标。

(1)选择硬件下载方式。

点击图标弹出窗口

再点击创建下载方式

点击“OK”,下载方式创建成功。

(2)在MODE栏选择JTAG模式或者AS模式

(3)添加要下载的文件。JTAG模式对应*.sof格式文件,AS模式对应*.pof格式文件。并对要下载的文件在program/cnfigure栏划勾。

(4)点击图标下载程序(保证下载线已经将电脑并口和FPGA的下载口连接起来)。在右上角的Progress一栏可以观看到下载进度条。

(5)在硬件电路板观看程序运行的情况。

至此,已经介绍了一个工程从创建、程序描述、分析综合到下载的基本流程。当然除此之外Quartus II 6.0软件还有很多强大的功能,比如比VHDL文件更直观的设计输入方式:图形输入法;更多更详细的分析功能;嵌入式在线逻辑分析功能;更多的下载配置方式,比如EPCS系列专用配置芯片或单片机配置方式。此外,SOPC功能更是方便的为用户提供了可自定义嵌入式处理器的强大功能,用户可以根据需要在FPGA内部构建一个处理能力适当的CPU。这样,不仅仅同时发挥了FPGA和单片机的优势,还减少了外部电路的复杂性,提高了系统的稳定性、可扩展能力和运维的方便性。

下面将分别单独的介绍Quartus II 6.0软件部分其他功能的使用方法:

五、图形输入法

1、新建一个图形输入文件。运行菜单项File->New->Device Design Files->Block Diagram/Schematic File既能新建一个图形输入文件。

2、双击图形中的空白区域,将弹出常用元件库选择对话框,其中包括参数可设置的强函数元件库、MAX+plus库、基本逻辑元件库和用户自定义库等:

3、输入设计系统。这种图形输入法大大的简化了设计、修改和维护的难度,使设计过程更直观、更方便。下图为一个一位全加器的图形设计图:

4、一般以图形方式输入设计时,工程的顶层实体是图形文件。此时一般保证新建工程时为顶层实体起的名称要和图形文件名称一致。如果不一致时也可执行菜单项Project->Set as Top-Level Entity解决,否则工程在编译中会出错。

5、此后的编译综合、下载方法和前几节中说明的完全一样。

6、用户也可以将自己设计的VHD文件转换成图形输入符号输入到图形文件中。对要转换的VHD文件执行菜单项File->Creat/Update->Creat Symbol Files for Current File即可。然后在图形输入方式中的元件选择对话框中就能看到用户自定义的元件库,并可做为一个元件符号添加进图形设计系统中。

六、SOPC功能的使用

注意:必须在同时安装好Quartus II 6.0和Nios II IDE两个软件,并有完整的license.DAT,在这个前提下,才能完整的使用SOPC功能。

1、在新建或者已经打开一个工程的前提下,点击图标,软件会弹出Altera SOPC Builder窗口,然后给这个新的系统输入名称,如CPU_1。

2、创建新的电路板选项。在Altera SOPC Builder窗口中运行菜单项File->New Board Description将会弹出电路板描述对话框,用户可以根据实际情况选择配置,如添加Flash Memory等等。最后本例中将Board Description Name命名为example,然后选择Finish保存设置。

3、在Altera SOPC Builer对话框中的Target选择刚才创建的example电路板。

4、右边CLOCK框中系统时钟默认为外部50Mhz,用户需要根据电路板的实际情况来修改,尤其是时钟频率需要注意,因为将影响工程编译过程中的时间分析的准确性。

5、添加处理器。双击选项Altera SOPC Builder->Avalon Components->Nios2 Processor-Altera Corporation,然后在弹出的窗口中选择Nios2处理器,按照性能强弱一共有3种,功能越强、处理速度越快的处理器占用资源越多。

6、添加片上存储器。如图所示选择Memory->On-Chip Memory(RAM or ROM) 

在弹出的对话框中可以配置存储器类型(RAM或者ROM)、字长、存储空间大小等。此例中选择RAM、字长32bits、存储空间4Kbytes 

7、添加输入输出I/O口。在左边的系统元件框中双击选择Other->PIO(Parellel I/O),可以设置I/O口的宽度和输入输出方式,对于设置为有输入功能的I/O还可以设置中断功能以及触发方式。此例中添加一个8位长的输出口。

8、至此,已添加了处理器、存储器和输出I/O口,已经可以构成一个最小系统(注意:此系统中的仅有的一个I/O口名称为“pio_0”,在NIOS2 IDE中写软件时端口名称要对应一致,当然,如果系统中添加了多个I/O口时,用户可以分别自定义名称)。常用的其他模块还有Bridges->Avalon Tristate Bridge(三态桥,用于更方便高效的连接CPU和芯片外部的其他功能模块,要遵循一定的通信规则)、Communication->JTAG UART(一般用于系统调试和通信口)、Communication->SPI(3 Wire Serial)(SPI通信接口)、Communication->UART(RS-232 serial port)(RS-232通信接口)、Memory->EPCS Serial Flash Controller(EPCS控制器)、Memory->Flash Memory(Common Flash Interface)(外部普通FLASH控制器)、Memory->SDRAM Controller(SDRAM控制器)、Other->DMA(DMA控制器)、Other->interval timer(功能齐全的定时器,可设置初值、方向、看门狗等)、Other->PLL(Phase-Locked Loop)(片内锁相环控制器)  等等。此外用户还可以自己创建模块再添加入软核中。

9、分配地址和中断号。软件提供了自动分配功能:运行菜单项System->Auto-Assign Base Addresses和System->Auto-Assign IRQS即可。当然用户完全可以自由定义,此外模块名称可以重新命名、模块驱动时钟也可以改变(如果系统时钟框中有多个时钟的前提下)。

10、设置完System Contents,再设置Board Settings项。对每个模块都选择Assign in Quartus 2 Project即可。

11、设置Nios2 More”cpu_0 ”Settings。此处设置系统复位地址、中断地址起点等。用户要根据实际情况设置,此处默认即可。

12、编译生成处理器。选择System Generation->Generate。如果编译成功系统会提示SUCCESS;SYSTEM GENERATION COMPLETED.

13、至此,SOPC已经成功生成片内处理器,到这里还没有完。大家应该还记得图形输入法吧,现在我们新建一个图形输入文件,在模块选择框的Project目录下找到刚才新建的cpu_1模块并添加到右边的设计图纸中,如下图所示

然后分别给CLK口添加一个一位的输入I/O口,给out_port_from_the_pio_0[7..0]添加一个八位的输出I/O口,另外处理器还有一个reset_n输入口,此口是用来复位处理器的(低电平有效),此例中我接在高电平上,用户可以根据情况连接到电路板上的复位按钮上,如下图

14、保存工程、逻辑分析、根据时机电路板连接情况分配引脚编号,全综合。至此,片内系统的硬件部分就已经设计完毕,现在关闭Quartus2 6.0软件,打开NIOS2 IDE软件,开始片内系统软件设计部分。

NIOS 2 IDE使用例说

一、新建工程

1、运行NIOS2 IDE软件(在没有默认工作文件夹的情况下系统会提示选择工作文件夹路径),并运行菜单项File->New->Project,在弹出的对话框中选择Altera Nios 2->C/C++ Application。

2、在弹出的对话框中对工程名命名,选择文件路径(可默认),选择SOPC Builder System和CPU(之前在Quartus2 6.0中的SOPC功能配置的处理器系统,找到之前的文件路径并选择对应的PTF文件),另外NIOS2 IDE中还为用户提供了许多常用的工程模板,如果用户不需要就选择Blank Project,此例中选择Hello LED模板。

3、成功生成工程之后,用户可以看到生成的hello_led.c文件中的C程序。将程序中的注释文字全部去除之后,程序如下:

程序功能说明:此程序最后实现的功能是控制一排共8个LED灯逐个点亮的跑马灯,规律为每次只亮一盏灯,从右至左,再从左至右,如此循环。

#include "system.h"               //声明系统头文件

#include "altera_avalon_pio_regs.h"  //声明关于I/O口的寄存器和控制的头文件

#include "alt_types.h"             //声明定义数据类型头文件

#define LED_PIO_BASE PIO_0_BASE  //此句为外加的语句,程序后面有解释

int main (void) __attribute__ ((weak, alias ("alt_main")));   //声明入口函数

int alt_main (void)

{

  alt_u8 led = 0x2;     //变量声明,无符号整形,八位二进制

  alt_u8 dir = 0;

  volatile int i;

  while (1) 

  {

    if (led & 0x81)            //判断是否到边界

    {

      dir = (dir ^ 0x1);            //转换方向

    }

    if (dir) 

    {

led = led >> 1;     //向右点亮

    } 

    else 

    {

led = led << 1;     //向左点亮

    }

    IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led);    //此句程序的分析见程序尾的“注意”。

    i = 0;

while (i<200000) //延时程序,控制跑马灯的快慢

      i++;

  }

  return 0;                    //入口函数结束

}

注意1:程序中的“IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led);”,这是Altera自带的I/O模块中的控制函数之一,它的功能是将变量“led”中的值写到输出型I/O口“LED_PIO”上。对于I/O口的控制还有几个其他的控制函数,包含在程序声明的头文件altera_avalon_pio_regs.h中。在左边树形目录中可以找到此头文件:

打开此头文件,可以看到所有对I/O口的控制函数,包括数据的读入和输出函数、I/O口输入输出方向控制函数、中断模式控制函数、边沿触发模式控制函数。所有的控制方式都是通过对寄存器的读写来实现的,上面四种控制函数的寄存器地址分别为base、base+1、base+2、base+3(base代表的地址与在SOPC功能中配置系统时对添加的I/O口自动分配的地址一致,如果用户不记得了,可以翻到SOPC功能说明小节中查看)。

按照上面的控制思想,对于一个复杂的系统,比如添加了SPI、UART、DMA等等模块时,大家应该知道怎么去对他们进行读写等控制了。找对底层驱动函数,再对正确的寄存器进行读写就OK了。其他功能更强效率更高的模块的应用大家自己探索。

注意2:细心的人一定注意到了:在SOPC配置中添加的I/O口名称为“pio_0”,而在程序中的输出函数中输出口的名称为“LED_PIO”。其实这个地方只要在程序前面加一个宏定义“#define LED_PIO_BASE PIO_0_BASE(须大写)”即可,如果程序复杂的话,将程序中的每个“LED_PIO”都改为“PIO_0”可能比较直观(个人认为)。希望大家尝试着自己编写自己的模块、书写底层驱动程序和熟悉AVALON接口协议,这样对更深的认识和熟悉SOPC功能有很大的帮助。

注意3:对于一个复杂的系统,往往会涉及到系统资源的分配,比如存储资源的分配问题。这是用户可以运行菜单项Project->Properties在弹出的窗口中选择Associated System Library->System Library Properties…然后用户可以分别对程序空间、只读数据空间、可读写空间、数据堆空间、堆栈空间分配不同的存储区域。在此例中由于系统比较简单,而系统本身在配置时有且仅有“onchip_memory_0”,所以全部的数据都存在当中。

4、系统软件编译。运行菜单项Project->Build ALL。

注意:每次编译系统软件时都要先保存文件,保证编译的是最新修改后的程序。

编译成功会看到如下提示:

从中可以清晰的看到数据占用空间的大小(注意:编译完后系统软件所需空间大小不能超过硬件系统所能提供的空间大小,本例中分配的存储空间为片内RAM,大小4K)。

5、至此,片内系统的软件设计部分也完成了,剩下的问题就是将片内的硬件设计和软件设计下载到FPGA中去了。

由于本例比较简单,那就以本例为参考来解说。本例的特点是系统简单,需要占用的数据空间小,所有的数据都存在片上4K的RAM中,没有外部的FLASH、RAM等。下面要做的就是重新运行Quartus2 6.0软件打开硬件设计工程,然后再运行一次全综合,此时软件会自动将硬件设计和在NIOS2中写的软件设计一起编译,生成的SOF文件中包括了硬件设计和软件设计,最后只需在Quartus2 6.0中将SOF文件下载到FPGA中了。这时你就能直观的看到设计成果了。

此外,用户还可以将程序存在自动配置芯片EPCS中、也可以将程序部分和数据部分分别存在外部的FLASH和RAM中等等很多形式。NIOS2 IDE的TOOL菜单中就硬件下载和软件下载分别提供了多种下载方式,大家慢慢去体会他们的差别,根据实际情况选择合适的方法。

(此SOPC例程在FPGA实验箱上已经成功实现,但是在文档书写过程中难免解说得不够清楚)

以上文字所及是在使用过程中曾经遇到过的和一些容易失误的地方。此文中所选例子是很简单的,对于一个对SOPC有兴趣或者将来有可能使用到SOPC的人来说,还有很多东西值得去探索。软件中还有很多不常用的但是能提高效率的也比较有意思的功能,希望大家多多去了解,遇到问题时以积极的心态去解决,切忌浮躁。

                          下载本文

显示全文
专题