毕业论文基于fpga的频率计设计说明书_第1页
毕业论文基于fpga的频率计设计说明书_第2页
毕业论文基于fpga的频率计设计说明书_第3页
毕业论文基于fpga的频率计设计说明书_第4页
毕业论文基于fpga的频率计设计说明书_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计一台基于PC机的简易数字频率计软、硬件,信号为:矩形波、正弦波、三角波,信号峰幅范围:1mV-10V,精度:0.1级,频率范围:愈宽愈好!目录第一章 总体方案设计31.1 背景与概述31.2 频率计主要指标31.3 测量方法设计3第二章 硬件部分信号调理设计72.1 信号调理流程设计72.2 信号调理部分各个模块设计7第三章 软件部分频率测量设计113.1 分频模块设计113.2 计数模块设计123.3 控制模块设计133.4 频率测量软件整体设计143.5 FPGA控制LCD显示16第四章 串口传输及上位机软件设计174.1 串口传输设计174.2 上位机软件设计18第五章 设计总结215.1 设计总结21附录1:部分模块Verilog代码22附录2:上位机软件主要C#代码29第一章 总体方案设计1.1 背景与概述数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字,显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号,方波信号以及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精度高,显示直观,所以经常要用到数字频率计。在传统的电子测量仪器中,示波器在进行频率测量时测量精度较低,误差较大。频谱仪可以准确的测量频率并显示被测信号的频谱,但测量速度较慢,无法实时快速的跟踪捕捉到被测信号频率的变化。正是由于频率计能够快速准确的捕捉到被测信号频率的变化,因此,频率计拥有非常广泛的应用范围。在传统的生产制造企业中,频率计被广泛的应用在产线的生产测试中。频率计能够快速的捕捉到晶体振荡器输出频率的变化,用户通过使用频率计能够迅速的发现有故障的晶振产品,确保产品质量。在计量实验室中,频率计被用来对各种电子测量设备的本地振荡器进行校准。在无线通讯测试中,频率计既可以被用来对无线通讯基站的主时钟进行校准,还可以被用来对无线电台的跳频信号和频率调制信号进行分析。1.2 频率计主要指标频率计可以测量的信号包括矩形波、正弦波、三角波,信号峰幅范围为1mV-10V,精度为0.1级,可测量频率为1Hz-10MHz。1.3 测量方法设计频率测量主要使用FPGA来实现。输入原始信号首先当输出方波信号后,利用FPGA来测量频率。在测量时主要考虑到两种情况。一种是所测量的频率较高时,采用计数测频法,测量时对原始信号进行分频,而计数周期也要根据信号的大致范围来选择,信号频率越高,计数周期也越短。这样做主要是防止计数值超过计数器的最大计数值而导致测量错误。而当原始信号频率较低时,需要采用计时测周法,此时也要进行适当的分频,并根据所测信号频率的大致范围选择合适的高频时钟。具体分析如下:首先应选择较高的分频系数以及较短的计数周期来测量频率的大致范围,在根据范围选择合适的分频系数及计数周期。先对所测信号进行1/64分频,计数周期选为1/64秒,然后根据计数值对应如表1-1所示关系选择合适的分频系数及计数周期。表1-1 第一次尝试测量后状态选择计数值对应的频率范围状态分频系数选择计数周期选择8192以上8.4MHz以上01/641/16秒1024-81911.05MHz-8.4MHz11/161/8秒128-1023131KHz-1.05MHz21/41/4秒64-127 16KHz-131KHz31/21秒64以下16KHz以下-测出范围改用计时测周法测量当测出频率在16KHz以下时,进行第二次尝试,选1/2的分频系数和1秒的计数周期,根据所测出的频率范围对照表1-2,选择合适的分频系数和高频时钟周期,再用计时测周法进行测量。表1-2第二次尝试测量后状态选择计数值对应的频率范围状态分频系数选择高频时钟周期1024-81922048Hz-16KHz41/1282M128-1024128Hz-1024Hz51/322M16-12816Hz-128Hz61/22M16以下16Hz以下71/2200K通过上述方法,就可以将信号的频率精确地测量出来。流程图如图1-1。为分析测量的精度,将测量中各种情况的测量方法总结如表1-3。从表中可分析看出,在进行精确计算时,计数器的计数值最小为6250,因此测量过程中的误差可以保证在0.02%以内,满足0.1级的精度。图1-1 频率测量流程图31表1-3 测量中遇到的各种情况分析序号第一次测量计数值第二次测量计数值原始信号频率测量方法精确测量时参数选择精确测量时计数值范围最终频率计算公式分频系数测量周期高频时钟08192以上-8.4MHz以上计数测频法1/641/16秒-8192以上N*1028(N*64*16)11024-8191-1.05MHz-8.4MHz1/161/8秒-8192-65536N*128(N*16*8)2128-1023-131KHz-1.05MHz1/41/4秒-8192-65536N*16(N*4*4)3127以下8192以上16KHz-131KHz1/21秒-8192-65536N*24127以下1024-81922048Hz-16KHz计时测周法(改进)1/128-2M7812-62500256000000/N(2000000*128/N)5127以下128-1024128Hz-1024Hz1/16-2M7812-6250032000000/N(2000000*16/N)6127以下16-12816Hz-128Hz1/2-2M7812-625004000000/N(2000000*2/N)7127以下16以下16Hz以下1/2-200K6250以上400000/N(200000*2/N)第二章 硬件部分信号调理设计2.1 信号调理流程设计信号调理部分的主要目的即将待测信号转换成能输入FPGA进行频率测量的方波信号。在设计过程中,信号的上限频率为10M。首先,需要将输入信号进行隔直。考虑到信号幅值范围较大,对峰幅值较大的信号首先要进行限幅,对峰幅值较小的信号要放大,考虑到需要将信号放大不同的倍数,因此采用程控放大器来实现,由于放大倍数较高,采用多级放大。然后将放大结果进行峰值检测和A/D转换,根据转换结果来调整放大倍数,直到信号大小满足要求后经过电压比较后输入FPGA进行频率测量。如图2-1所示。图2-1 信号处理流程图2.2 信号调理部分各个模块设计1.隔直、限幅该部分电路图如图2-2所示。首先串接电容隔直,并用并联双限幅电路进行限幅,将信号大小限制在-1V到1V之间,并加一个直流分量,使系统单电源供电,简化电源,并加一个信号跟随器以增加后级电路输入阻抗。图2-2 隔直、限幅部分电路图2.放大部分由于信号最小的峰幅值只有1mV,需要至少放大1000倍,而信号的最高频率为10M,因此采用程控多级放大。考虑采用增益带宽积较大的放大器,这里选择了OPA656N,其增益带宽积达到500MHz。由于最小信号1mV,采用两级放大各放大40倍,即能将信号放大到1.6V,这样即使对最高的频率10MHz,每个放大器的增益带宽积为400MHz,满足要求。如图2-3所示。当放大倍数在40倍以内时,只需采用一级程控放大,在40倍以上时,需要两级程控放大。在程控放大时,由于很少有程控可变电阻能达到10M的带宽,因而采用8选一模拟开关CD4051,其带宽可以达到50M。图2-3 放大部分3.电压比较当信号经过合适的放大倍数放大之后,经过电压比较环节,可以得到方波信号,送入FPGA,作为原始信号进行频率测量。电压比较器选用LM119,LM119每个封装内有两个独立的比较器,可由5V单电源供电。其转换速度快,输入偏置电流小,输出部分具有独立的地线引出端,输出与TTL相容且灵敏度高,能对弱小信号进行比较。如图2-4。图2-4 电压比较环节4.峰值检测和A/D转换图2-4 峰值检测电路经过放大电路的信号首先经过峰值检测电路,然后经过A/D,最后输入FPGA,可以测出信号经过放大电路后的峰幅值,FPGA就可以调整程控可变电阻改变放大倍数,直到满足放大要求。如图2-4。模数转换选用芯片ADC0832,并将转换结果送入FPGA进行处理。第三章 软件部分频率测量设计软件设计的总体目标是由经过调理电路得到的信号,利用适当的方法测出其频率来,并将所测得到的频率显示出来并传送到上位机。软件设计中信号的频率设计范围的比硬件电路适合的频率范围更广,以便当硬件电路改善能适应更高的频率范围时,软件仍能配套使用。因此软件设计时频率范围选为1Hz至20MHz。软件部分的实现使用了FPGA。如图3-1,分为4个模块:分频模块,计数测频计数模块,计时测周计数模块以及控制模块。分频模块根据控制模块输出的控制信号确定分频系数,将输入信号分频。计数测频计数模块根据控制模块输出的信号确定计数周期,并计算在该周期内由分频模块分频后的信号上升沿个数。计时测周计数模块根据控制模块输出的信号确定高频时钟周期,并计算在输入信号的一个周期内高频时钟的上升沿个数。控制模块根据计数模块输入的计数值以及当前的状态,输出信号控制分频系数、计数测频计计数周期、计时测周高频时钟周期,并计算频率,将计算后的频率输出。图3-1 频率测量软件模块示意图3.1 分频模块设计分频模块设计时要注意随着由控制模块输出的控制信号的变化,分频系数要随之改变,如图3-2。图3-2 分频模块图中signal输入原始信号,state为控制信号,该控制信号与控制模块相连,其数值与表1-3的状态相对应,状态改变,分频系数就要改变。利用Verilog编程时,使用变量count来计数,初值设为分频系数数值的一半,例如1/64分频,则将count设为32,其后每一个signal的上升沿时,首先判断是否state与上一个上升沿相同,相同则count减去1,若count减到了1,则signal的下一个上升沿时,将输出信号翻转,同时count重新设为计数初值。若state与上一个上升沿不同,则count需要根据当前state的值重新赋初值。图3-4 计数模块仿真波形图图3-3 分频模块仿真波形图该模块的波形仿真图如图3-3,可以看见当state=0时,实现了1/64分频,state=1时,实现了1/8分频,state=2时,实现了1/4分频,state=3时,实现了1/2分频。与表2-3的要求一致。3.2 计数模块设计计数模块包含计数测频法以及计时测周法两种方法所用的计数模块,其编程实现的方法类似,在此只讨论计数测频法计数模块的实现,对计时测周法不再赘述。计数测频法主要包括两个部分,一个是将输入的标准时钟信号根据控制模块输出的信号分频,从而获得所需要的1/16秒、1/8秒等信号,另一部分是计算在计数周期信号保持低电平或高电平时,待测信号上升沿的个数。编程时,由于FPGA外接晶振的频率为50MHz,因此先将该频率进行1/1562500分频后作为时钟信号输入这个模块,经过分频后的信号周期为32Hz,将该信号在模块中进行1/4、1/8、1/16、1/64分频,就能得到周期为1/8秒、1/4秒、1/2秒、2秒的信号,这些信号就能保持1/16秒、1/8秒、1/4秒、1秒的高电平或者低电平。如图3-5所示。图3-5 计数模块该模块的波形仿真图如图3-4所示,clk为输入的32Hz的时钟信号,signal为待测信号,频率为160Hz,state为由控制模块输出的用来控制计数周期的信号,period为计数周期,当state为0时,period周期1/8秒,每个上升沿下降沿持续1/16秒,同样的,当state变为1、2或者3时,period的周期也能符合表1-3的要求。data_out为输出的计数器的计数值,可见,当state状态改变后,必需再过period周期的一半data_out才能输出正确的计数值,当state分别为0、1、2、3时,data_out输出值分别为10、20、40、160,这也与理论计算相一致。3.3 控制模块设计控制模块根据计数模块输入的计数值以及当前的状态,输出下一个状态的数值来控制分频系数、计数测频计计数周期、计时测周高频时钟周期,此外,该模块还要根据转台来计算频率,将计算后的频率输出。如图3-6所示。图3-6 控制模块在这一部分设计中,用到了Verilog设计中经常使用到的有限状态机的设计思想。有限状态机是在有些情况下需要某些代码块按照一定的时间顺序顺序执行。例如在某一模块中,需要先执行代码段A,然后判断条件B,若B成立,执行C后下一个周期执行D,若C不成立则直接回到A,则用Verilog可以写出如下代码段来实现:always(posedge clk)begin case(state) 0:begin执行代码段Astate=1;end 1:begin if(B成立) begin执行代码段C state=2; end else state=0;end 2:图3-7 控制模块仿真波形图begin执行代码段Dstate=0;end endcaseend在这个模块的编写中,输入的时钟信号与上一模块一致,也是32Hz的,由于在上一模块中提到的正确的计数值需要在状态改变后一段时间后才能正确输出,因此在这里用一个计数值count来做状态机的状态转移变量,每次时钟的上升沿输入后count均加一,当count到10后读取计数值,根据表2-3来判断采用的测量频率的方法,并复制给赋给state(用来控制输出送给其他模块的控制变量),的值,当count记到48时,再次读取计数值,若采用计数测频法可直接计算频率;若采用计时测周法,则根据计数值来确定分频系数和高频时钟,等到count记到96时,再次读取计数值,然后计算原始信号的频率。该模块的仿真图如图3-7所示。3.4 频率测量软件整体设计图3-9 整个测量模块仿真波形图1图3-8 整个频率测量模块图3-10整个测量模块仿真波形图2频率测量模块的整体设计图如图3-8,整个设计的波形仿真图如图3-9和图3-10,分别仿真了输入信号频率为250KHz及25KHz时的波形仿真,可以看出在经过1.5秒左右的时间后,data能正确输出待测信号的频率。3.5 FPGA控制LCD显示该部分简要介绍将测得结果利用16*02型LCD液晶显示模块显示的过程。LCM是指液晶显示驱动模块,它由三部分组成,包括LCD控制器、LCD驱动器和LCD显示装置。控制LCD显示主要是由LCD控制器中的数据寄存器和指令寄存器实现的。数据寄存器主要负责存储控制器要写到RAM的资料,或者要从RAM读出的资料,因此数据寄存器客户四位一个数据缓冲区,它是由LCM的RS、R/W及E三个脚来控制的。当RS及R/W引脚信号为1,E引脚信号由1变为0时,LCM会将DR寄存器内的资料由数据总线输出供FPGA读取;当RS引脚信号为1,R/W引脚信号为0,E引脚信号由1变为0时就会把数据总线引脚上的信号送入DR寄存器。指令寄存器负责存储FPGA要写给LCM的指令码。当FPGA要下一个命令道指令寄存器时,必须要控制LCM的RS、R/W及E三个引脚。当RS及R/W引脚信号为0,E引脚信号由1变为0时,就会把数据总线引脚上的数据存入指令寄存器。图3-11展示了当输入50M信号进过1/6分频后的LCD显示,能正确显示50M信号经过1/6分频后得到的8.333M的显示。图3-11 LCD显示第四章 串口传输及上位机软件设计这部分主要介绍将FPGA计算得到的待测信号频率用一定的方法传送到上位机以及利用上位机将其显示出来。4.1 串口传输设计这一部分仍然使用FPGA来实现。由于所测得的信号频率范围较大,且位数不等,因此首先将该数值表示成类似科学计数法的形式,并规定底数的有效数字始终保持为4位,即例如频率为8333333Hz时,将其表示成为8.333*107,而在传输时,可以先传输指数7,在传输底数的1000倍即8333,这样,既可以满足精度要求,又可以将数据传送出去。考虑到串口通信的波特率,这里选用19200的波特率,而串口在传输数据时,是以一个字节即8位为一个包来进行发送的。不发送数据时,应保持高电平,发送数据前,先拉低,然后发送8位数据,发送完后再发送一个校验位和一个停止位1,校验位选用偶校验,即该字节中1的个数为偶数的话则校验位为0,为奇数的话校验位就为1。发送时,第一个字节先发送指数,由于底数较大,因此用两个字节来发送,第一个字节发送低8位数据,第二个字节发送高8位数据。如图4-1。图4-1 串口发送模块图4-2展示了这一模块的仿真波形图,data_in模拟输入的数据为由之前的频率测量模块测出的67103864Hz,仿真图可见在数据处理完成之后,digit为7,data为6710,也就是6710*107,符合要求。图4-2 串口发送模块波形图data_out的输出波形为1110111000001100110110001001011000111这段数据的含义如表4-1.表4-1 串口发送数据含义111011100000110011011000100101100011111发送前第一个字节第二个字节第三个字节发送结束其中第一个字节发送时的各位含义如表4-2。表4-2 第一个字节各位含义第一个字节01110000011起始位数据位(8位),表示数字7,低位在前,高位在后偶校验位停止位4.2 上位机软件设计上位机软件是在visual studio 2010环境下利用C#语言编写的。主要实现了显示当前频率值以及记录历史频率值的功能。在编写程序的过程中,使用到了能读写串口信息的类operate_com。操作串口时,首先如下设置相关的串口参数,设置串口波特率为19200,起始位设置为1位,数据位8位,并采用偶检验和一位的停止位。public int iPort = 1; /1,2,3,4 选择串口1public int iRate = 19200; /1200,2400,4800,9600 选择19200public byte bSize = 8; /8 bits 数据位8位public byte bParity = 2; / 0-4=no,odd,even,mark,space 偶检验public byte bStopBits = 0; / 0,1,2 = 1, 1.5, 2 一位停止位public int iTimeout = 1000;public mycom mycom1 = new mycom(); /实例化对象public byte recb;具体收数据时,先使用这个对象的Read函数来读取,并存储在字符串reb中,利用如下代码以字节为单位依次将数据转换为十六进制表示的数据:foreach (byte b in reb) temp += b.ToString(X2);这样得到了6位十六进制数据,然后再将十六进制的数据转换成10进制数据,并根据所测得的频率值的大小选择合适的单位(Hz、KHz或者MHz)将数据显示出来。/将前两个十六进制数据转换成10进制数据,得到频率的指数,记为digitfor (int i = 0; i 64) digit = digit * 16 + Convert.ToChar(dis_package(recb)i) - 55; else digit = digit * 16 + Convert.ToChar(dis_package(recb)i) - 48;/将后面四个十六进制数据转换成10进制数据,得到频率的底数,记为datafor (int i =2; i 64) data = data * 16 + Convert.ToChar(dis_package(recb)i) - 55; else data = data * 16 + Convert.ToChar(dis_package(recb)i) - 48;/根据digit的大小,选择合适的单位(Hz、KHz或者MHz)将数据显示出来。if (digit = 0 | digit = 1 | digit = 2) shuzi = data / 1000; danwei = Hz; else if (digit = 3 | digit = 4 | digit = 5) shuzi = data / 1000000; danwei = KHz;else shuzi = data / 1000000000; danwei = MHz;/第一个标签显示当前时间:label1.Text = 当前时间: + System.DateTime.Now;/第二个标签显示当前测得的频率值:label2.Text =Convert.ToString(shuzi) + + danwei;/在历史记录框内将当前测的信息添加进去:msg2. Text+=System.DateTime.Now+ 测得数据: + Convert.ToString ( shuzi)+danwei+rn);运行后界面如图4-3所示。图4-3 上位机软件运行截图第五章 设计总结5.1 设计总结本次作业设计了一个简易的数字频率计的软硬件。输入信号经过信号日调理电路后输入FPGA,主要利用FPGA来进行频率测量,结果在LCD并通过串口通信传送到上位机,上位机可以显示测得的频率值并且记录历史数据。设计中,利用多级程控放大等使得设计满足了信号峰幅范围为1mV到10V以及1Hz到10MHz的设计要求。同时在软件实现测量的过程中使用了计数测频法和改进测周法相结合并采用尝试测量的方法,使得能以最快速度以及较高精度的测出待测信号的频率,能满足0.1级的精度。同时,设计中仍然有许多需要改进的地方,例如,在FPGA的Verilog编程中,有些地方用到了较复杂的乘除法,如在改进测周法计算频率值的时候需要用所测得计数值去除50000000等,这些乘除法会耗费大量FPGA的逻辑资源。改进的方法是可以考虑采用将计数值等数据通过串口直接送到上位机,由上位机进行复杂的乘除法操作。在此次设计及的过程中,学习到了很多东西,例如利用串口发送数据及相应的上位机处理等,尤其是对利用FPGA实现系统功能以及利用Verilog编程有了更深刻的认识,在以后的学习过程中还会不断完善此次的设计。附录1:部分模块Verilog代码1.分频模块module div(signal_in,signal_out,state); input signal_in; input2:0 state; output signal_out; reg signal_out; reg2:0 last_state; reg8:0 count; always(posedge signal_in) begin if(state=last_state) begin last_state1) begin signal_out=signal_out; count=count-1; end else begin signal_out=signal_out; case(state) 0: count=32; 1: count=8; 2: count=2; 3: count=1; 4: count=128; 5: count=32; 6: count=2; 7: count=2; default: count=32; endcase end end else begin signal_out=signal_out; last_state=state; case(state) 0: count=32; 1: count=8; 2: count=2; 3: count=1; 4: count=128; 5: count=32; 6: count=2; 7: count=2; default: count=32; endcase end endendmodule2.计数测频模块module jscpcount(clk,signal_in,state,data_out,period,count); input clk,signal_in; input2:0 state; output20:0 data_out; reg20:0 data_out; output20:0 count; reg20:0 count; reg25:0 count_time; reg2:0 last_state1,last_state2; reg period,last_period; output period; always(posedge clk) begin if(state=last_state1) begin last_state11) begin count_time=count_time-1; period=period; end else begin period=period; case(state) 0: count_time=2; 1: count_time=4; 2: count_time=8; 3: count_time=32; default: count_time=2; endcase end end else begin last_state1=state; period=period; case(state) 0: count_time=2; 1: count_time=4; 2: count_time=8; 3: count_time=32; default: count_time=2; endcase end end always(posedge signal_in) begin if(state=last_state2) begin last_state2=last_state2; if(period=last_period) begin last_period=last_period; count=count+1; data_out=data_out; end else begin last_period=period; data_out=count+1; count=0; end end else begin count=0; last_state2=state; data_out=data_out; end endendmodule3.改进测周模块module gjczcount(clk,signal_in,state,data_out,period,count); input clk,signal_in; input2:0 state; output20:0 data_out; reg20:0 data_out; output20:0 count; reg20:0 count; reg5:0 count_time; reg2:0 last_state1,last_state2; reg period,last_signal; output period; always(posedge clk) begin if(state=last_state1) begin last_state11) begin count_time=count_time-1; period=period; end else begin period=period; case(state) 4: count_time=5; 5: count_time=5; 6: count_time=5; 7: count_time=50; default: count_time=5; endcase end end else begin last_state1=state; period=period; case(state) 4: count_time=5; /yifenpin 10 5: count_time=5; 6: count_time=5; 7: count_time=50; default: count_time=5; endcase end end always(posedge period) begin if(state=last_state2) begin last_state2=last_state2; if(signal_in=last_signal) begin last_signal=last_signal; count=count+1; data_out=data_out; end else begin last_signal=signal_in; data_out=count+1; count=0; end end else begin count=0; last_state2=state; data_out=data_out; end endendmodule4.控制模块module contral(clk,data_in,data_in2,data_out,new_data,state); input clk; input20:0 data_in,data_in2; output35:0 data_out; output2:0 state; output new_data; reg new_data; reg35:0 data_out; reg2:0 state; reg1:0 temp; reg7:0 count; always(posedge clk) begin if(temp=0) begin new_data=0; if(count10) begin count=count+1; temp=0; data_out=data_out; state=state; end else begin temp=1; count=count+1; data_out8000) state1000) state125) state=2; else state=3; end end else if(temp=1) begin if(count48) begin count=count+1; temp=1; data_out=data_out; state=state; new_data=0; end else begin case(state) 0: begin data_out=data_in*1024; state=0; count=0; temp=0; new_data=1; end 1: begin data_out=data_in*128; state=0; count=0; temp=0; new_data=1; end 2: begin data_out=data_in*16; state=0; count=0; temp=0; new_data8192) begin data_out=data_in*2; state=0; count=0; temp=0; new_data1024) begin data_out=data_out; state=4; count=0; temp=2; new_data128) begin data_out=data_out; state=5; count=0; temp=2; new_data16) begin data_out=data_out; state=6; count=0; temp=2; new_data=0; end else begin data_out=data_out; state=7; count=0; temp=2; new_data=0; end end endcase end end else begin if(count96) begin count=count+1; temp=3; data_out=data_out; state=state; new_data=0; end else begin state=0; count=0; temp=0; new_data=1; case(state) 4: data_out=2000000*64/data_in2; 5: data_out=2000000*8/data_in2; 6: data_out=2000000/data_in2; default: data_out0) begin case(period) 2d0: begin a=1; data_out=data_out; even=even; if(temp=0) begin data=data_in*1000; temp=1; data_out19999) begin period=0; digit=digit+1; data=data/10; data_out1=data_out1; end else begin period=1; digit=digit; data1=data/100-data/10000*100; data2=data-dat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论