当前位置:首页 > SOPC复习纲要
一、基础题型
1、SOPC设计流程分为哪些基本步骤?
1 设计准备:方案论证、系统设计、器件选择等
2 设计输入:图形、文本、存储器、波形等Top-Down 3 设计编译:分析与综合、适配、编程、时序分析 4 设计仿真:功能仿真、时序仿真
5 器件编程:将设计处理的编程数据文件载入到PLD中 6 硬件测试:在开发系统中对设计的系统进行测试 2、软核、硬核、固核、IP概念与区别?
软核(Soft IP Core) 以HDL文本形式提交给用户,已经过RTL级设计优化和功能验证,但其中不含任何具体的物理信息。常用的CPU软核:Altera的Nios、Nios II
固核(Firm IP Core) 介于软核和硬核之间,除了完成软核所有的设计外,还完成了门级电路综合和时序仿真等设计环节。 硬核(Hard IP Core) 基于半导体工艺的物理设计,已有固定的拓扑布局和具体工艺,并已通过工艺验证,具有可保证的性能。常用的CPU硬核:ARM、MIPS、PowerPC、Intel x86、Motorola68000等。
集成电路IP:经过预先设计、预先验证、符合产业设计规范和设计标准,并具有相对独立且可以重复利用的电路模块或子系统,如CPU、运算器、放大器、存储器等。在支持SOPC设计的EDA工具软件中包含IP库。
3、简述支持SOPC技术的EDA工具软件的种类及特点? Quartus II: 是Altera公司的第四代可编程逻辑器件集成开发环境,提供了SOPC设计的综合开发环境,是SOPC设计基础,将设计、综合、布局、仿真验证和编程下载及第三方EDA工具集成在一个无缝的环境中,可以进行系统级设计、嵌入式系统设计和可编程器件设计。提供从设计输入到器件编程的全部功能。 SOPC Builder: 是功能强大的基于图形界面的片上系统定义和定制工具。SOPC Builder库中包括处理器和大量的IP核及外设。
Nios II IDE(集成开发环境) 是Nios II系列嵌入式处理器的基本软件开发工具。采用菜单界面方式开发与调试C/C++应用程序,提供多C/C++种应用程序模板和相应的头文件。所有软件开发任务都可以在Nios II IDE下完成,包括编辑、编译和调试程序。 直观、使用方便,编译与运行速度较慢。
Nios II SDK Shell(软件开发包) 采用输入命令进行编译检查、运行、调试C/C++应用程序。不够直观,但是编译检查、运行和调试速度较快。
Modelsim:Modelsim : 是一种快速又方便的HDL编译仿真工具。具有强大的数字和模拟仿真功能,在设计、仿真、测试和调试开发过程中,有一整套工具可供使用,而且操作灵活。Quartus II界面直接使用Modelsim对生成的HDL代码进行编辑、编译和功能仿真(不能编辑输入波形,需要编写测试程序完成初始化与输入)。 Modelsim不能指定器件、不能编程下载。
DSP Builder: Altera公司的数字信号处理开发工具,设计者可以Matlab软件中完成算法设计。在Simulink完成系统集成后,通过Signal Compiler模块生成在Quartus II软件中可以使用的测试文件(用于仿真检查)和硬件描述语言文件(用于编程下载)。 DSP Builder用途和特点: Altera公司的数字信号处理开发工具,设计者可以Matlab软件中完成算法设计。在Simulink完成系统集成后,通过Signal Compiler模块生成在Quartus II软件中可以使用的测试文件(用于仿真检查)和硬件描述语言文件(用于编程下载)。
4、简述DSP Builder 的用途和特点?
用途:帮助开发者完成基于FPGA的DSP设计,自动完成大部分的设计工程和仿真,直至把设计文件下载至FPGA中。特点:应用灵活,成本低,但在速度上比用硬件实现的DSP要慢很多。
5、试说明 Nios 2 的 IDE 和 SDK调试方式的区别? Nios II系统有两种调试方式:IDE和SDK
IDE调试方式面向对象,通过直观的软件界面上的菜单、按钮完成各种操作; SDK调试方式面向过程,通过执行各种命令完成程序的调试与运行。 6、简述 HAL 的用途及基于HAL的外围设备的编程方法? HAL的作用 HAL(硬件抽象层)为与硬件进行通信的程序提供简单的设备驱动接口。HAL的应用程序接口(API)是与ANSI C标准库综合在一起的,使用户可以用类似C语言的库函数访问硬件设备或文件。HAL作为支持Nios II处理器系统的软件包,为用户的嵌入式系统上的外围设备提供了与之相匹配的接口程序。
基于HAL的外围设备的编程方法 (1)标准输入(stdin)、标准输出(stdout)和标准错误(stderr)
这三个函数是最简单的控制I/O设备的方法。HAL系统库在后台管理stdin,stdout,stderr函数,它可以使用户通过相关通道发送和接收字符。用户可以通过在Nios II IDE中设置系统库的属性给每个通道分配一个具体的硬件设备,使用标准输入、标准输出和标准错误函数来控制外围设备。 (2)字符模式设备的通用访问方法(打开文件与写文件方式)除了用 stdin、stdout、stderr函数之外,字符模式设备还可以通过打开和写文件的方式进行访问。 7、试说明用户自定义IP核的步骤?
1编写IP文件 2 ip文件配置 3设置ip search目录 4添加ip 8、简述基于 Nios II与HAL的SOPC 系统软硬件开发步骤?
Nios II的硬件开发 1、在QuartusⅡ中新建一个工程 2、用SOPC Builder建立一个新的SOPC硬件系统 3、加入Nios II系统组件 4、调整SDRAM地址 5、CPU设置与系统生成 6、建立顶层设计文件生成Nios II硬件系统 7、引脚锁定 软件开发:1、新建软件工程 2、编译工程 3、调试工程 4、运行工程 9、SOPC Builder的组件库中通常有哪些成员? 答:提供了三个成员供选择:
①NiosⅡ/e(经济型)成员,具有占用最小逻辑的优化,占用600~700逻辑元件。 ②NiosⅡ/f(快速型)成员,具有高性能的优化,占用1400~1800逻辑元件。
③NiosⅡ/s(标准型)成员,在占用逻辑和高性能优化方面的性能居中,占用1200~1400逻辑件。
基本的SOPC系统大致可以分为FPGA、存储器、外围元件三个部分。FPGA部分的核心是Nios CPU CORE(CPU核),设计工作主要在FPGA部分进行。
CPU核 JTAG UART(JTAG通用异步通信总线) UART(通过串口与计算机通信) PIO口 Avalon三态总线桥(用于CPU与SRAM等器件相连) 片外SRAM Timer定时器 LCD液晶显示器 Flash存储器(用于掉电时保存信息) Flash控制器 SDRAM控制器 系统标识System ID组件(只读组件) 10、试说明引脚锁定的作用和方法?
作用: 用户需要进行引脚分配,使得编译器能把用户设计中的信号分配到目标器件上的特定引脚上。 方法: (1)采用导入引脚锁定文件的方法 Assignment——>Import Assignments,导入以.CSV为后缀的引脚锁定文件。此方法要求顶层设计图管脚名称与锁定文件一致。 (2)采用Assignments->Pins或Pin Planner工具。
Assignment——>Pins/Pin Planner/Assignment Editor中进行编辑设置 (3)编辑引脚锁定文件,再导入的方式。(当分配的引脚的数量比较多使用方便) File->New->Other Files->Tcl Script File
文件格式和内容如下:#Setup.tcl #Setup pin setting
[例5.1]编写C/C++程序,让DE2开发板上的18只红色发光二极管LEDR17~LEDR0依次向左移位发光。LEDR18.c
#include \int alt_main(void) {
int i,data; data=0x01;
for(i=0;i<18;i++) {
IOWR (LED_RED_BASE,0,data); data<<=1 usleep(100000); } }
count_binary.h LED18.c及其他程序所需头文件 #include “alt_types.h” #include
#include “altera_avalon_pio_regs.h”
[例5.2]编写C/C++程序,让DE2开发板上的9只绿色发光二极管LEDG8~LEDG0依次向右移位发光。LEDG9.c
#include \int alt_main(void) {
int i,data; data=0x100;
for(i=0;i<9;i++) {
IOWR (LED_GREEN_BASE,0,data); data>>=1 usleep(100000); } }
[例5.3]编写C/C++程序,让DE2开发板上的8只七段数码管HEX7-HEX0 以两屏显示sum的数据。HEX7.c
#include \int alt_main(void) {
int sum; while(1) {
sum=0x20060101;
IOWR (SEG7_DISPLAY_BASE,0,sum); usleep(100000); sum=0x00235959;
IOWR (SEG7_DISPLAY_BASE,0,sum); usleep(100000); } }
[例5.4]编写C/C++程序,用key变量读取DE2开发板上18只电平开关SW上的数据,并用七段数码管显示读出的数据。SW18.c
#include \int alt_main(void) {
int key;
key=IORD (SWITCH_PIO_BASE,0); IOWR (SEG7_DISPLAY_BASE,0,key); }
[例5.5]编写C/C++程序,让DE2开发板上的18只红色发光二极管LEDR17-LEDR0依次向左移位或依次向右移位发光,用按钮KEY0控制移位方向。button_1.c #include \int alt_main(void) {
int i, key, data; while(1) {
key=IORD(BUTTON_PIO_BASE, 0); if ( key & 0x01) {
data=0x01;
for ( i=0; i<18; i++)
{ IOWR (LED_RED_BASE,0,data ); data<<1;
usleep(100000); } } else {
data=0x020000;
for ( i=0; i<18; i++)
{ IOWR (LED_RED_BASE,0,data ); data>>1;
usleep(100000); } } } }
[例5.7]编写一个秒显示程序,利用usleep()函数实现1秒定时,定时结束后让秒计数器second加1,然后在DE2开发板的七段数码管上显示计数的结果。timer_1.c #include \int alt_main(void) {
int second;
usleep(1000000); second++;
IOWR (SEG7_DISPLAY_BASE,0,second); }
共分享92篇相关文档