2.1 开发概述和FPGA逻辑设计

2024-04-27 04:58

本文主要是介绍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接收机板卡,还可以对参考设计进行实际调试、优化、修改,甚至彻底重新设计。凡此种种,就是本章所称的开发。

\qquad Altera还在其网站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 从参考设计开始

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

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

\qquad HD-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软件开发”等文档。

\qquad SOPC 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 AGRS_GP_1项目中的SOPC系统组件

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

2.1.2 顶层模块和复位模块

\qquad AGRS_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-2 顶层模块AGRS_GP_1原理图

图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-3 EP4CE22芯片引脚分配

图2-3 EP4CE22芯片引脚分配

2.1.4 时钟信号

\qquad AGRS_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-4 FPGA时钟系统

图2-4 FPGA时钟系统

这篇关于2.1 开发概述和FPGA逻辑设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/939572

相关文章

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与