1、第页 共页目 录1 引言11.1 课题背景11.2 课题意义21.3 国内外现状及发展趋势21.4 系统开发环境及技术分析31.4.1 FPGA开发简介31.4.2 VHDL特点及设计方法52 需求分析72.1 系统基本要求72.2 系统结构73 系统设计83.1 总体方案比较83.2 程序流程图103.3 系统模块设计113.3.1 整形电路113.3.2 计数器123.3.3分频器143.3.4锁存器163.3.5控制器183.3.6 显示器224 系统仿真及测试23结 论29致 谢30参 考 文 献31附录132附录235第 34 页 共 35页1 引言1.1 课题背景进入信息时代以来,
2、微电子技术和计算机技术飞速发展, 各种电子测量仪器在原理、功能、精度及自动化水平等方面都发生了巨大的变化, 特别是DSP技术诞生以后,电子测量技术更是迈进了一个全新的时代1。近年来,DSP逐渐成为各种电子器件的基础器件,逐渐成为21世纪最具发展潜力的朝阳行业,甚至被誉为信息化数字化时代革命旗手。在电子技术领域内,频率是一个最基本的参数,频率与其它许多电参量的测量方案、测量结果都有十分密切的关系。如时间,速度等都涉及到或本身可转化为频率的测量。因此,频率的测量就显得更为重要。而且,目前在电子测量中,频率的测量精确度是最高的.现在市场上有各种多功能,高精度,高频率的数字频率计,但价格不菲。而在实际
3、工程中,不是对所有信号的频率测量都要求达到非常高的精度。因此,本文提出了一种能满足一般测量精度要求,但成本低廉的数字频率计的设计方案。在电子工程中、资源勘探、仪器仪表等相关应用中,频率计是工程技术人员必不可少的测量工具。数字频率计是计算机,通信设备,音频视频等科研生产领域不可缺少的车辆仪器,采用VHDL语言编程设计实现的数字频率计,除被测信号的整形部分,键输入部分和数码显示部分以外其余全在一片FPGA芯片上实现,整个设计过程变得十分透明,快捷和方便,特别是对于各层次电路系统的工作时序的了解显得尤为准确而且具有灵活的现场可更改性。在不更改硬件电路的基础上对系统进行各种改进,还可以进一步提高系统的
4、性能和测量频率的范围。该数字频率计具有高速、精确、可靠、抗干扰性强,而且具有现场可编程等优点。随着微电子技术和计算机技术的飞速发展,现代电子系统的设计和应用进入一个全新的时代。在电子技术设计领域,可编程逻辑器件已得到广泛普及和应用,高性能但结构简单的电子技术产品已经成为市场主体,通过软件编程可对可编程逻辑器件的结构和工作方式进行重构,使得硬件设计可以和软件设计一样方便快捷,为数字系统的设计带来极大的灵活行。1.2 课题意义在电子测量技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,测量频率是电子测量技术中最常见的测量之一。不少物理量的测量,如时间、速度等都
5、涉及或本身可转化为频率的测量。它与许多电参量和非电量的测量都有着十分密切的关系。例如,许多传感器就是将一些非电量转换成频率来进行测量的,因此频率的测量就显得更为重要。数字频率计是用数字来显示被测信号频率的仪器,被测信号可以是正弦波、方波或其它周期性变化的信号。而传统的频率计测量精度随着频率的下降而降低,测量范围也较窄,因此逐渐被新型的数字频率计所代替。数字频率计广泛采用了高速集成电路和大规模集成电路,使得仪器的体积更小、耗电更少、精度和可靠性更高1 。目前,市场上有各种多功能、高精度、高频率的数字频率计,但价格不菲。而在实际工程中,并不是对所有信号的频率测量都要求达到非常高的精度因此,频率的测
6、量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。以往的大多数传统数字频率计一般由分离元件搭接而成,其测量范围、测量精度和测量速度都受到很大的限制。因此基于FPGA的数字频率计频率计以其测量准确、精度高、方便、价格便宜等优势将得到广泛的应用。1.3 国内外现状及发展趋势FPGA是现场可编程门阵列的英文简称,全称为Field Programmable Gate Array ,是20世纪70年代发展起来的一种新型立即器件是目前数字系统设计的主要硬件基础2。其在结构上由逻辑功能块排列为阵列,并由可
7、编程的内部连线连接这些功能块,实现一定的逻辑功能。FPGA技术是一门实践性很强的学科,最终目的是让用户通过硬件描述语言编程来配置芯片的内部连接和元器件参数,以获得所需的电路功能。使得设计方法从 “电路设计-硬件搭试-焊接”的传统方式转到“功能设计-软件模拟-下载”的电子设计自动化模式3。应此,必须选择正确有效的方法来完成可编程器件的逻辑编程。FPGA是一种新兴的高密度大规模可编程逻辑器件,它具有门阵列的高密度和PLD器件的灵活性和易用性,目前已成为一类主要的可编程器件。FPGA器件作为系统控制的核心,其灵活的现场可更改性,可再配置能力,对系统的各种改进非常方便,在不更改硬件电路的基础上还可以进
8、一步提高系统的性能。可编程器件的最大特点是可通过软件编程对其器件的结构和工作方式进行重构,能随时进行设计调整而满足产品升级4。使得硬件的设计可以如软件设计一样方便快捷,从而改变了传统数字系统及用单片机构成的数字系统的设计方法、设计过程及设计观念,使电子设计的技术操作和系统构成在整体上发生了质的飞跃。具有高速、精确、可靠、抗干扰性强.当今技术的发展日新月异,FPGA 的容量和速度成倍的增长,而价格却逐年下降,这将使得基于FPGA设计的数字频率计优势更加明显。相信不久的将来,这一技术必将得到更加广泛的应用5。1.4 系统开发环境及技术分析 本次设计主要是用FPGA的开发环境Quartus 采用VH
9、DL语言编程并对设计电路进行仿真,以便提前测试这个设计的可靠性。选用VHDL语言进行设计,可以不懂硬件结构,也不必知道最终设计的目标期间是什么样子,而是进行独立设计。正因为VHDL语言的硬件描述与具体工艺技术和硬件无关,所以VHDL设计程序的硬件目标器件有广阔的选择范围。1.4.1 FPGA开发简介现场可编程门阵列(FPGA)器件是八十年代中期出现的产品,它的应用大大地方便了IC的设计,因而随着数字技术日益广泛的应用,以FPGA为代表的ASIC器件得到了迅速的普及和发展,器件集成度和速度都在高速增长6。有了FPGA,我们只需要在计算机上绘出原理图,再运行相应的软件,就可把所设计的逻辑电路在FP
10、GA中实现。所有步骤均可自动完成。电子设计工程师自己设计专用集成电路成为了一件很容易的事情。FPGA作为专用集成电路(ASIC)概念上的一个新型范畴和门类,以其高度灵活的用户现场编程方式,现场定义高容量数字单片系统的能力,能够重复定义、反复改写的新颖功能,为复杂数字系统设计、研制以及产品开发提供了有效的技术手段7。电子应用设计工程师应用FPGA技术不仅可避免通常ASIC单片系统设计周期长,前期投资风险大的弱点,而且克服了过去板级通用数字电路应用设计的落后,繁琐和不可靠性。基于FPGA的开发设计,其工程设计流程如图1.1所示:设计输入综合布局布线时序分析功耗分析工程更改管理调试编程和配置仿真时序
11、逼近图1.1 FPGA工程设计流程流程中各个模块具体功用如下:a)设计输入:用任何文本编辑器都可以进行,通常VHDL文件保存为vhd文件。HDL的编译器有很多,ACTIVE公司,MODELSIM公司,SYNPLICITY公司,SYNOPSYS公司,VERIBEST公司等都有自己的编译器。b)综合:将源文件调入逻辑综合软件进行综合。综合的目的是在于将设计的源文件由语言转换为实际的电路。但是此时还没有在芯片中形成真正的电路。这一步的最终目的是生成门电路级的网表(Netlist)。c)布局布线将第2步生成的网表文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到CPLDFPGA内。这一步的
12、目的是生成用于下载(编程Programming)的编程文件。在这一步,将用到第3步生成的网表,并根据CPLDFPGA厂商的器件容量,结构等进行布局、布线。这就好像在设计PCB时的布局布线一样。先将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位8。然后,在根据网表中提供的各门的连接,把各个门的输入输出连接起来。最后,生成一个供编程的文件。这一步同时还会加一些时序信息(Timing)到设计项目中去,以便于做后仿真。d)时序分析、仿真利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。(也叫布局布线仿真或时序仿真)。这一步主要是为了确定你的设计在经过布局布线之后,是不是还满足你的设
13、计要求。e)编程和配置如果前几步都没有发生错误,并且符合设计要求,这一步就可以将由适配器等产生的配置或下载文件通过编程器或下载电缆下载到目标芯片中。1.4.2 VHDL特点及设计方法VHDL最早诞生于1982年,并在1987年底被IEEE和美国国防部确认为标准硬件描述语言。在EDA设计工具中,用的最广泛的是VHDL和VERILOG,当然还有其它的。比较VHDL和VERILOG,在顶层设计方面VHDL优于VERILOG,在门级电路设计方面VERILOG优于VHDL。随着复杂可编程逻辑器件(CPLD)的广泛应用,以EDA工具作为开发手段,运用VHDL语言,将使整个系统大大简化,提高整体的性能和可靠
14、性。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其它的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。应用VHDL进行工程设计的优点是多方面的,具体如下:a) 与其它的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了它成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。就目前流行的EDA工具和VHDL综合器而言,将基于抽象的行为描述风格的VHDL程序综合成为具体的FPGA和CPLD等目标器件的网表文件已不成问题,只是在综合与优化效率上略有差异。b) VHDL最
15、初是作为一种仿真标准格式出现的,因此VHDL既是一种硬件电路描述和设计语言,也是一种标准的网表格式,还是一种仿真语言。其丰富的仿真语句和库函数,使得在任何大系统的设计早期(即尚未完成),就能用于查验设计系统的功能可行性,随时可对设计进行仿真模拟。即在远离门级的高层次上进行模拟,使设计者对整个工程设计的结构和功能的可行性做出决策。c) VHDL语句的行为描述能力和程序结构决定了它具有支持大规模设计的分解和已有设计的再利用功能,符合市场所需求的,大规模系统高效、高速的完成必须由多人甚至多个开发组共同并行工作才能实现的特点。VHDL中设计实体的概念、程序包的概念、设计库的概念为设计的分解和并行工作提
16、供了有力的支持。d) 对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动地把VHDL描述设计转变成为门级网表9。这种方式突破了门级电路设计的瓶颈,极大地减少了电路设计的时间和可能发生的错误,降低了开发成本。应用EDA工具的逻辑优化功能,可以自动地把一个综合后的设计变成一个更高效、更高速的电路系统。反过来,设计者还可以容易地从综合和优化后的电路获得设计信息,返回去更新修改VHDL设计描述,使之更为完善。e) VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。正因为VHDL硬件描述与具体的工艺技术和硬
17、件结构无关,VHDL设计程序的硬件实现目标器件有广阔的选择范围,其中包括各系列的CPLD、FPGA及各种门阵列实现目标。f) 由于VHDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的条件下,只需要改变端口类属参量或函数,就能轻易地改变设计的规模和结构。基于VHDL的设计一般采用自顶向下的设计方法,其主要步骤为:1)设计说明:用自然语言表达系统项目的功能特点和技术参数等。2)建立VHDL行为模型,即将设计说明已转化为VHDL行为模型。建立模型是为了通过VHDL仿真器对整个系统进行系统行为仿真和性能评估。3)VHDL行为仿真。这一阶段可以利用VHDL仿真器对顶层系统的行为
18、模型进行仿真测试,检查模拟结果,继而进行修改和完善。4)VHDL-RTL级建模。即将VHDL的行为模型表达为VHDL行为代码。5)前端功能仿真。即对VHDL-RTL级模型进行仿真,简称功能仿真。6)逻辑综合。使用逻辑综合工具将VHDL行为代码描述转化为结构化的门级电路。7)测试向量生成。8)功能仿真。9)结构综合。10)门级时序仿真。11)硬件测试。2 需求分析2.1 系统基本要求本次频率计设计要求设用FPGA实现一个数字频率计,具体设计要求如下:a)测量频率范围: 10Hz100KHz精度: F / F 2 %;b)1024Hz测量波形: 方波 Vp-p 35 V;c)Altera Cycl
19、one EP2C5T144C8芯片 、数码管 LED发光二极管;d)VHDL语言编程实现。考虑到测量方便,将数字频率计划分为四档:1099Hz、100999Hz、10009999Hz、1000099999Hz。这样可以保证每一档三位有效数字,而且第三位有效数字误差在2以内时即可达到精度要求。其中,三个输入信号:待测信号、标准时钟脉冲信号和复位脉冲信号。频率计能根据输入待测信号频率自动选择量程,并在超过最大量程时显示过量程,当复位脉冲到来时,系统复位,重新开始计数显示频率。2.2 系统结构基于上述要求,可以将系统基本划分为四个模块,分别为分频、计数、锁存和控制,并可以确定基本的连接和反馈, 如图
20、2.1所示:分频器计数器锁存器输出控制器小数点待测信号标准时钟RESET显示器图2.1 频率计模块组成3 系统设计3.1 总体方案比较方案1 :采用小规模数字集成电路制作被测信号经过放大整形变换为脉冲信号后加到主控门的输入端,时基信号经控制电路产生闸门信号送至主控门,只有在闸门信号采样期间内输入信号才通过主控门,若时基信号周期为T,进入计数器的输入脉冲数为N,则被信号的测频率其频率F=N/T,其原理方框图如图3.1所示:整形放大闸门计数器译码器显示逻辑控制待测信号图3.1 方案1测频原理图方案2 :采用单片机进行测频控制单片机技术比较成熟,功能也比较强大,被测信号经放大整形后送入测频电路,由单
21、片机对测频电路的输出信号进行处理,得出相应的数据送至显示器显示。原理方框图如图3.2所示:信号整形测频电路单片机显示晶振待测信号 图3.2 方案2才频原理图采用这种方案优点是呆以依赖地成熟的单片机技术、运算功能较强、软件编程灵活、自由度大、设计成本也较低,缺点是显而易见的,在传统的单片机设计系统中必须使用许多分立元件组成单片机的外围电路,整个系统显得十分复杂,并且单片机的频率不能做得很高,使得测量精度大大降低。方案3 :采用现场可编程门阵列(FPGA)为控制核心采用现场可编程门阵列(FPGA)为控制核心,利用VHDL语言编程,下载烧制实现。将所有器件集成在一块芯片上,体积大大减小的同时还提高了
22、稳定性,可实现大规模和超大规模的集成电路,测频测量精度高,测量频率范围大,而且编程灵活、调试方便。综合上述分析,方案三为本设计测量部分最佳选择方案。3.2 程序流程图本次频率计设计的流程图如图3.3所示:数码管显示译码显示数据锁存计数器50MHZ分频计数器50MHZ分频500MHZ分频计数器0.1档1档10档开始1S时基10S时基0.1S时基NONOYESYESYES图3.3 程序流程图分频电路将50MHz标频信号通过500 MHz、50 MHz、5 MHz分频产生所需的闸门信号,其原理图如图3.4所示:可控分频晶振 500M分频 50M 分频 5M 分频 CLKK 图3.4 分频电路原理图进
23、行500MHz分频后。其频率为:50MHz/500MHz=1/10=0.1Hz周期为10s,所以所显示的频率值是实际频率值的10倍,档位为 * 0.1,精度为0.1;进行50 MHz分频后。其频率为50MHz/50MHz=1/1=1Hz,周期为1s,所以所显示的频率值即是实际频率值。档位为 * 1,精度为1。进行5 MHz分频后。其频率为50MHz/5MHz = 10Hz周期变为0.1s,所以所显示的频率值是实际频率值的1/10倍。档位为 * 10,精度为10。3.3 系统模块设计频率计设计总体如图3.5所示:CLK 计数器CLKK 数据锁存译码显示数码管显示放大整形电路500MHZ50MHZ
24、5MHZ分频晶振输入信号图3.5 频率计总体设计图3.3.1 整形电路FPGA能够识别的信号只有脉冲信号,要使系统能够精确测量各种信号的频率,如:正弦波、三角波、锯齿波等,必需先将被测信号整形,整形电路是将待测信号整形变成计数器所要求的脉冲信号10。电路形式采用一个整形三极管9018和一个电位器以及四个1K的电阻组成。其整形电路原理图如图3.6所示:图3.6 整形电路原理图3.3.2 计数器由四个十进制计数器级联。四个输入端口:时钟脉冲CLK、使能端EN、清零端CLRN、档位状态端STAT1.0。五个输出端口:四个四位十进制BCD码输出OUT13.0OUT43.0、过量程溢出OF7。功能表见表
25、3.1:表3.1 计数器功能表CLKENCLRNSTAT1.0OUT4-1DFHL0,1,23位加一计数OF等于第三位进位HL34位加一计数OF等于第四位进位LL计数保持LLLHLL 设计生成的计数器模块如图3.7所示:Signal ResetEn Cntover Cntlow Lock Cout13.0 Cout23.0Cout33.0Cout43.0图3.7 单个计数器模块每个十进制计数器用VHDL语言编程实现。源程序如下:module Counter(reset,signal,en,cntover,cntlow,lock,cout1,cout2,cout3,cout4);input si
26、gnal,en; / en为分频器输出的方波信号output cntover,cntlow,lock,reset;output 3:0cout1,cout2,cout3,cout4;reg cntover,cntlow,lock;reg 3:0cout1,cout2,cout3,cout4;wire reset;assign reset=(cntover|cntlow|lock);always(posedge signal)beginif(reset)begin cout1=0;cout2=0;cout3=0;cout4=0;cntlow=0;cntover=0;endelse if(en)b
27、eginif(cout1=9)&(cout2!=9) begin cout1=0;cout2=cout2+1;cntover=0;cntlow=0;endelse if(cout1=9)&(cout2=9)&(cout3!=9) begin cout1=0;cout2=0;cout3=cout3+1;cntlow=0;endelse if(cout1=9)&(cout2=9)&(cout3=9)&(cout4!=9) begin cout1=0;cout2=0;cout3=0;cout4=cout4+1;endelse if(cout1=9)&(cout2=9)&(cout3=9)&(cout
28、4=9) begin cntover=1; endelse begin cout1=cout1+1; cntover=0;endendelse begin cntover=0;cntlow=0;end/end/always(negedge en)/beginif(!en)beginif(cout4=0)&(cout3=9)&(cout2=9)&(cout1=9) begin cntlow=1;lock=0;endelse if(cntover) begin lock=0;cntlow=0;endelse begin lock=1;cntlow=0; endif(cout4=0)&(cout3=
29、0)&(cout2=0)&(cout1=0) begin cntlow=0;cntover=0;lock=0;endendendendmodule3.3.3分频器分频器是本系统最重要的功能部件之一,由它产生闸门电平和控制器、计数器的控制脉冲。它有四个输入:标准时钟脉冲输入CLK1024、溢出处理触发TRIGGER、复位触发RESET和档位状态STAT1.0。三个输出:计数闸门电平FGATE、控制器工作脉冲FTRIGGER、计数器控制器清零脉冲FCLR。设计生成的分频器模块如图3.8所示:Clk count_clkResetSelect1.0图3.8 单个分频器模块分频器采用计数分频的办法,即使
30、用一内部寄存器,在时钟脉冲上升沿加一计数,当计到一定值时就改变FGATE的状态,从而达到分频的目的。由于输入标准时钟脉冲为1024Hz,要得到0.1s的FGATE计数值相当小,约为20,误差很大,故在实际设计中把第四档闸门电平时间调整为0.1s,这样第三、四档公用一个闸门电平,同时在计数和锁存时要做相应的移位,因为测量第四档频率时有4位有效数字。要得到10s、1s、0.1s三个FGATE,分别要计数到10240、1024和103。从组成图中也可以看出分频器由这三种计数器并联组成,通过3个4选1选择器(一个74LS153和一个4_1MUX),由STAT1.0选择使用的FGATE、FCLR和FTR
31、IGGER7。输出FGATE送计数器EN作为计数器使能闸门电平。FTRIGGER送控制器TRIGGER作为控制器工作脉冲。FCLR送计数器CLRN作为每次计数开始前的清零信号,送控制器CLR作为控制器内部触发信号。FGATE由高变低,即计数结束时,FTRIGGER信号才产生,这时控制器开始工作,判断计数是否有效,然后发出一系列指令直到FCLR信号到来,计数器清零,准备进入下一次计数。采用这样的像CPU时钟一样的信号的原因,一方面,处理计数数据只用了很短的时间,两次测量之间时间很短,加快了频率计的响应速度;另一方面,解决了异步时序逻辑的竞争,使系统工作在异步时序状态下,既保持了很高的响应速度,又
32、有很高的稳定性。为了解决在第一档向第二档转换时等待时间过长的问题,分频器由TRIGGER端口接收一个计数器的溢出脉冲,当计数器溢出时,在脉冲上升沿将内部计数器置为FGATE结束高电平的最后一个计数器值。这样,由于控制器此时溢出已被置位,马上就能进入一次换档处理,保证了换档的快速。另外,RESET信号上升沿到来时,计数器被置为零,这样就可以马上重新开始计数,实现了复位的效果。分频器单元FREQCER_10240的源程序如下:module DivFreq(clk,reset,select,count_clk);output count_clk;input clk,reset;input 1:0 s
33、elect;reg count_clk;reg 23:0 num;/always (posedge clk) /begin if(reset) count_clr=1; / else count_clr=0; /endalways (posedge clk ) begin if(!reset) case(select) 2b00: begin if(num=499) begin count_clk=count_clk; num=0; end else num=num+1; end 2b01: begin if(num=4999) begin count_clk=count_clk; num=0
34、; end else num=num+1; end 2b11: begin if(num=49999) begin count_clk=count_clk; num=0; end else num=num+1; end default: begin if(num=4999) begin count_clk=count_clk; num=0; end else num=num+1; end endcase else begin num=0; count_clk=1; end endendmodule 3.3.4锁存器如果计数器输出直接与译码器相连接,那么在计数过程中输出端则随输入脉冲数的增加而不
35、断跳变,那么显示数码管则也会不断闪烁跳变,让人不能看到稳定的输出,设锁存器后,则不再跳变,便可清晰读出计数结果。由control控制模块产生的latch信号来提供锁存脉冲。其生成的功能模块如图3.9所示:Lock Cout13.0Cin3.0图3.9 单个锁存器模块这模块实现了对六位计数结果和溢出信号over的锁存功能。程序很简单,即锁存信号的上升沿来时送数,其它时候则保持不变。锁存器有八个输入:时钟脉冲CLK,置位端SET,复位端RESET,4个4bit十进制BCD输入IN13.0IN43.0,档位状态STAT1.0。五个输出:5个5bit十进制BCD输出。组成图见附图2左上部分。由一桥接器
36、BRIDGE和4个LATCH_4_16、1个LATCH_4_1锁存器组成8。桥接器BRIDGE主要是为了数据对齐。因为3、4两档使用同一个分频器,故测量第四档时有4位有效数字,通过桥接器转换后就能保证数据有效数字最高位与锁存器第五位对齐。输入输出对应表如表3.2:表3.2 输入输出功能表STAT = 0 , 1 , 2STAT = 3OUT5= IN3= IN4OUT4= IN2= IN3OUT3= IN1= IN2OUT20= IN1桥接器功能表如表3.3所示:表3.3 桥接器功能表CLK(IN)SET(IN)RESET(IN)OUT00= IN01010F000F锁存器单元LATCH_4_
37、1和LATCH_4_16均为4bit锁存器,其唯一不同在于置位时,LATCH_4_16锁存器内容置为F,另一个置1。下面将LATCH_4_16的功能表和源程序列出:Lock.vhdl/锁存模块module Lock(lock,cin,cout);input lock;input 3:0cin;output 3:0cout;reg 3:0cout;always(posedge lock)beginif(lock) cout=cin;endendmodule3.3.5控制器控制器CONTROLER是整个系统最复杂也是最关键的部件,附图1左上部分是控制器组成。它由一个控制器核心模块CONTROL_C
38、ORE和寄存器OFREGISTER组成OFREGISTER由CLK端接受计数器溢出脉冲在其上升沿置1,当控制器核心开始换档工作时,通过CLR清除OFREGISTER。其功能表如表3.4所示:表3.4 输入输出功能表输入输入输出CLKCLROF10设计生成的控制器模块如图3.10所示:Clk std_f_sel1.0Clear resetCntover light_1kCntlow light_10k light_100k图3.10 单个控制器模块CONTROL_CORE模块是控制器的核心,有六个输入端口:时序脉冲CLK、清零脉冲CLR、复位脉冲RESET、溢出检测输入OF、计数器输出第3、4位
39、IN33.0和IN43.0。输出端口四个:锁存器工作脉冲LATCH_CLK、OFREGISTER清零脉冲CLROF、锁存器状态LATCH_STAT1.0和当前档位状态STAT1.0。另外还有寄存器stat_reg1.0,用在转换档位时临时保存档位。count寄存器,用来标志当前工作脉冲序号。flag寄存器,用来标志当前计数置溢出或不够。reset_reg寄存器,用来标志复位周期。由上述介绍可知有三种情况能到达状态:计数结束、计数中溢出和复位。这个时候就需要检测。RESET信号在上升沿将reset_reg置为1,并进行复位操作,即状态寄存器分别置值。在 时刻第工作脉冲到来时,首先检测是不是复位周
40、期,是则跳过,不作任何动作。不是,则检测OF端口是否为1,为1则有溢出,要进行换档,flag标志置1,并发出OFREGISTER清零信号CLROF,没有溢出,则检测计数器最高两位,两位均为0,则说明档位不够,要调低档位,flag标志置2,如果不均为0,则该计数值有效,flag置为0;当脉冲到来时,检测是否是复位周期,是则跳过,不是则继续。如果flag1,有溢出,向上换档,如果当前档位为3,则保持,并且将锁存器置位(显示1FFFF),否则向上调一挡;如果flag2,档位不够,当前档位为0时,保持,否则向下调一挡。flag0,计数有效,发出锁存器时钟脉冲LATCH_CLK,将当前计数值打入锁存器。
41、当 脉冲到来时,清除中间状态寄存器。当 脉冲到来时,在其下降沿将stat_reg的内容打入STAT,在下一次高电平到来之前实现档位转换。具体源程序如下:clk: 输入时钟;clear: 为整个频率计的异步复位信号;reset: 用来在量程转换开始时复位计数器;std_f_sel: 用来选择标准时基;cntover: 代表超量程;cntlow: 代表欠量程;lock: 向锁存器发出的锁存信号。状态A,B,C,D,E,F 采用一位热码编码 */module Control(std_f_sel,reset,clk,clear,cntover,cntlow,light_1k,light_10k,lig
42、ht_100k);output1:0 std_f_sel;output reset;output light_1k,light_10k,light_100k;input clk,clear,cntover,cntlow;reg1:0 std_f_sel;reg reset;reg5:0 present,next;reg light_1k,light_10k,light_100k;parameter start_fl00k=6b000001, fl00k_cnt=6b000010, start_fl0k=6b000100, fl0k_cnt=6b001000, start_flk=6b010000, flk_cnt=6b100000;always (posedge clk or posedge clear)beginif(clear) present=start_fl0k;else present=next;endalways (present or cnt