版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录3442摘要 I15733ABSTRACT II117671绪论 387681.1开发背景 3239771.2开发意义 3260011.3数字钟的发展前景
3221722系统设计总体方案 59282.1设计要求 5278642.2硬件规划 5200542.3数字钟的程序设计 5185823SOPC系统开发工具 7233263.1硬件开发工具QuartusII 7182753.1.1QuartusII软件特点 7245543.1.2QuartusII的设计流程 7254703.2SOPCBuilder硬件开发工具功能 84383.3NIOSIIIDE开发软件 9150743.3.1NIOSII简介 9265773.3.2NIOSIIIDE软件开发流程 9235143.4开发板芯片介绍 10170703.4.1开发板整体图片 10274183.4.2FPGA芯片介绍 10107693.4.3SDRAM芯片介绍 1160583.4.4EPCS介绍 1155884硬件设计部分 12130994.1创建工程 1234764.2创建NiosⅡ系统模块 14146534.3添加CPU和外围器件 14202314.3.1添加NIOSIIProcessor 1499944.3.2添加SYSTEMID 16265734.3.3添加SDRAM 17195294.3.4添加EPCS 18263604.3.5添加JTAGUART 18187384.3.6添加Timer 18111674.3.7添加连接数码管的PIO 18187474.3.8添加按键PIO 19166904.4配置NiosⅡ系统模块 20185834.5建立锁相环PLL 22326344.6引脚分配 24252924.7工程设置 2949525软件设计部分 31232605.1创建工程 31324555.2添加程序 31209495.3程序分析 32209105.4将程序和硬件下载到外部Flash中 331733结论 3610886参考文献 374964附录:程序 3817627致谢 42绪论1绪论1.1开发背景基于FPGA的电子系统设计技术是二十一世纪电子应用工程师必备的基础技能之一,而基于FPGA的SOPC设计技术是当前电子系统设计领域最前沿的技术之一。SOPC技术是由美国公司Altera于2000年最先提出的,并且在同时推出了相对的开发软件。它是现代计算机辅助设计技术、EDA技术和大规模集成电路技术的高度发展的产物,SOPC是基于FPGA决解方案的SOC,相比于ASIC的SOC解决方案,SOPC系统及其开发功具有更多的优点和特色,SOPC技术是将电子系统尽可能的大而完整,包括处理器、接口系统、硬件系处理器或者加速系统、数字通信系统、存储电路等,集成到单一的一块FPGA芯片中,所以SOPC又可以称为可编程片上系统。现在最为常用的嵌入式系统大部分采用了含有ARM的32位知识产权处理核的器件,尽管由这些器件构成的嵌入式系统有很强大的功能,但是为了使系统更加的灵活,功能更加的强大,能更好的适应对多任务的完成,一般为这些处理器配置很多器件才可以够构成一个完整的应用系统,这样的话会使整个系统的体积和功耗增加。但是如果把拥有ARM或者其它知识产权的核,以硬核的方式植入到FPGA中,利用FPGA中的可编程逻辑资源和IP软核,直接利用FPGA中的逻辑宏单元来构成嵌入式系统处理器的接口功能模块,就可以很好的决解上面所说的问题。对于这个问题Altera和Xilinx公司都陆续推出了关于方面的器件。比如,Altera的Excalibur系列的FPGA中就植入了ARM922T嵌入式系统处理器。1.2开发意义传统的设计技术已经不足以满足系统化、网络化、高速度、低功耗、多媒体等实际需要。SOPC可以将处理器、存储器、外设接口和多层次用户电路等多种系统设计需要的分模块集成到一块芯片上,因此具有灵活、高效、设计可重用等特性。在SOPC系统中,本来需要上几千行的HDL代码的复杂功能模块,经过嵌入IP核后,只需要几十行的C代码就可以简单的实现,由此可以让整个设计规模、功能、体积、功耗、性能指标、上市周期、可靠性、开发成本、产品维护、及硬件升级等多个方面实现优化。SOPC已经成为了集成电路未来的发展方向,可以广泛的应用在军事、汽车、广播、航空航天、消费类电子、测试和测量、医疗、无线通信、有线通信等多个领域。1.3数字钟的发展前景
现在是一个知识爆炸的新时代,新产品、新技术不停的出现,电子技术的发展更是一天一个样。可以毫不夸张的说,电子技术的应用在我们身边无处不在,我们的生活正在被电子技术不停地改变,改变着我们生活的世界。在这个快速发展的时代,时间对于我们来讲是越来越宝贵,在快节奏的生活中,人们经常忘记了时间,如果碰到很重要的事情但是忘记了时间,这将会造成很大很大的损失。因此我们需要一个定时系统来使这些忙碌的人得到提醒。数字化的钟表给我们带来了很大的方便。近年来,科技的发展和社会的进步,使得人们对数字钟的要求也变得越来越高,传统的时钟已经不能够满足人们的需求。数字钟不论是在性能还是在样式和性价比上都发生了质的变化,有了电子闹钟、数字闹钟等等。系统设计总体方案2系统设计总体方案2.1设计要求(1)具有正确的时,分,秒计时功能;(2)计时结果要用数码管分别显示时、分、秒的十位和个位;(3)当按下RESET按键时,时钟初始化,重新开始计数,当按下k1按键时,时钟处于调时状态,当按下k2时,时钟处于调分状态;2.2硬件规划在硬件系统组织规划中系统需使用的外围器件包括:1、数码管:数子钟显示屏幕;2、按键:数子钟设置功能键;3、Flash存储器:存储软、硬件程序;在SOPCBuilder中建立系统要添加的模块包括:1、NiosⅡ32bitsCPU;2、IntervalTimer;3、按键PIO;4、连接数码管的PIO;5、SDRAMController;6、SystemIDPeripheral;7、JTAGUARTInterface;8、EPCSSerialFlashController。2.3数字钟的程序设计用8段数码管显示时间(小时:分钟:秒)。设置部分的功能是设置小时和分钟。时间算法部分指时间累加,即秒数加到60变为0,然后分钟数加1。分钟数加到60变为0,小时数再加1,小时数加到24时,小时数变为0,不断循环。数字钟主程序流程图如下:定时器初始化、中断初始化定时器初始化、中断初始化开始定时器计时是否有按键小时加1分钟加1时钟清零K1K2RESET时钟显示结束YN图2.1数字钟主程序流程图 在设计程序的时候,要注意按照硬件设计来设计,名称要与硬件部分相符合,不然会有错误;在添加头文件时,注意程序需要用到的头文件,不要少添加;实现功能所需要的硬件在程序也不要忘记定义;写中断服务函数的时候不要忘记在主函数中写中断注册函数;在编译有错误的情况下,参考错误提示来修改,这样修改速度回更快些。SOPC系统开发工具3SOPC系统开发工具3.1硬件开发工具QuartusIIAlteraQuartusII设计软件能够提供完整的多平台设计环境,能够直接满足特定的设计需要,为片上可编程系统(SOPC)提供全面完善的设计环境,内含有FPGA和CPLD设计所有阶段的决解方案。3.1.1QuartusII软件特点(1)基于模块的设计方法,提高了工作效率。LogicLock基于模块的设计方法,便于用户独立设计和实施各种设计模块,并且在将模块集成到顶层工程时还可以维持各个功能的模块性能,可以明显的缩短设计和验证周期。(2)更快的集成IP核。QuartusII软件包括SOPCBuilder工具,可以自动化的完成IP核的添加、参数设计和连接功能。(3)在设计周期的早期就对I/O引脚进行分配和确认。QuartusII软件可以预先在顶层模块未能完成时对I/O引脚分配和确认,这样可以在整个设计流程中尽早开始印刷电路板的布线设计工作。(4)存储器编译器。QuartusII软件中提供存储器编译器功能对嵌入式存储器进行管理,针对FIFO和RAM读操作的基于现有设置的波形动态生成功能。(5)用全新的命令行和脚本功能自动设计化流程。用户可以使用QuartusII软件中的图形界面独立运行QuartusII中的综合、布局布线、时序分析及编程等模块。并且能够对设计后的性能和功耗进行准确的估算。3.1.2QuartusII的设计流程QuartusII软件有着完整的设计平台,FPGA利用QuartusII的设计流程如下图:设计入口设计入口综合布线布局时序分析编程与重构调试改变工程管理定时终止图3.1QuartusII的设计流程图(1)设计入口:QuartusII的设计入口包括模块编辑器、MegaWizard管理器、文本编辑器和EDA设计输入工具。利用这些工具可以建立我们需要的设计代码并生成Symbol图,生成我们需要的所有子模块。(2)综合:综合是将HDL语言、原理图、等设计输入翻译成有基本逻辑器件组成的电路,QuartusII提供综合工具的分析和综合模块分析文件,并建立工程数据库,输出网表和映射文件,供布局布线工具使用。(3)布局布线:QuartusII可以完成布局布线功能,主要包括配置编辑器、分析布局、分析布局布线结果。将工程的逻辑和时序与器件可用资源相匹配,使得每个逻辑器件被分配最佳逻辑单元,并进行布线和时序的分析,选定互连路径和引脚分配。(4)时序分析:QuartusII软件中的TimeQuest可以时序分析所有逻辑,并达到设计的时序要求。操作要根据设计建立波形文件,选择我们的I/O口加载,设置好输入时间,自动执行。(5)仿真:QuartusII提供Simulator仿真工具,或者我们可以用第三方仿真软件进行仿真。(6)编程与重构:QuartusII软件正确编译工程之后,就可以对FPGA器件进行编程或配置,编程有被动串行模式、主动串行模式(AS)、JTAG模式、插座内编程模式,被动串行和JTAG模式允许使用CDF和Altera编程硬件进行编程,主动串行编程模式使用EPCS1或者EPCS4等串行配置器件编程,插座编程模式与CDF和Altera编程硬件可以对单个CPLD或者配置器件编程。3.2SOPCBuilder硬件开发工具功能SOPCBuilder系统开发工具允许嵌入式系统设计着在很短的时间内创建一个片上可编程系统(SOPC)。SOPCBuilder工具已经集成到了QuartusII软件中,在QuartusII软件菜单中的Tools工具下我们可以找到SOPCBuilder。SOPCBuilder配置流程如下:配置处理器配置处理器选择并配置外设连接模块生成系统制定指令处理器IP核模块外设库图3.2SOPCBuilder配置流程图(1)配置处理器,处理器系列包括了三种核心——快速的内核(NiosII/f)具备高性能,经济的内核(NiosII/e)具备低成本和标准的内核(NiosII/s)用于性能和尺寸的平衡。根据需要我们可以选择自己的处理器。(2)选择并配置外设,根据我们的硬件电路板,选择我们需要的外设接口设备,如:SDRAM、Flash、显示、按键等,SOPCBuilder的IP库提供和丰富的标准外设,我们根据需要添加。(3)连接模块。根据实际需要,选择我们的复位地址和代码开始执行地址,我可以用自动或手动分配器件的基地址和中断地址。在应用场合较高或者硬件资源非常有限的情况下我们任需要给器件手动分配基地址。(4)生成系统,启动SOPCBuilder的Generate命令,SOPCBuilder将根据我们选择的处理器和外设自动生成一个硬件系统。3.3NIOSIIIDE开发软件软件开发调试环境。开发环境还包括了GNU工具链、硬件抽象层(HAL)、实时操作系统(RTOS)、TCP/IP堆栈、指令集仿真器(ISS)。3.3.1NIOSII简介NIOSII是一个用户可配置的软核处理器,NOISII处理器不像ARM那样是由固定的硬芯片来实现,而是由软件设计实现,然后用设计文件来配置FPGA芯片。因此具有很大的灵活性。NIOSII系统设计分两大类:标准外设和自定义外设。Altera公司提供了系列的标准外设,如SDRAM、定时器、串行通信接口、通用IO口等标准外设。加上第三方软件的支持使得标准外设的IP核越来越丰富。由于在有些环境中需要运行某个程序需要处理大量的数据,这样占据相当多的CPU资源。在这种情况下我们可以自己定义一个外设,并集成到NOISII系统中,来进行大量的数据处理,从而改变两个方面的NIOSII系统的性能,一是用硬件方式代替软件代码,实现处理速度明显提升;二是节省了CPU资源。3.3.2NIOSIIIDE软件开发流程NIOSIIIDE开发流程有:创建工程→配置工程的系统属性→编译运行工程→调试模式→FlashProgrmmer下载(1)在SOPCBuilder下,在NiosIItools下点击NiosIIIDE启动我们的NIOSIIIDE软件,创建一个C/C++工程,并选择好工程模板。每个模板都包含了一些列软件。(2)文件和工程配置。配置工程的系统属性,主要有代码优化级别、调试级别和SystemLibrary选项配置。(3)编译运行工程,在编译工程完了之后会产生写系统的头文件,我们要尤为关注的是system.h这个文件下的两个参数,一个是器件的基地址一个是器件的中断信号。(4)调试模式,NIOSIIIDE包含了一个强大的GDB,其功能强大。我们将用USB-lasterII把扩展名为(.sof)文件下载FPGA中,在Run/DebugAS/NiosIIhardware就可以进入调试界面进行硬件调试。3.4开发板芯片介绍3.4.1开发板整体图片图3.3开发板整体图3.4.2FPGA芯片介绍Altera公司和Xilinx公司的FPGA芯片是现在主要的常用芯片,Altera公司的常用芯片中能支持SOPC的FPGA芯片主要分为高端和低成本FPGA芯片,高端FPGA有Stratix系列、StratixII系列和StratixIII系列等,低成本的FPGA有CycloneII系列、CycloneIII系列、CycloneIV系列等,在本次设计中所用的芯片是低成本的CycloneIV系列EP4CE15F17C8N芯片。CycloneIV系列的EP4CE15F17C8N信息如下图所示:图3.4EP4CE15F17C8的信息 EP4CE15F17C8N芯片拥有15408个逻辑单元,用户使用引脚有166个,具有516096bits的嵌入式RAM,拥有4个内置的PLL,其IO口采用的是3.3V的LVTLL标准。3.4.3SDRAM芯片介绍设计中所用FPGA芯片的SDRAM是外加HY57V2562GTR内存,HY57V2562GTR是容量为268435456bit(4bankX4MX16bit即4个可选页地址宽度为13行9列,数据宽度为16位)的同步动态随机存储器(SDRAM),全部采用CMOS工艺制成,其所有的端口都支持LVTLL标准,读延迟时间为2到3个周期,刷新周期为15.625us。最为重要的是读写延迟20ns;2ns输入建立时间,输入采样保持时间为1ns,输出高阻态时间为6ns,输出保持时间为3ns。其引脚功能图如下图所示图3.5SDRAM引脚功能图3.4.4EPCS介绍 EPCS芯片是串行配置芯片,本设计中的用的是EPCS4,用于存放我们的Bootloader程序,在NiosII处理器的设计中,需要把处理器设置成从EPCS启动,在CPU模块的系统复位地址,将其设置成EPCS,再分配基地址的时候需要把EPCS的地址锁定,并且锁定为0x00000000,这样系统复位后,NIOSII处理器会首先执行EPCS内的BootLoader程序,在软件设计中其包括了两个文件ltera_avalon_epcs_flash_contrller.h和altera_avalon_epcs_flash_controller.c其集成到HAL系统的驱动代码,是不可修改的。硬件设计部分4硬件设计部分4.1创建工程打开QuartusII软件,建立一个工程File->NewProjectWizard,出现工程向导对话框,点击Next,出现如下图所示的工程存储路径与工程名向导对话框。图4.1工程向导对话框第一行为工程的存储路径,需要在开始前建立一个文件夹,用于存储各种工程文件,注意存储路径中一定不能有空格和中文,将工程存储在E:/szz文件夹下,在第二行输入工程名sz,然后,点击Next,出现如下所示工程文件添加对话框。图4.2工程文件添加对话框这一页是工程文件添加对话框,由于是新建工程,没有要添加的工程,所以不需要修改,点击Next,如下图所示,Family选择CYCLONEIVE系列,芯片选择EP4CE15F17C8,说明一下EP4CE15F17C8N,N是代表无铅,与芯片型号没有关系;而EP4CE15F17C8L的L是低电压的意思,就是说这个是低电压版本。本设计使用的是正常的版本,即型号为EP4CE15F17C8。如下图红圈处。图4.3器件选择对话框后面的不需要进行任何设置,可以点击Next,直到Finish,完成工程建立;也可以直接点击Finish,完成工程建立。下一步,我们需要建立一个原理图文件,作为顶层文件,点击File->New,如下图所示,然后双击BlockDiagram/SchematicFile,图4.4原理图建立窗口建立好以后,弹出模块编辑窗口,如下图所示,记得将原理图文件保存到工程文件夹下。图4.5模块编辑窗口4.2创建NiosⅡ系统模块原理图文件建好后,我们就要进入SOPCBuilder中进行软核的设计了,创建的NiosII处理器软核和外设,是这个系统中最重要的模块,在完成后需要添加到刚才建立的顶层原理图中。点击Tools->SOPCBuilder。由于ALTERA增加了Qsys的功能,所以将SOPCBuilder放进了Tools下。进入SOPCBuilder以后,如下图所示,将SystemName命名为kernel,硬件描述语言选择Verilog,然后点击OK。图4.6创建新系统对话框4.3添加CPU和外围器件4.3.1添加NIOSIIProcessor首先,我们来建立NIOSIIProcessor,如下图所示图4.7系统元件窗口双击之后,将出现下图,这一步我们来选择软核的类型。NIOSIIProcessor给我们提供了三种类型,功能最多,占资源最多,速度最快的NiosII/f;功能比前者少了,占资源比前者少一些,速度也慢一些的NiosII/s;功能最简单,占用资源最少,速度最慢的NiosII/e。选择的时候要根据设计的需求和设计所用的芯片资源来决定。在这里,我选择NiosII/f,功能和速度都可以得到满足。下面的ExceptionVector是异常情况时的Memory类型和偏移量,ResetVector是复位后启动时的Memory类型和偏移量。现在还不能配置,需要SDRAM和FLASH设置好以后才能修改这里,这两个地方很重要。图4.8NiosII处理器核的设置页面点击Next,如下图所示,将下图红圈处,DataCache改为None。图4.9CachesandMemoryInterfaces设置页面接下来连续点击Next,一直到下图为止图4.10JTAGDebugMoudule设置页面这里设置JTAGDebugModule,即JTAG调试时所用到的功能模块。功能越多,需要的资源越多,这里,我们选择Level1即可,不需要过多其他的功能。点击Finish,结束NiosIIProcessor的建立。4.3.2添加SYSTEMID在左侧的元件库中,双击SystemIDPeripheral,进入以后,如下图所示,这里面会有个警告,只要按照规定做就可以了,命名为sysid,然后点击Finish。图4.11SystemIDPeripheral设置页面4.3.3添加SDRAMSystemID添加完后,接下来,我们来添加SDRAM模块,在左侧元件库中双击SDRAMController,进入SDRAMController配置界面,如下图所示,Presets处选择Custom;Datawidth处选择16bit;Row处填写13;Column处填写9。图4.12SDRAMController设置页面选择Custom,是因为自带的里面没有我们所使用的SDRAM型号,所以自定义相关参数。相关参数,当然需要看相应芯片的datasheet,我们所使用的SDRAM有两种,K4S561632K或者HY57V2562GTR,他们是引脚兼容的两种芯片,因此可以相互替代。我们所使用的,数据宽度Datawidth:16bit,ROW:13bit,Column:9bit。设置好以上参数,点击Finish完成SDRAM模块的添加。4.3.4添加EPCSSDRAMController添加完后,接下来,我们来添加EPCS模块,在元件库中双击EPCSSerialFlashController,进入EPCS配置界面,这里不需要做任何更改,直接点击Finish,完成EPCSSerialFlashController的构建。4.3.5添加JTAGUARTEPCSSerialFlashController完成添加后,我们来构建JTAGUART,JTAGUART接口用于NiosII处理器与计算机通信,在左侧元件库中双击JTAGUART,进入JTAGUART设置界面以后,不需要进行修改,点击Finish,完成构建。4.3.6添加TimerJTAGUART添加完成后,接下来,我们来构建Timer,在元件库中双击intervalTimer,进入后出现intervalTimer设置界面图4.13IntervalTimer页面在Period栏填1000;Countersize选择32;Presets选择Full-featured;然后点击Finish,完成构建。4.3.7添加连接数码管的PIO因为数字钟要显示小时、分钟和秒,所以要用到6位数码管,在添加连接数码管的PIO时,就要分别添加数码管的8位段选PIO和6位位选PIO。首先我们添加8位段选PIO,在左侧元件库中双击PIO,进入后出现PIO设置界面。在Width(1-32bits)项填8,Direction选择Output,其余项保持默认,点击Finish,完成8位段选PIO的添加。6位位选PIO的添加时一样的,不同的是在Width(1-32bits)项填6。图4.14控制数码管的PIO4.3.8添加按键PIO按键PIO的添加步奏与数码管PIO的添加步奏是相同的,在Width(1-32bits)项填2,因为在数码管的功能中只有调分和调小时两个功能,所以只需要两个按键;Direction选择Intput,因为按键信号是输入到系统中,所以要选择input;勾选Synchronouslycapture,EdgeType选择FALLING,勾选GenerateIRQ,在IRQType栏选择LEVEL,这里选择LEVEL是用电平来控制中断,如下图所示。图4.15控制按键的PIO4.4配置NiosⅡ系统模块将上述所有的模块构建完以后,我们需要进行修改名字,如果不改名字,就会出错,最后改完以后,如下图所示图4.16名字更改后的页面完成以上操作以后,cpu还需要进行设置,不然会有错误,我们双击cpu,如下图所示图4.17NiosII配置窗口ResetVector处选择epcs,ExceptionVector处选择sdram。ResetVector指复位地址,也就是说NIOS软核复位重启后,从此处开始运行。ExceptionVector是指出现异常,NIOS软核重启的地址。然后点击Finish,完成修改。接下来,我们需要对EPCS地址进行锁定,保证EPCS的起始地址为0x00000000,因为EPCS是NIOS软核重启后的起始位置,这样做的好处就是有利于我们操作,系统重启后从0x00000000开始也是我们思维习惯。如下图所示,将EPCS地址改为0x00000000以后,用鼠标点击下图红圈处,当小锁有开启变为闭合,即完成锁定。图4.18锁定EPCS地址EPCS的起始地址锁定后,我们需要进行自动分配一下空间地址,点击工具栏上的System->AssignBaseAddresses,完成后,每个器件后的起始地址都发生了改变。这样就完成了各个器件空间地址的自动分配。自动分配一下空间地址完成后,还要进行自动分配中断,点击工具栏上的System->AssignInterruptNumbers,系统会进行器件中断优先级的自动分配,IRQ栏的数字会发生变化。完成上述以后,我们将NIOS的时钟改为100M,如下图所示图4.19更改Nios时钟上面的工作完成以后,软核的构建工作已经基本完成了,接下来,我们点击Next,进入编译工作,点击Generate,编译完以后,会有信息提示,如下图所示,看到了Successful就可以判断,编译成功了。图4.20编译成功窗口编译完以后,点击Exit退出SopcBuilder。NiosII系统模块完成后,需要添加到先前的原理图文件中,回到Quartus界面以后,我们在原理图窗口双击,出现下图窗口,点击Project展开工作目,然后双击红圈处的kernel,将软核放到原理图内。图4.21Symbol窗口4.5建立锁相环PLLNiosII系统模块和SDRAM还需要时钟来驱动,所以需要建立锁相环PLL,给软核和外部的SDRAM提供时钟。在原理图空白处,双击左键,出现Symbol窗口,点击MegaWizardPlug-InManager,进入MegaWizardPlug-InManager[page1]界面,不做任何改动,点击next,出现如下图所示MegaWizardPlug-InManager[page2a]界面图4.22选择ALTPLL宏功能模块在左侧选择I/O下的ALTPLL,然后在右侧将其命名为PLL,使用的语言选择VerilogHDL,然后点击Next,进入PLL设置页面,如下图示图4.23时钟和工作模式设置我们将红圈处的输入时钟频率inclk0input设置为50M,这个地方是开发板上晶振的频率(50M),即基准频率。然后点击Next,如下图所示图4.24Inputs/Lock窗口把红圈处的两处勾选去掉,然后不断地点击Next,一直出现clkc0设置页面,如下图所示,图4.25clkc0设置窗口将Enteroutputclockparameters设置为1,可以看到ActualSettings显示为50.000000,即实际的频率为50MHz,这个是提供给软核的频率,接下来我们还需要设置SDRAM的时钟频率,点击Next,出现clkc1设置页面,如下图所示,图4.26clkc1设置窗口首先,将Usethisclock勾选,然后将Enteroutputclockparameters设置为1,可以看到ActualSettings显示为50.000000,即实际的频率为50MHz,这个是提供给SDRAM的。除此之外,由于电路板及芯片的信号延迟等原因,我们需要对时钟相移进行调节,以达到SDRAM的时钟与软核之间的协调。我们将Clockphaseshift设置为-73,这个Clockphaseshitf其实是一个范围,输入-65、-75应该也是可以满足的。都设置好以后,我们点击Finish,出现下图所示,点击Yes,完成锁相环的构建。图4.27PLL完成对话框然后按照添加NIOS软核的方法把锁相环添加到工程中。4.6引脚分配 接下来,需要将锁相环跟软核进行连接,锁相环的c0口接到软核的clk,连接方法就是将鼠标移动到端口处,当出现“+”符号的时候,按住鼠标左键,进行拉动,到了指定位置,松开鼠标即可。 连接好之后,就要进行引脚分配了。鼠标右键点击锁相环PLL,在下拉菜单里点击GeneratePinforSymbolPorts,如下图所示图4.28GeneratePinforSymbolPorts相同道理,对软核kernel进行分配,然后将管脚拉倒适当的位置,这时引脚的名称与tcl脚本文件中的名称不一样,还需要对引脚进行重新命名,这样才能用tcl脚本文件进行自动分配引脚。下面是截取osh.tcl文件中的一部分,重新命名是就按照这个来。#复位引脚set_location_assignment PIN_M1 -toRESET#时钟引脚set_location_assignment PIN_R9 -toCLOCKset_location_assignment PIN_A9 -toCLOCK_40M#EPCS引脚set_location_assignment PIN_H2 -toDATA0set_location_assignment PIN_H1 -toDCLKset_location_assignment PIN_D2 -toSCEset_location_assignment PIN_C1 -toSDO#SDRAM引脚set_location_assignment PIN_A10 -toS_DB[0]set_location_assignment PIN_B10 -toS_DB[1]set_location_assignment PIN_A11-toS_DB[2]set_location_assignment PIN_B11 -toS_DB[3]set_location_assignment PIN_A12 -toS_DB[4]set_location_assignment PIN_B12 -toS_DB[5]set_location_assignment PIN_A13 -toS_DB[6]set_location_assignment PIN_B13 -toS_DB[7]set_location_assignment PIN_A2 -toS_DB[8]set_location_assignment PIN_B1 -toS_DB[9]set_location_assignment PIN_C2 -toS_DB[10]set_location_assignment PIN_D1 -toS_DB[11]set_location_assignment PIN_F2 -toS_DB[12]set_location_assignment PIN_F1 -toS_DB[13]set_location_assignment PIN_G2 -toS_DB[14]set_location_assignment PIN_G1 -toS_DB[15]set_location_assignment PIN_F15 -toS_A[0]set_location_assignment PIN_F16 -toS_A[1]set_location_assignment PIN_G15 -toS_A[2]set_location_assignment PIN_G16 -toS_A[3]set_location_assignment PIN_C8 -toS_A[4]set_location_assignment PIN_A7 -toS_A[5]set_location_assignment PIN_B7 -toS_A[6]set_location_assignment PIN_A6 -toS_A[7]set_location_assignment PIN_B6 -toS_A[8]set_location_assignment PIN_A5 -toS_A[9]set_location_assignment PIN_D16 -toS_A[10]set_location_assignment PIN_B5 -toS_A[11]set_location_assignment PIN_A4 -toS_A[12]set_location_assignment PIN_A3 -toS_CLKset_location_assignment PIN_C16 -toS_BA[0]set_location_assignment PIN_D15 -toS_BA[1]set_location_assignment PIN_A15 -toS_NCASset_location_assignment PIN_B4 -toS_CKEset_location_assignment PIN_B16 -toS_NRASset_location_assignment PIN_B14 -toS_NWEset_location_assignment PIN_C15 -toS_NCSset_location_assignment PIN_B3 -toS_DQM[1]set_location_assignment PIN_A14 -toS_DQM[0]#按键对应的引脚set_location_assignment PIN_R8 -toKEY[2]set_location_assignment PIN_E1 -toKEY[0]set_location_assignment PIN_T8-toKEY[4]set_location_assignment PIN_M2 -toKEY[1]set_location_assignment PIN_T9 -toKEY[3]#数码管对应的引脚set_location_assignment PIN_M8 -toDIG[0]set_location_assignment PIN_L7 -toDIG[1]set_location_assignment PIN_P9 -toDIG[2]set_location_assignment PIN_N9 -toDIG[3]set_location_assignment PIN_M9 -toDIG[4]set_location_assignment PIN_M10-toDIG[5]set_location_assignment PIN_P11-toDIG[6]set_location_assignment PIN_N11-toDIG[7]set_location_assignment PIN_N6 -toSEL[5]set_location_assignment PIN_P6 -toSEL[4]set_location_assignment PIN_M6-toSEL[3]set_location_assignment PIN_M7 -toSEL[2]set_location_assignment PIN_P8 -toSEL[1]set_location_assignment PIN_N8 -toSEL[0]TCL(最早称为“工具命令语言”"ToolCommandLanguage",但是目前已经不是这个含义,不过我们仍然称呼它为TCL)是一种脚本语言。由JohnOusterhout创建。TCL很好学,功能很强大。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。因此这里面的TCL并不是我们平时所说的做家电的厂商。Quartus软件借助TCL诧言的强大功能完成很多工作,而引脚分配只是其中的一个功能而已,这个语言很简单,比如上面的引脚分配,我们拿一个引脚为例,set_location_assignmentPIN_R9-toCLOCK这句话的意思就是将名为CLOCK的引脚分配到FPGA的引脚R9上,很容易理解。我们之前将时钟引脚改名字为CLOCK,就是在运行TCL脚本的时候,将其指向R9。将所有引脚名字都修改完后,进行引脚分配。首先,将osh.tcl文件拷贝到工程路径下(TCL脚本文件所在路径中,一定不能有中文和空格,不然不能运行),然后,点击Tools->TclScripts…,进入以后,如下图所示图4.29TCL文件运行窗口选中osh.tcl,然后点击Run,完成分配。分配完成以后,正常情况,会看到每个引脚后面有个小尾巴,如下图所示,不过由于Quartus软件有bug,有的时候分配成功也不显示,所以可以通过另一个方法来判断是否分配成功了。点击Assignments->PinPlanner,如下图所示,可以看到,NodeName所在列为管脚名称(修改以后的),Location为FPGA的引脚号,可以看到都是一一对应的,跟osh.tcl是一模一样的。假如将引脚的名称改错了,那么就可以发现这个引脚所对应的Location部分是空的,这样就会发现错误所在,然后重新改正,重新分配TCL脚本文件即可。因此,这种方法是最可靠的。图4.30PinPlanner窗口引脚分配完成后,如下图所示图4.31完整的设计图4.7工程设置在引脚分配完成后,还不能直接编译工程,如果直接进行编译的话,就会出现错误,所以还需要对工程进行一些简单的设置,点击Assignments->Device,如下图所示图4.32器件设置对话框点击DeviceandPinOptions,如下图所示,将Useconfigurationdevice勾选,然后将其设置为EPCS64,这里需要根据所用开发板上EPCS的规格来设置,我开发所用的黑金开发板上用的是EPCS64,所以这里选择EPCS64。图4.33Configuration选项接下来,点击左侧的UnusedPins,如下图所示,将Reserveallunusedpins设置为Asinputtri-stated,如果没有设置这个地方,就会导致蜂鸣器一直在响,这个地方需要注意。图4.34UnusedPins页面点击左侧的Dual-PurposePins,如下图所示,将右侧红圈处的Value都设置为UseasregularI/O,这个地方是复用引脚的定义,将其设置为普通IO口使用,其中包含了EPCS的部分,这个地方跟CYCLONEII系列FPGA不一样,从软核上就可以看得出来,多了四个EPCS的引脚,需要手动来设置,这个跟芯片本身有关系,CYCLONEIII和CYCLONEIV的FPGA芯片都需要这样来设置。图4.35Dual-PurposePins页面点击OK,完成设置。保存以后,就可以开始编译了,点击按钮,开始编译。编译结束以后,会出现一个对话框,有successful字样,说明编译成功了。还看到有194个警告,可以不用理会,NIOS编译就是这样的,会有很多的警告,但是不影响编译进程,可以先无视。软件设计部分5软件设计部分5.1创建工程点击Tool->NiosIISoftwareBuildToolsforEclipse出现如下图所示界面图5.1WorkspaceLauncher在Workspace栏选择工程所在文件夹,点击ok进入到NIOSII软件界面。首先要创建一个Nios工程,点击File->New->NiosIIApplicationandBSPfromTemplate进入到如下图所示界面图5.2工程建立页面 在SOPCInformationFilename处选择工程文件夹下的kernel,sopcinto文件,在Projectname处填写工程名,最后在Template处选择BlankProject。点击Finish完成工程创建。5.2添加程序选中Workspace中的sz工程,然后右击,选择New->SourceFile,出现下图所示界面图5.3NewSourceFile在图中红圈处输入main.c,点击Finish。在出现的的空白main.c窗口中添加程序,保存并编译。编译的过程是右击sz工程,点击BuildProject。如出现错误,根据Problems栏中的错误提示修改程序,然后编译,直至没有错误为止。5.3程序分析程序是通过main函数来调用定时器中断函数,按键中断函数和数码管显示函数实现的。访问相关寄存器让按键中断可以使用,需要有以下两个头文件:#include"system.h"#include"altera_avalon_pio_regs.h"这两个头文件都是有开发系统自动产生的,“system.h”包含了NiosII软核处理器的硬件信息。头文件"altera_avalon_pio_regs.h"包含了并行输入/输出内核的硬件信息。要使用软核的自动功能,也需要包含由系统生成的头文件"sys/alt_irq.h"。外部中断时,NiosII处理器跳转到异常地址后,首先执行一段开发提供的代码,分析产生中断的原因,然后跳转到与之对应的中断服务函数中去执行。注册中断服务函数可以通过函数alt_irq_register()来实现。alt_irq_register()函数的原型为:alt_irq_register(alt_u32id,void*context,void(*isr)(void*alt_u32));其中alt_u32id是无符号32位整数型数据类型的硬件中断号码;viod*context是全局变量指针,用来向中断服务函数传递信息;void(*isr)(void*alt_u32)是指向中断服务函数的指针。中断服务函数的编写必须满足中断服务函数的要求,中断服务函数的原型必须符合如下标准:voidisr_name(void*context,alt_u32id)定时器的相关寄存器可以用头文件#include"altera_avalon_timer_regs.h"来访问,它也是由系统自动生成的,包含了定时器内核相关寄存器的映射,提供对硬件设备访问的宏定义。在中断服务函数中必须先清除状态寄存器的计数溢出标志位,由语句IOWR_ALTERA_AVALON_TIMER_STATUS(IRQ_TIMER_BASE,0x0000);通过向状态寄存器写数据0x0000实现计数标志位的清零。完整的程序请参考附录。5.4将程序和硬件下载到外部Flash中将USBBlaster一端与电脑连接(USB接口),另一端跟开发板的JTAG口连接(10针接口),然后上电(切记:不能在上电的情况下插拔JTAG口,以免JTAG口烧损)。首先,需要将.sof文件下载到FPGA中。有两种方法可以进入下载界面,第一种,在Quartus中,点击下图中Programmer按钮图5.4Programmer按钮第二种,在NIOSII中,点击NiosII->QuartusIIProgrammer,图5.5NiosII中QuartusIIProgrammer这两种方法都可以进入.sof文件下载页面,如下图所示,图5.6sof文件下载页面点击AddFile按钮,将sz.sof文件添加到下载页面中,如下图所示,然后点击start,开始下载。如果USBBlaster没有出现,可以点击HardwareSetup进行添加,如果HardwareSetup中没有USBBlaster,就要检查下载线的驱动是否正确安装。图5.7添加sof文件下载成功以后,如下图所示,进度显示为100%(Successful)。图5.8下载成功标志接下来,就要进行程序下载,如下图所示,在NIOSII中,点击NiosII->FlashProgrammer,图5.9FlashProgrammer向导进入下载页面后,点击Flie->New,出现如下界面,在BSPSettingsFilename栏添加settings.bsp文件。图5.10bsp文件添加点击ok,在下载页面Filesforflashconversion栏,还要添加两个文件,分别是sz.sof和sz.elf,如下图所示图5.11sof与elf文件添加文件添加完后,点击start,开始下载,等候下载完毕。下载完成后,就可以观看实物效果了,程序设定的时间是从00.00.00开始,从下图中可以看出时间是从00.00.00开始的,小时、分钟、秒分别被小数点分隔开,以方便区分。图5.12实物效果图时间显示是正确的,接下来,需要检验按键功能是否正确可用,在本设计中设有两个按键,分别为调时按键和调分按键,按一下调时按键小时加1,同理按一下调分按键分钟加1,在这里分别按5下调时按键和5下调分按键以检查按键功能。图5.12按键检测效果图从图中可以看出小时和分钟较之开始都增加了5,由此可以看出按键功能是正确可用。结论结论本设计是一个基于NiosII的数字钟,设计要达到的要求是能通过数码管正常显示时间,并且可以通过按键来调时间。通过事物的演示,本设计能在数码管上正常显示时间,并且可以通过两个按键分别调时和调分,本设计基本达到了设计要求。基于NiosII的设计基本分为两大部分,硬件设计部分和软件设计部分,其中在硬件设计部分通过SOPCBuilder进行Nios软核的搭建尤其重要。在进行Nios软核的搭建时,要注意各个器件的参数修改要根据设计所用器件的参数来修改,不要少添加器件。EPCS基地址锁定以后才能进行地址分配。在本设计中遇到的主要问题有:在开始时数码管时间显示段选不正确,通过查阅资料,发现是没有弄清楚数码管是共阴极还是共阳极,修改程序之后,时间可以正常显示;另一个主要问题是开始时只能进行时间显示,按键功能没有加上,通过不停的查阅资料,修改程序,最后按键功能正常。本设计还需改进的地方有:在调时时,秒显示依旧正常走,会导致调时不准确;时间是用数码管显示的,能显示的信息有限,功能只有调时和调分,功能太少,可以改用液晶屏显示,能增加显示的信息,还可以在增加如闹钟等功能。参考文献参考文献[1]陈欣波.AlteraFPGA工程师成长手册[M].清华大学出版社.2012.[2]夏宇闻.Verilog数字系统设计教程[M].北京航空航天大学出版社.2008.[3]郭利文,邓月明.CPLD/FPGA设计与应用高级教程[M].北京航空航天大学出版社.2011.[4]王刚,张潋.基于FPGA的SOPC嵌入式系统设计与典型实例[D].电子工业出版社.2009.[5]徐洋,黄智宇,李彦,陈卓.基于VerilogHDL的FPGA设计与工程应用[M].人民邮电出版社.2009.[6]欧文盛.ARM嵌入式LINUX应用实例开发[M].中国电力出版社.[7]孙恺,程世恒.NiosⅡ系统开发设计与应用实例[M].北京航空航天大学出版社.2007.[8]孟祥双,刘永宽,郭瞻.C语言教程[M].北京师范大学出版社.2009.[9]郭书军,王玉花,葛纫秋.嵌入式处理器原理及应用——NIOS系统设计和C语言编程[M].清华大学出版社.2004.[10]牛炯.基于SOPC技术的水下无线传感器网络节点设计[D].中国海洋大学.2008.[11]龚强.高速高精度多通道数控系统中基于FPGA的现场总线技术研究[D].合肥工业大学.2013.[12]王明辉.多稳态液晶的驱动系统设计和优化[D].东南大学.2011.[13]石桂友.基于NiosII的GPS信息接收系统设计[D].山东科技大学.2011.[14]张泰然.基于NiosII软核处理器的指纹识别系统SOPC设计与实现[D].华东师范大学.2008.[15]王志友.基于NiosII的二维条码数字水印嵌入式系统设计与实现[D].山东科技大学。2009.[16]王刚.面向智能仪器的SOPC嵌入式系统设计与实现[D].江苏大学.2008.[17]沈振乾.基于NiosII嵌入式喷涂控制系统的硬件设计与实现[D].天津大学.2006.[18]张小平.基于SOPC的谐波分析仪的设计.江苏大学.2005.[19]Wolf,W
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年内蒙古小升初(语文)考试真题含答案
- 广东省韶关市2026年重点学校高一入学语文分班考试试题及答案
- 2026年辽宁小升初(数学)考试试卷及答案
- 2026年黑龙江高考化学(真题)带答案
- 黑龙江哈尔滨德强高级中学有限公司2025-2026学年高二下学期期末英语试题(文字版含答案)
- 中学班主任主题班会课件:感恩教育主题班会
- 2026届白银市高三下学期第六次检测语文试卷含解析
- 海外华商数字境外航空材料国内适航认可线上跨境疲劳测试报告调取-基于民用航空材料适航管理规定实证
- 北欧跨境互联网萨米民族数字艺术中跨国原住民版权争议-基于挪威及瑞典萨米数字艺术馆案例实证
- ISO 171262024 土壤质量 - 污染物对土壤的影响的测定 - 莴苣幼苗出苗筛选试验标准立项发展报告
- 2025年消防继续教育试题及答案
- 刑事自诉状写作指南
- 古建筑地面基础施工方案
- 2024年《广西壮族自治区房屋修缮工程消耗量定额(建筑装饰工程)》
- 营地安全应急预案
- 2025年-《中华民族共同体概论》课程教学大纲-大连民族大学-新版
- 《绿色建筑符合性评估标准》
- 恶劣天气行车安全培训课件
- 浙江省心理b证笔试试题(含答案)
- 2025年《幼儿园3-6岁指南》考试试卷(含答案)
- 2025年初级编辑考试真题及答案
评论
0/150
提交评论