




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于fpga的水表抄表器设计1绪论 21世纪人类将全面进入信息化社会,对微电子信息技术和微电子基础技术将不断提出更高的发展要求,微电子技术仍将继续是21世纪若干年代中最为重要的和最有活力的高科技领域之一。而集成电路(ic)技术在微电子领域占有重要的地位。伴随着ic技术的发展,电子设计自动化(electronic design automation, eda)已经逐渐成为重要设计手段,其广泛应用于模拟与数字电路系统等重要领域。1.1水表抄表器的发展现状 对智能住宅小区的自来水集中自动抄表系统进行了研究。近年来,随着科学技术的不断发展和人民生活水平的不断提高,“智能化住宅”这一概念正在逐步地被引入到普通住宅小区的建设之中。其中最典型的应用便是自来水表、电表、管道煤气表等三表的集中自动抄表系统。随着人们生活水平的不断提高和生活节奏的日益加快,现代家庭中的煤气、电、水费的核算和收缴工作日益成为一种负担。传统的计量器采用各自独立的感应式计量表,传统的水、电、煤气抄表有很多弊端,诸如必须逐门入户抄表,收费困难,易造成漏抄、误抄或多抄,需投入大量的抄表统计人员,而且存在抄表效率低、速度慢、成本高等问题。而不仅工作量大、数据统计麻烦,而且容易出错,费用收缴工作也极其麻烦。随着电子技术和网络技术的不断发展,以可编程逻辑器件为核心设计制作的全电子式计量表必将取代传统的感应式计量表。尤其是集群式、模块化、全电子数字化多用户计量表,将会成为民用主导产品。本设计的抄表系统,它可把多用户的水量用量集中记录在一部表中,而且采用多用户联网的形式,进行集中抄写,数据统计简单,费用收缴周期可以大幅度的缩减。通过采用不同的流量感测模块,该电子式抄表还可改装为煤气、电费等多用途的抄表器。它对用户水、电、气等量的自动计费、收费联网,状态报警提示和防止用户使用非法手段窃水、窃电等功能于一体,是适应管理现代化的最佳计量器具之一。由此设计了一套远程抄表系统。由于它们的出现既方便了广大用户,又大大减轻了抄表员的工作量,同时由于计量精确,因而已具有成为该领域中主流技术的趋势。 抄表系统基本工作原理:利用电子技术和传感技术,对传统电表、水表、气表加以改进,使其成为远传表,在户外装一套计量系统,将每一个计量表传感器传出的数据,送到每个表的采集器存储,经过函数变换送到智能电路单元,各单元通过数据总线并联,在数据总线上任何一点皆可以与计算机通讯,自动抄收三表数据。系统包括远传检测表头、数据抄表器、上位控制器等三个部分。 (1)远传检测表头:通过对现有电表、水表、煤气表加装传感器,使其既能就地显示计量数据,又能产生相关计量脉冲信号的新型计量表具。传感器实质上是一种基于磁电转换技术或光电转换技术的脉冲发生电路单元.远传检测表头均为机械转盘式,将磁感应探头装在检侧表头的某一刻度上,并通过磁屏蔽防止外界磁场的干扰后,便将一台一次表改制成远传检测表头。转轴的圈数通过探头组件的输出端送到数据采集器,该数据通过一定的倍率计算便成为最终的计量数据。例如,在现有转盘计数的水表中加装霍尔元件和磁铁,即可构成基于磁电转换技术的传感器,霍尔元件固定安装在计数转盘附近,永磁铁安装在计数盘上,则当转盘每转一圈,永磁铁经过霍尔元件一次。即在信号端产生一个计量脉冲。同样,可以采用光电转换技术产生计量脉冲,实现远传抄表的目的。(2)数据抄表器:其主要功能是采集检测表头数据,累积表头数据,通过系统总线上传至上位控制器。其一般具有8个通道,每个通道连接1个检测表头。为保障系统的安全性及可靠性,数据采集器应具有表底数据及采集数据的存储功能。(3)上位控制器:上位控制器可与数据采集器、检测表头组成完整的小规模抄表系统,标准型上位控制器通过屏蔽双绞线可挂接多个数据采集器。上位控制器主要功能是,对数据采集器硬件设备管理,历史数据存储、累积,采集器数据显示、打印等功能。 本设计主要是针对该系统的核心部分数据抄表器,抄表器接受已处理好的脉冲信号,每1000个脉冲记为1度。一个抄表器可以记录一户的用水量,同时循环显示各户现在的用水量。1.2本课题的研究意义本课题的研究意义有以下几个: 首先,就是完成本课题的具体设计,通过这次设计,掌握用vhdl设计数字系统的方法。 其次是探讨用vhdl实现数字系统设计应当注意的方面。 再次探讨vhdl语言的具体特点。最后注意编码的效率,以求速度和功耗的最优化。1.3 目标内容随着社会和科技的发展,可编程逻辑器件为核心设计制作的全电子式计量表必将取代传统的感应式计量表。尤其是集群式、模块化、全电子数字化多用户计量表,将会成为民用主导产品。本设计的抄表系统,它可把多用户的水量用量集中记录在一部表中,而且采用多用户联网的形式,进行集中抄写,数据统计简单,费用收缴周期可以大幅度的缩减。通过采用不同的流量感测模块,该电子式抄表还可改装为煤气、电费等多用途的抄表器。它对用户水、电、气等量的自动计费、收费联网,状态报警提示和防止用户使用非法手段窃水、窃电等功能于一体,是适应管理现代化的最佳计量器具之一。这个设计就是针对以上的讨论进行的,通过四个模块的编译和仿真使其能够基本实现所需的功能,能够使得基本可以应用到生活当中,使得抄表器更为先进和规范。2水表抄表器的总体思路设计 由于fpga只能实现数字电路,因此输入信号的整形电路不能用fpga来实现,所以整形电路需另外实现外加。从而可以假定fpga接受的都是经过整形电路整形、变换后的规则信号,电压幅值为0-5v.设计采用自顶向下(top-down)的设计方法。首先把系统化为几个模块,然后在分别用vhdl实现。最后把各个模块连接起来,构成整个系统。 由图2-2所示,可以把它分为以下四个模块:控制模块、计数模块、存储数据的存储模块、显示数据的显示模块。控制模块是整个系统的控制部分,它控制着系统的复位、测量的开始。控制模块接受系统外部的复位信号,从而产生系统内的复位信号去复位其他模块,控制着测量的开始。计数模块是整个测量系统的核心,进行计数,计数结果送到存储模块。存储模块的复位信号由控制模块提供,它从计数模块接受到新的计数结果,存储到内部寄存器后,产生一个标志信号,送到控制模块,以便新的一轮的脉冲测量,从而实现连续不间断测量。测量结果经存储后送模块显示,显示模块从存储模块得到结果,进行连续实时显示,其复位信号同样由控制模块提供。整个系统模块如图2-2所示: 图2-2系统框图各模块功能描述如下:控制模块control控制模块相当于控制电路部分,它的主要功能是控制整个抄表器系统的复位,测量的开始等。系统的控制信号几乎都是由控制模块发出的,其他几个模块的工作都受控制模块的控制。控制模块接受外部对系统的复位信号、测量开始信号,然后产生系统内的复位信号对整个系统进行复位操作,或者输出开始测量信号,从而让整个系统开始测量操作。此外控制模块还接受存储模块反馈回来的数据接受完毕信号,以用来实现连续不间断的测量。计数模块counter计数模块是整个抄表器的核心部分,它通过对被测脉冲计数来进行测量。计数模块在每次测量前,从控制模块接受复位信号reset,对模块进行复位,清除上次的测量结果,为新的一次测量做准备。模块在当计数器计数完成并且测量结果输出信号tkeep上的结果稳定后,才输出使能信号outen,使得存储模块可以读取测量结果,从而保证了所读测量结果的准确性。存储模块iiccontrol存储模块通过对计数模块的测量结果的存储。本设计存储模块采用具有iic总线的at24系列的存储芯片,所以存储模块的设计主要是设计一个iic总线的控制器。它的工作过程如下:存储模块从控制模块接受系统开始信号start,还从计数模块接受使能信号wren和测量结果信号tkeep。只有当使能信号wren到来时,存储模块才能从计数模块读取结果信号tkeep。当rden到来时,结果信号tkeep被送到存储芯片上。而存储模块输出的标志信号flag标志着存储模块已经读取了计数模块的测量结果,送到控制模块后,将启动新一轮的测量,实现连续不间断测量。显示模块display显示模块主要作用是生成共阴极数码管显示测量结果所需的控制信号和数据信号。模块从控制模块接受模块输入复位信号sysstart对模块进行复位操作。模块输入的基准时钟clkdisp为分频电路分频处理后,频率为1k的时钟,用于数码管的循环显示。模块同时从存储模块接受模块输入测量结果信号data。该测量结果信号是用二进制表示的,显示模块首先将该信号转换成bcd码表示的形式,以用于数码管的显示。模块输出的各个数码管选通信号gate1 -gate3为各个数码管的选通信号,当某一选通信号为高电平时,表示该选通信号对应的数码管被选中有效,可以进行显示操作。模块输出的数据信digitout各位上的信号是否为高电平来决定是否点亮数码管中对应的显示段。显示模块对数码管以较高的频率进行循环显示,不断重复刷新,由于人眼的延迟性,数码管看起来是同时在显示。3水表抄表器程序的模块化处理 集中抄表器系统共分为四个模块:控制模块、计数模块、存储模块和显示模块。下面将依次介绍其各模块的实现。3.1控制模块 控制模块是整个系统的控制部分,它控制着其他四个模块的工作图3-1是控制模块的模块图。kongzhireset resetoutsysstart stopflag startcunchubaseclk 图3-1 控制模块的模块图3.1.1模块输入、输出 控制模块的输入信号有: reset:为系统复位信号。当需要复位系统时(一般在进行新的测量前),只需使reset变为高电平(reset= 1)即可将整个系统复位,.处于等待测量状态。 sysstart:为系统开始测量脉冲信号。在进行一次新的测量前需要也仅需要给sysstart一个脉冲,系统就开始进行连续不间断的测量。其中,sysstart的脉冲宽度要大于模块中所有时钟(经分频电路分频后得到)的一个周期。flag:为存储模块反馈回来的标志信号。它标志着存储模块已经从计数模块取得此次测量的结果。控制模块接受到此脉冲信号后,就发出startcunchu脉冲信号,使系统进行下一次测量,而不再需要sysstart信号,从而实现了连续不间断测量。 baseclk:为基准时钟,它由外加的晶振所提供。为了调试的方便,仿真时设为1 khz。 输出信号有: resetout:为输出复位脉冲信号。它由系统复位信号reset产生,主要为计数 模块、显示模块的复位。 startcunchu:为存储开始脉冲信号。它既由系统开始测量脉冲信号sysstart 产生,也由存储模块反馈的标志信号flag产生。 stop:为存储停止信号,它由反馈信号flag产生。3.1.2模块流程 控制模块的流程如图3-2所示:图3-2 控制模块流程图控制模块首先检测三个输入信号:系统复位信号reset、系统开始测量脉冲sysstart和存储模块反馈信号flag的变化。当reset变为高电平(reset= 1)时,先对控制模块内的变量进行复位,然后输出resetout脉冲信号,对其它模块进行复位操作。当系统开始测量脉冲信号sysstart来临(sysstart event andsysstart= 1)且脉冲宽度满足条件时,控制模块先检查是否处于系统复位期间(reset= 1),若不是,则输出测量开始脉冲信号startcunchu、当要结束正在进行的测量,开始另外一次新的测量时,需要给控制模块施加系统复位信号,然后再施加开始测量脉冲信号startcunchu,开始新一轮测量,同时送到存储模块,以使存储模块能够再次输出反馈信号flag。这样系统只需在开始施加一次测量开始脉冲信号sartcunchu,以后在无须施加,从而实现了连续不间断的测量。与普通流程图不同的是,控制模块的流程图中各个进程是并发进行的。流程图中并发性是由vhdl语言中各个进程(process)间是并行处理所引起的。这也是vhdl语言的一个特殊性。vhdl语言是一种硬件描述语言,它所描述的硬件在实际工作中同时并行工作的,为了能够反映实际硬件的工作状态,vhdl语言中引入了并行控制语句。而用这些并行控制语句所描述的流程自然有了并发性。3.1.3控制模块小结 控制模块作为系统的控制部分,实现了一般系统所需的复位,开始测量等的功能,并通过存储模块反馈的标志信号实现了连续不间断的测量。3.2计数模块 计数模块是整个系统的核心模块。测量的主要工作由它来完成,它通过计数器对被测信号在基准时间内进行计数来测量。其模块图如图3-3所示:counterreset outenclk tkeep10.3checlk tkeep20.3 tkeep30.3 图3-3 计数模块的模块图3.2.1模块输入、输出 由图3-3可知,计数模块的输入模块信号有: checlk:为被测的信号。系统假定此输入的被测信号己经经过外加整形电路的整形、放大,符合了标准方波的输入要求。其电压幅度为0-5v. clk:为基准时钟,与前面两个模块一样,有外加的晶振提供。 reset:为计数脉冲的输入复位信号。它来自于控制模块产生模块的输出复位信号 resetout:主要用于对计数模块进行复位操作,清除计数结果,保证系统在连续不间断测量的正确性。 输出信号:tkeep:为计数模块的测量结果输出信号。它由模块复位信号reset复位清零,在送到存储模块后,由存储模块送显示模块显示。 outen:为计数模块的输出使能信号。其主要用途是通知存储模块可以读取测量结果输出信号tkeep上的值。只有当测量结果输出信号tkeep上的结果正确、稳定后,计数模块才输出使能信号outen (outen= 1),让存储模块读取测量结果,确保了数据传输的正确。输出使能信号outen由每次测量前的复位信号reset复位清零。3.2.2模块流程 计数模块首先检测模块的输入复位信号reset是否为高电平(reset= 1),若是则进行模块复位操作,包括模块内变量的复位和模块输出信号的复位。若模块不是处于复位期间,则进行计数。模块内计数器定为1000进制,即每1000脉冲,用水量为1吨,脉冲的产生有赖于前置电路的处理,我们讨论的都是经过处理的数字信号。如果实际应用中不是1000个脉冲为1吨水,可以在程序中修改变量,以适合不同的应用场合。当计数模块得到测量结果并输出到模块的结果输出信号tkeep上后,模块才输出使能信号outen (outen= 1)。通知存储模块可以取数。其流程如图3-4所示:3.2.3计数模块小结计数模块利用计数器对被测时钟计数,从而完成测量工作。模块从控制模块接受开始reset=1?输出原始数据模块复位输出使能信号outen=1noyes图3-4 计数模块流程图复位信号reset,向存储模块输出结果输出信号tkeep和outen。复位信号reset用于模块的复位操作,使能信号outen在测量结果输出信号tkeep输出后才变为高电平,以允许存储模块读取测量结果。3.3存储模块 存储模块主要是对计数模块输出的计数结果进行存储,因此存储模块是一个必要的模块。其模块图如图3-5所示:iiccontrolclkstartstop flagwren sda sclrdeniidatein13.0iidatein23.0iidatein33.0图3-5 存储模块的模块图3.3.1模块输入、输出由图3-5可知,存储模块的输入信号有: iidatain:为存储模块输入的测量结果信号,它来源于计数模块输出的测量结果号tkeep 。 clk:为存储模块输入的基准时钟,有外加的晶振提供, wren:为存储模块写入的使能信号。它来源于计数模块的输出使能信号outen,使能信号outen的到来,标志着输入的测量结果信号iidata已准备就绪,可以对其读取。 rden:为存储模块的读出使能信号,它来源于计数模块输出的输出使能信号 outen:主要用于控制模块内写入的数据传送到iic器件。 start:为存储模块输入的系统开始信号,它来源于控制模块输出的输出脉冲信号startcunchu。 stop:为存储模块输入的系统停止信号,它来自于控制模块输出的信号stop.输出信号有: sda:为存储模块输出的hc总线信号,它将被送到eeprom器件。 scl:为存储模块输出的iic总线信号,它将被送到eeprom器件。 flag:为存储模块输出的标志信号,它标志着存储模块已经存储完毕,可以进行下一轮的存储。标志信号被送到控制模块后,将使控制模块开始新的一轮存储。3.3.2模块流程 存储模块的流程图如图3-6所示:存储模块首先检测模块的系统开始信号start是否为高电平,若是则检测写入使能信号wren,当使能信号wren到来时,意味着模块输入的结果信号iidatain上的数据已经准备就绪,模块才开始从iidatain上读取数据,保证了测量结果读取的准确性。 数据读取后将储存到内部。再检测读出使能信号rden,当使能信号rden到来时,意味着数据将要送到eeprom器件,然后模拟ii总线的起始信号,开始存储4位数据的最高位,依次左移,直到4位传送完毕,然后发应答信号,然后模拟iic总线的终止信号,停止一个字节的存储,同时开始下一字节的存储。当stop到来时,存储模块停止工作,发出反馈信号flag,准备下一次的存储。开始start=1?wren=1?数据输入rden=1?模拟iic起始信号发应答信号模拟总线终止信号stop=1?存储一个字节的数据停止储存图3-6 存储模块流程图3.3.3存储模块小结 存储模块主要是对计数模块的测量结果进行存储。模块从控制接受开始信号start,模块还从计数模块接受使能信号wren, rden和结果信号datain,模块输出的信号sda送到eeprom器件存储,标志信号flag的输出意味存储模块已经从测量信号datain上读完了数据,送到控制模块后启动新的一轮存储。3.4显示模块 显示模块主要用于测量结果的数码管显示。模块从存储模块接受测量的结果,输出共阴极数码管显示所需的控制信号。其模块图如图3-7所示: display2date13.0 gate1date23.0 gate2date33.0 gate3sysstart digitout6.0 clkdisp 图3-7显示模块模块图3.4.1模块输入、输出 由图3-7可知,显示模块的输入信号有: clkdisp:为显示模块输入的基准时钟。与前面的模块一样,由外加的晶振所提供。 clkdisp经分频后,生成频率为100k的时钟,主要用于数码管的循环显示。sysreset:为显示输入的复位信号,它来自于控制模块输出的复位脉冲信号 resetout data:为显示模块输入的测量结果信号(二进制表示),它来自于计数模块输出的测量结果信号tkeep。显示模块将对测量结果用数码管适时显示出来。 输出信号有: gate1-gate3:为显示输出的各个数码管选通信号,gate 1 为个位数码管的选通信号,gate 2 为十位数码管的选通信号,gate 3 为百位数码管的选通信号,也就是说最大显示数据为999。digitout:为显示模块输出的数据信号,它的信号宽度为7位,分别对应于数码管的7个显示段。信号高电平表示点亮对应的显示段,低电平表示关闭对应的显示段,从而显示正确的测量结果。3.4.2模块流程 显示模块的流程图如图3-8所示: 显示模块首先从显示模块输入的测量结果信号dataout上得到的用二进制表示的测量结果转换为用bcd码表示,以便下一步用数码管显示。显示模块在显示测量结果前先检测模块的复位信号sysrst是否为高电平(sysstart=1 ),若是,则对整个模块进行复位操作。否则对输入的测量结果进行显示。模块首先钡l量结果的个数位(即选通位信号gate1= 1)。模块在显示测量结果的各个数字时采用的相同的方法:即在时钟作用下,第一次根据digitout决定是否点亮数码管的第一个显示段;第二次根据digitout是否点亮数码管的第一、第二个显示段;以次类推,第七次根据digitout决定是否点亮数码管的一、二、三、四、五、六、七个显示段。从而显示整个数字。显示完个数位后,模块接着显示十位数、百位数。模块接着反过来显示个数位。从而实现测量结果的循环显示。3.4.3显示模块小结 显示模块把存储模块输出的测量结果用数码管适时显示出来,模块的主要工作是生成数码管显示所需的控制信号和数据信号。从控制模块接受的输入复位信号sysrst用于对模块进行复位操作。由外加晶振提供的基准时钟clkdisp经分频生成频率为100k的时钟,用于数码管的循环显示。从存储模块接受的用二进制表示的测量结果信号binput先被转换成用bcd码表示的形式,然后才被用于数码管显示。gate 1 gate3开始sysreset=1?开始测量结果的个位数 gate1=1根据digitout是否点亮数码管的第一个显示段根据digitout是否点亮数码管的第一、二个显示段个位显示完毕相同的方法显示十位百位二进制表示的结果信号binput转化为bcd码表示 图3-8显示模块流程图为模块输出的各个数码管的选通信号,digitout为显示模块输出的数据信号。模块进行显示时,先输出gated= 1,选通个数位数码管,则个位数数码管根据digitout进行操作。个位数数码管显示完毕后,模块输出gate1= 1,选通十位数数码管,各位数码管进行同样的操作。接着模块输出gate2=1,依次类推,当3个数码管都显示完毕后,模块重新从个位数数码管开始显示。就这样反复循环,不断刷新,使3个数码管看上去是同时显示。此外,显示模块实现了测量结果的实时显示,只要测量结果发生变化,则数码管的显示会相应发生变化。3.5抄表器模块构成 将抄表器系统的四个模块:控制模块、计数模块、存储模块和显示模块按照其相互间的信号连接关系组合起来就构成了整个抄表器。3.5.1抄表器的输入、输出系统的输入信号有:clk:为系统输入的基准时钟信号,它将同时作用于系统的四个分离模块checlk:为系统输入的被测信号,作用于计数模块的被测时钟信号checlk reset:为系统输入的复位信号(高电平有效),作用于控制模块的复位信号 resetsysstart:为系统输入的开始测量脉冲信号,作用于控制模块的开始测量脉冲信号sysstart输出信号有:gate1 -gate3:为系统输出的各个数码管选通信号(低电平有效),即显示模块输出信号,各个数码管选通信号gate1 -gate3digitout:为系统输出的数据信号,用于显示sda:为系统输出的iic总线信号,用于存储scl:为系统输出的iic总线信号,用于存储3.5.2抄表器系统说明 整个系统有四个输入信号,分别为系统基准时钟信号clk、被测时钟信号checlk,系统复位信号reset和开始测量脉冲信号sysstart。其中clk为整个系统的基准时钟,整个系统的工作都是以它为基准,系统实现由外加晶振提供;checlk为被测的外部信号;reset作为系统的复位信号,用于对整个系统的复位工作,一般在开始一次新的测量之前,都需对系统进行一次复位操作;sysstart用于通知系统开始进行测量,并输出测量结果。抄表器的输出信号gate1 -gate3为数码管的显示控制信号,digitout为数码管的显示数据信号.系统在接受到开始测量脉冲信号sysstart,开始测量,计数器开始计数,当有计数到999时,计数器自动复位为0,同时往存储模块输出数据1,显示模块控制信号gate1= i,显示个数位的数码管点亮,显示数据 1,当再有1000个脉冲时,显示2,依次进位,完成抄表器的计量功能,同时实时显示,完成抄表的功能。系统连续不间断的测量,保证测量的准确性。该系统最后通过max+plus ii的仿真功能验证,能够实现预定功能。4水表抄表器程序模块的vhdl语言设计 当前各asic芯片制造商都相继开发了用于各自目的的hdl语言,但是大多都没标准化。唯一被公认的是美国国防部开发的vhdl语言,它己成为ieee std 1076标准。另外,:从近期hdl语言发展动态来看,许多公司研制的硬件电路设计工具也都逐渐向vhdl语言靠拢,使得它们的硬件电路设计工具也能支持vhdl语言。verilog公司开发的verilog-hdl语言目前使用也比较广泛,有可能成为另一种标准的hdl语言。但是,从整体来看verilog-hdl语言不如vhdl语言。4.1控制模块程序 由于前面己经介绍了各个模块的具体流程图,本章将不再详细介绍,直接设计vhdl的源程序。首先将介绍控制模块的设计,控制模块是本设计的重点和难点,所以要做主要的介绍,下即为前面章节所定义的模块图,从图中可以清楚的看到控制模块的输入和输出信号。kongzhireset resetoutsysstart stopflag startcunchubaseclk 图4-2 控制模块图4.1.1模块输入输出信号定义 reset: input系统复位信号,在系统开始测量前,一般需要输入一个高电平 sysstart: input系统开始测量信号,在脉冲的上升沿开始触发 flag: input存储模块反馈回来的标志信号,表示测量结果己存储完毕 baseclk: input系统时钟,由晶振电路提供,系统设计为20mhz,为调试时方便,仿真时为1 khz resetout: output控制模块产生的复位信号,用于显示模块的复位 startcunchu : output存储开始信号,主要控制存储模块的开始存储 stop: ooutput存储停止信号,控制存储模块的停止存储4. 1. 2 控制模块vhdl设计 此模块采用进程process设计。进程是一种并行语句,它与其他并行语句同时执行。vhdl编译器每遇到一个并行语句即立刻做集成动作,相反对于顺序语句,则会逐项编译,直到最后一个。进程内部的语句是顺序执行的。 下面是程序清单:library ieee;use ieee.std_logic_1164. all;use ieee.std_logic_arith. all;use ieee.std_logic_unsigned.all;entity kongzhi3 isport (reset:in std_logic; sysstart:in std_logic; flag:in std_logic; baseclk:in std_logic; stop:out std_logic; resetout:out std_logic; startcunchu:out std_logic);end kongzhi3;architecture behav of kongzhi3 issignal kresetout: std_logic;signal kstartout: std_logic;begin p1:process (reset,sysstart,flag,baseclk) begin if(baseclk event and baseclk=1)then kstartout=sysstart; if(flag=1) then if(sysstart=1) then if(reset=1) then stop=1; elsif reset=0 then kresetout=1; end if; end if; end if; end if;end process;resetout=kresetout;startcunchu=kstartout;end behav;4.2计数模块程序4.2.1模块输入输出信号定义counterreset outtenclk tkeep13.0checlk tkeep13.0 tkeep13.0 图4-3计数模块图 计数模块的实质是一个计数器,具体的计数器的计数范围可在程序中定义,本设计假定为1000进制。上图为计数模块的模块图,模块的输入和输出信号定义如下: checlk: input为被测的系统输入信号,为了便于仿真,输入的是由分频电路产生的频率为1hz的周期方波信号clk: input为系统的工作时钟,同控制模块一样,频率为1khzreset: input为计数模块的复位信号,来自于控制模块产生的输出信号resetout。keep: output计数模块的测量结果,它包括三个信号,tkeep1, tkeep2, tkeep3分别表示个位数、十位数、百位数,用四位二进制表示,这样做的目的是为了显示的方便。从后面的显示中可以看到这样做的好处outen: output计数模块的输出使能信号,同时也是计数器的进位信号。它的作用主要用于通知存储模块读取qout的数值。4.2.2计数模块vhdl设计 由于计数模块的程序比较简单,是一个带有进位标志的计数器,下面是其程序清单: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity counter is port(reset:in std_logic; clk:in std_logic; checlk:in std_logic; outen:out std_logic; tkeep1:out std_logic_vector(3 downto 0); tkeep2:out std_logic_vector(3 downto 0); tkeep3:out std_logic_vector(3 downto 0) ); end counter; architecture p of counter is signal outen1:std_logic; signal tcou1:std_logic_vector(3 downto 0); signal tcou2:std_logic_vector(3 downto 0); signal tcou3:std_logic_vector(3 downto 0);begin p1:process (reset,checlk) begin if reset=1 then tcou1=0000;tcou2=0000;tcou3=0000;outen1=0; elsif checlkevent and checlk=1 then if tcou1=1001 and tcou2=1001 and tcou3=1001 then tcou1=0000;tcou2=0000;tcou3=1010;outen1=1; elsif tcou1=1010 and tcou2=1001 then tcou1=0000;tcou2=0000;tcou3=tcou3+1; elsif tcou1=1001 then tcou1=0000;tcou2=tcou2+1; else tcou1=tcou1+1; end if; end if; end process;p2:process (reset, clk) begin if reset=1then tkeep1=0000;tkeep2=0000;tkeep3=0000; else if clkevent and clk=1 then outen=outen1; tkeep1=tcou1; tkeep2=tcou2; tkeep3=tcou3; end if; end if;end process;end p;4.3存储模块的vhdl设计 由于存储数据采用具有iic总线的eeprom器件at24c系列。at24c01/02/04/08/16是atmel公司推出的带iic接口系列的eeprom器件。相对应的eeprom的容量分别为128*8/256*8/512*8/1024*8/2048*80iic bus是phl工phs推出的芯片间串行传输总线,与spi接口不同,它以二根线实现了完善的全双工同步数据传送,可以极方便地构成多机系统和外围器件扩展系统。hc总线采用可器件地址的硬件设置方法,通过软件寻址完全避免了器件的片选寻址方法,从而使硬件系统具有最简单而灵活的扩展方法。按照iic总线规范,总线传输中的所有状态都生成相对应的状态码,系统中的主机能够依照这些状态码自动进行总线管理,用户只要在程序中装入这些标准处理模块,根据数据操作要求完成工ic总线的初始化启动iic总线就自动完成规定的数据传送操作。4.3.1iic总线的基本原理 iic总线的时钟线scl和数据线sda都是双向传输线。总线备用时sda和scl都必须保持高电平状态,只有关闭工ic总线时才使scl钳位在低电平。在标准hc模式下数据下传送速率可达100kbit/s,高速模式下可达400kbit/s。总的驱动能力受总线电容限制,不加驱动扩展时驱动能力为400pfa 1、iic总线的接口电路 为了使总线上所有电路的输出能实现线“与”的逻辑功能,各个iic总线的接口电路的输出端必须是漏极开路或集电极结构,输出端必须接上拉电阻。 2、iic总线的信号及时序定义 在iic总线上每传输一位数据都有一个时钟脉冲相对应,其逻辑“0”“1”的信号电平取决于该接点的正端电压vdd的电压。 3、总线上数据的有效性 iic总线数据传输时,在时钟线高电平期间数据线上必须保持有稳定的逻辑电平状态,高电平为数据1,低电平为数据0。只有在时钟线为低电平时,才允许数据线上的电平状态变化。 4、总线数据传送的起始与停止 iic总线数据传送时有两种时序状态被分别定义为起始信号和终止信号起始信号:在时钟线保持高电平期间,数据线出现由高电平向低电平变 化时启动 iic总线,为iic总线的起始信号。终止信号:在时钟线保持高电平期间,数据线上出现由低到高的电平变化时将停止iic总线的数据传送,为hc总线的终止信号。 起始信号与终止信号都是由主控制器产生。总线上带有hc总线接口的器件很容易检测到这些信号。 5、iic总线上的数据传送格式 iic总线上传送的每一个字节均为8位,但每启动一次iic总线,其后的数据传输字节数是没有限制的。每传送一个字节都必须跟随一个应答位,并且首先发送的数据位为最高位,在全部数据传送结束以后主控制器发送终止信号。所以本模块主要是设计一个iic总线的控制器,完成数据的存储。4.3.2模块的输入、输出信号定义iiccontrolclkstartstop flagwren sda sclrdeniidatein13.0iidatein23.0iidatein33.0 图4-4存储模块图 输入信号: iidatain1, iidasta2, iidata3: input 4位数据输入,来自计数模块 clk: input控制器的工作时钟,由外加的分频电路提供,工作频率为ikhz wren: input控制器的写入使能信号,来自于计数模块的输出信号outen rden: input控制器的读出使能信号,来自于计数模块的输出信号outen start: input控制器的开始信号,来自于控制模块的输出信号startcunchu stop: input控制器的停止信号,来自于控制模块的输出信号stop 输出信号: sda: output控制器输出的数据信号 scl: output控制器输出的时钟信号 flag: output标志信号,表示这一轮存储结束4. 3. 3 存储模块vhdl设计 根据存储模块的流程图,存储模块的具体的vhdl清单如下:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity iiccontrol is port (clk,start,stop,wren,rden: in std_logic; iidatain1,iidatain2,iidatain3: in std_logic_vector(3 downto 0); flag: out std_logic; sda: out std_logic; scl: out std_logic);end iiccontrol;architecture a of iiccontrol issignal sdareg:std_logic;signal sclreg:std_logic;signal cmdreg:std_logic;signal sel:s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 林山流转合同范本
- 股权价转让合同范本
- 理财公司兼职合同范本
- 炼油设备租用合同范本
- 个人车辆借用合同范本
- 江苏防水维修合同范本
- 工程降水井合同范本
- 摄影器材采购合同范本
- 正式建筑合同范本
- 青皮核桃销售合同范本
- 2025年北京高端商务车租赁及全程安全保障合同
- 2025年智能家居产业互联互通标准与产业发展现状及问题研究报告
- 2025年领导干部政治理论知识必考题库及答案
- 2025年提取公积金租房合同范本
- 2025高职单招考试题(附答案)
- 储能系统运维安全手册
- GB/T 45997-2025科技成果五元价值评估指南
- 转让网约车合同协议书范本
- 医院 捐赠协议书
- 小学食堂供餐管理方案(3篇)
- 湖北省武汉市武昌区重点名校2026届中考语文全真模拟试题含解析
评论
0/150
提交评论