版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
硬盘编译码的FPGA实现中文摘要在硬盘的数据传输和存取过程中,信道调制编码是一个不可缺少且关系到存储系统性能的环节,它解决的问题主要是使输入的序列得以在介质中存储,并使从介质中读取得信号还原为原本的信息。在使用峰值检测技术的磁盘驱动中的一种标准编码是码率为1/2的(d,k)=(2,7)码,也称Franaszek码。本文阐述了硬盘编译码的FPGA实现的设计,在简要介绍了FPGA技术背景、VHDL语言和MAX+plusII开发平台的基础上,阐述了硬盘编译码的FPGA实现的各模块的设计,并设计了硬盘编译码的FPGA实现的整体架构。Franaszek编码码元长度可变是本设计的一大难点,Franaszek编码是一种同步变长编码,其码率不变但码元长度可变,是一种特殊的变长编码。本设计采用状态机解决了变长编码码元识别的问题,状态机思想的优越性在本设计中得到了很好的体现,在较低的时钟频率下很好地解决的变长编码码元识别的问题。让编码序列连续输出时本设计的另一个难点,由于在编码器中最高时钟频率仅能与输出序列的时钟同步,要在同一个时钟沿解决存入与输出的问题,文中设计了一个缓存控制器用于控制输出的连续性,使输出序列保持连续。采用了VHDL硬件描述语言对各基本模块进行了设计实现,并给出各模块和整个系统的仿真结果。本课题的硬盘编译码器实现,为实用游程长度受限码编译码在的FPGA上的实现做了探索性尝试,为其他信道调制编译码的IP核设计和FPGA实现有一定的借鉴意义。
关键词:游程长度受限码,FPGA,VHDL,MAX+plusII
FPGAimplementationofharddiskencodinganddecodingAbstractDuringtheprocessofdatatransmissionintheharddisk,channelmodulationcodingisanecessaryandalsorelatedtotheperformanceofthestoragesystem.Itsolvetheproblemwhichtheinputtedsequencecanberecordedatreadfromthestoragemedia.Oneofthecodingmodeisusedinthediskdrivewhichadoptthepeakdetectiontechnologyasastandardcode,itscoderateis1/2and(d,k)=(2,7),so-calledFranaszekcode.ThispaperintroducedthedesignoftheFPGAimplementationofharddiskencodinganddecoding,onthebasisofbrieflyintroducingthetechnicalbackgroundofFPGA\VHDLandMAX+plusIIdevelopmentsoftware.Allthemajormodulesoftheencoderanddecoderwasbeenexpoundedanddesigntheoverallstructureofthem.ThemostdifficultproblemisthelengthofcodeelementsofFranaszekcodeisvariable,Franaszekisakindofsynchronousvariablelengthcodewhosecoderateisinvariableandthelengthofcodeelementisvariable,soitisaspecialkindofvariablelengthcode.Thisdesignusesstatemachine,solvetheproblemrecognitionofcodeelementsofthevariablelengthcode,theadvantageofstatemachineprinciplewasbeenwellshown,tosolvetheproblemoftherecognitionofcodeelementsinaverylowclockfrequency.Tolettheoutputsequencecontinuousisanotherdifficultyinthisthesis,becausethehighestclockfrequencyonlycanbesynchronouswiththeclockofoutputsequenceofencoder,soitmustfinishtheoperationofstorageandoutputinthesameclockedge,thisthesisdesignabuffercontrollertoensurethecontinuityofoutput,maintainthecontinuousoutputsequence.UsingVHDLdesignedandimplementedharddiskencoderanddecoderofbasicmodeandgivesthesimulationresultofmainmodulesoftheencoderanddecoder.ThedesignandimplementationofharddiskencoderanddecoderprovidedanexploringattemptonthehardwareimplementationofpracticalRLLencoderanddecoderandareferenceonotherchannelmodulationencoderanddecodersystemIPcoreandtheirFPGAimplementation.
Keywords:run-length-limited,FPGA,VHDL,MAX+plusII
目录
第一章:绪论
11.1课题概述
1器件的应用状况与发展趋势
1第二章:FPGA介绍
3的结构
3的优点
5的性能
7的FLEX10K系列FPGA
8第三章:VHDL介绍
103.1硬件描述语言概述
10的特点
11的功能与应用
12的语法
12第四章:MAX+plusII软件介绍
144.1MAX+plusII概述
144.2MAX+plusII的界面
154.3MAX+plusII的设计流程
16第五章:基于FPGA的硬盘编译码器的设计
21系统的总体设计
21状态机的设计
24缓存控制器的设计
28结论
37谢辞
38参考文献
39
第一章:绪论1.1课题概述随着微电子技术与自动控制技术的发展,越来越多的FPGA器件正广泛应用于各种数字信号处理过程。其特点是硬件体积小、实时性好、工作效率高,提高了系统集成度。在一般信号处理系统中,当前比较通用的系统结构通常会分立元件,采用电子管、晶体管、中小规模集成电路来实现信号处理算法、具体控制和通信任务。但由于半导体工艺及可编程逻辑器件的飞速发展,可编程逻辑器件的集成度越来越高,运算能力越来越强,对于完成传统的数字信号处理任务而言实在大有富余。而电子产品市场的激烈竞争,迫切要求电子产品设计工程师缩短开发周期,加快产品的更新换代。而又有高可靠性,小体积,造价低的要求。在这些场合中,使用分立元件固然不可行,即便开发周期来得及,成本也无法接受。而使用基于FPGA的平台,结合采用EDA技术的开发平台,就成为一种具有优势的方案。本设计针对硬盘数据存储中的信道调制编码的技术问题。采用Altera公司的FLEX10K系列FPGA,使用VHDL语言在MAX+plusII开发平台下,编写了集编码器译码器于一体的数字信号处理系统。器件的应用状况与发展趋势随着半导体工艺及EDA技术的飞速发展,FPGA的应用在通信、消费电子、汽车、存储、服务器、工业、航空和国防等领域日益渗透和拓宽。几乎可以说已涉及到社会的各个方面,而数字信号处理是FPGA应用的重要领域。实现以FPGA为核心的数字信号处理自动化和机电设备及科学仪器仪表的现代化,是我国信息产业技术进步的重要内容,是降低能源及原材料消耗、提高产品质量及性能、增强国际竞争能力缩短产品上市时间的重要技术进步手段。EDA技术是ElectronicDesignAutomation(电子设计自动化)的缩写EDA技术就是以计算机为工具,在EDA软件平台上,根据硬件描述语言HDL完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局线、仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。[1]EDA主要包括FPGA器件、硬件描述语言HDL和EDA工具软件三大部分。电子设计自动化技术是21世纪电子设计领域中最重要的技术之一。EDA技术是20世纪90年代初从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。可编程逻辑器件自上世纪70年代出现以来,已有了很普遍的应用,为数字系统的设计带来极大的灵活性。20世纪末世界上最大的变化就是全球市场的形成。全球市场导致竞争空前激烈,促使企业必须加快新产品投放市场时间(TimetoMarket)、改善质量(Quality)、降低成本(Cost)以及完善服务体系(Service),这就是企业的T.Q.C.S.。由于可编程逻辑器件可以通过软件编程对其硬件的结构和工作方式进行重构,使得硬件的设计可以如同软件设计那样方便快捷。这一切给数字系统的设计带来了革命性的变化。纵观可编程逻辑器件的发展史,它在结构原理、集成规模、下载方式、逻辑设计手段等方面的每一次进步都为现代电子设计技术的革命与发展提供了不可或缺的强大动力。可编程逻辑器件的门类较多。先后发展出PLA、PAL、GAL、EPLD、FPGA和CPLD等类型。事实上其中的FPGA和CPLD日益成为基本主导形式,这已成为半导体器件行业的共识。与其他可编程逻辑器件相比,FPGA和CPLD在结构工艺集成度、功能速度和灵活性方面都有很大的改进和提高。CPLD是指基于乘积项技术FLASH工艺的PLD,FPGA是指基于查找表技术、SRAM工艺的PLD。CPLD与FPGA由于各自的特点与优势,使得二者在可编程逻辑器件技术的竞争中并驾齐驱,成为两支领导可编程器件技术发展的主要力量。对用户而言,CPLD与FPGA的内部结构确有不同,但随着技术的发展,一些厂家陆续推出了一些新的CPLD和FPGA,这些产品逐渐模糊了CPLD和FPGA的区别。因此也很难准确定义每个型号到底属于这两种类型中的哪一种。因此在实际应用中,用户无需深究两者的区别,习惯上都把他们叫做FPGA。FPGA主要用于工业、农业、教学和科学研究中的实时信号处理和过程控制。现在一些重要的消费电子产品(如移动通信设备和数字电视)和科学仪器仪表(如示波器和生物医学仪器)将FPGA作为解决方案的越来越多。综上所述,FPGA技术是一类跨世纪的高新技术,应用广泛,发展前景良好,因此,相信以FPGA为基础的高性能数字系统将成为主流。
第二章:FPGA介绍的结构FPGA是FieldProgrammableGateArray(现场可编程门阵列)的缩写,FPGA是从PAL、GAL、EPLD等传统可编程逻辑器件发展而来,它是ASIC领域中的一种半定制器件,具有可编程的特点,同时又克服了传统可编程逻辑器件逻辑门电路不足的缺点。可编程逻辑器件(PLD)自上世纪70年代发明以来,先后有PROM、PLA、PAL、GAL和EPLD等多种实现方式或产品类型,而当前最具代表性及应用最广泛的是FPGA和CPLD器件。[2]FPGA器件由美国的XILINX公司于1985年首先推出。一般把FPGA定义为基于查找表(Look-UpTable,LUT)技术和SRAM工艺的PLD,目前的FPGA已经远远超出先前产品的基本功能,并且整合了许多常用功能(如RAM、时钟管理和DSP),在新型的系统级可编程逻辑器件中还可以IP核的形式来进行功能设计。使得FPGA中可以实现DSP、MCU等嵌入式处理器。在未来的数字系统中,或许只需要一块FPGA芯片就可以实现所有功能,成为片上系统(SOC,SystemOnaChip)。
图2-1
FPGA的芯片结构查找表的本质是一个RAM,用户用原理图或HDL语言描述好逻辑电路的设计后,由设计软件计算出所有可能的结果后存入相应的地址,这样,输入信号就等于RAM的地址,输入地址后就会输出相应的数据作为计算结果。一般FPGA的查找表是一个4输入的SRAM也可以看成一个16x1的RAM。因此FPGA是一种细粒度器件,触发器资源十分丰富适合用于时序电路的设计,但由于乘积项资源不够丰富,在用于组合逻辑的场合时就需要当量的逻辑块间的连线,而FPGA的逻辑块间的连线是分布式的,因此FPGA的延迟是不可预测的。
CPLD(ComplexProgrammableLogicDevice,复杂可编程逻辑器件)器件是一种基于乘积项(productterm)的可编程逻辑器件,CPLD利用宏单元(marcocell)实现逻辑功能,宏单元由乘积项阵列和控制清0与时钟的可编程开关与触发器组成。其中乘积项阵列是一个“与或”阵列在与或阵列的没个交叉点上都有一个可编程熔丝如果导通就可以实现“与”逻辑,阵列后面还有乘积项选择矩阵,作为“或”阵列。图2-2
CPLD的总体结构通常一个宏单元包含16个乘积项,因此设计人员可部署大量的组合逻辑而不用增加额外的路径。这就是为何CPLD被认为是“逻辑丰富”型的。但单个CPLD中通常仅包含数百个宏单元,因此CPLD的集成度不如FPGA,寄存器资源也远不如FPGA丰富,但FPGA在逻辑块之间的连线是集总式的,相对于FPGA的分布式布线,CPLD的延迟是均匀和可预测的,且CPLD的速度比FPGA快,可以工作在较高频率,总体而言CPLD器件提供的资源比FPGA少,但CPLD具有很好的可预测性。[3]由于半导体技术的飞速发展,每年都有许多新器件出现,且器件的工艺和内部结构日趋复杂,很难根据传统的定义判断每个PLD产品属于FPGA或CPLD,而各PLD供应商也不断推出各种兼具两种器件特点的新型器件,再加上不同厂家对器件的定义方法各不相同,因此在许多场合都把新型的可编程逻辑器件统称FPGA,毕竟用户关心的是器件的功能而不是器件的运行原理与内部结构,而两者在功能甚至开发上并无不同。下文也不特别区分FPGA与CPLD。的优点最近10年国内FPGA应用有了很快的发展,按照传统观点,FPGA仅使用于产品原型设计和ASIC的验证,用于大规模的数字系统开发就过于昂贵而且功耗过大。但随着近年来FPGA的研发陆续突破了低功耗、低成本和先进工艺的瓶颈后,FPGA解决方案的应用领域正在日益扩张,FPGA数字系统在通信、数据处理、网络、仪器、工业控制、军事和航空航天等众多领域得到了广泛应用。随着功能和性能的进一步提高,FPGA的应用已从可编程逻辑领域扩展到了其他技术领域,如高性能DSP、高性能嵌入式处理和高速串行连接。FPGA解决方案之所以有如此广泛的应用,正是因为随着EDA技术和微电子技术的迅速发展,FPGA相对于其他类似功能的器件的许多优势日益凸显。FPGA相对于DSP的优势DSP(DigitalSignalProcessor)是一种特殊的微处理器,在一块芯片内包含了控制、运算、寄存器和一定数量的存储单元。DSP采用流水线结构,基于冯诺依曼结构的某种变形,采用软件编程,因此它的运算基本上是串行的。DSP在数据通信、音视频处理和数字控制等领域有广泛的应用,FPGA相对于DSP的优势是:片内实现细粒度,高度并行的结构,目前串行结构的处理器发展已经遇到了瓶颈,性能难以进一步提高,近几年,并行计算正逐步成为计算机科学的热点研究方向,而DSP从根本上讲其结构只适合串行的算法结构,多处理器系统是很昂贵而且只适合粗粒度的并行运算。这与FPGA的片内实现并行算法在开发的难度和成本上是无法相提并论的。明显的性能提升,FPGA的计算能力比DSP的性能更加强大。例如,30美元的Spartan23AFPGA性能可高达每秒200亿条乘法累加操作(GMACs),同样花30美元买一个600MHz的C64xDSP,每秒的累加操作仅仅是25亿条,后者在性能上差距了一个数量级。FPGA允许用户构件高度并行的器件结构,使采样速率和时钟速率达到相等,再加上FPGA内部集成锁相环,可以使外部时钟倍频,在数据量大,速度要求高的场合中,FPGA是无法被替代的。功能和应用更加灵活,DSP实现的是软逻辑,DSP根据烧写在存储器中的代码动作,DSP首先需要从存储器中读取代码,然后解释代码、执行代码。FPGA实现的是硬逻辑,设计者用硬件描述语言(HDL,HardwareDescriptionLanguage)描述要实现的逻辑,然后综合下载到FPGA后,生成相应的电路,这些电路由基本的门电路和触发器构成,配置十分灵活,而且可以完全根据算法定制理想的器件结构。另外DSP的外围扩展接口种类和数量都是固定的,不够用时无法增加,多余的时候也无法腾出来用作其他用途,因此FPGA更具灵活性,虽然FPGA本身不能实现复杂的功能但随着各厂商提供各种功能的IP核,目前FPGA中已经可以嵌入8051、ARM和高性能DSP等通用处理器,这将使FPGA实现真正的SOC。可以毫不夸张的讲,FPGA能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路,都可以用FPGA来实现。降低成本,减少PCB面积,降低功耗,FPGA允许允许集成其他系统所需的元器件。同一片FPGA,不同的编程数据就可以产生完全不同的电路功能。因此FPGA也是提高系统集成度的最佳选择,它可以将DSP解决方案中所需的接口电路集成到FPGA中,从而降低成本和功耗,而一些新型号甚至还包含了模拟电路,一些系统中包含数十路AD、DADSP必须仔细进行资源分配、总线隔离,而FPGA中只要利用自身IO就能解决问题。因此FPGA在提高系统集成度,降低硬件复杂性,缩短开发周期和降低成本方面具有独特的优势。[4]相对定制ASIC的优势ASIC(ApplicationSpecificIntergratedCircuits)即专用集成电路,是指应特定用户要求和特定电子系统的需要而设计、制造的集成电路。ASIC的特点是面向特定用户需求。FPGA是ASIC的近亲,两者的应用基本相似。FPGA相对全定制ASIC的优势在于:更快的上市时间:无需布线、掩模和其它制造步骤。FPGA无需任何制造过程,可以直接实现现场编程,用户也不需要考虑掩膜设计,布线和电路参数等具体问题,而ASIC无论在设计还是制造上都要比FPGA花费更多时间。缩短了设计周期。目前主流EDA软件已经能够很好地实现综合、布线和配置的自动化,设计者只需要关注器件的功能就可以了,利用VHDL等硬件描述语言在EDA软件中描述好器件的行为之后就可以进行实际电路的仿真,然后就可以在具体的器件上设计方案。而ASIC的设计者需要完成所有电路的设计,这需要大量的人力物力也需要不少时间,但却只能带来很小的性能提升。现场可重编程能力。今年来在自动控制技术和数字电子技术飞速发展,设计出一个数字系统通常不需要多久就被淘汰,而ASIC一旦制造出来就无法再改变其内部电路结构和功能,再加上设计耗时太久,经常在产品上市不久就被淘汰,而FPGA内部的电路结构可以在现场通过多种方式重新编程,使产品更能适应新技术和市场需求的变化。由于技术的发展,市场需求的不断变化,导致产品的生命周期越来越短,可编程技术势在必行。目前,ASIC开发公司和FPGA开发公司的比例约为30:1,但由于技术的不断进步和FPGA成本优势的不断凸显,FPGA在未来将不断蚕食ASIC的市场,并逐步成为专用集成电路市场的主流。[5]的性能FPGA自上世纪80年代诞生以来,其性能就一直保持很快的上升速度,如Altera公司推出的基于40nm工艺的StratixIVGT系列FPGA包含24个工作速率高达的收发器,逻辑单元增加至最多530K。速度提高的同时功耗也有所下降,Xilinx公司推出的Virtex-6功耗较之Virtex-5降幅多达50%,成本也有20%的下降。另外FPGA还支持多种不同的IO标准,FPGA的IO可以按组分类,每组可以支持完全不同的IO标准,灵活的IO使FPGA的接口电路设计大幅简化。另外FPGA还提供嵌入式的存储器,这些片上存储器的延时通常很低,跟普通的门电路差不多。而且配置相当灵活,大多数支持双端口模式。运算速度则是FPGA最大的优点,根据测试,同样价格的FPGA在通信应用中吞吐量为同样价格DSP的5~10倍。因此在DSP的传统应用数字信号处理领域,FPGA的性能也具有明显的优势,由于FPGA中包含大量的低功耗、高密度乘法器、存储器和逻辑资源,在低成本领域,目前,已经有不少低成本FPGA能够满足1080pHDTV的性能要求。因此在复杂的信号处理方面,FPGA也有其它处理器无法比拟的优势,随着并行处理在各个领域的逐渐普及,FPGA将完成许多以前由DSP或DSP阵列来完成的工作。除了FPGA本身的发展之外,近几年FPGA开发工具的发展也十分迅速,业界也普遍认为当前FPGA的普及度不如DSP和单片机最主要的原因是各行业的开发人员还难以适应FPGA的全新的设计方法和技巧,各大FPGA厂商无疑也意识到了这一点,近两年来,FPGA各种开发工具版本不断更新,说明各厂商都一直为设计工具的开发投入精力,当前主流FPGA厂商都提供了丰富的IP核,其中还有许多是包含处理器和DSP功能的软核,这些模块库和工具的完善将为FPGA的普及消除最后一道障碍,大幅提高FPGA解决方案的新引力和易用性。当然在遇到复杂的串行算法时,DSP的流水线处理器结构则比FPGA更适合,而对于侧重控制的场合,仍然是单片机更合适,总之FPGA是属于并行计算时代的器件。的FLEX10K系列FPGAFLEX10K是业界第一款嵌入式PLD,采用了重复可构造的CMOSSRAM工艺,把连续的快速通道互连与独特的嵌入式阵列结构相结合,同时FLEX(FlexibleLogicElementMatriX)架构可结合众多可编程器件来完成普通门阵列的宏功能,具有强大的系统集成功能。由于其具有高密度、低成本、低功率等特点,所以脱颖而出,成为当今AlteraPLD中应用最好的器件系列。型号典型门数逻辑单元LE数逻辑阵列块LAB数EAB数最大IO引脚EPF10K1010000576723150EPF10K202000011521446189EPF10K303000017282166246EPF10K404000023042888189EPF10K5050000288036010310EPF10K707000037444689358EPF10K10010000499262412406EPF10K130V130000665683216470EPF10K250A25000012160152020470表1
FLEX10K器件特性Flex10K集成了1万~25万个逻辑门,最多40960位RAM,其中每个嵌入式阵列块(EmbeddedArrayBlock,EAB)包含2048位。FLEX10K集成的EAB可以配置成ROM或者RAM,两种情况下都可以构成2048x1、1024x2、512x4、256x8等四中类型中的任意一种。EAB中的RAM输入与输出端口是分开的,这样就不需要三态门进行总线隔离,减少编程上的麻烦。FLEX10K作为Altera的主流器件具有多种特性包括:为各种功能配备嵌入式阵列,如高效存储器和专用内存;大量通用逻辑阵列;高达10000到250000个典型门内置RAM可达40960位,每个EAB包含2048位,使用这些RAM不需要减少任何逻辑容量;支持MultiVoltI/O界面;低功耗(多数型号在待机模式下的典型功耗少于);FLEX10K设备支持标准;内置JTAG(JointTestActionGroup)边界扫描测试电路,兼容标准,使用这项功能不需要花费任何器件逻辑。由于集成度可以高达25万门,FLEX10K器件提供了高密度、快速并且可以集成整个系统(包含多个32位总线)等特性都集成到单一器件中。FLEX10K器件是可再配置的,它可以在投入开发前进行100%的测试,因此,设计者不需要制定测试向量来覆盖所有错误。设计者也不需要辨别不同的ASIC设计方案,FLEX10K器件可以在板上配置成所需要的专门的功能。所有的FLEX10K器件都包含嵌入式阵列(embeddedarray)和逻辑阵列(logicarray)。嵌入式阵列用于实现存储功能或复杂的逻辑功能,如数字信号处理(DigitalSignalProcessing,DSP)、微控制器(microcontroller)和数据转换等功能,逻辑阵列实现ASIC中门海的功能,它用于实现一般的逻辑功能,如计数器、加法器、状态机和数据选择器。将门阵列与嵌入式阵列结合起来,就可以实现高性能、高密度的嵌入式门阵列,使设计者得以将整个系统集成在单一器件内。[6]
第三章:VHDL介绍3.1硬件描述语言概述FPGA的设计方法主要有4种1、画原理图输入;2、用VHDL或VerilogHDL等硬件描述语言(HardwareDescriptionLanguage,HDL)来描述设计然后进行逻辑综合;3、用图形化的描述语言来描述设计;4、混合使用各种方法。每种方法都有自己的特点和应用场合,当中HDL是最重要的现代硬件描述手段。HDL是用于设计硬件电子系统的计算机语言。硬件描述语言是相对于一般计算机软件语言如C、BASIC来说的,HDL是设计者和EDA工具的界面,HDL主要用于描述电子系统的逻辑功能、电路结构和连接方式,设计者通过HDL来描述所设计的电子系统的结构特征和行为方式。由于采用计算机语言的形式,HDL比电路原理图更容易编译并且可读性更强。在越高级别的描述中,HDL的重要性越大。尽管原理图能更清楚地传达部分信息,但通常它们没有语言描述那么容易理解。并且HDL的文字描述比原理图中关于元件和导线位置的图形描述更容易被程序处理。目前最具代表性且使用最频繁的美国国防部开发的VHDL(Very-High-SpeedIntegratedCircuitHDL)和Verilog公司开发的VerilogHDL。现在VHDL和VerilogHDL作为IEEE的工业标准硬件描述语言,得到了大多数EDA工具的支持。[1][7]HDL源于各公司开发的EDA工具,各家公司在开发EDA工具时也必须同时设计一种HDL,但这些HDL大多数只成为企业标准,而无法成为国际标准。上世纪80年代初,美国国防部为了降低开发费用,避免重复设计,要求各承包商按照同样的设计语言进行甚高速集成电路的开发,于是VHDL工作组于1981年6月成立,于1983年由Intermatrics、IBM、TI三家公司组成开发小组。1986年3月IEEE开始制定VHDL标准,经过1年的审查,1987年12月IEEE发布了第一个VHDL标准版本IEEEstd1076(简称VHDL-1987)。VHDL1987发布之后获得了广泛的支持,主流EDA软件相继宣布支持VHDL,1993年IEEE又发布了新版本的VHDL标准IEEEstd1076-1993(简称VHDL-1993),VHDL-1993只增加了少量功能,并修改了少部分语法规则。绝大部分基本语法语义的定义与VHDL-1987是一样的,1997年IEEE制定了包含模拟电路设计功能的VHDL扩充版本,成为VHDL-AMS,AMS的含义是模拟和混合信号(AnalogandMixedSignal),1998年IEEE制定了用于寄存器传输级(RTL,RegisterTransmitLevel)综合的VHDL子集标准。在2000年与2002年又有新版本的VHDL标准,但这些后续版本仅对一些不常用的功能进行修改,基本的内容一直没有变化。[8]本设计基于VHDL-1993。的特点与其他HDL和软件编程语言相比VHDL具有以下特点或优势:与具体器件无关,设计系统时只需要考虑其行为的实现,而不必与具体的器件关联,或者输入具体的硬件参数,这种与硬件关联度较小的特点使FPGA能较好的适应各种设计,并且有更普遍的应用。强大的行为描述能力,随着半导体工艺的进步和百万门级的FPGA出现普及,FPGA及ASIC的设计复杂性必然增加,VHDL强大的行为描述能力使得它比其它HDL更适合VLSI、SOC等规模较大的集成电路设计。VHDL本身具有广泛的多领域的应用,VHDL基本具备了所有硬件描述语言应有的特性,这就意味着设计者从原始的系统行为描述,同过逐步地分解综合等过程,直到最后生成FPGA厂商提供的适配器所能接受的编程文件的整个过程,都可以在VHDL的范畴之内完成,VHDL所支持的电子系统设计级别包括系统级、行为算法级、寄存器传输级(RTL)、逻辑级和开关级。VHDL把大部分设计工作推给计算机,这使得VHDL对计算机和VHDL综合器有较高的要求,随着EDA工具和VHDL综合器的日益完善和计算机性能的大幅提高,VHDL的这一特点使其与其他HDL相比具有更高的设计自动化程度,同时设计者可以根据综合的结构进行适当的修改,或者对综合器的参数进行必要的设定以达到理想的性能指标,这无疑使VHDL成为一种优秀的EDA解决方案。科学的语言结构,可读性好,作为一种计算机语言,VHDL既可以被计算机编译,也可以被人理解,VHDL的源代码,既是程序,又是文档。既成为学术交流中的载体,又可以作为合同签约者之间的文件。支持大规模项目的层次化设计和已有设计的再利用,随着半导体工艺的不断发展和集成电路规模的扩张,一个大规模的设计项目已经很难由一个人完成,而必须由一个项目组甚至多个项目组协同完成,VHDL中实体、类属、程序包和设计库的概念让层次化设计和以往设计的再利用变得十分方便,从而实现了多人多任务并行工作的方式,保证大规模的系统设计能被迅速完成。标准化,可移植,作为IEEE的一种工业标准硬件描述语言,VHDL获得了众多EDA工具的支持,任何设计,只要它采用VHDL,都可以在不同的设计平台间转移,这又进一步提高的VHDL的通用性。VHDL在提供与工艺无关的设计途径的同时,又具备在设计中加入工艺参数的特性,在工艺改变时,只需要修改相应的类属即可使同样的设计适应不同的工艺。设计的各个阶段都能进行仿真和验证,VHDL在制定之初就考虑到了电路的仿真和验证问题,在EDA工具中设计者可以在设计的每个阶段对设计的每个部分进行验证,检查逻辑和电路的正确性,从而减少错误发生的可能性和设计的反复修改。降低了开发成本的功能与应用经过几十年的发展VHDL在众多HDL中逐步脱颖而出成为电子系统设计的通用语言,同时它还不断拓展应用领域。在EDA软件的编辑器中VHDL是电子系统设计语言,描述系统的结构和功能。经过编译后又成为用于系统行为仿真的VHDL行为仿真文件,而经过VHDL综合器后的结果会生成VHDL网表文件,此文件可以直接交给厂商提供的适配器用于配置可编程逻辑器件或产生下载所需的配置文件。VHDL还可以用于层次化设计,将预先定义的VHDL描述的元件和程序包存入EDA软件的数据库中。除了行为描述外,VHDL也可以描述电路结构,包括门级描述、功能块描述和寄存器传输级描述,当然随着抽象级别的提高,VHDL更能体现它的优势,SOC的发展成熟也对HDL描述的范围提出了更广泛的要求,而在VHDL中允许对相同的描述建立不同抽象级别的元件模型。随着电路规模的扩大电路的模拟验证正成为FPGA和ASIC设计的一大挑战,在模拟验证中VHDL可以提供数字系统元件的特性以及它们之间的相互连接和相互作用,甚至包括外部的输入信号和内部的信号观察点。总之随着EDA工具的进一步成熟,除了主流的硬件描述语言之外,VHDL已经成为电子设计领域学术交流、设计存档、程序模块的移植、ASIC源程序的交付、IP核的应用等领域有了广泛的应用,显然,VHDL已成为软硬件工程师们的共同语言。的语法一个完整的VHDL程序包含以下部分:库(Library):存放已经编译的包集合、实体、结构体和配置等。库的好处在于使设计者可共享已经编译过的设计结果。包(Package):声明在实体中将用到的信号定义、常数定义、数据类型、元件语句、函数定义和过程定义等。实体(Entity):定义电路的输入/输出接口。结构体(Architecture):描述电路内部的功能。一个实体可以对应多个结构体,但在同一时间,只有一个结构体被使用。配置(Configuration):决定哪一个结构体被使用。并非所有VHDL程序都具有以上5种语法结构。理论上只有实体和结构体式必备的,而在实际应用中常要在实体之前调用程序包。以下一个2分频电路是VHDL程序的常用结构:libraryIEEE;
--库、程序包调用useIEEE.std_logic_1164.all;
entityFreDevideris
--实体声明port(clock:instd_logic;clkout:outstd_logic);end;
architecturebehaviorofFreDevideris--结构体定义signalclk:std_logic;begin
process(clock)
begin
ifrising_edge(clock)then
clk<=notclk;
endif;
endprocess;
clkout<=clk;end;程序中--标识后的字符为注释。
第四章:MAX+plusII软件介绍4.1MAX+plusII概述MAX+plusII是美国Altera公司的第三代FPGA开发软件,其全称为MultipleArrayMatrixandProgrammableLogicUserSystems。MAX+plusII可以在安装Windows、SunSPACstations、HP9000Series700/800或IBMRISCSystem/6000的计算机上运行,MAX+plusII的功能强大而且使用方便。使用MAX+plusII,用户不需要了解可编程逻辑器件的内部结构,用户可以用自己熟悉的方法(原理图或HDL)进行设计,MAX+plusII会将用户的输入自动转换为最终形式,利用MAX+plusII可以高效灵活的设计各类数字电路。MAX+plusII包含编辑、编译、仿真、综合和下载等功能。用户可以在软件中完成从源代码输入到最终配置器件的整个过程,MAX+plusII具有开放的界面,它支持的HDL有VHDL、VerilogHDL和Altera自家的设计语言AHDL,并且提供了与其他主流EDA软件工具的接口,除了软件自身集成的大量功能块和元件库外,设计人员可以自行添加自己的宏定义和程序包,从而达到缩短开发周期,减少工作量的目的,MAX+plusII仅支持部分VHDL语句的综合,但由于其功能的高度集成化以及方便的操作使得其在国内高校和VHDL初学者中具有很高的普及率。相关资料也比较丰富,特别适合初学者使用。本设计采用MAX+plusII的最后一个版本MAX+plusII10.2baseline版
图4-1
MAX+plusII的组成4.2MAX+plusII的界面在WindowsXP系统中(其它平台与此类似),选择“开始”→“所有程序”→“MAX+plusII10.2BASELINE”→“MAX+plusII10.2BASELINE”就可以进入MAX+plusII开发平台,MAX+plusII各组件界面如图,下文中各界面元素的名称以图中所示为准。
文本编辑界面图4-2
文本编辑界面编译器
图4-3
编译器
波形编辑器界面图4-4
波形编辑界面
仿真器对话框图4-5
仿真器4.3MAX+plusII的设计流程使用MAX+plusII设计FPGA的基本流程如图所示,下面就简要介绍Franaszek编译码器的设计的操作。
图4-6
用MAX+plusII进行FPGA设计的基本流程设计输入(1)打开TextEditor在主菜单最左边的MAX+plusII菜单中选择TextEditor进入文本编辑界面,然后就可以输入编码器状态机的代码了。(2)存储文件在File菜单中选择Save,打开如图所示的对话框,选择欲存放的路径并输入文件名。MAX+plusII中的文本编辑器太过简陋以至影响使用,习惯UltraEdit的程序员可以使用UltraEdit来完成设计输入,再在MAX+plusII打开编译即可。在UltraEdit的中加入VHDL的关键字即可实现VHDL关键字的高亮显示。将当前文件设为工作文件在File菜单下的Project子菜单中选择SetProjecttoCurrentFile,或用快捷键Ctrl+Shift+J将设为当前工作文件。编译在主菜单的MAX+plusII中选择Compiler,出现编译器窗口。此时可以在主菜单的Processing中选择FunctionalSNFExtractor进行功能仿真,若选择TimingSNFExtractor则进行时序仿真。VHDL仿真器允许定义输入并应用到设计中,不必生成实际电路就可以观察输出,功能仿真主要用于检查系统功能设计的正确性,不涉及具体器件的硬件特性。根据适配到具体器件后的模型,可以进行时序仿真。因为此时已经得到目标器件的实际硬件参数,所以仿真能够比较精确地代表实际性能。如果仿真结果达不到设计要求就要选择其它目标器件或修改VHDL源代码,甚至重构整个系统。这里先选择功能仿真的编译,验证状态机功能的正确性。仿真(1)打开波形编辑器的输入节点对话框在主菜单中的MAX+plusII子菜单中选择WaveformEditor,打开波形编辑器。然后再Node菜单中选择EnterNodesformSNF(2)选择要观察的节点单击右上角的List按钮,在左边的AvailableNodesGroups中就会出现于左下角的Type对应的节点,这里只要观察输入输出,就只选择Inputs、Outputs和Groups三种节点。选择需要观察的节点如图,就可以然后单击“=〉”按钮,这些节点就会出现在SelectedNodes&Groups中。这就完成了对节点的选择,然后点击ok,选择的节点就会出现在波形编辑器中。(3)对输入信号进行赋值单击节点名称后整个节点会被选中,然后可以对输入信号进行赋值,也可以选中输入信号中的一段进行赋值在时钟赋值中,其中时钟周期的赋值与Option菜单中的GridSize的设置有关,ClockPeriod必须是GridSize的偶数倍。进行仿真将赋值好的波形保存,然后在MAX+plusII菜单下的Simulator就是仿真器了,点击Start就可以开始仿真,编码器状态机的功能仿真结果显示在波形编辑器中,如图,
图4-7
编码器状态机仿真结果层次化设计仿真好编码器状态机后再用同样方法编译编码器缓存控制器,然后用层次化设计方法完成编码器的设计。生成元件符号在编译成功后MAX+plusII会为每个实体生成一个相应的元件符号,也就是一个后缀为sym的文件。有了元件符号后,就可以在图形编辑器中调用该实体了。MAX+plusII只在第一次成功编译后生成一次元件符号,如果编译不通过或编译通过后又修改了设计,都不会生成或更新元件符号,因此修改设计后,元件符号都需要重新生成。在当前文件是工作文件的情况下,在File菜单中点击CreateDefaultSymbol,就可以更新元件符号了。调用元件符号在MAX+plusII菜单中选择GraphicEditor打开图形编辑器。在图形编辑器中右击后在弹出的菜单中选择EnterSymbol,依次添加状态机、缓存控制器和ROM的元件符号。添加参数化元件LPM_ROM时需要设定模块的参数,在Ports中选择ROM要用到的引脚,在parameters中修改各种参数,每个参数的意义和设定值将在下一章具体说明。定义输入/输出端口与连线添加输入输出引脚的办法是:在EnterSymbol对话框中的SymbolName中输入input或output即可添加输入输出引脚。连线的方法是将鼠标光标移至连线一端的端口上,在出现“+”时按住左键后将其拖到连线的另一端,删除的方法是选中该连线然后按delete键。于是就生成了编码器的层次化设计文件。存储的文件名不能与调用的任何文件实体名一致。逻辑综合与时序仿真将图形文件设为当前工作文件后就可以进行编译或逻辑综合了。(1)引脚图编辑在综合到具体器件之前必须指定一个目标器件在Assign子菜单中选择Device,出现器件选择对话框。在DeviceFamily中选择FLEX10K,然后指定一款型号,比如EPF10K30RC240-3,减号后面的数字表示器件速度,如“-3”表示器件传输延时为3ns。在MAX+plusII菜单中选择FloorplanEditor,然后在Layout菜单中将视图设置为DeviceView和CurrentAssignmentsFloorplan,。然后将相应输入输出拖到合适的引脚,具体如何分配将在下一章中详细说明。(2)逻辑综合与时序仿真引脚分配完成之后可以针对具体器件进行逻辑综合和时序仿真。在打开编译器后,不要选择FunctionalSNFExtractor,而选择TimingSNFExtractor,这时编译器中就多了LogicSynthesizer(逻辑综合)、Partitioner(分割器)、Fitter(适配)、Assembler(装配)等步骤。这样编译完成后,就可以进行时序仿真,时序仿真的步骤与之前的功能仿真相似,这里就不再赘述。
第五章:基于FPGA的硬盘编译码器的设计系统的总体设计系统的技术要求在使用峰值检测技术的磁盘驱动中的一种标准编码是码率为1/2的()=(2,7)码,也称代码。1设计编码器要求信息序列能连续输入,编码序列连续输出。2设计编码器要求信息序列能连续输入,编码序列连续输出,译码器输如使用编码器的输出序列3码字存在ROM中。4输入有一个指示数据起始的同步脉冲5系统要求使用的最高时钟频率只能是输入信息序列时钟的2倍。系统的特点磁记录过程是通过磁头与磁记录介质相互作用来实现的,这个过程可以看做一个电磁转换的过程,其中磁头与介质之间相对运动。在写入数据时,磁头线圈的电流发生改变,从而使介质磁化,其此话状态就的改变,就记录了信息。当读数据时,不同的磁化状态使线圈磁通发生变化,从而是线圈电流变化,电流变化经过处理后就可以还原出记录的信息。[9][10]存储系统的编码通常有两部分,一部分是纠错码,一部分是调制码。信息在进入存储系统后,需要的信息中加入一些纠错码,使得存储系统能够发现或更正存储过程中产生的错误。在经过纠错编码以后,数据需要再一次被编码,以满足存储介质的需要。在磁存储中,磁畴被磁化为两个不同的方向,在硬盘中,通常采用一种叫做反转不归0(Non-Return-to-Zero,Inverted,NRZI)的记录方式,按照这种方法,磁化方向变化对应于数据‘1’,磁化方向不变对应于数据‘0’。而在记录过程中,磁头上的电流信号可以看做一个幅值为+1和-1的二值波形。在实际记录过程中,已写入的跳变将干扰正在写入下一个跳变,在高密度存储系统中,如果两个跳变之间的距离太短,则这种干扰就不能忽略,它会造成检测信号幅值和相位的偏移,如果这种偏移很严重,将导致检测错误(产生串扰)。而在硬盘中,数据传输是自同步的。收到的信号中本身就包含同步信息,通过锁相环来检测信号中的跳变,从而实现了信号的同步,如果两个跳变间间隔太远,则锁相环有可能失去锁定(失步)。因此在硬盘的存储介质中两个相邻的跳变的间隔,既不能太长,也不能太短,两个相邻跳变的间隔也称作“游程”,所以在硬盘中,写入介质信号的游程,既不能太长,也不能太短,太长有可能失步,太短则会产生串扰,满足这种游程长度限制的编码就叫做游程长度受限码(RLL,Run-Length-Limited),一般表示为RLL(d,k),参数d表示两个1之间至少要有d个0,k表示两个1之间最多有k个0,“1”表示磁畴翻转,“0”表示不翻转,d与k的选择与介质的属性和存储密度有关。[11][12]近年来,在香农编码理论的基础上发展出了多种RLL编码方式,其中Franaszek提出了一种特殊的变长编码,源字与码字的长度是可变的,但它们之间的长度之比是不变的,因此固定长度的源字会被转换为固定长度的码字,所以这种编码属于同步变长码,Franaszek编码是一种在峰值检测技术的磁盘驱动中的一种标准编码其中(d,k)=(2,7)码率为1/2。它的编码表是:信源字码字110100101000000000100010001000011100100001000001000001100100100表2
Franaszek编码表由于设计要求系统最高时钟频率只能是输入信息序列的2倍,即与编码器输出时钟同步,而目前主流的解决方案中只有ASIC和FPGA能达到此要求,而如果使用定制器件作为编译码器,在延长设计周期的同时还降低产品的灵活性和兼容性,因此本系统采用FPGA作为目标器件。因为要求在FPGA中有嵌入式ROM用于存放码字,所以Altera的FLEX10K系列FPGA是主流器件中符合要求且具备可行性的选择,FLEX10K的参数在前文已经介绍过,对于FLEX10K的开发,虽然一些大型的EDA平台如Synopsys、Cadence和MentorGraphics等也可以胜任,但是从计算机的运行速度、软件的普及度、综合质量和器件的适应性等方面考虑,还是使用Altera为自家FPGA开发的MAX+plusII作为设计工具更合适。本系统采用目前FPGA开发的标准VHDL语言描述,VHDL语言具有可移植性好、语法严谨、行为描述能力强等特点。系统的总体设计本题目属于变长编解码的范畴,从信息论中学到的知识可知,变长编码有很多优点,例如压缩率大,平均码长短,其中最著名的就是经常用到的哈夫曼编码。一般来说,变长码的编译码要比定长码的难,主要有以下两个难点:如何识别信源字信源字并不是固定长度的,不能像定长码一样简单地按码长来判断,而必须边接收信息边识别,如何最简单、有效地检测出信源字是本题首先要解决的一个问题。速率匹配问题假设输入的信源码存在这样的组合:2位信源字后紧接着4位信源字。如果编码器在检测到2位信源字后立即输出编码结果,将出现什么结果呢?当这2位信源字的编码输出结束后,4位信源字尚未接收完毕,自然也就无法进行编码。也就是说,2个信源字编码之间出现了空当,造成了输出码字的不连续,这是不可接受的。造成这个现象的原因是:变长编码编成的码字长度是不相等的,这必然导致信源输出速率是变化的,然而在实际信道传送的信息率是固定不变的,也就是说信源给出的是变速的,而信道传送的则是恒速的,因此信源与信道之间必然存在一个速率匹配问题。解决第一个问题的方法有很多,但最简单、易懂而且容易编程的方法非状态机莫属。在信源识别状态下若读到信息位为0,则重新进入0状态;否则进入1状态,开始识别下一个信源字。事实上,这里还应该加上一个初始状态,即开始编码之前的状态。在此状态下,如果接收到开始编码的信号,程序就根据读到的信息位选择进入0状态或1状态。如果要解决第二个问题(速率匹配),那么通常采用缓冲存储器(Buffer)来实现变速输入,恒速输出的功能。缓存就像水库一样,就算往水库注水时快时慢,抽水机输入水流的速率仍是一样的。根据上面的分析,初步定下了整体的设计方案:整个编码器由状态机,缓存控制模块和ROM组成;由状态机来进行信源字的识别,并将其相应的存储地址传给存有编码规则的ROM;缓存控制模块读取存于ROM中的编码,置于缓存中,当缓存中的数据达到一定的数量(足以避免出现空当现象)即开始对外串行输出编码;ROM采用MAX+plus2中的可调参数宏模块LPM_ROM,既充分利用片内资源,又减少编程量。由于缓存控制器的时钟频率与状态机的识别和输入频率不同,因此在缓存控制器中必须考虑两者如何协调的问题,比如状态机的flag信号会维持两个缓存控制器的时钟周期,在缓存控制器中如果简单地以flag作为识别的信号,可能会发生同一个flag信号内两次缓存操作的问题。
图5-1
Franaszek编码器系统框图以下分别阐述系统各部分的设计和最后综合仿真的结果分析。状态机的设计状态机概述数字电路分为组合逻辑和时序逻辑两大类。组合逻辑电路的输出只与当前的输入有关;时序逻辑电路的输出则不仅与当前的输入有关,而且还与过去的一系列输入有关。状态机(StateMachine)可以说是一个广义时序电路,触发器、计数器、移位寄存器等都算是它的特殊功能类型的一种。实际时序逻辑电路中的状态数是有限的,因此又叫做有限状态机(FSM,FiniteStateMachine),又称为有限状态自动机或简称状态机,有限状态机在许多领域都有重要作用,包括电子工程、语言学、计算机科学、哲学、生物学、数学和逻辑学。许多大型控制系统就是用状态机思路建模和编写的,因为用状态机建模往往能比用控制流程的思路建模更简洁高效。用VHDL设计状态机不必知道其电路具体实现的细节,而只要在逻辑上加以描述。[13]实用状态机一般都设计为同步时序电路,它在时钟信号的触发下,完成各个状态之间的转移。标准状态机可以分为Moore型和Mealy型两种。在Moore机中其输出仅仅是当前状态值的函数,并且仅在时钟边沿到来时才发生变化。Mealy机的输出则是当前状态值、当前输出值和当前输入值的函数。状态机有3种表示方法:状态图、状态表和流程图。这3种表示方法是等价的,相互之间可以转换,其中状态图是最常用的一种表示方式。Moore型和Mealy型是状态机的两种基本形式,选择合适的状态机形式将影响最终的设计效果,但目前并没有一个广泛适用的说法认为哪一种状态机更好,Moore模型的好处是行为的简单性,Mealy型的使用经常导致状态数目的简约。本设计的状态机如果采用Mealy型状态机,将只有中间状态而没有识别状态,但也会由于难以区分中间状态和识别状态而增加后期维护的难度。如果使用Moore型状态机,增设专门的输出状态,输出仅与当前状态有关,使程序更为易读,方便后期的调试和将来的维护,也减少缓存控制器的编写难度,本设计的难点恰好在缓存控制器,所以应采用Moore型状态机。编码器状态机的设计
为了与后级的缓存控制器配合,本模块设立了两个与缓存控制器相连的接口信号:Flag和Length。每识别出一个信源字,Flag就从低电平变为高电平,用以指示缓存控制器从ROM中读取相应编码;而Length则用来表征编码的长度,即指示缓存控制器应从ROM中读取的数值的位数(ROM的数据线长度是固定的,因此必须借助Length信号完成变长编码)。图5-2
编码器状态机状态转移图图中的末端状态中若输入为0则下一个状态是S0若,输入为1则下一个状态为S1
仿真结果:图5-3
编码器状态机仿真结果单击Start开始仿真,这里可以很直观地看出,每到一个识别状态,flag信号由0变1,同时length和address输出相应的ROM地址和编码的长度,当下一个上升沿到达时,flag由1变0,length和address的信号也同时消失,换句话说,当flag为高电平时,length和address为有效值。状态则根据当前输入数据改变。而输出则仅随当前状态改变,与输入无关。译码器状态机设计在译码器的设计上,可以采用状态独立的滑块译码器,其译码过程根据当前的码字、当前码字以前的r个码字和以后的q个码字来联合确定输出结果。可以认为滑块分组译码器由一个w=(r+1+q)步的移位寄存器和译码逻辑组成,参数w称为滑块窗口。该译码器的特点是译码过程仅依赖于w个连续码字,与其他编码独立,如果在滑块译码器的输入中有单个错误发生,则仅有w个码字的译码受到影响,从而可以有效控制错误的传播。但是我经过分析后认为滑块译码器由于在译码时需要同时考虑w=(r+q+1)个码字因此逻辑复杂,消耗大量器件资源,在用于Franaszek这样的可变长编码时还很难确定滑动窗口的大小,虽然它可以减少错误造成的影响,但对于硬盘这样误码率很低(相对光盘而言)的环境下,再加上使用的是可靠性较高的FPGA实现,纯硬件实现中,不存在单片机或其它软件实现方案中可能出现的单片机死机问题,因此译码器的设计方案应采用与编码器类似的状态机方案,既节约器件资源,又适合变长编码的情况。译码器状态转移图:
图5-4
译码器状态机在出错的情况下可以转入错误状态进行相应的处理,这样就可以使错误影响的范围得到有效控制,而不影响到下面的译码。如在S01后面译码器输入若再次出现1,则进入se状态,表示错误,同时状态机表示错误的输出err置位。用以下代码实现
whens10=>
ifdin='1'then
state<=se;
else
state<=s100;
endif;在输出定义进程中的相应代码为
casestateis
whense=>
flag<='0';
molength<=0;
address<="000";
err<='1';
译码器状态机的仿真结果:图5-5
译码器状态机仿真结果缓存控制器的设计编码器缓存控制器的设计缓存的设计是本题的难点之一,主要因为:缓存控制器不但要将ROM中的数据存入缓存,而且同时要实现串、并转换;系统的最高时钟为信息序列输出的2倍,即与编码输出的时钟相同,因此要在同一个时钟沿解决存与出的问题,时序上比较复杂;MAX+plusII支持的仅是VHDL的一个子集,题目要求程序能在MAX+plusII得到综合,这就意味着可用的语句较少,增加了编程的难度。在设计时首先要解决以下几个问题:采用多大的缓存?理论上需要的缓存最大为14位(当第一个编码为6位,而第二个编码为8位时),再加上有可能要存储一些暂时的变量,所以这里采用16位的缓冲区。采用什么数据结构?这里采用了一个类似于队列的数据结构。Tempdata(0to15)为16位的std_logic_vector;pos是类型为integerrange0to15的变量,用以指示第1个尚未存储数据的单元;code为输出的编码,一直指向队列首tempdata(0)。何时开始输出编码?当缓存存储的数据第1次达到8位或者多于8位(即pos>8)时,就可以开始输出了
编码器缓存控制器流程图:图5-6
编码器缓存控制器流程图译码器缓存控制器的设计译码器的缓存控制器与编码器的基本相同,大小设为8位,当存储的数据第一次达到4位时开始输出。
译码器缓存控制器流程图:图5-6
译码器缓存控制器流程图系统的层次化设计层次化设计(HierarchicalDesign)在数字系统设计中被广泛地使用,因为它有下面两个主要的优点:①一些常用的模块可以被单独创建并存储,在以后的设计中可以直接调用该模块,而无需重新设计;②它使整个设计更结构化,程序也具有更高的可读性:顶层文件只将一些小模块整合在一起,这使整个系统的设计思想比较容易被理解。层次化的核心思想有两个,一个是模块化,二是元件重用。①模块化:可以将一个大系统划分为几个子模块,而这些子模块又分别由更小的模块组成,由此往下,直至不可再分。这也正是自顶向下(Top-Down)的设计方法。每个实体可以看成上一层的一个模块或元件(component),系统就像搭积木一样一层一层地构建。②元件重用(reuse):同一个元件可以被不同的设计实体调用,也可以被同一个设计实体多次调用。元件重用不但大大减轻了设计者的工作量,而且使程序更结构化和具有更高的可读性。在第四章中已经对MAX+plusII中层次化设计的操作步骤作了介绍,这里主要介绍如何在前面设计的状态机和缓存控制器的基础上将他们组合成一个Franaszek编译码器。5.4.1LPM_ROM的设置
根据设计要求,需要将编码器和译码器的码字保存在ROM中,这里使用FLEX10K器件中的EAB模块,在图形编辑器中添加一个LPM_ROM模块,各参数的设定值如图图5-7
编码器ROM的参数
图5-8
译码器ROM的参数参数名功能LPM_ADDRESS_CONTROL设定address是寄存还是非寄存LPM_FILEmif文件或hex文件的位置LPM_NUMWORDSROM存放的字数LPM_OUTDATAq端口是被寄存还是非寄存LPM_WIDTH设定q端口的数据位数LPM_WIDTHAD设定地址端口address的数据位数表3
各参数的意义
这里将ROM配置为异步方式,输出的数据根据地址
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陶瓷贴花工操作评估水平考核试卷含答案
- 初中九年级物理 浮力专题复习教学设计
- 电子电气产品安全检验员安全规程水平考核试卷含答案
- 有色金属强化熔炼工安全风险测试考核试卷含答案
- 压电石英晶体配料装釜工常识评优考核试卷含答案
- 散料卸车机司机安全文化评优考核试卷含答案
- 初中心理健康八年级上册《高效学习提升自我》教学设计
- 宠物健康护理员安全文明竞赛考核试卷含答案
- 挤出拉制模具工岗位节能考核试卷含答案
- 船舶机舱设备操作工QC管理竞赛考核试卷含答案
- 泌尿系感染护理查房
- 【新教材】统编版(2026)九年级上册道德与法治全册教案
- 2026年秋北师大版九年级上册数学《二次函数》公开课教案
- 2025年CCAA国家注册审核员考试(森林管理体系基础)测试题及答案
- 反比例函数的图象和性质课件 2026-2027学年人教版九年级数学上册
- 2026年广东省广州市2026届高三下学期4月二模试题 物理 含答案新版
- 《2026年》医院药剂科药师高频面试题包含详细解答
- 幼儿园中班歌唱活动《懒惰虫》课件(已嵌入音乐)
- 科逸整体浴室图集
- 贵州省六盘水市英武水库工程环评报告
- 学生才艺展示青春飞扬、才艺成长
评论
0/150
提交评论