您的当前位置:首页正文

基于FPGA的SOC技术毕业设计

2022-05-08 来源:步旅网
摘 要

随着半导体工艺技术的迅猛发展,可编程逻辑器件的集成度越来越高,FPGA中的逻辑资源也日益丰富,已达到百万门量级,这使得使用FPGA实现片上系统成为可能。基于FPGA的片上系统设计方案具有开发周期短、设计成本低、软硬件在系统可编程、系统设计灵活、可裁减、可扩充、可升级等优点,正在成为电子系统设计的研究热点。

随着设计与制造技术的发展,集成电路设计从晶体管的集成发展到逻辑门的集成,现在又发展到IP的集成,即SOC设计技术。SOC可以有效地降低电子信息系统产品的开发成本,缩短开发周期,提高产品的竞争力,是未来工业界将采用的最主要的产品开发方式。FPGA将现代的VLSI逻辑集成的优点和可编程器件设计灵活,制作及上市快速的长处相结合,使设计者在FPGA开发系统软件的支持下,现场直接根据系统要求定义和修改其逻辑功能。使一个包含数千个逻辑门的数字系统设计实现,采用FPGA技术,即可几天内完成。

本设计实现一种基于FPGA的SOPC解决方案,实现了系统的灵活性架构,以及参数化配置,便于系统的集成与设计修改,具有良好的可继承性与可移植性。

关键词:系统级芯片(片上系统);现场可编程门阵列;NiosⅡ

I

Abstract

With the rapid development of semiconductor technology,logic resources in FPGA have reached millions orders of magnitude,which make system-on-chip (SOC) based on FPGA has become possible. The design of SOC based on FPGA has many advantages,such as a short development cycle,low-cost,software and hardware in-system programmable,system design flexibility and can be trimmed,sealable,upgradeable,etc,Because of these,it has became a hot spot of research of electrical system design.

With the design and manufacturing technology, integrated circuit design from transistors to integrated development of integrated logic gates, and now developed to the IP integration, that SOC design technology. SOC can effectively reduce the electronic information system product development costs, shorten development cycles, improve product's competitiveness, is the next most important industry will use methods of product development. FPAG the modern logic of integration of the advantages of VLSI and programmable device design flexibility, faster production and market strengths combined to enable FPGA designers to develop system software support, on-site directly from system requirements definition and change its logic function. Make a logic gate that contains thousands of digital system design and implementation, using FPGA technology can be completed within a few days.

The Design and Implementation of FPGA-based SOPC solutions to achieve the flexibility of the system structure and parameters of configuration, ease of system integration and design changes, has a good inheritable and portability.

Key words:SOC;FPGA;Nios Ⅱ

II

目 录

摘 要 .................................................................................................... I Abstract .................................................................................................... II 1 绪论 ......................................................................................................... 1

1.1 课题背景 ............................................................................................................................ 1 1.2目的及意义 ......................................................................................................................... 1 1.3国内外研究现状 ................................................................................................................. 1 1.4论文章节安排 ..................................................................................................................... 2

2基于FPGA的SOC技术 ...................................................................... 3

2.1 FPGA简介 ......................................................................................................................... 3 2.2 SOC概述 ............................................................................................................................ 7 2.3 SOPC概述 .......................................................................................................................... 8 2.4软核与硬核 ....................................................................................................................... 11

3 系统硬件设计 ...................................................................................... 14

3.1 QuartusⅡ简介 .................................................................................................................. 14 3.2 SOPC Builder工具简介 ................................................................................................... 14 3.3嵌入式软核Nios II处理器.............................................................................................. 15 3.4 Nios II CPU的搭建 .......................................................................................................... 16

4 Nios ⅡIDE的软件设计 ...................................................................... 22

4.1 新建软件工程 .................................................................................................................. 22 4.2主程序设计 ....................................................................................................................... 23 4.3 UART串口 ....................................................................................................................... 24 4.4 LED控制 .......................................................................................................................... 26

结 论 .................................................................................................. 29

致 谢 .................................................................................................. 30 参考文献 .................................................................................................. 31 附 录1:英文文献 .............................................................................. 32 附 录2:中文文献 .............................................................................. 38 附 录3:程序代码 .............................................................................. 43

1 绪论

1.1 课题背景

EDA(Electronic Design Automation)技术是近几年迅速发展起来的计算机软件,硬件和微电子交叉的现代电子学科,涉及计算机操作系统、计算数学、电路理论和微电子学等领域,其内容广泛,综合性强。SOC技术以片上操作系统技术为核心,通过软硬件协同设计,实现设计的高度灵活性与整合性。本设计基于EDA设计的思想和方法,结合FPGA技术高度灵活性与模块化的特点,实现基本的SOC设计功能。通过软件仿真,得到功能的验证,并进行功能逻辑模块的整合,从而验证设计的可行性与可靠性。

使用FPGA进行SOC设计,对多数嵌入式设计工程师和FPGA工程师来说还并不熟悉,目前在基于FPGA上的SOC设计和应用的市场比例并不大,但是使用FPGA作为SOC设计开发具有很大的优势。

1.2目的及意义

FPGA中使用软核处理器比硬核更有优势,其优势在于,硬核实现没有灵活性,通常无法使用最新的技术。随着系统日益先进,基于标准处理器的方案会被淘汰,而基于NiosII处理器的方案是基于HDL源码构建的,能够修改以满足新的系统需求,避免了被淘汰的命运。将处理器实现为HDL的IP核,开发者能够完全定制CPU和外设,获得恰好满足需求的处理器。

使用FPGA设计实现SOC的最大的优势在于定制性[1],即为量身定做之意。设计嵌入式产品在选片过程中很难做到完全接近需求,且还要为在PCB板上添加CPU没有集成的外设资源而支付额外费用,但FPGA则不存在上述问题。在FPGA内,用户可以通过配置添加任意外设数量,剔除不需要的外设,也可以根据实际需要修改外设的功能,甚至自主设计独特的外设。做到完全的定制性,而不浪费资源。

相比传统的嵌入式CPU,FPGA内部的处理器核运算能力有一些不足,但嵌入式产品主要功能是控制,在这点上,FPGA可以使用纯逻辑控制方式,具有天然的优势,尤其是在实时性要求较高的场合,FPGA硬件的反应时间在ns级,这是传统嵌入式CPU所不能企及的。

1.3国内外研究现状

1.3.1国外研究现状

1994年摩托罗拉公司发布的Flex CoreTM系统(用于制作基于68000TM和Power PCTM的定制的微处理器)和1995年LSI Logic公司采用SOC微SONY公司进行设计,这可能是基于IP核完成SOC设计的最早报道。由于SOC可以充分利用已有的设计积累,显著地提高了ASIC的设计能力,因此发展非常迅猛,

1

引起了工业界和学术界的广泛关注。2000年,美国著名的半导体器件生产厂商Altera公司最先提出了基于可编程逻辑器件的片上系统解决方案,即SOPC技术,并同时推出了相应的开发软件Quartus II以及相应的IP模块库,2002年2月,Altera公司所推出的新一代可编程逻辑器件Stratix被认为是世界上第一个为50ns设计提供的真正意义上的系统级芯片[2]。

全球可编程逻辑器件市场份额占有最大的半导体器件生产厂商美国的Xilinx公司自1985年推出第一片现场可编程逻辑器件至今,就不断推出新器件和开发工具,面对SOPC技术的发展和需求,也有一套完整的SOPC系统解决方案,包括处理器IP核、外设接口IP核、总线架构以及开发工具等等,SOPC系统级芯片(SOC)解决方案被誉为半导体业最重要的发展之一。目前,国外SOC、SOPC的设计已经进入了主流设计应用阶段,无论是设计技术还是开发平台都比较成熟和完善,基于SOPC技术的产品应用也已开始投放市场。 1.3.2国内研究现状

在国内虽然设计产业发展很快,但是多设计是低层次的,还没达到系统级水平,在SOC技术与应用方面,我国与国外还存在较大的差距。

近年来,国家在这个领域投入了大量的人力、无力和财力,科技部于2000年启动了“十五”国家863计划超大规模集成电路SOC专项工作[3]。希望通过努力,初步建成具有自主知识产权、品种较为齐全和管理科学的国家级IP核库,并掌握具有国际先进水平的SOC软硬件协同设计、IP核复用和超深亚微米集成电路设计的关键技术。

2002年,“龙芯”CPU研制成功,为改变我国信息产业无“芯”的局面迈出了重要的一步。2005年4月18日中国科学院计算技术研究所成功研制出“龙芯二号”,最高工作频率为500MHz,其性能相当于800~1000M Pentium III,2006年5月又推出“龙芯2D”,工作频率为600~800MHz,性能相当于1.3~1.5G Pentium4,另外,多内核、多线程机制的“龙芯3号”将计划在“十一五”期间完成。

作为最能直接体现SOPC设计思想的Microblaze和Nios软核处理器IP核,在国外已经有了广泛的应用,但在国内,使用这两种软核的嵌入式设计、开发者甚少,还只是局限于高校科研和教学阶段,具体应用很少,批量产品生产更是无从谈起。

1.4论文章节安排

第一章:绪论,主要介绍课题的背景、目的意义和国内外研究现状。

第二章:基于FPGA的SOC技术,包括FPGA、SOC以及SOPC的简介。 第三章:系统硬件设计,介绍了Quartus II、SOPC Builder、NiosII处理器和NiosII CPU的搭建。

第四章:NiosII IDE的软件设计,包括新建软件工程、主程序设计、UATR串口和LED控制流程图及其代码。

2

2基于FPGA的SOC技术

2.1 FPGA简介

2.1.1 FPGA的定义

FPGA是英文Field Programmable Gate Array的缩写,即现场可编程门阵列,它是在可编程阵列逻辑PAL(Programmable Array Logic)、可编程逻辑器件PLD(Programmable Logic Device)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路ASIC(Application Specific Integrated Circuit)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数量有限的缺点。FPGA能完成任何数字器件的功能,上至高性能CPU,下至简单的74系列电路,都可以用FPGA来实现[4]。 2.1.2 FPGA的组成

FPGA器件在结构上,由逻辑功能模块排列为阵列,它的结构可以分为三个部分:可编程逻辑块CLB(Configurable Logic Blocks)、可编程I/O模块IOB(Input/Output Block)和可编程内部连线PI(Programmable Interconnect)。如图2-1所示[5],CLB在器件中排列为阵列,周围有环形内部连线,IOB分布在四周的管脚上。CLB能够实现逻辑函数,还可以配置成RAM等复杂的形式。

图2-1 FPGA的结构原理

FPGA中除了个别几个引脚外,大部分引脚都是与可编程IOB直接相连的,可根据需要,通过配置IOB,将管脚定义成输入端口、输出端口、双向I/O端口或带寄存器的I/O端口。每个CLB中都是由组合逻辑电路和存储电路(触发器)

3

构成,可根据需要将其配置成组合逻辑电路或时序电路,按照CLB模块的大小可将FPGA分为细粒度FPGA和粗粒度FPGA,细粒度FPGA逻辑功能块规模较小,资源可以充分利用,但连线和开关多,速度慢;粗粒度FPGA逻辑功能块规模较大,功能较强,粗粒度结构有利于EDA软件进行布局布线,优化器件的利用,提高器件的性能,但资源不能充分利用。为了能够将这些CLB灵活地连接成各种应用电路,在CLB模块之间的区域内配备了丰富的互联资源这些互联资源包括:不同类型的金属线,可编程的开关矩阵和可编程的连接点。

静态存储器的存储单元有很强的抗干扰能力和很高的可靠性,但掉电后存储器中的数据将丢失,因而每次上电以后必须重新给SRAM加载编程数据,加载过程是在FPGA内部的一个时序电路的控制下自动进行的,这些数据通常是存放在片外的EPROM中。

随着半导体技术的飞速发展和工艺技术的不断进步,新一代现场可编辑逻辑器件突破了传统FPGA密度和性能的限制,集成了许多满足系统级设计要求的新性能,这样一来使得FPGA就不仅仅是可编程逻辑模块,而且成为了一种系统元件。

2.1.3 FPGA的结构特点

新一代FPGA为实现系统级设计从软件和硬件两个方面创造了条件,其结构从系统集成、系统存储、系统时序和系统接口四个方面进行了完善以满足SOC的设计要求。

⑴系统集成

规模效应使得单片FPGA的价格十分低廉,丰富的软硬件IP资源集成,特别是微处理器能以IP硬核或软核的形式植入芯片内部,使得片上系统开发变得相对简单。 ⑵系统存储

系统级设计要求FPGA不仅具有可编程的逻辑功能块、I/O功能块和丰富的互连线资源,还必须提供第四种可编程资源,即片内块RAM。目前各种半导体器件生产厂商所生产的FPGA片内都集成了容量比较大的块RAM和分布式RAM(基于SRAM型的FPGA可以非常简单地实现片内分布式RAM)。这对提高SOPC系统的工作速度是极为有利的,因为片内处理器核访问片内存储器的速度要比访问片外存储器快好几倍。 ⑶系统时序

对于高密度的器件,时钟分配是一个非常棘手的问题。在系统级设计中,时钟脉冲相位差过大就会严重影响系统性能的提高。新一代FPGA器件中集成了独立的,完全由数字方式实现锁相的延时锁相环,它能轻易实现对系统时钟的倍频及分频,以及实现0°、90°、180°和270°的时钟相移输出。 ⑷系统接口

4

在深亚微米、超深亚微米时代进行高性能的系统级设计,设计者期望有不同的I/O标准,允许与各种类型的器件连接实现应用。如CPU、存储器、专用标准总线以及混合信号的接口,能提供工业标准、IEEE/JEDEC I/O标准等。在用FPGA进行SOC设计时,就必须提供这样的系统I/O接口,新型系列器件分别采用不同的技术,使得系统能与不同接口标准的外设实现快速连接。 2.1.4 FPGA的优点和缺点 1.FPGA的优点

FPGA现场可编程门阵列器件,顾名思义,是一种可由用户根据所设计的数字系统的要求,在现场由自己配置,定义的高密度专用数字集成电路。FPAG将现代的VLSI逻辑集成的优点和可编程器件设计灵活,制作及上市快速的长处相结合,使设计者在FPGA开发系统软件的支持下,现场直接根据系统要求定义和修改其逻辑功能。使一个包含数千个逻辑门的数字系统设计实现,采用FPAG技术,即可几天内完成。

通常归纳,FPGA主要优点如下:

(1)FPGA的用户现场可编程的特性大大缩短了设计实现周期,可以在很短的时间由设计工程师现场提供样机,使产品的上市时间大大缩短,适于现代的市场竞争需求。同时FGPA可以反复编程,重复使用,没有前期投资风险,且可以在开发系统中自接进行系统仿真,故也没有工艺实现的损耗,以致在小批量的产品应用场合,成本远低于门阵列和全定制ASCI。而且FPAG芯片在出厂之前都做过百分之百的测试,不需要设计人员承担风险,设计人员只需在自己的实验室里就可以通过相关的软硬件环境来完成芯片的最终功能计,所以它可做全定制或半定制ASIC电路的中的样片。FPGA是设计周期最短、开发费用最低、风险最小的器件之一。

(2)FPGA可以提供比PDL和EPLD器件更大的有效逻辑容量密度,不仅大大减少印刷电路板的空间,大大降低系统功耗;同时大大提高了系统设计的上艺可实现性和产品的可取性。它所能实现的功能也越来越强,同时也可以实现系统集成。

(3)FPAG内部有丰富的触发器和I/O引脚,而且FPAG采用高速CHMOS上艺,功耗低,可以与CMOS、TTL电平兼容。

(4)FPAG开发软件包中有各种输入工具和仿真工具,及版图设计工具和编程器等全线产品,电路设计人员在很短的时间内就可完成电路的输入、编译、优化、仿真,只至最后芯片的制作。当电路有少量改动时,更能显示出FPGA的优势。电路设计人员使用FPGA进行电路设计时,不需要具备专门的CI深层次的知识,FPGA软件易学易用,可以使设计人员更能集中精力进行电路设计,快速将产品推向市场。

正是由于FPGA的各方面相得益彰的优点和长处,使之近年来在通讯、航天、电脑应用、程序控制等多方面获得较好的应用。特别是通信、网络产品和专业图

5

像处理设备,FPAG都发挥着非常重要的作用。 2.FPGA的缺点

当然,FPGA本身也存在着一些明显的缺点。

⑴他的信号传输延迟时间不是确定的,在构成复杂的数字系统是一般总要将若干个CLB组合起来才能实现,而由于每个信号的传输途径各异,所以造成了信号传输延迟时间不等,这个不仅会给设计工作带来麻烦,而且也限制了器件的工作速度。

⑵由于FPGA中的编程书籍存储器是一个静态随即存储器结构,所以掉电后数据会丢失,因此,每次上电都需要重新加载编程数据,并需要配备保存编程书籍的EPROM或Flash,这些都给使用带来不便。

⑶FPGA的编程书籍一般是存放在EPROM或Flash中,而且要读出并送到FPGA的SRAM中,因而不便于保密。

⑷由于各半导体器件生产厂商之间技术的保密性,造成FPGA在结构和性能上会因厂商不同而略有差异,他们所开发的IP核包括微处理器及其它功能模块只能在各自的FPGA平台上应用,这对普通的SOPC开发人员来说,会造成很大的不便,因为我们只能选用某个厂商的FPGA开发条件及其相关的设计服务。 2.1.5 FPGA的发展与应用前景 1.FPGA的发展概况

FPGA器件起源于美国Xi1inx公司的创造,Xilinx公司于1985年推出世界上第一个FGPA器件。时至今日,FGPA己经历了十几年的发展历史。在这十几年的发展过程中,以FGPA为代表的数字系统现场集成技术取得了惊人的发展,现场可编程逻辑器件从最初的1200个可利用门,发展到90年代的25万个可利用门,乃至到本世纪初,国际上现场可编程逻辑器件的著名厂商Altera公司、Xilinx公司又陆续推出了数百万门至上千万门的单片FGPA芯片,将现场可编程器件的集成度提高到一个新的水平[6]。 2.FPGA的应用前景

随着FPGA性能的高速发展和设计人员自身能力的提高,FPGA将进一步扩大可编程芯片的领地,将复杂专用芯片挤向高端和超复杂应用。目前FPAG的发展趋势主要体现在以下几个方面:

(1)继续向更高密度、更大容量的千万门系统级方向迈进,大容量FPGA是市场发展的焦点。

(2)向低成本、低电压、微功耗、微封装和绿色化发展,采用深亚微米的半导体工艺后,器件在性能提高的同时,价格也在逐步降低。由于便携式应用产品的发展,对现场可编程器件的低压、低功耗的要求日益迫切。

(3)IP资源复用理念将得到普遍认同并成为主要设计方式,IP内核得到进一步发展,由于通讯系统越来越复杂,FGPA的设计也更加庞大,这促进了设计人

6

员对IP核的需求。各大厂家继续开发新的IP,并将提供“硬件”IP,即一些功能在出厂时就固化在芯片中。

(4)MCU、DSP、MPU等嵌入式处理器IP将成为FPGA应用的核心,SOPC时代将会到来,用户根据应用选择处理器和I/O,然后就可以编程自己的SOPC。由此,SOCP就进入了DSP/MUC的应用领域,成为普及的产品。随着FPAG规模不断变大,CUP,DSP,更大规模的存储器都已经或即将嵌入FPAG内,SOCP的时代,可能已经离我们不远了[7]。

2.2 SOC概述

2.2.1 SOC的定义

SOC的定义多种多样,由于其内涵丰富、应用范围广,很难给出准确定义。一般说来,SOC(System on a Chip)称为系统级芯片,也有称为片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统,并有嵌入软件的全部内容。同时它又是一种技术,用以实现从确定系统功能开始,到软硬件划分,并完成设计的整个过程。从狭义角度讲,SOC是信息系统核心的芯片集成,是将系统关键部件集成在一块芯片上。从广义角度讲,SOC是一个微小型系统,若把中央处理器(CPU)比作大脑,那么SOC就是包括大脑、心脏、眼睛和手的系统。国内外学术界一般倾向将SOC定义为将微处理器、模拟IP核、数字IP核和存储器(或片外存储控制接口)集成在单一芯片上,通常是客户定制或是面向特定用途的标准产品[8]。

20世纪90年代中期,因使用ASIC实现芯片受到启发,萌生应该将完整计算机所有不同的功能块一次直接集成于一颗硅片上的想法。SOC应由可设计重用的IP核组成,IP核是具有复杂系统功能的能够独立出售的VLSI块;IP核应采用深亚微米以上工艺技术;SOC中可以有多个MPU、DSP、MCU或其复合的IP核。

SOC中包含了微处理器/微控制器、存储器以及其他专用功能逻辑,但并不是包含了微处理器、存储器以及其他专用功能逻辑的芯片就是SOC。SOC技术被广泛认同的根本原因,并不在于SOC可以集成多少个晶体管,而在于SOC可以用较短时间被设计出来。这是SOC的主要价值所在——缩短产品的上市周期,因此,SOC更合理的定义为:SOC是在一个芯片上由于广泛使用预定制模IP而得以快速开发的集成电路。从设计上来说,SOC就是一个通过设计复用达到高生产率的硬件软件协同设计的过程。从方法学的角度来看,SOC是一套极大规模集成电路的设计方法学,包括IP核可复用设计/测试方法及接口规范、系统芯片总线式集成设计方法学、系统芯片验证和测试方法学。SOC 是一种设计理念,就是将各个可以集成在一起的模块集成到一个芯片上,他借鉴了软件的复用概念,也有了继承的概念。也可以说是包含了设计和测试等更多技术的一项新的设计技术。

7

2.2.2 SOC的一般构成

从一般来分,SOC含有:

1.逻辑核包括CPU、时钟电路、定时器、中断控制器、串并行接口、其它外围设备、I/O端口以及用于各种IP核之间的粘合逻辑等等;

2.存储器核包括各种易失、非易失以及Cacha等存储器;

3.模拟核包括ADC、DAC、PLL以及一些高速电路中所用的模拟电路。 2.2.3 SOC的特征

随着设计与制造技术的发展,集成电路设计从晶体管的集成发展到逻辑门的集成,现在又发展到IP的集成,即SOC设计技术。SOC可以有效地降低电子信息系统产品的开发成本,缩短开发周期,提高产品的竞争力,是未来工业界将采用的最主要的产品开发方式。虽然SOC一词多年前就已出现,但到底什么是SOC则有各种不同的说法。在经过了多年的争论后,专家们就SOC的定义达成了一致意见。这个定义虽然不是非常严格,但明确地表明了SOC的特征:

⑴实现复杂系统功能的VLSI; ⑵采用超深亚微米工艺技术;

⑶使用一个以上嵌入式CPU/数字信号处理器(DSP); ⑷外部可以对芯片进行编程; 2.2.4 SOC的实现方式

SOC的实现方式有两种,一种是以掩模ASIC为物理载体的实现方式,片上系统传统上一直都是用掩模ASIC去实现,但是掩模ASIC的最低定购量大,流片费用高,设计完成后如果不能满足要求,需要重新设计再进行验证,其结果是导致设计开发周期变长,产品上市时间难于保证,因此,这种方式只有在单片能分担流片费用的时候才适合采用,否则,开发成本让人无法容忍;另一种是以大规模现场可编辑门阵列FPGA(Field Programmable Gate Array)为物理载体的实现方式,使用FPGA作为物理载体进行芯片设计的技术称为可编程片上技术,即SOPC(System on a Programmable Chip)。可编程片上系统(SOPC)是一种特殊的片上系统,顾名思义,首先它是片上系统(SOC),即由单块芯片完成这个系统的主要逻辑功能;其次,它是可编程系统。具有灵活的设计方式,可裁减、可扩充、可升级,并具备软硬件在系统可编程的功能。想对于掩模ASIC的SOC,它还具有价格优势,因此,对于小批量、多品种的产品需求,SOPC往往是设计者的首选。

2.3 SOPC概述

2.3.1 SOPC的定义

8

SOPC:System-on-a-Programmable-Chip,即可编程片上系统用可编程逻辑技术把整个系统放到一块硅片上,称作SOPC。可编程片上系统(SOPC)是一种特殊的嵌入式系统:首先它是片上系统(SOC),即由单个芯片完成整个系统的主要逻辑功能;其次,它是可编程系统,具有灵活的设计方式,可裁减、可扩充、可升级,并具备软硬件在系统可编程的功能。 2.3.2 SOPC的特点

SOC的主要价值不在于它能集成多少个晶体管,而在于它能利用现有成熟的设计,在较短的时间内被设计出来,它只有在大批量应用时才采用,具有速度高、性能高的优点,但是它的缺点也很明显:首先,使用ASIC的试制和流片风险大、成本高、成功率不高,一旦制片后就不能再进行修改。其次,使用ASIC设计芯片系统时,由于微控制器、功能模块等IP式根据目标系统性能进行选择的,一旦选定,所选择的IP的性能就不能再修改,也就基本上决定了目标系统的性能,使得目标系统的性能优化空间相当狭窄,同时也使得设计完成后的目标系统硬件升级变得不可能。再有,就是这种方式的硬件设计只能是流于拼装和链接选定的硬件系统结构,指令不可更改,只能根据指令系统来进行编程。设计人员的创造发挥自由度狭小,限制了人的能动性在设计中应有的作用:FPGA相对于ASIC具有成本优势,而且已经发展成为系统元件,其特点是设计风险和设计成本低,灵活可编程,FPGA的可编程特性很好地弥补了SOC设计的不足。SOPC结合了SOC和FPGA各自的优点[9],基本特征是:

a) 以具有系统性能的FPGA为平台,至少包含一个以上的嵌入式处理

b) c) d) e) f) g)

器核(软核或硬核);

具有小容量的片内高速RAM资源; 丰富的IP Core资源可供灵活选择; 具有足够多的片上可编程逻辑资源;

具有处理器调试接口和FPGA编程接口共用或并存 可能还包含部分可编程模拟电路; 单芯片、低功耗、微封装;

2.3.3 SOPC主要设计技术

片上系统的主要设计技术可以简单地归纳为三点:软硬件协同设计技术,IP核资源复用技术和超深亚微米集成电路设计技术。超深亚微米集成电路设计技术是片上个系统的物理设计技术,在硬核的开发中,物理设计师硬核设计成败的关键。由于本文是在FPGA上进行SOC的研究和开发,主要是基于软核的开发和设计,所以以下重点对软硬件系统设计技术进行讨论。

开发一个电子系统,传统的做法是有项目的总工程师根据自己的知识和经验,对系统进行软硬件划分,然后交由软件和硬件两个独立的设计组,各自进行软件和硬件的开发,开发完成后才进行联合调试,在调试时如果发现有错,则要对硬件获软件进行修改或重新设计,这个过程要不断反复和迭代,直到调试成功

9

为止,其结果是开发周期变长,设计成不剧增,而在软硬件协同设计中,并行性是软硬件协同设计思想的核心,软件和硬件设计设计组不再是两个独立的设计单元,而是在设计之初便交织在一起,相互提供设计平台,相互作用,我中有你,你中有我,并行开发,并行的设计思想始终贯穿于整个设计之中。采用软硬件协同设计的好处是可以使软件设计者在硬件开发之初就接触到硬件,从而能更好地设计硬件驱动、应用程序、操作系统等软件,同时也可以使硬件设计者尽早接触软件、了解软件结构,从而为软件设计者提供高性能的硬件平台,减少了设计中的盲目性,缩短设计迭代周期。 2.3.4 SOPC技术主要应用方向

SOPC技术主要应用以下三个方向:

⑴基于FPGA嵌入IP硬核的应用。这种SOPC系统是指在FPGA中预先植入处理器。这使得FPGA灵活的硬件设计与处理器的强大软件功能有机地结合在一起,高效地实现SOPC系统。

⑵基于FPGA嵌入IP软核的应用。这种SOPC系统是指在FPGA中植入软核处理器,如:NIOS II核等。用户可以根据设计的要求,利用相应的EDA工具,对NIOS II及其外围设备进行构建,使该嵌入式系统在硬件结构、功能特点、资源占用等方面全面满足用户系统设计的要求。

⑶基于HardCopy技术的应用。这种SOPC系统是指将成功实现于FPGA器件上的SOPC系统通过特定的技术直接向ASIC转化。把大容量FPGA的灵活性和ASIC的市场优势结合起来,实现对于有较大批量要求并对成本敏感的电子产品,避开了直接设计ASIC的困难。 2.3.5 SOPC的是实现方法

SOPC是基于FPGA解决方案的SOC,它的实现方法一般有两种:一种是基于硬核的实现;另一种是基于软核的实现。

基于硬核的实现就是在FPGA中预先植入嵌入式微处理器核。为了减小整个系统的体积、功耗,提高系统的可靠性,可将Powerpc405、ARM或其它知识产权核,以硬核的方式植入到FPGA中,利用FPGA的可编程逻辑资源来构造嵌入式处理器的接口功能模块,进而构成片内系统。硬核在FPGA中的位置是固定的,也即是意味着在FPGA开发时,核的布局是不能改变的,这种实现方法最大有点事速度快,性能优,硬核本身不会占用FPGA的逻辑资源,但是基于硬核的FPGA解决方案也存在以下几方面的不足:

⑴由于此类硬核多是来自第三方公司,FPGA厂商通常无法直接控制其知识产权费用,从而会倒是FPGA器件的价格相对偏高。

⑵由于硬核是预先植入的,设计者无法根据实际需要改变处理器的结构,如总线规模、接口方式,乃至指令形式,更不可能将由FPGA逻辑资源构成的功能模块以指令的形式加入指令系统,以可执行指令的形式实现某种功能的硬件加

10

速,以适应更多的电路设计要求。

⑶无法在资源允许的情况下,根据实际设计需求在同一FPGA中使用任意多个处理器核。

⑷无法裁减处理器硬件资源以降低FPGA成本。 ⑸只能在特定的FPGA芯片系列中使用,因为不管是哪家半导体其极爱你厂商并不是所有的芯片系列都植入了硬核。

采用软核的实现方式则能很好弥补硬核的不足,因为软核一般都是由FPGA厂商自己开发的,灵活可编程是软核的最大特点,但软核性能没硬核高,速度也没硬核快。目前,最具代表性的基于软核的FPGA解决方案是Xilinx公司的Microblaze软核和Altera公司的Nios软核。 2.3.6 SOPC的前景

SOPC是PLD和ASIC技术融合的结果,目前0.13微米的ASIC产品制造价格仍然相当昂贵,相反,集成了硬核或软核CPU、DSP、存储器、外围I/O及可编程逻辑的SOPC芯片在应用的灵活性和价格上有极大的优势。SOPC被称为“半导体产业的未来”。

现在市场上Altera公司支持SOPC的FPGA芯片有:

1)Cyclone系列 2)Cyclone II系列 3)Cyclone III系列 4)Stratix系列

5)Stratix II系列 6)Stratix III系列

2.4软核与硬核

IP核(Intellectual Property core)是一段具有特定电路功能的硬件描述语言程序,该程序与集成电路工艺无关,可以移植到不同的半导体工艺中去生产集成电路芯片。 2.4.1软核的定义

IP软核通常是用HDL文本形式提交给用户,它经过RTL级设计优化和功能验证,但其中不含有任何具体的物理信息。据此,用户可以综合出正确的门电路级设计网表,并可以进行后续的结构设计,具有很大的灵活性,借助于EDA综合工具可以很容易地与其他外部逻辑电路合成一体,根据各种不同半导体工艺,设计成具有不同性能的器件。软IP内核也称为虚拟组件(VC-Virtual Component)。 2.4.2硬核的定义

IP硬核是基于半导体工艺的物理设计,已有固定的拓扑布局和具体工艺,并已经过工艺验证,具有可保证的性能。其提供给用户的形式是电路物理结构掩

11

模版图和全套工艺文件,是可以拿来就用的全套技术[10]。 2.4.3软核与硬核的对比 1.性能

由于软核没有实现,因此它天生在功能和实现方面比硬核更加灵活。另一方面,硬核开发者可能要花更多的时间来优化他们的硬核,因为它们要在很多设计中使用。因此,这使人们觉得硬核会提供更高的性能。 事实上,为那些最先进工艺设计的高端、全定制硬核确实能够提供比软核更好的性能。通过使用锁存、动态逻辑、三态信号、定制存储器等,全定制设计团队能实现比完全静态综合的设计更好的结果。对于需要达到现有工艺和设计技术极限性能的SOC来说,全定制硬核能够更好地满足这些要求。 然而,如果性能目标在一个软核范围内,那么硬核的优势就无关紧要了。SOC设计团队能够使用软核来满足性能要求,并利用其固有的灵活性优势。而随着工艺技术的进步,软核的最高频率限制也在提高,使它们成为更多SOC设计师的一种选择。在较低时钟频率下,硬核或许具有硅片面积方面的优势。但是情况往往并不是这样。硬核经常简单地使用ASIC的方法进行固化,使之不能提供速度上的优势。在其他情况下,全定制内核不能根据每一代工艺进行重新优化,所以削弱了频率和尺寸上的优势。 2.技术独立和可移植性

软核的优势之一是技术独立的,也就是说,Verilog或VHDL不需要使用一种特定的工艺技术或标准的单元库。这意味着同一个IP核能够应用到多种设计中,或现有设计的下一代中。一些软核提供商采用使其内核技术上非独立的设计风格,但是这种方式看不到什么优势。

另一方面,硬核在技术上是非常特定的。事实上,如果代工厂改变其工艺参数或库,硬核可能就无法正常工作。这就产生了一个风险,因为在工艺参数改变时,IP提供商需要重新对硬核进行验证。 硬核能够移植到新的工艺技术,但是重新优化全定制内核的工作既费事又昂贵。对于一些先进的微处理器内核,这可能要花两年或更长的时间。因此,硬核经常根据新的工艺进行光学调整。虽然这一方法既简单又快速,但是它减少了由设计团队针对现有工艺进行全定制优化的许多优势。

不仅如此,光学调整同时带来了另一个风险,因为它只能保证新的设计满足设计规则,而不能保证准确的时序或功能,而且重新全面验证经过光学调整的IP核是非常困难的。 3.速度/面积/功率优化

对于要实现的技术来说,硬核通常比可比较的软核运行速度更快。但是即使对于这单种技术来说,硬核也仅仅是针对一组目标而优化。如果目标是在合理的性能上使芯片面积更小,那么对于这种应用来说,为高度可调性能而优化的硬核可能就太大了。

12

软核是能够被“应用优化”的。为适合特定的嵌入式SOC设计,时序、面积和功率目标可能需要进行调整。例如:如果SOC使用200MHz的时钟,那么设计运行在250MHz的软IP内核可以改为准确地运行在200MHz上。这在得到更小尺寸和更低功率的同时满足了设计约束。

这种应用优化也适用于低层I/O时序。软内核的I/O约束可以进行调整,以准确配合内核的使用环境。如果硬内核有延迟输出信号,SOC设计师几乎无法改善时序。

如果SOC的速度、面积和功率目标与硬核的目标相符,那么硬核将极具竞争力。但对于大多数设计师来说,软核在为特定的SOC优化方面更具优势。 4.可定制性

软核相对硬核还具有另外一个优势:编译时间定制化。这些是实现之前的设计选项。高速缓冲存储器的内存大小就是一种常见的编译时间用户定制项目。根据特定嵌入式应用所需的高速缓冲存储器的大小,软核处理器能够精确地被配置。而硬核在这方面就不能被定制。

另一种在许多软核中应用的定制项目就是指令专用,或选择性支持某种特殊指令。例如,一些SOC可能需要对外部协处理器的支持。然而,在一些不使用这些特性的系统中,多余的硬件可从软核中去掉,以节省面积和功率。 软核还可以包括实现配置参数。这是一种特殊的编译时间定制,可帮助软核更好地配合SOC团队使用的设计风格。例如,微处理器内核经常通过使用门控时钟电路来实现,但这种时钟不能与某些时钟布线工具很好配合。如果处理器内核可提供一种将所有门控时钟变为相等的多路复用器(MUX)的编译时间设置,SOC团队可使实现更为容易。 5.易于集成

软核很可能更容易被集成到SOC设计团队使用的流程中,除非内部设计小组已经实现了硬核。其原因是SOC设计团队将在他们认可的IP核周围添加RTL模块。这些内核看上去就像另外的SOC模块,也可像它们一样地实现。

另一方面,硬核看上去更像一个黑匣子RAM,特别是在它采用全定制技术实现时。这意味着硬核提供商将需要为该内核提供更多的黑匣子模型,使SOC设计师能够在其周围设计其模块。这本身就比使用软核更困难。例如,全定制硬核也许没有门级网表。这是因为该设计已经在晶体管级完成,而没有使用逻辑门。但是设计团队可能需要通过背注时序运行门级功能仿真,因为缺少门级网表,这将难以进行[11]。

13

3 系统硬件设计

3.1 QuartusⅡ简介

Quartus II是Altera公司的综合性PLD开发软件,支持原理图、VHDL、Verilog HDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

Quartus II可以在XP、Linux以及Unix上使用,除了可以使用TCl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。

Quartus II支持Altera的IP核,包含了LPM/Mega Function宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。

此外,Quartus II通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

Altera Quartus II作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

Altera的Quartus II可编程逻辑软件属于第四代PLD开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。Quartus平台与Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。改进了软件的LogicLock模块设计功能,增添 了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。

3.2 SOPC Builder工具简介

SOPC Builder是Quartus II中的SOPC开发工具,是用户创建和检验SOPC设计的自动化平台。用户利用这个平台,可以再短时间内完成一个从软件到硬件的完整系统,并生产出产品推向市场。

SOPC Builder开发工具提供直观的用户图形界面,允许用户配置嵌入式处理器(Nios II)、外围设备和存储接口,并自动将外围设备连接到嵌入是处理器。配置好的嵌入式系统由SOPC Builder工具自动生成硬件描述语言(VHDL或Verilog HDL)设计文件和软件库。生成的硬件描述语言设计文件可以下载到可编程逻辑器件中,形成处理器硬件系统,将Nios II处理器软核转化为硬核。软件库则包含C/C++ 语言的头文件和外设驱动函数,可以方便用户开发和调试C/C++ 应用程序,将调试好的应用程序下载到嵌入式系统的程序存储器中,整个系统开始工作,完成既定的设计任务[12]。图3-1为SOPC Builder工具启动界

14

面。

图3-1 SOPC Builder工具启动界面

3.3嵌入式软核Nios II处理器

3.3.1 Nios II处理器

NiosII软核处理器是Altera公司的第二代FPGA嵌入式处理器,主要利用了SOPC(System On a Programmable Chip)技术,通过将包括32位高性能处理器在内的多种应用模块嵌入到一个通用的FPGA内,实现一个完全可重置的嵌入式系统。SOPC片上可编程系统是Altera公司提出来的一种灵活、高效的解决方案,它将处理器、存储器、I/O端口、网络接口等系统设计需要的东西集成到一个可编程逻辑器件上,构建成一个可编程的片上系统,具有灵活的设计方式,可裁减、可扩充、可升级,具备软硬件在系统可编程的功能[13]。 3.3.2 NiosⅡ处理器的组成

一个NiosII处理器系统由NiosII CPU和一系列的外设组成。NiosII CPU、片内外设、片内存储器和片外外设的接口都在Altera公司的芯片上实现,相当于在单片上实现一台计算机或一个微控制器。NiosII是一个可配置的软核处理器,设计者可以根据性能和成本的的要求增加或删减处理器的功能。 3.3.3 NiosⅡ处理器的分类

NiosII系列包括3种产品,分别是:NiosII/f(快速)——最高的系统性能,中等FPGA使用量;NiosII/s(标准)——高性能,低FPGA使用量;NiosII/e(经济)——低性能,最低的FPGA使用量。这3种产品具有32位处理器的基本结构单元——32位指令大小,32位数据和地址路径,32位通用

15

寄存器和32个外部中断源;使用同样的指令集架构(ISA),100%二进制代码兼容,设计者可以根据系统需求的变化更改CPU,选择满足性能和成本的最佳方案,而不会影响已有的软件投入[14]。

特别是,NiosII系列支持使用专用指令。专用指令是用户增加的硬件模块,它增加了算术逻辑单元(ALU)。用户能为系统中使用的每个NiosII处理器创建多达256个专用指令,这使得设计者能够细致地调整系统硬件以满足性能目标。专用指令逻辑和本身NiosII指令相同,能够从多达两个源寄存器取值,可选择将结果写回目标寄存器。同时,NiosII系列支持60多个外设选项,开发者能够选择合适的外设,获得最合适的处理器、外设和接口组合,而不必支付根本不使用的硅片功能。 3.3.4NiosII处理器的特点

NiosII是采用流水线技术和哈佛结构的通用RISC(精简指令集)处理器,它具有以下特点:

(l)具备完整的32位指令集、32位数据通道和地址空间; (2)带有32个通用寄存器; (3)支持32个外部中断源;

(4)单指令的32位与32位乘法和除法结果是32位; (5)对于结果为64位或128位的乘法,提供专用指令; (6)带有单指令桶形移位寄存器;

(7)可以访问各种片内外设,提供与片外存储器和外设的接口。

3.4 Nios II CPU的搭建

SOPC开发中用到的基本工具有三个:Quartus II,SOPC Builder和NiosII IDE。SOPC的开发流程主要有两个方面:第一是基于Quartus II和SOPC Builder的硬件设计;第二是基于NiosII IDE的软件设计。前边已经对Quartus II和SOPC Builder进行了一些介绍。

本文只是对基于FPGA的SOC研究进行简单的研究,本章搭建的NiosII CPU是十分简单和基本的。用到的模块也是最基本的,没有进行加深和扩展。只能完成本文指定的功能。

不同于专用的CPU,NiosII是一个用户可以自行定制的CPU,用户可以增加新的外设、新的指令,分配外设的地址等。NiosII的硬件开发就是由用户定制适合的CPU和外设。Altera公司的SOPC Builder提供了大量的IP Core来加快NiosII外设的开发速度,用户也可以使用VHDL或Verilog HDL来定制外设。

搭建本文用的NiosIICPU内核,大致有以下几个模块:CPU模块、UART通信口、SDRAM可配置高速缓存以及PIO端口。 3.4.1 NiosII CPU内核设计流程图

搭建本文用的NiosII CPU内核设计大致分为以下几个步骤:

16

⑴在Quartu II中建立工程

⑵在SOPC builder中配置Nios CPU

⑶将Nios内核添加到Quartus II系统图中 ⑷添加外设接口后对工程进行编译

⑸在Nios IDE中建立软件工程并对软件进行编译 ⑹在Quartus II中对工程进行编译 ⑺下载到开发板并验证

用流程图的形式表示出来如图3-2所示。

图3-2 NiosII CPU的配置图

3.4.2 NiosII CPU的配置

本小节主要是对在Quartus II中建立工程,在SOPC Builder中配置NiosII CPU,CPU的生成这一过程进行详细描述。基于NiosII IDE的硬件设计将在下

17

一章进行讨论。

1.加入NIOS CPU CORE(CPU核)

在SOPC Builder的组件选择栏中,用鼠标右键单击“Avalon Components”的“NiosII Processor...”项,在弹出的对话框中选择“Add New NiosIIProcessor...”命令,弹出如图4-2所示的添加新的NiosII(CPU核)对话框。

在对话框中提供NiosⅡ系列微处理器的三个成员供选择:

⑴ NiosII/e (经济型)成员,低性能,具有占有最小逻辑的优化,占用600~700逻辑元件,最低的FPGA使用量。

⑵ NiosII/f(快速型)成员,最高的系统性能,具有高性能的优化,占用1400~1800逻辑元件,中等FPGA使用量。

⑶ NiosII/s(标准型)成员,高性能,在占用逻辑和高性能优化方面的性能居中,占用1200~1400逻辑元件,低FPGA使用量。

这里我们学则标准型NiosII/s成员。单击“Finish”按钮。完成Nios CPU Core的添加过程。

图3-3 NiosII CPU的类型为NiosII/s

2.NiosII CPU模块的添加

选择NiosII CPU的类型为NiosII/s后,接下来添加SDRAM内存、UART通用串行数据总线和PIO输入输出模块。PIO输入输出口重命名为led。这样基本的模块就添加完了。如图4-3所示。

在一片基于SOPC技术的FPGA芯片上,可以嵌入一个或多个微处理器核。每个嵌入的微处理器都可以配置输入/输出接口(PIO)、通信接口(UART)、定时器(Timer)、片内随机存储器(RAM)、片内只读存储

18

器(ROM),以及实现片内、外通信总线及中线控制器等。

PIO接口用英语实现与片外的键盘、发光二极管LED、七段数码管LED、液晶显示器LCD的输入/输出设备的链接。UART接口用于实现与外部设备的信息传送,包括串行通信和网络通信,并支持各种通信协议。片内RAM可以用来存放小型的应用程序和数据。总线及总线控制器用于实现与片外

存储器(RAM、ROM或Flash)的地址线、数据线和控制线的链接与控制[15]。

图3-4 NiosⅡCPU的配置图

3.UART配置

UART是常用的串口,NiosII系统可以通过UART串口与计算机通信,也可以通过UATR串口进行NIOS系统的仿真调试。用鼠标左键双击组件选择栏中“Communication”的“UART(RS232 series port)”项,弹出如图3-5所示的UART属性对话框。在对话中选择波特率为9600 bps,奇偶校验位为None,数据位为8,停止位为1。用鼠标单击“Finish”按钮完成UART的加入。然后把UART通用串口重名为my_uatr。

上述设置完成后,用鼠标左键单击SOPC窗口下的”Generate”按钮,启动SOPC系统,然后生成CPU。编译后NiosII核已生成。然后将NiosII内核添加到Quartus II系统图中,添加外设接口,然后对工程进行编译,直到编译调试成功。生成成功后,就完成了对NiosII软核CPU的定制。

基于QuartusII平台的用户可编辑的Nios核含有许多可配置的接口模块核,包括:可配置高速缓存模块,可配置RS 232通信口、SDRAM控制器、标准以太网协议接口、DMA、定时器、协处理器等。在植入(配置进)FPGA

19

前,用户可根据设计要求,利用Quartus II和SOPC Builder,对Nios及其外围系统进行构建,使该嵌入式系统在硬件结构、功能特点、资源占有等方面全面满足用户系统设计的要求。Nios核在同一FPGA中被植入的数量没有限制,只要FPGA的资源允许。

图3-5UATR属性对话框

4.PLL锁相回路

PLL(Phase Locked Loop):为锁相回路或锁相环,用来统一整合时脉讯号,使内存能正确的存取资料。PLL用于振荡器中的反馈技术。许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步,利用锁相环路就可以实现这个目的。锁相环的特点是:利用外部输入的参考信号控制环路内部振荡信号的频率和相位。因锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。锁相环是一种

20

反馈电路,其作用是使得电路上的时钟和某一外部时钟的相位同步。锁相环配置电路如图3-6。

图3-6 锁相环配置电路

3.4.3复位电路

除了PLL锁相相回路,每个CPU还必须具备复位电路。为确保CPU系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路的第一功能是上电复位。复位电路逻辑图如图3-7所示。

图3-7复位电路逻辑图

21

4 Nios ⅡIDE的软件设计

在上一章中,介绍了Quartus II和SOPC Builder的硬件设计,NiosII CPU的配置,包括NiosII CPU的选型,和一些基本模块的添加,在这一章主要讲述基于NiosII IDE的软件设计。

NiosII IDE是一种新型的软件平台,采用菜单界面方式开发与调试C/C++应用程序,具有直观的优点。此方式为用户提供多种C/C++ 应用程序的模板和相应的头文件,方便了应用程序的开发

首先,我们来启动NiosII IDE工具。NiosII IDE工具启动界面如图4-1所示。

图4-1 NiosⅡ IDE 工具启动界面图

NiosII IDE的每个工作界面都包括一个或多个窗口,如C/C++工程浏览器窗口、编辑区窗口、提示信息浏览器窗口等。C/C++工程浏览器窗口向用户提供有关目录的信息。编辑区窗口用于编辑C/C++程序,在此窗口中用户可以同时打开多个编辑器,但只能有一个编辑器处于激活状态。

NiosII IDE调试分为新建软件工程、编译工程、调试工程和运行工程。

4.1 新建软件工程

打开NiosII IDE工具后,先创建一个新的C++应用工程,然后对工程进行设置,在设置的过程中要是这个新的工程与上一章的硬件设计相联系起来,这才,我们在NiosII IDE工具中创建的这个新C++应用工程才能驱动CPU。新工程创见的向导如图4-2所示。

完成工程创建后,在NiosII IDE工具左侧的工作台C/C++ Projects视图中,显示两个新的工程,第一个hello_led_0是C/C++ 应用工程,而另一个hello_led_0_sislib是描述系统硬件细节的系统库。然后可以再默认出现的C对话

22

框里,编辑C语言程序。

C语言程序主要是用来驱动配置好的CPU,编辑好后,编译运行一下,经调试没有错误然后,在Quartus II中重新编译。

图4-2新建工程对话框

4.2主程序设计

主程序主要实现的是,通过用C/C++ 给定制的CPU编程,实现按照需要,对led端口的驱动,点亮对应led的功能。如图4-3的实现功能流程图。其中程序包括如下几个部分:

⑴初始化程序

⑵对串口进行配置 ⑶对输入输出进行配置 ⑷命令解析 ⑸码值输出

⑹按要求点亮led0~led7

23

⑺结束

图4-3 实现功能流程图

4.3 UART串口

通用异步收发器(Universal Asynchronous Receiver Transmitter,UART)是数字通信领域流行和广泛使用的一种接口设备,主要用来控制符合RS 232-C协议的计算机与串行设备间的通信。普通串行外设和计算机间的通信,一般使用通用的串行接口芯片,但是这种接口芯片存在体积较大、接口复杂以及成本较高的缺点,会使得硬件设计更加复杂,并且结构与功能相对固定,无法根据设计的需要对其逻辑控制进行灵活的修改。而目前日趋成熟的SOC技术则要求将整个设计的功能集成在单片或几块芯片当中,因此,将UART的功能集成在FPGA芯片当中,可以使整个系统更为灵活、紧凑,性能也更加稳定。本文提出了一种使用VHDL语言开发UAWT的方法,实现了FPGA与计算机之间的数据通信,并将其应用于FPGA芯片开发的功能验证当中,从而衍生出了将UART嵌入到EPGA芯片,与计算机互联的一种直观的FPGA设计的验证和调试方法。 4.3.1 UART通信原理

UART采用通用的RS 232-C串行接口标准,该协议的优点是使用广泛,几乎所有计算机和串行外设当中都置有这种接口,其传输距离可达15 m,并且实现较简单,用于双向连接时最少只需要2条导线即可实现基本通信。UART的具

24

体帧格式如图1所示,每帧数据由开始位、数据位、奇偶校验位和停止位四部分依次组成。其中,开始位为低电平;数据位长度为5,6,7,8不等;奇偶校验的模式有无校验、奇校验、偶校验、粘附校验1和粘附校验0;停止位为高电平,具体长度为1位、1.5位和2位不等,这些选项都通过UART内部的线性控制寄存器来确定。当没有数据发送时,发送和接收引脚都保持高电平。 4.3.1 UART控制模块设计

串口控制模块,实现NiosII CPU对于串口通信协议的解析功能,以及串口数据接收发送的通信功能。主要包括以下四个主要部分:

1. 串口中断响应程序部分:实现串口的中断处理,保证通信过程的实时性,

响应的快速性。

2. 串口模块接收程序设计:串口接收数据的存储,基本处理单元为一个字

节。

3. 串口模块发送程序设计:串口发送数据的操作,也是以一个字节作为基

本的操作单元,实现中断发送处理。

4. 串口初始化部分:实现串口的初始化,波特率的设置,以及接收中断的

开启等功能。 部分程序如下:

static void alt_uart_irq (void* context, alt_u32 id) {

alt_u16 status,comm;

status = IORD_ALTERA_AVALON_UART_STATUS(MY_UART_BASE); IOWR_ALTERA_AVALON_UART_STATUS(MY_UART_BASE, 0); if((status & ALTERA_AVALON_UART_STATUS_RRDY_MSK)==ALTERA_AVALON_UART_STATUS_RRDY_MSK) {

comm=((alt_u8)IORD_ALTERA_AVALON_UART_RXDATA(MY_UART_BASE))&0x00ff;

rx_buf[rx_counter]=comm; rx_counter++; if(rx_counter>=rx_length) {

rx_complete=1; rx_counter=0; } }

25

status = IORD_ALTERA_AVALON_UART_STATUS(MY_UART_BASE); IOWR_ALTERA_AVALON_UART_STATUS(MY_UART_BASE, 0); if ((status & ALTERA_AVALON_UART_STATUS_TRDY_MSK)==ALTERA_AVALON_UART_STATUS_TRDY_MSK) {

if(send_enable==1) {

if(tx_counter<(tx_length-1)) //共10个数 {

tx_counter++;

comm=tx_buf[tx_counter];

IOWR_ALTERA_AVALON_UART_TXDATA(MY_UART_BASE,comm); } else

{ send_enable=0; tx_counter=0;

IOWR_ALTERA_AVALON_UART_CONTROL(MY_UART_BASE,ALTERA_AVALON_UART_CONTROL_RRDY_MSK); } } } return; }

void alt_uart_init (void* base, alt_u32 irq) {

IOWR_ALTERA_AVALON_UART_CONTROL(base, 0); IOWR_ALTERA_AVALON_UART_STATUS(base, 0);

IOWR_ALTERA_AVALON_UART_CONTROL(base,ALTERA_AVALON_UART_CONTROL_RRDY_MSK);//开接收中断 alt_irq_register(irq, base, alt_uart_irq); }

4.4 LED控制

26

CPU驱动外部模块,控制外部LED模块实现,相应功能。主要步骤有开始、

判断键值、LED控制解析、命令输出和结束。流程图如图4-4所示。实现的功能是指定点亮即选择哪个等亮,就点亮哪个灯。

图4-4 实现功能流程图

相应的程序代码如下:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity led_control is port(

clk:in std_logic; clr:in std_logic;

led : in std_logic_vector(7 downto 0);

led_out: out std_logic_vector(7 downto 0) );

end led_control;

architecture abc of led_control is

begin

27

process (clk,clr)

begin

if clr='0' then led_out <= X\"00\";

elsif clk'event and clk='1' then case led is when X\"00\" => led_out <=X\"00\"; when X\"01\" => led_out <=X\"01\"; when X\"02\" => led_out <=X\"02\"; when X\"04\" => led_out <=X\"04\"; when X\"08\" => led_out <=X\"08\"; when X\"10\" => led_out <=X\"10\"; when X\"20\" =>

led_out <=X\"20\";

when X\"40\" =>

led_out <=X\"40\"; when X\"80\" => led_out <=X\"80\"; when others => null; end case; end if;

end process;

end abc;

28

结 论

本文主要是这对基于FPGA的SOC进行简单的研究,设计部分主要阐述了NiosII CPU的搭建和NiosII IDE的设计。

基于FPGA的SOC设计技术是当前电子系统设计领域最前沿的技术之一。它把SOC设计和当前最流行的嵌入式系统结合起来,使之具有广泛的应用前景。

最大的优势在于定制性,即为量身定做之意。设计嵌入式产品在选片过程中很难做到完全接近需求,且还要为在PCB板上添加CPU没有集成的外设资源而支付额外费用,但FPGA则不存在上述问题。在FPGA内,用户可以通过配置添加任意外设数量,剔除不需要的外设,也可以根据实际需要修改外设的功能,甚至自主设计独特的外设。做到完全的定制性,而不浪费资源。

相比传统的嵌入式CPU,FPGA内部的处理器核运算能力有一些不足,但嵌入式产品主要功能是控制,在这点上,FPGA可以使用纯逻辑控制方式,具有天然的优势,尤其是在实时性要求较高的场合,FPGA硬件的反应时间在ns级,这是传统嵌入式CPU所不能企及的。

Altera公司是全球最大的FPGA供应商,提供全面的处理器解决方案和器件,是FPGA业界唯一同时提供处理器软核和硬核的厂商,能支持嵌入式系统设计人员为满足自己的嵌入式处理需求而选择最佳的性能和价位点。

事实上,这也类似于传统DSP和CPU等处理器的发展方向,它们也在片上集成了各种硬件加速器,为特定应用提供更高的性能。FPGA通过把更多硬核集成进去,能够适合更多特定的市场,这是一个趋势。不过,和同类方案相比,FPGA继承了很多可编程特性。

29

致 谢

在论文撰写即将完成之际,谨向我的指导老师姜凯老师表示最衷心的感谢,感谢指导老师在毕业设计中给予悉心的指导和关爱,姜老师以敏锐的洞察力、渊博的知识、严谨的治学作风,对待学问求实、求是的态度给我留下了刻骨铭心的印象,这些使我受益匪浅,并将成为我受益终身和献身事业的动力。在此,谨向姜凯老师的辛勤培育表示衷心的感谢!

感谢大学四年来所有的老师,为我们打下电气专业知识的基础;感谢曾经教育和帮助过我的所有老师;衷心地感谢为评阅本论文而付出宝贵时间和辛勤劳动的老师!

同时还要感谢所有的同学们,正是因为有了你们的支持和鼓励,此次毕业设计才会顺利完成!

同时在大学的这四年里,学校不仅为我创造了学习环境,使我得以在电气工程专业获得良好的基础知识,同时在思想上、人生态度和意志品质方面给予了谆谆教诲,这些教益必将激励着我在今后的人生道路上奋勇向前。

最后衷心祝愿母校的明天更加美好! ·

30

参考文献

[1] 董代洁,郭怀里,曹春雨.基于FPGA的可编程SOC设计【M】.北京:北京航空航天大学出版社,2006

[2] EDA先锋工作室.Alter FPGA/CPLD设计【M】.北京:人民邮电出版社,2005.7.P30-P31.

[3] 张薇.MenmoryBox上基于FPGA的嵌入式系统的设计【D】.中山大学,硕士学位论文

[4] 刘明章.基于FPGA的嵌入式系统设计.北京:国防工业出版社,2007.9 [5] 朱正伟.EDA技术及应用.北京:清华大学出版社,2005.10 [6] 袁茵.低廉的FPGA解决方案.电子技术(上海).2005,32(8):P32-P34 [7] 吴超英.基于CPLD/FPGA技术的数字系统设计.安徽:安徽工业大学学报.2003,20(1) :P69-P73

[8] Bocchi. A system level IP integration methodology for fast SOC design. System-on-Chip,2003.Proceedings.International Symposium on,19-21 Nov.2003:127-130.

[9] 薛以辉.基于FPGA的嵌入式微处理器设计与应用.国防科学技术大学硕士论文,2003

[10] 陈林,王家兵.IP核互联策略及规范.今日电子,2005

[11] Y.Freund,R.Schapire.A short introduction of boosting [J].Journal of Japanese Society for Artificial Intelligence ,1999,14(5):P771-P780.

[12] 杨晓慧,杨永健.基于FPGA的EDA/SOPC技术与VHDL.北京国防工业出版社,2007.7

[13] 潘松,黄继业.SOPC技术实用教程【M】北京:清华大学出版社,2005 [14] Altera Inc,Nios3.0 CPU Data Sheet,2003

[15] 江国强.SOPC技术与应用.北京:机械工业出版社,2006.

31

附 录1:英文文献

Embedded systems are the core of embedded computer technology, application, software and hardware can be reduced, on the functionality, reliability, cost, size, power consumption, there are strict requirements of comprehensive performance dedicated computer system. Embedded system consists of embedded processors, external hardware devices, embedded operating system and applications such as four parts, is a hardware and software can work independently in one \"device.\" Its main characteristic is high reliability and real-time performance. Embedded system concept has evolved, early embedded system just to implement specific control functionality. With the microprocessor design technology and rapid development of semiconductor technology and applications in all areas of diversity, embedded design technology and chip technology innovation experiencing again and again. In today's digital information technology and network technology in the post-PC era of rapid development, embedded systems have been widely used in mobile computing platforms, information appliances, wireless communications equipment, industrial and commercial control, e-commerce platform, aerospace, and military applications many other fields.

With the continuous development of IC technology and the integration of the substantial increase in embedded systems by the transition board to the chip level, that system on chip SOC, SOC usually refers to a single chip implementation of digital computing system, the core of technology is the reuse technology and embedded technology. Hardware chip in a single, contain one or more processor, based on the architecture, the volume of memory and processor, and input and output interfaces for a member of resources, the embedded software includes the immediate operating system and application software, with a chip of the entire system. SOC design of application system has good reliability, low power consumption, small size, is one of the future development trend of embedded systems. Currently the embedded system application and research is also board-level systems, the focus has shifted overseas research SOC technology.

Although ASIC's costs low, but the design cycle is long, high input costs, greater risk of functional fixation

Fixed, while the programmable logic device design flexible and powerful, especially in high-density field programmable logic device of its design performance, in terms of density, speed, power and price and other aspects have been fully able to match with the ASIC, FPGA design application its one-time investment is low, short design cycles are ASCI to none. xi1inx company's new Sparatnm series of cost-effective FGPA, the cost of its volume has reached USD 10 million gates, the

32

extent of its cost performance has been enough to contend with the ASIC. Therefore, FPAG in embedded system design has been becoming more and more important position. SOC design of the past depends on the fixed ASIC, its result is design and development period is long, time to market is difficult to guarantee, development costs increased significantly. When the need for modifications to the original design, have high fixed costs of ASIC means the waste. In comparison with the ASIC, programmable logic device PLD design with a very flexible, convenient, not only the performance, speed, connectivity is an advantage, and because time to market, coupled with PLD is produced by the standard device, made of scale PLD is relatively very low cost, Guer PDL in the field of semiconductor device showing a thriving trend of growth, more and more becoming the first choice for SOC designs. Therefore, the well-known U.S. manufacturer of programmable logic devices Altera Corporation made a timely FPAG of SOC design based on SOPC.

With the processor in the form of IP Core and is easy to hard core, semi-soft core, soft core to be embedded into FPAG in the future only two parts of the circuit board: analog components (including power supply) and a FPAG chip up to some large-capacity memory, which constitute the prototype of SOPC. Programmable System on Chip (SOPC) is a special kind of embedded systems: First, it is a system on chip SOC, that is completed by a single chip, the main logic of the system: Second, it is a programmable system with a flexible design approach can reduction, scalable, upgradeable, and have the hardware and software system online programmable functions.

SOPC design actually cover the entire embedded system design content, in addition to the processor and RTOS-centric software design techniques to PCB and signal integrity analysis of high-speed circuit design techniques based on outside, SOCP also relates to a widespread concern of the hardware and software co-design technology. As the main logic of SOPC design is within the programmable logic devices, the traditional debugging equipment, such as logic analyzers, digital oscilloscopes, etc., have been difficult to directly test analysis, therefore, bound to the hardware and software-based simulation technology co-design technology in high demand. SOPC development largely depends on the development of IP Core, where necessary to define the concept of an IP reuse.

IP core is commonly used in some digital circuits, but more complicated functional blocks, such as FIR filters, SDRAM controller, PCI interface, and so designed as to modify the parameters of the module, so other users can directly call these modules, in order to avoid duplication labor. With the PGA Kwong CPLD growing scale, design more complex, using PI nuclear is a developing trend.

IP Design Reuse Technology is the key to SOPC. In SOCP design, electronics

33

engineers will not design a new function modules, of course, also important, but more effort will put the assessment, validation and integration of multiple hardware and software modules already exist, that is, from a functional design of the traditional design process based on the functional assembly into a new process-based. Microprocessors, memory and even more digital circuits can act or will be used as a SOPC IP core design.

IP resources, reuse refers to integrated circuit design process, through inheritance, share or buy the necessary intellectual property cores, and then using DEA tools for the design, catalysis and testing, to speed up the process of Liu film, decrease development risks. IPReuse has become an important means of modern integrated circuit design, in the face of ever-changing needs of various applications, VLSI design era is the era of integration into an IP. IPReuse not only used in ASIC design, embedded system design based on FPAG area, the more plays a decisive role. FPAG core aspect of the introduction of PI in front of the market, because FGPA has a very high flexibility and short time-to-market characteristics, makes the design can be a matter of hours rather than weeks to complete. As FPGA density reached 1 million or even 10 million, more and more designers tend to use the PI core to maintain and improve product yield, low cost programmable logic can be used as the best prototype design, and does not require expensive EAD design with greatly reduced design threshold for the storm.

IP Core is now over based on the popular soft-core, semi-soft core, hard-core form, soft core is the user can change after purchase, upgrade its hardware description code is explicit; and semi-soft nucleus can only purchase nuclear simple configuration, can not change the core function; while the hard-core like the aforesaid Nios, PowerPC, are cured within the FPGA products, apparently only available to users. Each of the three core strengths, and each flaw, pure soft-core though to a great degree of freedom to the user, but very expensive, and even some of the prices of thousands of dollars of nuclear, but also in the practical application of reliability when it large extent dependent on the level designers; semi-soft core to be much cheaper, even with the development on certain core can be a promotions, use the general configuration according to the manual no problem, but nuclear is not common, only a few device to achieve; hard core is completely free, because the purchase of programmable logic device when the price of the hard core has been together in the price of the device, and hard core is clearly the most mature product, and the performance is very strong, relatively speaking also the most reliable.

Any finite word length values are expressed in binary numbers need to consider the impact of finite word length. The major impact of finite word length the error of coefficient quantization error and quantization error calculation. Analog value before

34

entering the FPAG devices need to A / D conversion, the value can only be a limited word length of the binary code that the quantization error between the real value. Improve the A / D device can reduce the input sampling precision in the design of digital filters with FPAG device, the digital filter that quantify the median as required. Quantification of the amount due the number of deviation caused by the calculated value, so that filtering performance deteriorated, the reason for the data processing circuit for arithmetic operations are often required, for example, the number system to do multiplication, the results of the output multiplier general management with ZN-bit word , and then proceed to the next operation, the data otherwise the end result of the error on the introduction of residential places, such errors are computing quantization error, and to get accurate results, one can choose a suitable computing length effect, on the other hand can use the appropriate the word length to reduce the computation can be arbitrarily specified, the greater the word length, quantization error of on-chip resources, the more the more.

Set clear and the signal is very sensitive to the glitch, the best and set clear signal from the device directly into the input pin. Digital logic circuits to set a master reset \"CLNR\" pin is the common good method is to reset pin to the circuit through the main functional unit of each feed, or set clear signal. And the global clock pins similar to the almost all FPAG switches have a dedicated global clear pin and Global Set pin. If you have cleared from the device to generate or buy signal, they should in accordance with the \"gated clock\" design principles to create these signals, to ensure input signal does not appear glitch signal. if cleared by the door or gate control set, the individual pin or trigger as a source of clear or set bits, while the other signal as the address or control lines. In the clear Set the effective period or, address or control line must remain stable, multi-level logic must not use or include single-stage competition in the state produce clear or set the logical signal.

On FGPA, because the path must pass transistor switches, the connection has been the path delay The main part of the delay. Signal through a logic of each unit will have a certain delay. Delay In addition to the path length by the size of effects, but also by the internal structure of the device characteristics, manufacturing process, the working temperature Degree, the working voltage conditions. Existing FPAG design software can carry out the internal delay More accurate forecasts. The greater the internal delay device, the device work the lower speed, so reducing Signal propagation delay is the key to improve processing speed. In some cases, require a certain degree of delay signal processing, to complete a specific function. Using D flip-flop can be under the control of the clock signal delay on, this method is the minimum delay time can be half the clock cycles. If you need more precise delay the introduction of high-speed clock signal must be using the D flip-flops, shift registers

35

or counters to achieve. The length of delay time can be set to shift register D flip-flop or counter counting cycle progression and to adjust, but the time delay resolution of high-speed clock cycles from the decision, the higher clock speed, time-resolved the higher rate. Data signal through the delay, you can re-read data with the data clock to eliminate the delay difference introduced.

A combination of low power components and low-power design technology in the now more than ever more valuable. With the integration of components more features, and more and more small, low power requirements continue to grow. When the programmable logic device for low power applications, the limit design of low power consumption is very important. The three main sources of power is started, standby and dynamic power consumption. Power generated when the device is related to the current starting current; standby power consumption also known as static power is switched on but there is no switching activity of 110 devices of power; dynamic power is the power consumption when the device is working properly . Starting current due to device-specific. For example, based on SRAM's \"PGA with a high starting current, because such devices when the power just is not configured, but need to download data from external memory chips to configure their programmable resources, such as routing connections and look-up table. On the contrary , anti-fuse \"PGA does not require power configuration, thus no high starting current. and currents, as standby power consumption depends on the device's electrical characteristics. Because SRAM of FPGA interconnect in a large number of SRAM cells, they even also consumed in the standby current of several hundred milliamps. antifuse FPGA interconnect with metal to metal, no additional transistors to keep the interconnect and, therefore, will not generate additional power. However, both FPGA type, the leakage current with the technology will reduce the geometric size increase, which increased power consumption. dynamic power is in the clock and the input power is switch. For CMOS circuits, dynamic power is basically determined the total power consumption. dynamic power include several components, mainly capacitors charging and discharging of the load and short circuit current. Most of the dynamic power is the device internal or external capacitor to charge and discharge consumption. If the device is driven more than 1 / 0 load, a large number of dynamic current form the major part of total power consumption.

On the design of a given drive, dynamic power is equal to the value of capacitive load multiplied by the square of the value of the supply voltage multiplied by the value of switching frequency; the total power consumption is the sum of each drive. As VDD is fixed, reducing the internal logic of power is necessary to reduce the average switching frequency, reducing the logic of each clock switch along their total number of broadband networks, especially high-frequency signals to connect the

36

network capacitance. Low-power design, the system needs to process from the design level of each take preventive measures, the higher the level, the better circles. In the low-level design, as the main framework of the circuit has been identified, then further the effect of low-power design is limited. Therefore, low-power design should focus on the early high-level design for.

TRL level description of the main structure for adders, multipliers, memory and controller unit module. Logic synthesis is usually the most common level of abstraction for the RTL-level design, on most synthesizers; the synthesis tool is in the form of HDL hardware description language input, such as Verlolg and vHDL. Logic synthesis of the output is set according to the user constraints (delay, area, power consumption) optimized gate-level netlist. Data transfer must take to respond, the response related clock pulse generated by the host, in response to the clock pulse transmitter release during the SAD line (high), in response to the receiver during the clock pulse line low that it must be SAD this clock pulse The high stable low during the course of time should be set up and maintain. Usually, by addressing the receiver after each byte received in addition to beginning with the CBUS address to generate a response packet. When no response from the machine from the machine address (for example, it is to perform some real-time function can not receive or send), data line from the machine must remain high, the host and then generate a stop condition to terminate transmission or generate repeated start condition to start a new transmission. If the response from the machine the receiver address from the machine, but some time after the transmission can not receive more data bytes, the host must terminate the transfer again, this situation with the first byte from the machine did not produce responding to that post from machine to maintain the high data line, the master generates a stop or re-start conditions. If the transmission in the host receiver, it must be generated by the slave clock is not the last byte does not produce a response to inform the data transmitter from the machine end of the slave transmitter must release the data line, allowing the host to generate a stop or repeated start condition.

Sent to each line must be 8-bit bytes, each transmission can send an unlimited number of bytes for each byte must be followed by a response bit, first data transmission is highest MSB, if the slave To complete some other feature such as an internal interrupt service routine can receive or send the next byte of data integrity, can maintain the clock line SCL LOW to force the host into the wait state, when the slave is ready to receive the next data byte SCL clock line is released after the data transmission to continue, in some cases can use a different format, with the bus format such as CBUS compatible devices, even when the transmission of a byte starting with the address of such packets can generate stop condition to terminate, at this time does not produce response.

37

附 录2:中文文献

嵌入式系统是以嵌入式计算机为技术核心,面向应用、软硬件可裁减,对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。嵌入式系统主要由嵌入式处理器、外围硬件设备、嵌入式操作系统以及应用程序等四部分组成,是集软硬件于一体可独立工作的“器件”。其主要特点是高可靠性和实时性。嵌入式系统的概念的提出由来已久,早期的嵌入式系统只是为了实现特定的控制功能。

随着微处理器设计技术和半导体技术的飞速发展,以及各个领域应用需求的多样化,嵌入式设计技术和芯片技术也经历着一次又一次的革新。在当今数字信息技术和网络技术高速发展的后PC时代,嵌入式系统己经被广泛应用于移动计算平台、信息家电、无线通信设备、工业商业控制、电子商务平台、航空航天、以及军事应用等诸多领域。

随着集成电路工艺技术的不断发展和集成度的大幅度提高,嵌入式系统也由板级向芯片级过渡,即片上系统SOC,SOC通常是指在单一芯片上实现的数字计算系统,其核心技术是重用技术和嵌入式技术。硬件上在单一芯片内包含一个或多个处理器、基于总线的体系结构、大容量的存储器、外设、协处理器和输入输出接口等多种资源,软件上包含嵌入式实时操作系统和应用软件,用一个芯片构成整个系统。应用SOC设计的系统具有可靠性好、功耗低、体积小等优点,是未来嵌入式系统的发展趋势。目前国内嵌入式系统的应用与研究主要还在板级系统,国外研究的重点已转向SOC技术。

虽然ASIC的成本很低,但设计周期长、投入费用高、风险较大,功能固 定,而可编程逻辑器件设计灵活、功能强大,尤其是高密度现场可编程逻辑器件其设计性能,无论从密度、速度、功耗和价格等多方面己完全能够与ASIC媲美,应用FPGA进行设计,其一次性投入低,设计周期短是ASCI无法比拟的。xi1inx公司最新推出的Sparatnm系列高性价比FGPA,其批量成本已经达到10美元万门的程度,其性能价格比已足以与ASIC抗衡。因此,FPAG在嵌入式系统设计领域己占据着越来越重要的地位。应用FPAG进行SOP设计己成为未来发展的趋势。

以往的SOC设计依赖于固定的ASIC,其结果是导致设计开发周期变长,产品上市时间难以保证,开发费用大大增加。而当需要对原始设计进行修改时,己固定的ASIC意味着昂贵的成本浪费。与ASIC相比较而言,可编程逻辑器件PLD设计起来十分灵活、便捷,不仅性能、速度、连接都具有优势,而且由于缩短上市时间,再加上PLD是按照标准器件生产出来的,规模效应使得PLD的成本相对十分低廉,故而在半导体领域中PDL器件呈现出一枝独秀的增长态势,越来越多地成为系统级芯片设计的首选。因此,著名的可编程逻辑器件生产商美国Altera公司适时地提出了基于FPAG的SOC设计方案SOPC。

随着处理器以IP Core的形式存在并且很容易地以硬核、半软核、软核形式嵌入到FPAG中,未来的电路板上只有两部分电路:模拟部分(包括电源)和一块

38

FPAG芯片,最多还有一些大容量的存储器,这些构成了SOCP的雏形。可编程片上系统(SOPC)是一种特殊的嵌入式系统:首先它是片上系统SOC,即由单个芯片完成整个系统的主要逻辑功能:其次,它是可编程系统,具有灵活的设计方式,可裁减、可扩充、可升级,并具备软硬件系统在线可编程的功能。

SOPC设计技术实际上涵盖了嵌入式系统设计技术的全部内容,除了以处理器和实时多任务操作系统为中心的软件设计技术、以PCB和信号完整性分析为基础的高速电路设计技术以外,SOCP还涉及目前引起普遍关注的软硬件协同设计技术。由于SOPC的主要逻辑设计是在可编程逻辑器件内部进行,传统的调试设备,如逻辑分析仪、数字示波器等,己很难进行直接测试分析,因此,必将对以仿真技术为基础的软硬件协同设计技术提出更高的要求。SOPC的发展很大程度上要依靠IP Core的发展,这里就要明确一个IP复用的概念。

IP核是将一些在数字电路中常用但比较复杂的功能块,如FIR滤波器、SDRAM控制器、PCI接口等等设计成可修改参数的模块,让其它用户可以直接调用这些模块,以避免重复劳动。随着CPLD邝PGA的规模越来越大,设计越来越复杂,使用PI核是一个发展趋势。

IP核复用技术SOPC设计的关键。在SOCP设计中,电子工程师将不是设计新的功能模块,当然这也很重要,但更多的精力会放到如何评估、验证和集成多个己经存在的软硬件模块,也就是从以功能设计为基础的传统设计流程转变为以功能组装为基础的全新流程。微处理器、存储器乃至更多的数字电路都可作为或将可作为SOPC设计时用到的IP核。

IP资源复用是指在集成电路设计过程中,通过继承、共享或购买所需的智力产权内核,然后再利用DEA工具进行设计、综合和验证,从而加速流片过程,降低开发风险。IPReuse己逐渐成为现代集成电路设计的重要手段,在日新月异的各种应用需求面前,超大规模集成电路设计时代正步入一个IP整合的时代。IPReuse不仅仅应用于专用集成电路设计,对基于FPAG的嵌入式系统设计领域而言,更是具有举足轻重的地位。FPAG在采用PI内核方面走在了市场的前面,因为FGPA具有极高的灵活性和面市时间短的特点,使得设计可以在数小时而不是数周内完成。由于FPGA密度达到了百万门甚至是千万门,越来越多的设计师倾向于使用PI内核保持和提高产品的产量,可编程逻辑价格低廉,可以作为最佳原型设计,而且不需要昂贵的EAD设计上具,大大降低了设计门槛困。 现在流行的IP Core多是以软核、半软核、硬核形式存在,软核是用户购买后可以随意更改、升级等,其硬件描述代码是显式的;而半软核购买后只能对核进行简单配置,不能更改核的功能;而硬核就如同前面所讲的Nios、PowerPC等,是固化在FPGA产品内部的,显然只提供给用户使用。这三种核各有优势、各有缺憾,纯软核虽然给用户以很大的自由度,但是价格非常昂贵,甚至某些核价格在上万美金,而且在实际应用的时候的可靠度很大程度上要依赖设计人员的水平;半软核要便宜很多,甚至某些核可以随开发上具奉送,使用时一般根据手册进行配置就没什么问题,但这种核不通用,只能在少数器件上实现;硬核是完全免费

39

的,因为在购买可编程逻辑器件的时候硬核的价钱己经合在器件售价中了,硬核显然是最为成熟的产品,而且性能相对来说十分强劲,同时也是最可靠的。

任何一个数值都是用有限字长的二进制数表示的须考虑有限字长的影响。有限字长的影响主要带来误差、系数量化误差和运算量化误差。模拟量值在进入FPAG器件之前,需要A/D变换,值只能以有限字长的二进制代码表示,与真实值之间量化误差。提高A/D器件的采样精度可以减小输入量在用FPAG器件设计数字滤波器时,数字滤波器表示,并按规定位数进行量化。由于量化处理引起量数偏离理论计算值,从而使滤波性能变差,其原因就在数据处理电路中经常需要进行算术运算,例如制数做乘法运算,乘法器的结果输出一般用ZN位字理,然后再进行下一步运算,否则最终结果的数据舍位就引入了误差,这种误差属于运算量化误差,也为了得到精确结果,一方面可以选用合适的运算长效应,另一方面可以采用合适的字长以降低运算可以根据需要任意指定,字长越大,量化误差就越的片内资源就越多。

无论是用离散逻辑、可编程逻辑,还是用全定制器件实现任何数字电路,设计不良的时钟在极限温度、电压或制造工艺存在偏差的情况下将导致系统错误的行为,所以可靠的时钟设计是非常关键的。在FGPA设计时通常采用以下四种时钟:全局时钟、门控时钟、多级逻辑时钟和波动式时钟,多时钟系统是这四种时钟类型的任意组合。

清零和置位信号对毛刺也是非常敏感的,最好的清零和置位信号是从器件的输入引脚直接引入。给数字逻辑电路设置一个主复位“CLNR,,引脚是常用的好方法,该方法是通过主复位引脚给电路中每个功能单元馈送清零或置位信号。与全局时钟引脚类似,几乎所有FPAG器件都有专门的全局清零引脚和全局置位引脚。如果必须从器件内产生清零或置位信号,则要按照“门控时钟”的设计原则去建立这些信号,确保输入信号中不会出现毛刺信号。若采用门控清零或者门控置位,则单个引脚或者触发器作为清零或置位的源,而将其它信号作为地址或控制线。在清零或置位的有效期间,地址或控制线必须保持稳定,决不能用多级逻辑或包含竞争状态的单级逻辑产生清零或置位信号。

对FPGA来说,由于路径必须通过电晶体开关,因此连线延时一直是路径 延时的主要部分。信号每通过一个逻辑单元,就会产生一定的延时。延时的 大小除了受路径长短的影响外,还受器件内部结构特点、制造工艺、工作温 度、工作电压等条件的影响。现有的FPAG设计软件都可以对内部延时进行 比较准确的预测。器件内部延时越大,器件的工作速度也就越低,所以降低 信号传输延时是提高处理速度的关键。而在某些情况下,需要对信号进行一定的延时处理,以完成特定的功能。利用D触发器可以在时钟的控制下对信号进行延时,这种方法的最小延时时间可以是时钟周期的一半。如果需要比较精确的延时则必须引入高速时钟信号,利用D触发器、移位寄存器或计数器来实现。延时时间的长短可通过设置D触发器或移位寄存器的级数以及计数器的计数周期来调整,而延时的时间分辨率则由高速时钟的周期来决定,高速时钟频率越高,

40

时间分辨率也越高。数据信号经过延时后,可以用数据时钟重新读取数据,以消除延时引入的相差。

结合采用低功耗元件和低功耗设计技术在目前比以往任何时候都更有价值。随着元件集成更多功能,并越来越小型化,对低功耗的要求持续增长。当把可编程逻辑器件用于低功耗应用时,限制设计的低功耗非常重要。功耗的三个主要来源是启动、待机和动态功耗。器件上电时产生的相关电流即是启动电流;待机功耗又称作静态功耗,是电源开启但110上没有开关活动时器件的功耗;动态功耗是指器件正常工作时的功耗。启动电流因器件而异。例如,基于SRAM的FPGA具有高启动电流,因为这类器件刚上电时是没有配置的,而需要从外部存储芯片下载数据来配置它们的可编程资源,如路由连接和查找表。相反地,反熔丝「PGA不需要上电配置,因而没有高启动电流。和启动电流一样,待机功耗主要依赖于器件的电子特性。由于SRAM的FPGA互连中SRAM单元的数量相当大,它们甚至在待机时也要消耗数百毫安电流。反熔丝FPGA具有金属到金属互连,不需要额外的晶体管来保持互连,因而也就不会产生额外的功耗。但是,对上述两种FPGA类型来说,漏电流将随工艺几何尺寸的缩小而增加,这加剧了功耗问题。动态功耗是在时钟工作且输入正在开关时的功耗。对CMOS电路,动态功耗基本上确定了总功耗。动态功耗包括几个成分,主要是电容负载充电与放电以及短路电流。多数动态功率是内部或外部电容向器件充、放电消耗的。如果器件驱动多个I/O负载,大量的动态电流构成总功耗的主要部分。

对设计中给定的驱动器,动态功耗等于电容负载的值乘以电源电压的平方的值再乘以开关频率的值,总功耗是每个驱动器功耗之总和。由于VDD是固定的,降低内部功耗就要降低平均逻辑开关频率,减少每个时钟沿处的逻辑开关总数、减少连线网络,特别是高频信号连线网络中的电容值。对低功率设计,需要从系统至工艺的每个设计级别中采取相应预防措施,级别越高,效果越好圈。在低层次的设计中,由于电路的主要构架己经确定,这时再进行低功耗设计的效果是有限的。所以,低功耗设计应着重在早期的高层次设计中进行。

TRL结构级的描述主要针对加法器,乘法器,存储器和控制器等单元模块。通常逻辑综合最常用的抽象层次为RTL级设计,对多数综合器,其综合工具是HDL硬件描述语言的形式输入的,如Verlolg和VHDL。逻辑综合的输出是根据用户设定的约束条件(延时,面积,功耗)优化后的门级网表。数据传输必须带响应,相关的响应时钟脉冲由主机产生,在响应的时钟脉冲期间发送器释放SAD线(高),在响应的时钟脉冲期间接收器必须将SAD线拉低使它在这个时钟脉冲的高电平期间保持稳定的低电平,当然必须考虑建立和保持时间。通常,被寻址的接收器在接收到的每个字节后除了用CBUS地址开头的报文必须产生一个响应。当从机不能响应从机地址时(例如它正在执行一些实时函数不能接收或发送),从机必须使数据线保持高电平,主机然后产生一个停止条件终止传输或者产生重复起始条件开始新的传输。如果从机接收器响应了从机地址,但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输,这个情况用从

41

机在第一个字节后没有产生响应来表示从机使数据线保持高电平,主机产生一个停止或重起始条件。如果传输中有主机接收器,它必须通过在从机不产生时钟的最后一个字节不产生一个响应,向从机发送器通知数据结束,从机发送器必须释放数据线,允许主机产生一个停止或重复起始条件。

发送到线上的每个字节必须为8位,每次传输可以发送的字节数量不受限制每个字节后必须跟一个响应位,首先传输的是数据的最高位MSB,如果从机要完成一些其他功能后例如一个内部中断服务程序才能接收或发送下一个完整的数据字节,可以使时钟线SCL保持低电平迫使主机进入等待状态,当从机准备好接收下一个数据字节并释放时钟线SCL后数据传输继续,在一些情况下可以用与总线格式不一样的格式例如兼容CBUS的器件,甚至在传输一个字节时用这样的地址起始的报文可以通过产生停止条件来终止,此时不会产生响应。

42

附 录3:程序代码

1.系统头文件代码 /* system.h *

* Machine generated for a CPU named \"cpu\" as defined in: * d:\\lyf\\software\\hello_world_0_syslib\\..\\..\\my_cpu.ptf *

* Generated: 2010-05-25 14:56:24.734 * */

#ifndef __SYSTEM_H_ #define __SYSTEM_H_

/*

DO NOT MODIFY THIS FILE

Changing this file will have subtle consequences which will almost certainly lead to a nonfunctioning

system. If you do modify this file, be aware that your changes will be overwritten and lost when this file is generated again.

DO NOT MODIFY THIS FILE */

/******************************************************************************

* * * License Agreement *

* *

* Copyright (c) 2003 Altera Corporation, San Jose, California, USA. * * All rights reserved.

43

*

* *

* Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the \"Software\"), * * to deal in the Software without restriction, including without limitation * * the rights to use, copy, modify, merge, publish, distribute, sublicense, * * and/or sell copies of the Software, and to permit persons to whom the * * Software is furnished to do so, subject to the following conditions: *

* *

* The above copyright notice and this permission notice shall be included in * * all copies or substantial portions of the Software. *

* *

* THE SOFTWARE IS PROVIDED \"AS IS\WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *

* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *

* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO

EVENT SHALL THE *

* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *

* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *

* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * * DEALINGS IN THE SOFTWARE. *

* *

* This agreement shall be governed in all respects by the laws of the State * * of California and by the laws of the United States of America. *

* *

******************************************************************************/

44

/*

* system configuration * */

#define ALT_SYSTEM_NAME \"my_cpu\" #define ALT_CPU_NAME \"cpu\"

#define ALT_CPU_ARCHITECTURE \"altera_nios2\" #define ALT_DEVICE_FAMILY \"CYCLONEII\" #define ALT_STDIN \"/dev/my_uart\"

#define ALT_STDIN_TYPE \"altera_avalon_uart\" #define ALT_STDIN_BASE 0x00000800 #define ALT_STDIN_DEV my_uart #define ALT_STDIN_PRESENT

#define ALT_STDOUT \"/dev/my_uart\"

#define ALT_STDOUT_TYPE \"altera_avalon_uart\" #define ALT_STDOUT_BASE 0x00000800 #define ALT_STDOUT_DEV my_uart #define ALT_STDOUT_PRESENT #define ALT_STDERR \"/dev/my_uart\"

#define ALT_STDERR_TYPE \"altera_avalon_uart\" #define ALT_STDERR_BASE 0x00000800 #define ALT_STDERR_DEV my_uart #define ALT_STDERR_PRESENT #define ALT_CPU_FREQ 50000000 #define ALT_IRQ_BASE NULL /*

* processor configuration *

*/

#define NIOS2_CPU_IMPLEMENTATION \"small\" #define NIOS2_BIG_ENDIAN 0

#define NIOS2_ICACHE_SIZE 2048 #define NIOS2_DCACHE_SIZE 0

#define NIOS2_ICACHE_LINE_SIZE 32

45

#define NIOS2_ICACHE_LINE_SIZE_LOG2 5 #define NIOS2_DCACHE_LINE_SIZE 0

#define NIOS2_DCACHE_LINE_SIZE_LOG2 0 #define NIOS2_FLUSHDA_SUPPORTED

#define NIOS2_EXCEPTION_ADDR 0x01000020 #define NIOS2_RESET_ADDR 0x01000000 #define NIOS2_BREAK_ADDR 0x00000020

#define NIOS2_HAS_DEBUG_STUB

#define NIOS2_CPU_ID_SIZE 1 #define NIOS2_CPU_ID_VALUE 0

/*

* A define for each class of peripheral * */

#define __ALTERA_AVALON_UART

#define __ALTERA_AVALON_NEW_SDRAM_CONTROLLER #define __ALTERA_AVALON_PIO /*

* my_uart configuration * */

#define MY_UART_NAME \"/dev/my_uart\" #define MY_UART_TYPE \"altera_avalon_uart\" #define MY_UART_BASE 0x00000800 #define MY_UART_SPAN 32 #define MY_UART_IRQ 0

#define MY_UART_BAUD 115200 #define MY_UART_DATA_BITS 8 #define MY_UART_FIXED_BAUD 1 #define MY_UART_PARITY 'N' #define MY_UART_STOP_BITS 1

46

#define MY_UART_USE_CTS_RTS 0

#define MY_UART_USE_EOP_REGISTER 0 #define MY_UART_SIM_TRUE_BAUD 0 #define MY_UART_SIM_CHAR_STREAM \"\" #define MY_UART_FREQ 50000000

#define ALT_MODULE_CLASS_my_uart altera_avalon_uart /*

* sdram_0 configuration * */

#define SDRAM_0_NAME \"/dev/sdram_0\"

#define SDRAM_0_TYPE \"altera_avalon_new_sdram_controller\" #define SDRAM_0_BASE 0x01000000 #define SDRAM_0_SPAN 16777216

#define SDRAM_0_REGISTER_DATA_IN 1 #define SDRAM_0_SIM_MODEL_BASE 1

#define SDRAM_0_SDRAM_DATA_WIDTH 32 #define SDRAM_0_SDRAM_ADDR_WIDTH 12 #define SDRAM_0_SDRAM_ROW_WIDTH 12 #define SDRAM_0_SDRAM_COL_WIDTH 8

#define SDRAM_0_SDRAM_NUM_CHIPSELECTS 1 #define SDRAM_0_SDRAM_NUM_BANKS 4 #define SDRAM_0_REFRESH_PERIOD 15.625 #define SDRAM_0_POWERUP_DELAY 100 #define SDRAM_0_CAS_LATENCY 3 #define SDRAM_0_T_RFC 70 #define SDRAM_0_T_RP 20 #define SDRAM_0_T_MRD 3

#define SDRAM_0_T_RCD 20 #define SDRAM_0_T_AC 5.5 #define SDRAM_0_T_WR 14

#define SDRAM_0_INIT_REFRESH_COMMANDS 2 #define SDRAM_0_INIT_NOP_DELAY 0

#define SDRAM_0_SHARED_DATA 0

#define SDRAM_0_STARVATION_INDICATOR 0 #define SDRAM_0_TRISTATE_BRIDGE_SLAVE \"\"

47

#define SDRAM_0_IS_INITIALIZED 1

#define SDRAM_0_SDRAM_BANK_WIDTH 2

#define SDRAM_0_CONTENTS_INFO \"SIMDIR/sdram_0.dat 1274151862\" #define ALT_MODULE_CLASS_sdram_0 altera_avalon_new_sdram_controller /*

* led configuration * */

#define LED_NAME \"/dev/led\" #define LED_TYPE \"altera_avalon_pio\" #define LED_BASE 0x00000820 #define LED_SPAN 16

#define LED_DO_TEST_BENCH_WIRING 0 #define LED_DRIVEN_SIM_VALUE 0x0000 #define LED_HAS_TRI 0 #define LED_HAS_OUT 1 #define LED_HAS_IN 0 #define LED_CAPTURE 0

#define LED_EDGE_TYPE \"NONE\" #define LED_IRQ_TYPE \"NONE\"

#define LED_BIT_CLEARING_EDGE_REGISTER 0 #define LED_DATA_WIDTH 8 #define LED_FREQ 50000000

#define ALT_MODULE_CLASS_led altera_avalon_pio /*

* system library configuration *

*/

#define ALT_MAX_FD 32 #define ALT_SYS_CLK none

#define ALT_TIMESTAMP_CLK none /*

* Devices associated with code sections.

48

*

*/

#define ALT_TEXT_DEVICE SDRAM_0 #define ALT_RODATA_DEVICE SDRAM_0 #define ALT_RWDATA_DEVICE SDRAM_0 #define ALT_EXCEPTIONS_DEVICE SDRAM_0 #define ALT_RESET_DEVICE SDRAM_0 /*

* The text section is initialised so no bootloader will be required. * Set a variable to tell crt0.S to provide code at the reset address and * to initialise rwdata if appropriate. */

#define ALT_NO_BOOTLOADER

#endif /* __SYSTEM_H_ */ 2.主程序代码

#include \"system.h\"

#include \"altera_avalon_pio_regs.h\" #include \"altera_avalon_uart_regs.h\" #include \"sys/alt_irq.h\" #include \"alt_types.h\" #include \"stdlib.h\"

alt_u8 count,nnn;

alt_u8 biaozhi;

alt_u16 trans_count;

alt_u8 rx_counter=0,rx_complete=0,send_enable=0,tx_counter=0;

alt_u8 rx_buf[20]={0},tx_buf[20]={0};

alt_u8 rxr_buf[10]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};

49

alt_u8 read_data_1,read_data_2;

alt_u8 key_code,fasong_i=1,key_code_1,fasong_j;

#define rx_length 10 #define tx_length 10

static void alt_uart_irq (void* context, alt_u32 id) {

alt_u16 status,comm;

status = IORD_ALTERA_AVALON_UART_STATUS(MY_UART_BASE); IOWR_ALTERA_AVALON_UART_STATUS(MY_UART_BASE, 0); if((status & ALTERA_AVALON_UART_STATUS_RRDY_MSK)==ALTERA_AVALON_UART_STATUS_RRDY_MSK) {

comm=((alt_u8)IORD_ALTERA_AVALON_UART_RXDATA(MY_UART_BASE))&0x00ff;

rx_buf[rx_counter]=comm;

rx_counter++; if(rx_counter>=rx_length) {

rx_complete=1; rx_counter=0; } }

status = IORD_ALTERA_AVALON_UART_STATUS(MY_UART_BASE); IOWR_ALTERA_AVALON_UART_STATUS(MY_UART_BASE, 0); if ((status & ALTERA_AVALON_UART_STATUS_TRDY_MSK)==ALTERA_AVALON_UART_STATUS_TRDY_MSK) {

if(send_enable==1) {

if(tx_counter<(tx_length-1)) //共10个数

50

{

tx_counter++;

comm=tx_buf[tx_counter];

IOWR_ALTERA_AVALON_UART_TXDATA(MY_UART_BASE,comm); } else

{ send_enable=0; tx_counter=0;

IOWR_ALTERA_AVALON_UART_CONTROL(MY_UART_BASE,ALTERA_AVALON_UART_CONTROL_RRDY_MSK); }

} } return; }

void alt_uart_init (void* base, alt_u32 irq)

{

IOWR_ALTERA_AVALON_UART_CONTROL(base, 0); IOWR_ALTERA_AVALON_UART_STATUS(base, 0);

IOWR_ALTERA_AVALON_UART_CONTROL(base,ALTERA_AVALON_UART_CONTROL_RRDY_MSK);//开接收中断 alt_irq_register(irq, base, alt_uart_irq); }

/***********************************************************************************/

/***********************************************************************************/

/*******************delay***********************/ /***********************************************/

void delay(void) {

unsigned int a;

51

for(a=0;a<5;a++)

{ ; } }

/***********************************/ void system_initial(void) {

IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, 0xff); }

/***********************************************/ void alt_main (void) {

alt_sys_init();

alt_uart_init(MY_UART_BASE,MY_UART_IRQ); system_initial();

while((IORD_ALTERA_AVALON_UART_STATUS(MY_UART_BASE)& 0x40)!=0x40) ;

IOWR_ALTERA_AVALON_UART_TXDATA(MY_UART_BASE,0xAA); while (1) {

if (rx_complete==1) {

rx_complete=0; send_enable=1;

tx_buf[0]=rx_buf[0]; tx_buf[1]=rx_buf[1]; tx_buf[2]=rx_buf[2]; tx_buf[3]=rx_buf[3]; tx_buf[4]=rx_buf[4]; tx_buf[5]=rx_buf[5]; tx_buf[6]=rx_buf[6]; tx_buf[7]=rx_buf[7]; tx_buf[8]=rx_buf[8]; tx_buf[9]=rx_buf[9];

52

tx_counter=0;

while((IORD_ALTERA_AVALON_UART_STATUS(MY_UART_BASE)& 0x40)!=0x40) ;

IOWR_ALTERA_AVALON_UART_TXDATA(MY_UART_BASE, rx_buf[0]);

IOWR_ALTERA_AVALON_UART_CONTROL(MY_UART_BASE,0X40);

IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, rx_buf[0]);

} } }

53

因篇幅问题不能全部显示,请点此查看更多更全内容