2.1 开发概述和FPGA逻辑设计

\qquad在HD-GR接收机中,微处理器是软核类型的(NIOS II),在一片Altera FPGA (U1)中分配。NIOS II软核及其软件与基带硬件逻辑一道共享这片FPGA资源。因此,HD-GR接收机中的很大一部分可以在一个公共平台上进行创建和编程。Altera为FPGA硬件逻辑设计和NIOS II软件编程这两个紧密联系的领域提供了一个基于PC的开发环境:

  • Altera Quartus II FPGA开发包,包括:逻辑综合、布局和走线、时序分析、信号跟踪机制、等等。这是一个功能丰富的系统,为设计者提供了一个从HDL源码到硅片产生的集成平台。
  • NIOS II集成开发环境(IDE),它的前身是许多软件开发员熟悉的Eclipse平台。它允许编译和调试嵌入式处理器NIOS的C和C++源代码。

使用这些开发工具,你可以对HD-GR接收机的参考设计进行编译、连接、逻辑/软件仿真;如果你拥有一套HD-GR接收机板卡,还可以对参考设计进行实际调试、优化、修改,甚至彻底重新设计。凡此种种,就是本章所称的开发。

\qquadAltera还在其网站www.altera.com上提供了大量文档和支持。理解Quartus II软件的起点是下载并阅读手册(Altera Corporation Inc,2008)。NIOS软件开发环境也提供了类似的手册(Altera Corporation Inc,2008)。本章对如何将这些工具应用于HD-GR接收机板卡上予以一般性说明,但不涉及创建、配置Quartus II项目和构建、添加组件的具体步骤。

\qquad另外,本章不讨论基带数字化硬件(即2.3.4小节中的外围组件“GNSS基带模块”)的实现细节,也不讨论运行在NIOS II CPU中的基带控制软件和导航软件的具体实现,它们作为重点内容,将分别安排在随后两章讨论。

2.1.1 从参考设计开始

\qquadAltera Quartus II FPGA软件为逻辑设计提供了开发环境,包括设计、综合、布局、走线、时序分析、仿真、以及器件编程。有许多选项可以通过JTAG端口和I/O引脚来进行跟踪和调试设计。

\qquadQuartus II软件允许用户创建项目,所有逻辑文件(包括NIOS CPU和外围设备)都能以一种容易使用的层次结构指派到项目中。

\qquadHD-GP接收机提供了一个预先构建和经过测试的Quartus II项目。这个参考设计旨在展示如何将各种外围设备连接和集成到NIOS CPU中。它们可以加载到板中按原样运行,也可以复制和修改以添加或删除功能。有关如何通过JTAG口(JTAG)使用USB blaster将编译后的图像下载到Cyclone-IV FPGA (U1)中的信息,请参阅Quartus II开发手册。

\qquad这个参考设计的工程名为AGRS_GP_1,工程文件为AGRS_GP_1.qpf。AGRS_GP_1包含了HD-GP接收机能够连接到一个NIOS CPU中去的几乎所有信号选项,参见SOPC Builder配置界面(图2-1)中显示的系统组件。

\qquad硬件设计师使用SOPC Builder创建NIOS II系统CPU、外围设备、以及存储器,并为它们提供完善的软件描述信息。SOPC Builder所生成的软件开发包(SDK) 包括一个名为System.h的头文件,其中包含了这些描述信息以及相应的宏指令。软件通过使用这些宏指令对硬件进行访问。有关NIOS II系统设计和实践的细节可参考“NIOS II设计和实践”、“NIOS II软件开发”等文档。

\qquadSOPC Builder使用“组件”这个词描述系统中的硬件模块。在NIOS II软件开发文档中,SOPC Builder组件指的是器件,如:外围设备或存储器。每个外围设备或存储器用一个软件组件来描述,以允许描述一个通过Avalon总线连接到NIOS II CPU的用户接口。对此,“NIOS II外围组件”一节进行了更详细描述,并用GNSS基带模块给出了一个自定义外围组件的示例。

\qquad在图2-1所示的SOPC系统中,除主角NIOS II CPU和通用组件[System ID、定时器、时钟管理单元(ALTPLL) 、JTAG UART、以及EPCS控制器]外,还包括组件SDRAM控制器、GNSS基带模块、UART(RS232 Serial Port)、SPI (3 Wire Serial)、PIO等,“NIOS II外围组件”一节将专门讨论它们。

2.1 开发概述和FPGA逻辑设计

图2-1 AGRS_GP_1项目中的SOPC系统组件

2.1.2 顶层模块和复位模块

\qquadAGRS_GP_1工程的顶层模块为AGRS_GP_1(文件名AGRS_GP_1.v),复位模块为sys_ctrl(文件名sys_ctrl.v)。顶层模块AGRS_GP_1实例化了包括NIOS II CPU和sys_ctrl在内的次一级模块,实现了FPGA (U1)与外部信号的接口,并对模块信号进行了互连。复位模块sys_ctrl实现了系统延迟复位的逻辑。参见图2-2。

2.1 开发概述和FPGA逻辑设计

图2-2 顶层模块AGRS_GP_1原理图

2.1.3 引脚分配

\qquad图2-3中的引脚分配指定了HD-GR-1底板上的FPGA芯片(U1)的I/O引脚(第3列,Location)与顶层模块AGRS_GP_1接口信号(第1列,To)的连接关系,从而指定了接口信号与布线到芯片I/O引脚的那些底板信号之间的连接关系;其中,每个接口信号的名称对应于底板上某个器件的一个信号。

2.1 开发概述和FPGA逻辑设计

图2-3 EP4CE22芯片引脚分配

2.1.4 时钟信号

\qquadAGRS_GP_1项目使用来自射频前端HD-2769-2RF-2的16.368 MHz时钟信号(图2-3中的引脚max2769_1_clk)作为SOPC系统的输入时钟(clk)(参见图2-1中的Clock Settings)。虽然可以选择来自HD-GR-1底板的其它时钟作为SOPC系统的输入时钟,如:图2-3中的引脚clk1或clk2,但对于我们的基带逻辑而言,必须使用来自射频前端的正确时钟。在AGRS_GP_1项目中,FPGA内部的时钟连接情况如图2-4所示。16.368 MHz输入时钟也被馈送到使用向导工具SOPC Builder定义的一个FPGA片上锁相环(atlpll_0) 中。这个锁相环有三个输出(atlpll_0_c0, atlpll_0_c1, atlpll_0_c2),项目中都设置为输入的6倍(98.208MHz)。atlpll_0_c0用于驱动NIOS CPU和除SDRAM控制器(sdram)外的外围组件。atlpll_0_c1和atlpll_0_c2分别用于为sdram组件和底版上的SDRAM芯片(U72)提供时钟信号。atlpll_0_c1和atlpll_0_c2必须同频,但通常不同相(具有相位延迟),以保证NIOS CPU能够正确读/写SDRAM。项目中将atlpll_0_c2相对atlpll_0_c1的相位延迟设定为210°,这是对项目进行时序约束和分析后调整的数值。

2.1 开发概述和FPGA逻辑设计

图2-4 FPGA时钟系统