




免费预览已结束,剩余42页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
I本科毕业论文(设计)论文(设计)题目:基于FPGA的集成块测试仪设计学 院:大数据学院专 业:电子信息科学与技班 级: 学 号: 学生姓名:指导教师: 年 月 II 贵州大学本科毕业论文(设计) 论文(设计)题目:基于FPGA的集成块测试仪设计I摘 要IIIAbstractIV第一章 引言1第二章 开发平台介绍22.1开发芯片的选择22.2开发软件平台的选择22.2.1 QUARTUS22.2.2 Alter Modelsim22.2.3 Alter Eclipse32.2.4 Sublime text3第三章 EDA设计方法43.1自上而下的(TOP-DOWN)设计理念343.2设计语言的选择353.3HDL设计流程63.4模块化设计7第四章 作品设计84.1总体框图设计84.2硬件描述语言设计94.2.1 test_74ls00模型的设计94.2.2 test_74ls_ab_c模型的设计114.2.3 test_74ls_abc_y模型的设计144.2.4 my_pll模型的设计174.2.5 judge_module模型的设计194.2.6 hardware_module模型的设计224.3 nios系统软核的定制254.3.1nios设计介绍254.3.2需求分析264.3.3 软核设计264.4整体模块连接294.5应用程序软件部分设计304.5.1程序功能分析和概述304.5.2程序流程图设计314.6程序程序软件部分设计314.7模块综合31第五章 结论和总结33参考文献34致谢35附录361.硬件描述语言代码361。1 模块test_74ls_ab_y361.2 模块 test_74ls_ab_y381.3模块judge_module402 NIOS代码41IV 贵州大学本科毕业论文(设计) 摘 要基于FPGA的集成块测试仪,采用SOPC系(System-on-a-Programmable-Chip),即可编程片上系统,综合了nios II嵌入式处理器,实时时序电路,逻辑电路三大系统。他的功能主要是通过和系统中的数据库进行比较,快速准确检测集成块的功能好坏,同时利用PLL(Phase Locked Loop)倍频提供频率响应上限检测,利用nios II嵌入式处理器提供人性化的人机交互,同时利用脚本文件维护代码加速工程设计,利用ALTERS公司官方提供的内置原件库进行快速的硬件设计。整个系统综合了verilog HDL和c语言两大语言的优秀特性,融合了EDA设计和软件设计两大体系的优点,无论是响应速度,代码维护难度,代码实现难度都有着优秀的品质。关键词:FPGA;片上系统;SOPC;ALTER;集成块测试仪;Abstract第 42 页 贵州大学本科毕业论文(设计) 第1章 引言集成块测试平台是用来测试类似74系类芯片等功能是否正确,芯片是否损坏,和相应的参数的平台。随着电子教育在大学的展开,大学生对于动手制作电子设计的需求越来越大,同时对于各种集成块芯片的需求也相应的提高了,但由于学校使用的芯片属于重复利用的产品,经常要对其进行回收再利用,这样子虽然增加了芯片的重复利用率,节约了资源,但由于学生使用芯片会对芯片造成不可预料的损害,有时候芯片自身由于寿命和存储不当也会造成芯片的损坏,造成了学校芯片存储良莠不齐,对于统计芯片数量,和对芯片进行更新的工作造成障碍。纵观当前市场环境,虽然存在集成块测试的平台,但由于其主要用于工业生产,其体积和性价比都不是学校实验室所能接受的,基于这个原因,我决定开开发一款小型的快速的集成块测试平台。平台选用FPGA做为主控芯片,SPOC系统作为其主要设计思路。第2章 开发平台介绍2.1开发芯片的选择为了降低代码的维护性,加速检测速度可扩展性,我选择用FPGA进行集成块测试平台的设计。FPGA有以下几种优点,目前FPGA芯片具有容量大,速度高,集成度高,灵活性强等特点1,介于alter公司推出的SPOC系统(System on a Programmable-Chip),FPGA可以兼收cpu的顺序逻辑和EDA设计的并行逻辑各自的优点,同时可以根据项目的需求对cpu进行定制,从而达到最佳性价比。为了使用sopc功能同时保证逻辑门的数量,这里我们使用ALTERA FPGA开发板核心板CYCLONE IV EP4CE。无论是FPGA的工艺水平还是其开发工具,都有了长足的发展2。2.2开发软件平台的选择2.2.1 QUARTUSEDA软件我们选择Alter公司出品的Quartus II design ,Quartus II design 是一款可编程逻辑设计平台,其拥有强大设计能力,同时拥有直观的接口,得到数字系统设计者的热爱。当前最新版本是V15.0,考虑到v15.0知识更新了芯片的数据库,和略微提高了编译速度,这里我们选用稳定版本v13.0。2.2.2 Alter ModelsimQuartus 9.0版本软件本身支持仿真,在往后的版本此功能从软件中阉割出去,这里我的波形仿真软件使用Mentor公司出品的Modelsim软件,Modelsim是业界最优秀的(HDL)高速逻辑设计语言仿真软件,他不仅提供了友善的仿真环境,是行业内唯一支持VHDL和Verilog HDl混合仿真的仿真器。他采用直接优化编译技术,不仅拥有但内核仿真,编译速度快,还拥有编译代码和平台无关,利于保护IP核(intellectual property core)。不仅提供良好的用户交互界面,还提供脚本语言加快工程的建立,解决重复工作,提供工作效率。是FPGA设计的首选仿真软件。考虑到我们的代码量并不会那么多,同时为了软件间的无缝交流,这里我依然选择Alter公司提供的Modelsim。2.2.3 Alter EclipseSOPC系统c语言编写软件我这里选用alter 提供的Nios II 13.1 Software Build Tools for Eclipse。Eclipse 是一款开放源代码的、基于Java开发平台。就其本身而言,它仅是一个框架加上一组服务,通过插件组件构建IDE开发环境.Alter公司基于Eclipse开发的IDE不仅保留了Eclipse的优秀的开发和调试环境,还提供了与Quartus的无缝沟通。2.2.4 Sublime text由于Quartus提供编写环境并不是十分优秀,代码编写软件我这里使用sublime text。Sublime text 虽然是一款收费软件但可以无限期试用,Sublime Text具美者以户界面与强也,如代码缩略图,Python之插件,代码段等。同样也可自定义键绑定,工具栏,菜单。Text之大气包Sublime:拼写检,书签,API完之Python,Goto功,即目切换,多择,余窗云云。Sublime Text为一跨平台之编辑器,还支持Windows、Mac OS X、Linux、等系统。同时sublime text还支持语高亮,代码段脚本自动生成,等功能,提高编写的编写速度。第3章 EDA设计方法3.1自上而下的(TOP-DOWN)设计理念3数字电子技术工程师现在正面临着前所未有的挑战。一方面,电子公司要求工程师在更短的时间里,使用更少的资源来设计新产品,而且性能要比竞争产品好。另一方面,技术变化非常快,不同的客户有完全不同的需求,要求有更具个性化的产品。因此,EDA技术应运而生,成为解决以上“所有”问题的很好的技术选择4。当今社会,集成电路执照工艺越来越精密,在一个芯片上集成百上千万的器件已经不再是范范而谈,由此产生了一个很严重的问题,我们无法保证设计师能够独立完成如此规模庞大的电路而一点错误也不出现。利用层次化,结构化的设计方法,一个完成的硬件设计任务首先由总设计师规划为若干个可操作的模块,编制出相应的模型,通过仿真及易验证后,再把这些模块分给下一层设计师,这就允许了多个设计者同时设计一个硬件系统中的不同模型,其中每个设计者负责的自己所承担的部分,而由上一层设计师对其验证。自顶向下的示意图,以设计树的形式绘出如今电路造工者日益改善,令于一芯片上集数百万个亮器件成为了正常,但我难说一个设计师独成如此大之电路而不有误3。用层次化,结构化之设法,一方面,硬件设计师先由总设计师规为若干人可行之模块,然后做出相应的模型,当仿真检验成功后,将这些模块分给下一层设计师,这就是多个设计者共同设计一硬件系统中的不同模型,每个设计者掌握自己负责的地方,而由上一层设计师对其进行验证。自顶向下设计示意图如图一所示图3-1自顶向下设计方法是从系统级开始,以系统级为单元,然后根据每个单元再来设计下一单元,直到最后,可以用EDA元件库进行描述。3.2设计语言的选择3当前的硬件描述语言主要分Verilog HDL 和VHDL两大流派。VHDL全名为 VHSICHDL全称是Very High Speed Integerated Circuit Hardware Description Language,超高速度的集成电路的硬件描述设计语言。 Verilog HDL 是硬件描述语言的其中一种,用来设计数字电子系统。verilog HDL和VHDL各有各自的特点,因为Verilog HDL 再1983年就推出了,到目前为止有13年的历史,因此verilog hdl 有更广泛的使用群体,成熟的资源也比VHDL要丰富。与VHDL相比verilog HDl 更大的优点是,他是一种十分容易学习的硬件描述语言,只要对C语言有一定的编程基础,通过短时间的学习,再加上一段时间的操作,一般可以在短时间内掌握这种技术。而掌握VHDL设计技术就比较困难。这是因为VHDL设计语言并不是十分直观,需要有Ada编程的基础,一般要经过较长的时间掌握熟练4。目前两种语言在行为级抽象建模地覆盖范围方面也有所不同。一般来说verilog HDL 在系统抽象方面要比VHDL稍微差一点。而在门级别开关电路描述方面要比VHDL强很多。下图是两种语言建模能力的比较图 3-23.3HDL设计流程HDL设计流程主要是先从需求分析开始,对所需的功能进行分析,然后编写相应的HDL语言,再根据需求编写testbench对其功能进行验证,如果发现BUG,或者响应与预期的有所不同,则修改HDL文件,再次进行验证,如此反复,直到所设计的HDL实现自己所需要的功能。设计流程如图3所示图 3-33.4模块化设计考虑到复用和以后功能的扩展,以功能为单位实现各模块的逻辑设计.进而建立统一接口的模块库,为后续的相同,相似功能设计提供支持5 。无论进行什么设计模块化设计都是一种必要的选择。第4章 作品设计4.1总体框图设计图 4-1如上图,设计主要涉及硬件设计和软件设计,软件设计又包括硬件逻辑的设计和嵌入式cpu程序的设计。硬件部分主要包括74系列芯片的插槽,为方便用户提供的按键和蜂鸣器,同时为了设置方便通过串口与电脑相连接,提供更全面的用户操作。软件部分主要是nios-cpu软核的定制,74系列芯片模型和判断模块硬件描述语言的设计,还有nios程序的设计。4.2硬件描述语言设计4.2.1 test_74ls00模型的设计74ls00是四组二输入与非门,内部逻辑连接图和功能表如下图 4-2Function table Y=!(AB)inputOutput ABYLLHLHHHLHHHL表4-1 74ls00真值表为了测试74ls00的功能是否正常,我们需要内部模拟74ls00的逻辑,同时为了保证测试的准确性,我在这里加入一个计数器,作为74ls00的输入,加入计数器后,可将全部的输入再短时间内产生,将每次结果和预想的结果进行比较,如果正确率达到半分之百就正保证芯片的正常。假如这个表达式为真则表示在当前的输入的情况下次芯片正常工作(pin_3=array_return & pin_6= array_return & pin_8=array_return & pin_11=array_return)其中pin_number分别对应着74ls00的输出管脚,array_return对应着当前输入的正确逻辑。为了方便移植将代码封装好后生成以下block图 4-3clk时钟线Rst_n复位按键en使能按键equal相等输出Pin_174ls00对应管脚Pin_274ls00对应管脚Pin_374ls00对应管脚Pin_474ls00对应管脚Pin_574ls00对应管脚Pin_674ls00对应管脚Pin_874ls00对应管脚Pin_974ls00对应管脚Pin_1074ls00对应管脚Pin_1174ls00对应管脚Pin_1274ls00对应管脚Pin_1374ls00对应管脚表4-2通过改变时钟的频率可以改变改变计数器的计数速度,从而改变输出的变化速度,从而对芯片对频率的响应速度进行测试。但由于上述模块无法接入总线对整体设计造成了障碍,且模块兼容性并不高只能对一种模块进行测试,接下来我在这个模块的基础上对设计进行了改善。4.2.2 test_74ls_ab_c模型的设计通过对比74系类的芯片我们发现74系类的芯片在相同个数的输入个相同个数的输出的情况下的芯片管脚分布是相同的,这就说明我们只需改变逻辑而不需要改变管脚的输入和输出,和管脚的位置。所以这里我们加入了一个功能选择的端口logic_choose7:0为了兼容性,我们这里选择端口的数据宽度为八位always (*) begincase(logic_choose)0: begin LOGIC_74LS00 end1: begin LOGIC_74LS02 end2: begin LOGIC_74LS08 end3: begin LOGIC_74LS32 end4: begin LOGIC_74LS86 enddefault: begin LOGIC_74LS00 endendcaseEnd当logic_choose为0,1,2,3,4的时候这个模块分别对应着74LS00 74LS02 74LS08 74LS32 74LS86五个的测试逻辑。上面的LOGIC_74LS10 LOGIC_74LS11 LOGIC_74LS27 是为了程序维护为进行的宏定义代码如下define LOGIC_74LS00 array_return=!(array0&array1);define LOGIC_74LS02 array_return=!(array0|array1);define LOGIC_74LS08 array_return=(array0&array1);define LOGIC_74LS32 array_return=(array0|array1);同时为了将这个模块接入总线,我将equal改成了三态端口,对外接线片的端口pin_number【1:13】 这里我也将其设置为三态端口部分代码如下:assign pin_1 =en?array0:1bz ;assign pin_2 =en?array1:1bz ;assign pin_4 =en?array0:1bz ;assign pin_5 =en?array1:1bz ;assign pin_9 =en?array0:1bz ;assign pin_10 =en?array1:1bz ;assign pin_12 =en?array0:1bz ;assign pin_13 =en?array1:1bz ;当en为0 的时候即不选中这个芯片,上述管脚将都输出为高阻态。为了方便移植生成相应的block模型图 4-4Pin_*对外接74芯片的相应的管脚clk时钟线Rst_n复位en使能(高电平有效)Logic_choose7:0功能选择端0: 测试 74LS00 模块是否正常 1: 测试 74LS02 模块是否正常 2: 测试 74LS08 模块是否正常 3: 测试 74LS32 模块是否正常 4: 测试 74LS86 模块是否正常 其他:测试 74LS00 模块是否正常 表4-3下面要对该模型进行功能测试,这里我在testbench中模拟一个74lsxx 两输入一输出的芯片模型,提供相应的控制信号对其进行仿真,为了快速书写testbench,这里我使用quartus自动生成testbench的功能。然后稍加修改。仿真波形如下图:图 4-5为了测试其功能,我设置了个计数器,在测试的前半段,我将外部逻辑故意写错,从而equal出现了局部为1,大部分时间不为1,在后半段我将逻辑修改正确,全时段为1.说明equal功能正常,同时在最后我将使能信号取消,pin_* (表示以pin为开头后面为任意符号的管脚)等管脚高阻输出,表示其可以接上总线。功能满足。4.2.3 test_74ls_abc_y模型的设计类似于74ls_abc_y我又设计基于y=abc的模型的74系列芯片的测试模块如下图的74ls10芯片图 4-674ls10是一款ttl的3个三输入与非门。功能选择接口设计代码如下:always (*) begincase(logic_choose&8h03)0:begin LOGIC_74LS10 end1:begin LOGIC_74LS11 end2:begin LOGIC_74LS27 enddefault:begin LOGIC_74LS10 endendcaseEnd当logic_choose为0,1,2,的时候这个模块分别对应着74LS10 74LS11 74LS27 这个74系列芯片的测试。以上宏定义如下define LOGIC_74LS10 array_return=!(array0&array1&array2);define LOGIC_74LS11 array_return=(array0&array1&array2);define LOGIC_74LS27 array_return=!(array0|array1|array2);为了挂上总线,与总线相接的接口均要将其设置为三态双向接口 设计代码如下assign pin_1 =en?array0:1bz ;assign pin_2 =en?array1:1bz ;assign pin_13 =en?array2:1bz ;assign pin_3 =en?array0:1bz ;assign pin_4 =en?array1:1bz ;assign pin_5 =en?array2:1bz ;assign pin_11 =en?array0:1bz ;assign pin_10 =en?array1:1bz ;assign pin_9 =en?array2:1bz ;assign equal = en?equal_reg:1bz;当en为1的时候接口为常态,当en为0的时候接口为三态状态为了方便移植生成以下block图 4-7Pin_*对外接74芯片的相应的管脚clk时钟线Rst_n复位en使能(高电平有效)Logic_choose7:0功能选择端0: 测试 74LS10 模块是否正常 1: 测试 74LS11 模块是否正常 2: 测试 74LS21 模块是否正常 其他:测试 74LS10 模块是否正常 表4-44.2.4 my_pll模型的设计为了测试芯片在不同的输入频率下的反应能力,这里我自己简单的定做了一个pll模型。基本原理就是,定义一个计数器,当计数达到一定数值的时候,输出改变,即做了一个简单的分频器,通过改变计数的数值大小,就可以得到不同频率的时钟。图 4-9每当外部clk的上升沿到来的时候,将counter加一,当counter累计到目标值的时候清零,同时将flag置为1,在下一个时钟到来的时候,将flag置0,my_clk每当检测到flag,为1的时候my_clk=!my_clk。这样就可以实现分频器的制作。计数器部分代码如下counter=(10-clk_rank_reg) begincounter=0;flag=1b1; endelse beginflag=0;endMy_clk翻转的部分代码如下if (flag=1) beginmy_clk=my_clk;end由于这里我只设置了10个等级的频率输出,但考虑的将来的可移植性和总线的接入,这里将频率选择的接口设置为八位。但由于输入只有0到10,如果用户输入10以外的数据就会发生未知的错误,为了避免这种错误,代码上我们这样处理assign clk_rank_reg =clk_rank=10?clk_rank:8d10;通过三目运算符号,同时内部加上一个数据的暂存器器,如果输入大于10这里就取问好后面即10,如果输入小于10则取问号前面即输入是多少就是多少。为了方便移植,生成的block如下图:图 4-10引脚功能clk输入时钟Rst_n复位信号输入Clk_rank7:0分频等级的选择(10表示不分配,9到0表示不同程度的频率降低)My_clk输出时钟信号表4-5Testbench这里我这样书写,首先设置一个计数器,每当达到100个计数(大概1000ns)即100个时钟周期,我就更改控制端clk_rank7:0的大小,从而观察在不同的控制端的信号的情况下,输出的时钟的情况Testbench图如下:图 4.11我们可以清楚的看到输出的时钟频率在逐渐加快最终等于输入时钟频率。4.2.5 judge_module模型的设计为了减少cpu的运算量,同时为用户提供一个稳定可靠的检测结果,我设计judge_module模块。模块原理图如下图 4-12因为即便芯片发生错,但偶然的情况下,还会在相应的输入的情况下输出正确的结果,如果我们仅仅以一次的判断断定这个芯片是否正常,则不够准确,所以这里我们取一个采样次数,这个采样次数将多次遍历全部的输入可能性,检测其可靠性,这样我们得出的数据将会更加准确。我将这个模块的时钟同test_74lsxxx_xx_xx等模块的时钟设置相同的时钟,这里只需每个时钟对来一test_74lsxxx_xx_xx的equal的信号进行判断是否为1进行统计即可。为了降低nios系统的编程难度和计算难度,这里我将计算出相应百分比,由于verilog HDL在计算除法时无法得出小数部分(这里指的是无法直接的得出小数部分),我们这里采用先将计数乘以100然后再除以给出的采样次数求整,就可以计算出小数部分。当输出为100的时候说明该芯片稳定可靠。由于需要分启动,采集,计算三个步骤才能完成这个模块的功能这里我们需要将这个模块设计成时序逻辑电路。状态机如下:图 4-13首先等待外部给的启动信号start,当start等于一的时候,进入采集状态,每当一个时钟的到来计数器加一同时,采集一下数据并进行比较,如果equal等一,则对正确次数加一,等到采集数量等于预设数值的时候,进入下一状态,计算结果,同时是给标志位。使其他设备可以采集到此数据。为了方便移植,生成的block如下图:图 4.14接口说明:clk时钟信号Rst_n复位信号equalEqual输入over结束标志位Percent7:0芯片正确率输出start模块启动信号Sample15 :0采样数量表4-6仿真,这里我们将采集的数量设置为100,目的是为了快速的看到输出结果,为了检测模块的功能,这里我将equal的正确数量设置79得到的仿真波形如下图:图 4-15结果输出正确可以准确的计算出芯片的正确率。4.2.6 hardware_module模型的设计设计好上面的模块,我们需要将这几个模块进行整合,将其封装成一个模块,首先我们利用前面生成好的bolck组装成我们想要的模块,连接好线同时设置对应的输入输出。图 4-16由于Modelsim并不支持bdf(上图这种编写代码的方式)模式的仿真,我需要将其转化成verilog HDL,手工转换费事且容易出错,这里我利用Quartus的自动生成代码功能将其转换成逻辑描述语言。同时将其加入工程,再生成整体图。生成的整体block如下:封装好的模块图 4-17clk时钟信号输入Rst_n复位信号输入Test_74ls_aby_en74_aby模型选择(二输入一输出)Test_74ls_abcy_en74_abcy模型选择(三输入一输出)start模块启动信号sample采样次数Logic_choose功能选择over结束信号percent正确率Pin.*对外接74ls系列芯片表4-7接下来还要进行testbench仿真测试,测试结果图如下:图 4-18在testbench中我将其中一个逻辑门写死(即输出始终是零),输出正确率是百分之二十五图 4-19完全正确的情况下输出正确率是百分之百。4.3 nios系统软核的定制4.3.1nios设计介绍对于速度要求不是很高的低端应用Aletar将一个软核放入PLD中, 这个软核就是NIOS6。我们使用的工具是alter提供的qsys-alter系统集成工具。Qsys系统集成工具可以自动产生逻辑互链,这在FPGA的设计过程中节省了及其大量的精力和时间,Quartus是新一代的SOPC Builder工具的一个新的FPGA优化供电网络芯片(NOC)技术提供更高的性能,提高设计重用,和更快的验证与SOPC Builder。嵌入式SoPC设计已经渗透到军事、网络通信、工业控制和消费电子等领域的每个角落7。Qsys的优点加速开发1.支持方便的GUI界面,支持IP功能和子系统的快速集成。2.Altera及其IP合作伙伴提供,即插即用的Qsys兼容IP3.支持不同工业标准接口的混合使用4.系统HDL自动生成5.分层设计流程,实现了灵活的设计6。6.提高了设计重用能力对于SOPC Builder设计,Qsys的移植流程。比以前更快的时序收敛1.同SOPC Builder系统互联架构进行比较,性能提高了两倍2.能够控制功能强大的自动流水线,满足fMAX和延时系统要求。比以前更快的完成验证1可以够迅速开始您的仿真,.利用自动测试台生成功能并使用验证IP套装72.采用系统控制台将读写操作发送至工作系统中,迅速完成电路板开发表4.74.3.2需求分析根据设计总图来看,这里我们需要PIO对外进行控制,需要UART模块与电脑进行连接,需要提供中断系统,需要一个RAM存储程序。4.3.3 软核设计根据需求,纳入如下几个模块图 4.20Clk_s时钟信号输入输入时钟频率设置为50MHZcpuCpu的选型:考虑到功耗和资源的占用这里选用标准型的cpu标准型号的cpu主要配置如下RISC32-bitInstruction cacheBranch predictionHardware multiplyHardware divide由于涉及到乘法的计算非常多这里我们嵌入 乘法器Reset vector这里我们 选择后面的epcs_control模块因为cpu复位代码要从cpepcs中复制过来Exception vector这里我们选择内部ram,因为没有外部ram,这里我们选择内部ram,加入内部ram后程序还会有所加速其他配置我们这里选择默认配置ram作为程序运行空间Jtag_uart作为程序运行空间Uart_115200Uart 作为蓝牙调试使用,经我们实验115200在不牺牲数据正确率的情况下是系统最好的选择Inter_timerUart 作为蓝牙调试使用,经我们实验115200在不牺牲数据正确率的情况下是系统最好的选择Timer_externUart 作为蓝牙调试使用,经我们实验115200在不牺牲数据正确率的情况下是系统最好的选择En_io与外部使能端相接配置:8位输出其他默认Logic_choose_io与外部logic_choose相接 配置:8位输出,其他默认Sample_io与外部sample相接 配置:16位输出,其他默认Io_32备用32位io配置:输入输出模式,32位,同时启动中断功能Sys_id标志内核版本,方便代码移植Epcs_contralEpcs控制 默认配置即可表4.8选择且配置好相应的模块之后,将ram的地址设置为0x00,然后自动生成地址,将irq与cpu相连接,然后生成IRQ。最后生成模块的逻辑描述语言,同时生成相应的block。生成后block如下图:图 4.21接口说明En_ioIo输出Uart(tx,rx)串口输出输入clk时钟信号输入Rst_n复位信号输入Epcs_control这个接口接epcs,目的是为了离线保存代码,类似于flashLogic_choose_ioIo输出Sample_ioIo输出Percent_ioIo输入Io_32保留io表4.94.4整体模块连接连接好的模块如下图:图 4.22上面连线使用的是标志连线的技巧(即名字相同的连接在一起),最后再生成对外管脚,同时分配管脚即可完成硬件逻辑设计方面的全部设计。4.5应用程序软件部分设计由于alter官方提供的标准库支持标准IO这里我可以在电脑上先完成IO操作的相关代码的设计然后再移植到开发板上。4.5.1程序功能分析和概述COM( cluster communication port ),串行通讯端口,通过com口,我们可以将验证平台与电脑相连接,解决用户交互io的欠缺,方便用户使用,同时可以降低开发难度,节省成本。基于com口的指令设计指令功能ls列出当前全部的可检测的芯片型号Ic=?设定要检测的icRate=?设定测试频率test开始检测,同时输出检测结果表4.104.5.2程序流程图设计图 4.23首先请求电脑客户端输入指令,用户输入指令,检测指令是否符合规则,若符合规则继续向下,若不符合规则,则输出相应的提示信息要求用户重新输入。向下进行后,先对指令进行解析,判断是什么指令,判断后进行相应的设置和相应的IO操作。4.6程序程序软件部分设计由于alter公司提供一些标准宏可以直接连IO到应用空间,驱动编程就是变成十分简单,只需学会使用相应宏便可以灵活的使用IO。(还需要添加些东西)4.7模块综合将硬件程序和软件程序下载到开发板子上,然后便可以进行相应的仿真和调试,确定无误后便可以将硬件描述逻辑部分,和软件程序部分同时固化到FPGA板子上,之后程序便可以掉电之后依然保存数据。(还需要添加些东西)第5章 结论和总结FPGA 不断向高集成度、大容量、高速、低功耗、低价位的方向发展8,FPGA内嵌Nios-软核具有成本低、灵活性高、生产周期短等特点,广泛应用于智能电子产品、医疗电子设备、无线通信产业中。基于fpga的集成块测试平台,有着体积小,使用方便智能,可扩展性强,如果需要便可增加相应的数据库,由于是总线连接,方便了将来扩展新的模块。但由于时间的限制,这个作品也存在着明显的不足,由于是基于FPGA的续航能力便成了问题,不适合蓄电池使用,但随着FPGA的发展,硬件语言设计越来越得到业内的重视的情况下来看,FPGA必定将成为将来电子应用上一可璀璨的星,现阶段,半导体市场格局已成三足鼎立之势,FPGA,ASIC和ASSP三分天下,ASIC因其设计周期长,改版投资大,灵活性差等缺陷制约了它的应用范围。FPGA/CPLD设计正好弥补了这一缺陷9。在当前市场的趋势下,虽然现在全球经济不景气,很多半导体厂商都受到影响,但是据专家预侧,全球经济不景气对嵌入式FPGA市场的冲击非常的小,嵌入式FPGA市场将逆市而卜,成为众人瞩目的亮点10。 相信续航能力也会有很大的改善,同时FPGA造成的成本过高也是一方面问题(相比于大型的集成块测试平台,这个成本是可以接受的)。由于没有嵌入linux等文件系统,每次更新数据库需要重新编译,从维护上也增大了难度,如果可以加入文件系统,然后将芯片的数据以文件的形式导入,将会对其的使用有很大的提高。参考文献1韩彬,于潇宇,张雷鸣编著. FPGA设计技巧与案例开发详解. 北京:电子工业出版社, 2014.09.2高亚军编著. 基于FPGA的数字信号处理. 北京:电子工业出版社, 2015.07.3夏宇闻著. Verilog数字系统设计教程 第3版. 北京:北京航空航天大学出版社, 2013.07.4陈欣波等编,Altera FPGA工程师成长手册,清华大学出版社,2012.06.015张松,李筠,FPGA的模块化设计方法J,学术论文 (2014年05期)6方茁,彭澄廉,陈泽文,基于NIOS的SOPC设计,Computer Engineering and Design, 2004年04期7Pong P.Chu编著, 金明录,门宏志译,基于Nios 2的嵌入式SoPC系统设计与Verilog开发实例,电子工业出版社2015.05.018王红,彭亮,于宗光,FPGA现状与发展趋势J, 产品、应用与市场 (2007年07期)9孙恺 程世恒编著,Nios2系统开发设计与应用实例,北京航空航天大学出版社,2007.08.0110嵌入式FPGA市场将逆市而上,集成电路应用 2003年02期致谢在本次论文的撰写中,我得到了教授的精心指导,不管是从开始定方向还是在查资料准备的过程中,一直都耐心地给予我指导和意见,使我在总结学业及撰写论文方面都有了较大提高;同时也显示了老师高度的敬业精神和责任感。在此,我对教授表示诚挚的感谢以及真心的祝福。四年大学生活即将结束,回顾几年的历程,老师们给了我们很多指导和帮助。他们严谨的治学,优良的作风和敬业的态度,为我们树立了为人师表的典范。在此,我对所有的大数据学院的老师表示感谢,祝你们身体健康,工作顺利!附录1.硬件描述语言代码 1。1 模块test_74ls_ab_ydefine LOGIC_74LS00 array_return=!(array0&array1);define LOGIC_74LS02 array_return=!(array0|array1);define LOGIC_74LS08 array_return=(array0&array1);define LOGIC_74LS32 array_return=(array0|array1);define LOGIC_74LS86 array_return=(array0array1);timescale 1ns/1nsmodule test_74ls_ab_y(/system_portinput clk,input rst_n,input en,/keep until endinput 7:0 logic_choose,/keep until end/74ls00_portinout pin_1,inout pin_2,inout pin_3,inout pin_4,inout pin_5,inout pin_6,inout pin_8,inout pin_9,inout pin_10,inout pin_11,inout pin_12,inout pin_13,inout equal); reg 1:0array ;assign pin_1 =en?array0:1bz ;assign pin_2 =en?array1:1bz ;assign pin_4 =en?array0:1bz ;assign pin_5 =en?array1:1bz ;assign pin_9 =en?array0:1bz ;assign pin_10 =en?array1:1bz ;assign pin_12 =en?array0:1bz ;assign pin_13 =en?array1:1bz ;reg array_return;always (*) begincase(logic_choose&8h07)0:begin LOGIC_74LS00 end1:begin LOGIC_74LS02 end2:begin LOGIC_74LS08 end3:begin LOGIC_74LS32 end4:begin LOGIC_74LS86 enddefault:begin LOGIC_74LS00 endendcaseendalways (posedge clk or negedge rst_n) beginif (!rst_n) beginarray=0;endelse beginarray=array+1b1;endendreg equal_reg;always (posedge clk or negedge rst_n) beginif (!rst_n) beginequal_reg=0;endelse beginif (pin_3=array_return&pin_6=array_return&pin_8=array_return&pin_11=array_return) beginequal_reg=1;endelse beginequal_reg=0;endendendassign equal = en?equal_reg:1bz;Endmodule1.2 模块 test_74ls_ab_ydefine LOGIC_74LS10 array_return=!(array0&array1&array2);define LOGIC_74LS11 array_return=(array0&array1&array2);define LOGIC_74LS27 array_return=!(array0|array1|array2);timescale 1ns/1nsmodule test_74ls_abc_y(/system_portinput clk,input rst_n,input en,/keep until endinput 7:0 logic_choose,/keep
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论