第一篇:基于FPGA的直流电机PWM调速系统设计与实现
FPGA课程设计
题目:基于FPGA的直流电机PWM调速系统设计与实现 班级:微电子学1202班 姓名:杜英 学号:1206080201 日期:2016年3月24日
基于FPGA的直流电机PWM调速系统设计与实现
1设计任务与要求
1.1设计任务
完成基于FPGA的直流电机PWM调速系统设计与实现,实现对直流电机的闭环调速,速度值采用LCD或数码管显示。
1.2设计要求
1.2.1了解PWM控制方法及应用;掌握PWM直流电机调速控制原理;掌握直流电机调速及驱动控制原理;完成基于FPGA的直流电机PWM调速系统设计。采用PWM(脉冲宽度调制)技术,速度值采用LCD或数码管显示。
1.2.2通过课程设计的实践,进一步了解和掌握硬件描述语言(VHDL或Verilog)和TOP-DOWN的设计流程,提高对实际项目的分析和设计能力,体会FPGA项目开发的过程,熟悉实验报告的编写规范。
2设计原理分析
2.1直流电机结构如下图1.1所示
图2.1 直流电机的构造
将直流电源通过电刷接通线组线圈,使线组线圈导体(电枢导体)有电流通过,在电磁的作用下,线组线圈将会产生磁场,同时产生的磁场与主磁极的磁场产生电磁力,这个电磁力作用于转子,使转子以一定的速度开始旋转,电机就开始工作。
在电机的外部电路加入开关型的霍尔元件,同时在电子转子的转盘上加入一个使霍尔元件产生输出的带有磁场的磁钢片。当直流电机旋转时转盘与磁钢片一起旋转,当磁钢片转到霍尔元件上方时,可以使霍尔元件的输出端高电平变为低电平。当磁钢片离开霍尔元件上方后,霍尔元件输出端又恢复高电平。如此,点击每旋转一周,会使霍尔元件的输出端产生一个低脉冲,可以通过检测单位时间内霍尔元件输出端低脉冲的个数推算出直流电机的转速。
本次设计中,调节PWM占空比进而控制直流电机转速,在本次设计中,为了保护霍尔元件,故设定程序每6秒刷新一次数据,所以在数码管显示的数据乘以10就是在该占空比时的直流电机每分钟转速。在这次的实验中数码管采用的8位共阴极数码管,通过锁存器输入数据使得数码管的8个段码数字显示,再通过选择输出数据对所需数码管进行选择。
2.2电路原理图
图2.2 电路原理图 3 设计方案
上述原理图中包含PWM模块、测速模块、计数模块、电机模块、滤波模块。电机的外部电路加入开关型的霍尔元件,同时在电子转子的转盘上加入一个使霍尔元件产生输出的带有磁场的磁钢片。当直流电机旋转时转盘与磁钢片一起旋转,当磁钢片转到霍尔元件上方时,可以使霍尔元件的输出端高电平变为低电平。当磁钢片离开霍尔元件上方后,霍尔元件输出端又恢复高电平。如此,点击每旋转一周,会使霍尔元件的输出端产生一个低脉冲,可以通过检测单位时间内霍尔元件输出端低脉冲的个数推算出直流电机的转速。本次设计为六秒记一次数,乘十就是每分钟转速值。再通过驱动模块显示数码管数据。
4设计步骤
(1)首先确定整体设计方案,确定设计需要使用的软件;(2)设计电路模块,编写各模块程序代码并进行仿真编译;(3)完成整体电路图设计后,使用QuartusⅡ软件对整体电路进行仿真调试;
(4)连接硬件,使用示波器观察产生的波形,对不足之处进行改进调试。
5调试结果说明
连接好试验箱,把硬件与实验箱接通,将程序下载到实验箱中。进行实验,示波器观察PWM脉冲波形(占空比),看实验结果与预期效果是否相同,若相同,则实验无误。其波形如下: 占空比为50%时
占空比为90%时
将程序下载到实验箱中后,其实际操作过程如下: K12为使能键,使K12=‘1’;输入时钟信号为1MHZ;(1)K4=1时,示波器和LED的显示如下:
示波器显示的是霍尔元件单位时间内计数的个数为31.011 显示器是每六秒电机转的圈数为186转
结论:31.011*6=186.066于186近似,所以结论符合要求。(2)K4=1,k3=1时,示波器和LED的显示如下:
结论:68.6338*6=411.8028于412近似,所以结论符合要求。(3)K4=1,k3=1,K2=1时,示波器和LED的显示如下:
结论:85.516*6=513.096于513近似,所以结论符合要求。(4)K4=1,k3=1,K2=1,K1=1时,示波器和LED的显示如下:
结论:90.0339*6=540.2034于541近似,所以结论符合要求。通过以上的比较,发现示波器中的结果与数码管上数据大概一致,即实验结果基本达到要求。
6心得体会
本次课程设计,用FPGA控制直流电机,完成直流电机PWM调速系统设计,实现对直流电机的闭环调速,速度值采用LCD或数码管显示。是一次很好的学习和实践的机会。通过课程设计,我明白了电机工作的原理,以及用FPGA控制电机的原理。最重要的是,对如何设计一个系统有了更进一步的了解,积累了很多经验。
从下载测试的结果来看,设计的要求基本上都实现了。但是仍存在不少问题。每个模块生成基本电路后,把各个模块的进行连接,仿真结果是正确的。但是当连接到试验箱后,电机正常转动,LED却无法显示。检查电路和程序还有电路图,并发现什么问题。无意中发现LED偶尔会出现数字,但也只是闪一下。最后才发现是因为电机转动太快了,LED无法及时显示或者是一直在闪,人眼无法识别。在程序中加入了滤波模块,才解决了问题。
在设计的过程中,开始照着EDA课本上的原理设计,后来才发现所设计的电路有很多地方都满足不了设计要求,使设计一度遭遇了很大困难。通过与同学讨论请教,逐步改进了设计,终于使设计的电路和设计要求相吻合。在这中间,通过不断提出问题,解决问题,我对这次设计的原理有了更深的了解,也给我分析问题,解决问题提供了很多好的方法,好的思路。同时,我也发现了自己存在的很多不足。发现自己在设计一个系统的时候不能够统筹兼顾,不能够从总体上把握设计的思路,也不能看清问题的核心与关键所在。这些都需要在下面不断学习实践,理论毕竟只是理论,要多参加实践,这样才能提高自己的能力,积累经验。
附录一
PWM模块程序 Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity PWM is port(clock:in std_logic;
duty_cycle:in std_logic_vector(3 downto 0);
pwm_en:in std_logic;
pwm_out:out std_logic);end entity;architecture art of PWM is
signal pwm_out_io:std_logic;
signal count:std_logic_vector(3 downto 0);begin
pwm_out<=pwm_out_io;
process(clock)
begin
if rising_edge(clock)then
if pwm_en='1' then
count<=count+1;
end if;
end if;
end process;
process(clock)
begin
if rising_edge(clock)then
if pwm_en='1' and count pwm_out_io<='1'; else pwm_out_io<='0'; end if; end if; end process;end; 测速模块程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity cesu is port(clk : in std_logic; --时钟输入1Mhz ena : out std_logic; --允许计数 clr : out std_logic; --计数器清零信号产生 load : out std_logic);--锁存、显示输出允许高有效 end cesu;architecture behav of cesu is signal clkk :std_logic; --1HZ时钟信号 signal count :integer range 0 to 7;--6秒计数 signal clr1 :std_logic; --清零信号 signal ena1 :std_logic; --允许计数信号 signal load1 :std_logic; --允许计数信号 --signal cq1,cq2,cq3,cq4 : INTEGER RANGE 0 TO 15;--计数数据 begin process(clk) variable c:std_logic; variable cnt:integer range 0 to 500000; begin if clk'event and clk='1' then cnt:=cnt+1; if cnt=500000 then cnt:=0;c:=not c; end if; end if; clkk<=c; end process; process(clkk) --6秒计数 begin if clkk'event and clkk='1' then count<=count+1; if count<6 then ena1<='1';load1<='0';clr1<='0'; elsif count=6 then ena1<='0';load1<='1';clr1<='0'; elsif count=7 then ena1<='0';load1<='1';clr1<='1'; end if; end if; ena<=ena1; load<=load1; clr<=clr1; end process;end behav; 计数模块程序 library ieee;use ieee.std_logic_1164.all; entity cnt10 is port(clk:in std_logic; --计数时钟信号 clr:in std_logic; --清零信号 ena:in std_logic; --计数使能信号 cq :out integer range 0 to 15;--4位计数结果输出 carry_out:out std_logic); --计数进位 end cnt10;architecture behav of cnt10 is signal cq1:integer range 0 to 15;begin process(clk,ena)begin if clr= '1' then cq1<= 0; ----计数器异步清零 elsif clk'event and clk= '1' then if ena= '1' then if cq1=10 then cq1<=1; else cq1<=cq1+1; end if; ----等于9,则计数器清零 end if; end if;end process;process(cq1) begin if cq1=10 then carry_out<= '1'; ----进位输出 else carry_out<= '0'; end if;end process; cq<=cq1;end behav; 驱动模块程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity qudong_8 is port(clk:in std_logic; --动态显示刷新速度时钟 QQ1,QQ2,QQ3:in std_logic_vector(3 downto 0);--32位BCD码输入,最0~3低位,28~31最高位 qudong1:out std_logic_vector(7 downto 0);--驱动信号输出,0~7分别为abcdefgp contrl:buffer std_logic_vector(2 downto 0));--数码管位选输出,000最低位数码管有效,111最高位数码管有效 end qudong_8;architecture behavior of qudong_8 is signal disp:std_logic_vector(3 downto 0);signal temp:std_logic_vector(2 downto 0);begin process(clk)begin if clk'event and clk='1' then temp<=temp+1; end if; contrl<=temp;end process; process(contrl) --位选信号产生进程 begin case contrl is --when“000”=>disp<=QQ7; --when“001”=>disp<=QQ6; --when“010”=>disp<=QQ5; --when“011”=>disp<=QQ4; when“100”=>disp<=QQ3; when“101”=>disp<=QQ2; when“110”=>disp<=QQ1; --when“111”=>disp<=“0000”; when others=>disp<=“0000”; end case;end process;process(disp) --译码进程 begin case disp is when“0000”=>qudong1<=“00111111”; when“0001”=>qudong1<=“00000110”; when“0010”=>qudong1<=“01011011”; when“0011”=>qudong1<=“01001111”; when“0100”=>qudong1<=“01100110”; when“0101”=>qudong1<=“01101101”; when“0110”=>qudong1<=“01111101”; when“0111”=>qudong1<=“00000111”; when“1000”=>qudong1<=“01111111”; when“1001”=>qudong1<=“01101111”; when others=>qudong1<=“00000110”; end case;end process;end behavior; 消抖模块程序 library ieee;use ieee.std_logic_1164.all; entity xiaodou is port(clk,input: in std_logic;output: out std_logic);end xiaodou; architecture behav of xiaodou is signal cp:std_logic;signal count:integer range 0 to 3;begin process(clk)begin if(clk'event and clk='1')then--检测上升沿 if(input='1')then--如果有输入信号 if(count=3)then count<=count;--当计数达到3时,保持计数值不变 else count<=count+1;--当其小于3时,进行加1处理 end if;if(count=2)then cp<='1';--如果计数达到2,cp置1 else cp<='0';--其余情况全部为0 end if;else count<=0;--如果计数出现非法状况,进行清零复位 end if;end if;output<=cp;--信号输出 end process;end behav; 题目: 基于单片机的数字PID控制直流电机PWM 调压调速器系统 目录 一、PID简介··································(6) 二、设计原理··································(7) 三、设计方案··································(8) 四、心得体会 ·······························(16) 五、参考文献 ·······························(16) 二、设计原理 基本的设计核心是运用PID调节器,从而实现直流电机的在带动负载的情况下也能稳定的运行。运用A/D转换芯片将滑动变阻器的模拟电压转换为数字量作为控制直流电机速度的给定值;用压控振荡器模拟直流电机的运行(电压高-转速高-脉冲多),单片机在单位时间内对脉冲计数作为电机速度的检测值;应用数字PID模型作单片机控制编程,其中P、I、D参数可按键输入并用LED数码显示;单片机PWM调宽输出作为输出值,开关驱动、电子滤波控制模拟电机(压控振荡器)实现对直流电机的PID调压调速功能。 基于以上的核心思想,我们把这次设计看成五个环节组成,其具体的原理如下见原理图2.0 图2.0 PID调速设计原理图 如图可以知道,这是一个闭环系统,我们借助单片机来控制,我们现运用AD芯片,运用单片机来控制AD芯片来转换模拟电压到数字电压,AD给定的电压越大,则产生的数字量越大,单片机再控制这个数字量来产生一个PWM,PWM占空比越大,就驱动晶体管导通的时间越长,这样加到压频转换器的电压也就越大,电压越大,则压频转换器输出的计数脉冲再单位时间也就越多,这样就相当于电机的电压越大,其转速也就会越快,我们再用单片机对压频转换器的输出脉冲计数,PID调节器就把这个计数脉冲和预先设定的 值进行比较,比设定值小,这样就会得到一个偏差,再把这个偏差加到AD的给定电压,这样就相当于加大了PWM的占空比,要是比设定值大,这样也会得到一个偏差,就把这个变差与给定的电压向减,这样就可以减少PWM的占空比,通过改变占空比来改变晶体管的导通时间,就可以改变压频转换器的输入电压,也就改变压频转换器的单位计数脉冲,达到调电动机速度的目的。 三、设计方案 3.1 PWM的调制 AD芯片给定一定的电压,应用单片机来控制来产生一个PWM,给定的电压不同,就会的得到不同的PWM波形。在产生PWM波形我们采用ADC0808芯片和AT89C51两个核心器件。 ADC0808芯片是要外加电压和时钟,当输入不同的电压的时候,就可以把不同的电压模拟量转化为数字值,输入的电压越大,其转换的相应的数字也就会越大,ADC0808芯片有8个通道输入和8个通道输出。其具体的管脚图见3.01 图3.01 ADC0808芯片管脚图 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图3.02所示 图3.02 AT89C51芯片管脚图 3.2基于单片机的数字PID控制直流电机PWM调压调速器系统 3.21调速原理 当基于以上产生一个PWM后,就可以借助PWM脉冲来控制晶体管的导通和关断,来给压频转换器来提供一定的电压,在PROTUES中仿真中,给定一个+12V的电压,就通过晶体管的导通和关断来给压频转换器供电,压频转换器就会输出很多的脉冲,借助单片机P3.5来计数,其计数送给P0来显示,通过给定不同的ADC的输入电压,就可以的得到不同的计数显示,电压越大,其计数显示也就越大,通过改变计数脉冲的周期和硬件压频转换器(LM331)的电阻和电容,就可以得到与输入电压接近的数值显示,可能由于干扰的原因,其显示值和实际值有一点偏差,这是在没有什么负载的情况下,或者说是在空载的情况下,这样就可以得到一个很理想的开环系统,也为闭环PWM调节做好准备。 当开环系统稳定后,加上一个扰动,或者说是加上负载,这样就使的压频转换器的电压减少,在给定一定电压的时候,当负载分压的时候,也就相当于直流电机的电压就会减少,这样直流电机的转速就会下降,或者说当有负载的时候,压频转换器的输入电压就会减少,这样输入的脉冲在单位时间就会减少,这样PID调节器,通过改变PID的参数,PID控制器由比例单元(P)、积分单元(I)和微分单元(D)组成。其输入e(t)与输出u(t)的关系为 u(t)=kp(e((t)+1/TI∫e(t)dt+TD*de(t)/dt)式中积分的上下限分别是0和t 因此它的传递函数为:G(s)=U(s)/E(s)=kp(1+1/(TI*s)+TD*s)其中kp为比例系数; TI为积分时间常数; TD为微分时间常数这样就会得到一个偏差,通过这个偏差来改变原来的PWM的占空比,使得晶体管的导通时间加长或减少,这样就改变了直流电机的输入电压,也就是该变了在PROTUES压频转换器的输入电压,使得输出的计数脉冲在单位时间发生改变,也就是模拟了直流电机的转速的改变,我们希望通过PID的调节,使得输出的计数脉冲的显示值和预先设定的值接近,由于偏差的存在,使得PID调节器不断的去修正,使得显示值近可能的接近我们所预期的设定值。 3.22基于单片机的数字PID控制直流电机PWM调压调速器系统原理图 图3.07 PID调速原理图 3.23波形仿真 在不同的给定电压下开换系统会有不同的PWM波形和计数脉冲个数。在不同的波形中从上之下以此为pwm波形,经过驱动后的波形,LM331的输入电压,LM331的输出脉冲。 当给定电压为较高(E8H)其波形见如下图3.08、图3.09 中电压给定对应的波形 PID波形 图3.10 低电压给定对应的波形 ; 图3.11 PID 控制LM331的输入电压波形 3.24 PID调速程序 PWM 输出驱动程序 ADC EQU 35H CLK BIT P2.4 ST BIT P2.5 EOC BIT P2.6 OE BIT P2.7 PWM BIT P3.7 ; PID 调节设置 EK0 EQU 40H EK1 EQU 41H EK2 EQU 42H PP EQU 43H II EQU 44H DD EQU 45H UK0 EQU 70H UK1 EQU 71H ORG 00H SJMP START ORG 0BH LJMP INT_TO START: MOV TMOD, #62H MOV TH0, #00H MOV TL0, #00H MOV IE, #86H SETB TR0 ;SETB TR1 MOV R0, #00 MOV R1, #00 MOV R2, #00 MOV R3, #00 MOV R4, #00 MOV R5, #00 MOV R6, #00 MOV R7, #00 ;PID 赋值 MOV PP, #05 MOV II, #03 MOV DD, #02 MOV EK0,#00H MOV EK1,#00H MOV EK2,#00H MOV UK0,#00H MOV UK1,#00H WAIT: CLR OE INC R7 CLR ST SETB ST CLR ST JNB EOC, $ SETB OE MOV ADC, P1 MOV R0,ADC MOV A,70H ADDC A,ADC MOV ADC ,A ;CLR OE SETB PWM SETB TR1 MOV A, ADC LCALL DELAY CLR PWM ;等待转换完成;高电平延时 8 MOV A, #255 SUBB A, ADC LCALL DELAY ;低电平延时 CJNE R7, #20, WA2 WA1: CLR TR1 MOV R7, #00 MOV A, TL1 MOV 50H,A mov P0,50H ;PID求偏差 MOV A,EK1 MOV EK2,A MOV A,EK0 MOV EK1,A MOV A,R0 SUBB A,50H MOV EK0,A ;PP的计算 MOV A,EK0 SUBB A,EK1 MOV B,PP MUL AB MOV R1,A MOV R2,B AJMP X WAIT1:AJMP WAIT ;II的计算 X: MOV A,EK0 MOV B,II MUL AB MOV R3,A MOV R4,B ;DD的计算 MOV A,EK1 RL A MOV EK1,A MOV A,EK0 SUBB A,EK1 ADDC A,EK2 MOV B,DD MUL AB MOV R5,A MOV R6,B ;PID总的计算 MOV A,R1 ADDC A,R3 ADDC A,R5 MOV 60H,A MOV A,R2 ADDC A,R4 ADDC A,R6 MOV 61H,A MOV A,60H ADDC A,70H MOV 70H,A MOV A,61H ADDC A,71H MOV 71H,A MOV TL0,#00H MOV TL1,#00H ;SETB TR1 WA2: SJMP WAIT1 INT_TO: CPL CLK RETI DELAY: MOV R6, #1 D1: DJNZ R6, D1 DJNZ ACC, D1 RET END 10 四、心得体会 我们进行了为期一周的计算机控制技术课程设计。通过这两周的课程设计,我拓宽了知识面,锻炼了能力,综合素质得到了提高。 刚刚拿到课题,我感到有些茫然,对于以前没有做过的人来说要全部做完的确有一定的难度。由于我对计算机控制不是很熟悉,在设计的过程中走了不少弯路。 通过亲身体验做课程设计,我觉得安排课程设计的基本目的,在于通过理论与实际的结合,进一步提高观察、分析和解决问题的实际工作能力,以便培养成为能够主动适应社会主义现代化建设需要的高素质的复合型人才。运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。我的收获有一下几点: 第一,我对所学专业有了一些了解,增强了自己的兴趣和对以后可能从事的职业的热爱。第二,通过课程设计我明白到了理论到实践有一段很远的路程。设计过程中的每一步都是一门学问,我终于知道了每一个实现的过程,每一个认识的过程都存有人类无数的的汗水与对待事物一丝不苟得,缜密的思考以及不懈的努力,只有这样才会有一个新生事物的诞生。而以上种种的过程必须要你亲自去体会去认识去发现,那才是属于你的“收获”,只有这时才会对自己的作品无比的骄傲。 第三,通过这次设计加强了我们的设计创新能力。使我们的理论知识与实践充分地结合。第四,通过两周的课程设计,我学到了很多书本上学习不到的知识。两周的时间很短,但是我学到比两年的还多,在以后的学习生活中,我需要更努力地读书和实践。 对我们电气专业的学生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。 在设计过程中,体会到了设计一项课题的不易,也体会到了设计成功之后的小小成就感和同学之间相互合作的默契。更重要的是,通过课程设计,我发现了自身存在的更多不足之处和实际应用能力方面的欠缺,这些不足之处在今后的学习之中要有意识的弥补和改变。 最后,感谢在课程设计过程中关心帮助我的老师同学。 五、参考文献 许翏、王淑英主编.计算机技术.北京:机械工业出版社2005 2 王炳实主编.单片机技术.第3版.北京:机械工业出版社2004 3 易泓可主编,基于数字PID设计.北京:机械工业出版社 2004 《数字电子技术》课程设计 设计题目:基于FPGA的数字电子时钟设计与实现 系 部: 电子与信息工程系 专业班级: 电子信息工程08秋(1)班 小组成员: 胡修远 学 号: 08031145 指导教师 : 陶亚雄 周丽婕 完成日期: 2012年 1 月 目录 一、所用设备与器材................................................1 1.1仪器设备...................................................1 二.系统方案......................................................1 2.1 设计思想..................................................1 2.1.1课题背景........................................1 2.1.2 Quartus II软件.................................3 2.2工作原理及系统框图.........................................8 三.软件方案......................................................9 3.1 程序流程图................................................9 3.1.1 24进制........................................9 3.1.2 10进制流程图.................................10 3.1.3 6进制........................................11 3.1.4 60进制.......................................11 3.1.5 from0to9......................................12 3.1.6 分频模块.......................................12 3.1.7 总流程图.......................................13 3.2 程序清单.................................................14 3.2.1头文件complete_clock程序......................14 3.2.2 counter24程序.................................15 3.2.3 counter60程序.................................15 3.2.4 from0to9程序..................................16 3.2.5 counter6程序..................................17 3.2.6 counter10程序.................................17 3.2.7 分频程序.......................................17 3.2.8 校时模块程序...................................18 四.调试及结果...................................................18 4.1 模块仿真.................................................18 4.1.1 counter10模块仿真.............................18 4.1.2 counter24模块仿真.............................19 4.1.3 counter60模块仿真.............................19 4.1.4 分频模块仿真...................................19 4.1.5 top_clock计时模块仿真.........................19 4.2 程序下载.................................................20 4.3分析运行结果..............................................21 4.3.1 设计总结.......................................21 4.3.2 心得体会.......................................21 4.3.3 致谢...........................................22 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 一、所用设备与器材 1.1仪器设备 使用仪器设备有FPGA DE2-70开发板、PC机、信号发生器。 图1 FPGA DE2-70开发板图 二.系统方案 2.1 设计思想 利用数字电子技术、EDA设计方法、FPGA等技术,设计、仿真并实现一个基于FPGA的数字电子时钟基本功能,其基本组成框图如图1所示,振荡器采用ALTERA的DE2-70实验板的50MHz输出,分频器将50MHz的方波进行分频进而得到1Hz的标准秒脉冲,时、分、秒计时模块分别由二十四进制时计数器、六十进制分计数器和六十进制秒计数器完成,校时模块完成时和分的校正。扩展功能设计为倒计时功能,从59分55秒至59分59秒,每秒亮一盏灯报时。 2.1.1课题背景 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能更进一步,产品更新换代的节奏也越来越快。 20世纪80年代末,出现了FPGA(Field Progrommable Gate Array),CAE和CAD技术的应用更为广泛,它们在PCB设计的原理图输入,自动布局布线及PCB分析,以及逻辑设计,逻辑仿真布尔综合和化简等方面担任了重要的角色,2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 为电子设计自动化必须解决的电路建模,标准文档及仿真测试奠定了基础。硬件描述语言是EDA技术的重要组成部分,VHDL是作为电子设计主流硬件的描述语言。本论文就是应用VHDL语言来实现秒表的电路设计。VHDL语言是标准硬件描述语言,它的特点就是能形式化抽样表示电路结构及行为,支持逻辑设计中层次领域的描述,借用了高级语言的精巧结构简化电路描述,具有电路模拟与验证及保证设计的正确性,支持电路由高层向底层的综合变换,便于文档管理,易于理解和设计重用。 EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。 利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机上自动处理完成。 现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA 技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。EDA 设计可分为系统级、电路级和物理实现级。 用VHDL语言开发的流程:(1)文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。通常VHDL文件保存为.vhd文件。 (2)功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进行时序仿真)。 (3)逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式和信号的连接关系。逻辑综合软件会生成.edf(edif)的EDA工业标准文件。 (4)布局布线:将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到PLD/FPGA内。2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 3(5)编程下载:确认仿真无误后,将文件下载到芯片中。 本设计为一个多功能的数字钟,具有时、分、秒计数显示功能,以24小时的循环计数:具有校对功能。本设计采用EDA技术,以硬件描述语言VHDL为系统逻辑描述手段设计文件,在Quartus 工具软件下,采用自顶向下的设计方式,由各个基本模块共同构建了一个基本FPGA的数字钟。 系统主芯片采用EP2C70F896C6,有时钟模块、控制模块、计时模块、数据译码模块、显示以及报时模块组成。经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成时、分、秒的分别显示,由按键输入进行数字钟的校时、清零、启停功能。 随着电子技术的发展,数字电路朝着速度快、容量大、体积小、重量轻的方向发展。人们对时间计量的精度要求越来越高,钟表的数字化给人们生产生活带来了极大的方便。数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。 本次设计以数字电子为主,实现对时、分、秒数字显示的计时装置,周期为24小时,显示满刻度为23时59分59秒,并具有校时功能和报时功能的数字电子钟。课程设计所采用的开发平台:Quartus II是可编程片上系统的综合性设计环境,它支持CPLD和FPGA器件的开发。FPGA(Field Programmable Gate Array)现场可编程门阵列,内部主要由许多可编程逻辑模块组成,靠纵横交错的分布式可编程互连线连接起来,可构成极其复杂的逻辑电路。本次课程设计所采用的FPGA芯片 Cyclone II系列的EP2C70F896C6。 2.1.2 Quartus II软件 Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计程。Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。 Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。 Quartus II使用基本流程如下: 1.打开Quartus II软件,创建工程 a.点击工具栏File,利用创建工程向导(New Project Wizard)创建新工程。 图2 新建工程图 b.工程目录为c:altera71sp1quartus(路径中不能包含中文,不能建立在桌面上),工程名称以及顶层设计实体为counter10(以英文字母开头)。 图3 创建路径图 c.选择与开发板上芯片型号对应的器件。硬件选cycloneⅡ EP2C70F896C6。 图4 芯片选择图 d.进入第三方EDA工具选择窗口,在此可以选择使用第三方的EDA工具,如一些布局布线、综合、仿真软件。 e.确认无误后,单击Finsh完成工程创建。2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 f.工程创建成功后,在【Project Navigator】(资源管理窗口)显示当前工程的层次、文件和设计单元。 g.执行File—New—Design Files—verilog HDL File,建立原理图文件。 图5 原理图文件建立图 h.完成后点击File----save as,保存到c:altera71sp1quartus目录下。i.使用文本编辑器输入源码,完成原理图编译。 j.编译工程,执行Processing—start—start Analysis&Elaboration进行编译,分析检查输入文件是否有错误。2.创建仿真波形文件 a.点击New—Vector Waveform File—save as 图6 新建仿真波形文件图 b.在Name框图中右击鼠标,Insert—Insert Node or Bus—Node Finder—在Filter中选择Pinns:all,点击list,点击“》”将左侧列表中的内容移动到右侧列表中。2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 图7 插入管脚图 c.在CP上右击选择value,选择时钟脉冲信号clock(周期可自行设置)。EN和nCR都选择高电平(Forcing High)。 图8 输入信号赋值 d.选择Assignments—Settings设置—simulater settings—模式mode选择功能型Functional e.选择Processing—generate functional simulation netlist生成功能网表 图9 生成功能网表图 f.点击波形仿真的快捷键,进行波形的仿真。 g.分别给EN和nCR不同的电平信号,观察分析波形的变化。2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 图10 EN=1 nCR=1 图11 EN=0 nCR=1 图12 EN=1 nCR=0 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 图13 EN=0 nCR=0 图14 EN脉冲 nCR=1 2.2工作原理及系统框图 利用数字电子技术、EDA设计方法、FPGA等技术,设计、仿真并实现一个基于FPGA的数字电子时钟基本功能,其基本组成框图如图1所示,振荡器采用ALTERA的DE2-70实验板的50MHz输出,分频器将50MHz的方波进行分频进而得到1Hz的标准秒脉冲,时、分、秒计时模块分别由二十四进制时计数器、六十进制分计数器和六十进制秒计数器完成,校时模块完成时和分的校正。电子时钟扩展功能为倒计时流水灯。数字电子钟的电路组成框图片如下图: 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 多功能数字钟顶层模块振荡器校时电路倒计时模块分频器CP 1Hz时计数器(24进制)分计数器(60进制)秒计数器(60进制)时译码显示6计数器10计数器分译码显示6计数器10计数器分译码显示 图15 系统框图 1.数字钟电路系统由主体电路和扩展电路两大部分所组成。 2.数字电子时钟电路具有时、分、秒计时,秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器按照“24进制”规律计数。 3.准确计时,以数字形式显示时、分、秒的时间,计数器的输出经译码器送显示器。 4.具有分、时校正功能,校正输入脉冲频率为1Hz 5.复位功能,时、分、秒计时清零。 6.扩展功能为:具有仿广播电台整点报时的功能,即每逢59分51秒、52秒、53秒、54秒、55秒及57秒,LED绿灯依此点亮,59分59秒时,LED红灯亮,形成倒计时流水灯报时。 三.软件方案 3.1 程序流程图 3.1.1 24进制 小时采用24进制计时,当CP↑,EN和nCR为高电平时计数,计数范围为[0,23],使能信号EN等于0时,计时器保持。当高位大于2或高位等于2且低位大于3时,计时器清零,否则继续计时。流程图见下图。2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 开始CP↑or nCR↓YnCR=0 ?YNNEN=0 ?YNNQH>2 or Q>23Y清零保持清零Q=Q+1 图16 24进制程序流程图 3.1.2 10进制流程图 当CP↑,EN和nCR为高电平时计数,计数范围为[0,9],使能信号EN等于0时,计时器保持。当计时到9的时候,计时器清零,否则继续计时。流程图见下图。 开始CP↑or nCR↓YnCR=0 ?YNNNEN=0 ?YQ=9 ?Y清零保持清零NQ=Q+1 图17 10进制流程图 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 3.1.3 6进制 当CP↑,EN和nCR为高电平时计数,计数范围为[0,5],使能信号EN等于0时,计时器保持。当计时到5的时候,计时器清零,否则继续计时。流程图见下图。 开始CP↑or nCR↓YnCR=0 ?YNNNNEN=0 ?YQ=5 ?Y清零保持清零Q=Q+1 图18 6进制流程图 3.1.4 60进制 分、秒采用60进制计时,当CP↑,EN和nCR为高电平时计数,计数范围为[0,59],使能信号EN等于0时,计时器保持。当个位等于9时向十位进位;当个位等于9十位等于5,计时器清零,否则继续计时。流程图见下图。 开始CP↑or nCR↓NnCR=0?NEN=0?Y个位Q1=9?NYQ2=Q2+1Q2=5?YQ1=9?NNN清零保持Q1=Q1+1Y清零Q1=Q1+1 图19 60进制流程图 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 3.1.5 from0to9 数码管有7段组成,分共阳极和共阴极,本次设计采用共阳极数码管。当输入为低电平时,数码管显示;当输入为高电平时,数码管不显示。用这样的方法输入不同的高低信号控制数码管的显示。 HEX=7'b0000001HEX=1001111HEX=b0010010HEX=7'b0000110HEX=7'b1001100开始Case DNHEX=7'b0100000HEX=7'b1111111HEX=7'b0001111HEX=7'b0000000HEX=7'b0000100显示7显示8显示9显示6YHEX=7'b0100100显示5显示0显示1显示2显示3显示4 图20 from0to9流程图 3.1.6 分频模块 开始50MHz方波10^2分频500KHz方波10^2分频5KHz方波10^2分频50Hz方波10^2分频0.5Hz方波 图21 分频模块流程图 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 3.1.7 总流程图 开始开始NCPCP↑↑or nCRor nCR↓↓Y分频模块YYNYAdjHrkey=1?AdjHrkey=1?NNN时低位时低位=9?=9?NYYAdjMinKey=1?AdjMinKey=1?YY低位清零高位进位低位清零高位进位N高位高位>2or>2or时时>23>23YNN分低位分低位=9=9??NN清零清零YY秒低位秒低位=9=9??NNNY低位清零高位进位低位清零高位进位YY低位计数低位计数低位计数低位计数YNY秒高位秒高位=5=5??低位清零高位进位低位清零高位进位低位计数低位计数NYY高位高位=5=5??NN秒高位清零,分低位进位秒高位清零,分低位进位高位计数高位计数清零清零Y高位计数高位计数N低位计数低位计数Y低位清零高位进位低位清零高位进位N分低位分低位=9=9??NN分高位分高位=5=5??YY高位计数高位计数Y分清零,时低位位进位分清零,时低位位进位低位清零高位进位低位清零高位进位Y时低位时低位=9=9??NNNNYY高位高位>2or>2or时时>23>23清零清零低位计数低位计数 图22 总流程图 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 3.2 程序清单 3.2.1头文件complete_clock程序 module complete_clock(HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,_50MHzIn,_1Hz,_50Hz, _5KHz,_500KHz,AdjMinkey,AdjHrkey,nCR,Alarm,LED0,LED10,LED3,LED4,LED5,LED6,LED7,LED8,LED9); output [7:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;output Alarm,_1Hz,_50Hz,_5KHz,_500KHz;output LED0;output LED10;output LED3;output LED4;output LED5;output LED6;output LED7;output LED8;output LED9;wire [7:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;input nCR,_50MHzIn;wire _1Hz,_50Hz,_5KHz,_500KHz;wire LED0;wire LED10;wire LED3;wire LED4;wire LED5;wire LED6;wire LED7;wire LED8;wire LED9;input AdjMinkey,AdjHrkey;wire [7:0] Second,Minute,Hour;Divided_Frequency C1(_5KHz,_500KHz,nCR,_50MHzIn);//调用分频模块,输入50MHz的频率,经两次分频后变为5KHz Divided_Frequency U0(_1Hz,_50Hz,nCR,_5KHz);//调用分频模块,输入5KHz的频率,经 两次分频后变为1Hz top_clock U1(Hour,Minute,Second,_1Hz,nCR,AdjMinkey,AdjHrkey);//调用校时模块,对时、分模块进行校时 baoshi U2(Alarm_Ring,Minute,Second,_50Hz,_5KHz);assign Alarm=Alarm_Ring;assign LED0=({Minute,Second}==16'h5951);//定义LED0为59分51秒时灯亮 assign LED10=({Minute,Second}==16'h5952);//定义LED10为59分52秒时灯亮 assign LED3=({Minute,Second}==16'h5953);//定义LED3为59分53秒时灯亮 assign LED4=({Minute,Second}==16'h5954);//定义LED4为59分54秒时灯亮 assign LED5=({Minute,Second}==16'h5955);//定义LED5为59分55秒时灯亮 assign LED6=({Minute,Second}==16'h5956);//定义LED6为59分56秒时灯亮 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 assign LED7=({Minute,Second}==16'h5957);//定义LED7为59分57秒时灯亮 assign LED8=({Minute,Second}==16'h5958);//定义LED8为59分58秒时灯亮 assign LED9=({Minute,Second}==16'h5959);//定义LED9为59分59秒时灯亮 from0to9 U10(HEX0,Second[3:0]);//个位秒调用译码 from0to9 U9(HEX1,Second[7:4]);//十位秒调用译码 from0to9 U3(HEX2,Minute[3:0]);//个位分调用译码 from0to9 U4(HEX3,Minute[7:4]);//个位分调用译码 from0to9 U5(HEX4,Hour[3:0]);//个位时调用译码 from0to9 U6(HEX5,Hour[7:4]);//十位时调用译码 endmodule 3.2.2 counter24程序 module counter24(CntH,CntL,nCR,EN,CP);input CP,nCR,EN;output [3:0] CntH,CntL;reg [3:0] CntH,CntL;always @(posedge CP or negedge nCR)begin if(~nCR){CntH,CntL}<=8'h00;//当nCR=0时,计时器清零 else if(~EN){CntH,CntL}<={CntH,CntL};//当EN=0时,停止计时,保持 else if((CntH>2)||(CntH>9)||((CntH==2)&&(CntL>=3))){CntH,CntL}<=8'h00;else if((CntH==2)&&(CntL<3))begin CntH<=CntH;CntL<=CntL+1'b1;end else if(CntL==9)begin CntH<=CntH+1'b1;CntL<=4'b0000;end else begin CntH<=CntH;CntL<=CntL+1'b1;end end Endmodule 3.2.3 counter60程序 module counter60(Q1,Q2,Q3,Q4,Q5,Q6,Cnt,Cnt1,Cnt24,nCR,EN,CP,LED,LED1,LED2);input CP,nCR,EN;output [7:0] Cnt;output [7:0] Cnt1;output [7:0] Cnt24;output [6:0] Q1;output [6:0] Q2;output [6:0] Q3;output [6:0] Q4;output [6:0] Q5;output [6:0] Q6;output LED;output LED1;output LED2;wire [7:0] Cnt;2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 wire [7:0] Cnt1;wire [7:0] Cnt24;wire [6:0] Q1;wire [6:0] Q2;wire [6:0] Q3;wire [6:0] Q4;wire [6:0] Q5;wire [6:0] Q6;wire LED;wire LED1;wire LED2;wire ENP;wire ENP1;wire ENP2;wire ENP3;counter10 UC0(Cnt[3:0],nCR,EN,CP);counter6 UC1(Cnt[7:4],nCR,ENP,CP);counter10 UC2(Cnt1[3:0],nCR,ENP1,CP);counter6 UC3(Cnt1[7:4],nCR,ENP2,CP);counter24 UC4(Cnt24[7:4],Cnt24[3:0],nCR,ENP3,CP);assign ENP=(Cnt[3:0]==4'h9);assign ENP1=(Cnt==8'h59);assign ENP2=((Cnt1[3:0]==4'h9)&&(Cnt==8'h59));assign ENP3=((Cnt1==8'h59)&&(Cnt==8'h59));assign LED=~CP;assign LED1=~CP;assign LED2=~CP;from0to9 UC5(Q1,Cnt[3:0]);from0to9 UC6(Q2,Cnt[7:4]);from0to9 UC7(Q3,Cnt1[3:0]);from0to9 UC8(Q4,Cnt1[7:4]);from0to9 UC9(Q5,Cnt24[3:0]);from0to9 UC10(Q6,Cnt24[7:4]);Endmodule 3.2.4 from0to9程序 module from0to9(HEX,D);output [6:0] HEX;input [3:0] D;reg [6:0] HEX;always @(D)begin case(D)4'd0:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000001;4'd1:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b1001111;4'd2:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0010010;2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 4'd3:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000110;4'd4:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b1001100;4'd5:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0100100;4'd6:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0100000;4'd7:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0001111;4'd8:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000000;4'd9:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000100;default:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b1111111;endcase end endmodule 3.2.5 counter6程序 module counter6(Q,nCR,EN,CP);input CP,nCR,EN;output [3:0] Q;reg [3:0] Q;always @(posedge CP or negedge nCR)begin if(~nCR)Q<=4'b0000;//当nCR=0时,计时器清零 else if(~EN)Q<=Q;//当EN=0时,停止计时,保持 else if(Q==4'b0101)Q<=4'b0000;else Q<=Q+1'b1;//计时器正常计时 end Endmodule 3.2.6 counter10程序 module counter10(Q,nCR,EN,CP);input CP,nCR,EN;output [3:0] Q;reg [3:0] Q;always @(posedge CP or negedge nCR)begin if(~nCR)Q<=4'b0000;//当nCR=0时,计时器清零 else if(~EN)Q<=Q;//当EN=0时,停止计时,保持 else if(Q==4'b1001)Q<=4'b0000;else Q<=Q+1'b1;//计时器正常计时 end Endmodule 3.2.7 分频程序 module Divided_Frequency(_1HzOut,nCR,_5kHzIN);input _5kHzIN,nCR;output _1HzOut;supply1 Vdd;//定义 Vdd 是高电平 wire [15:0] Q;//计时器的输出信号(中间变量)wire EN1,EN2,EN3;// 计时器的使能信号(中间变量)counter10 DU0(Q[3:0],nCR,Vdd,_5kHzIN);//调用十进制 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 counter10 DU1(Q[7:4],nCR,EN1,_5kHzIN);counter10 DU2(Q[11:8],nCR,EN2,_5kHzIN);counter10 DU3(Q[15:12],nCR,EN3,_5kHzIN);assign EN1=(Q[3:0]==4'h9);assign EN2=(Q[7:4]==4'h9)&(Q[3:0]==4'h9);assign EN3=(Q[11:8]==4'h9)&(Q[7:4]==4'h9)&(Q[3:0]==4'h9);assign _1HzOut=Q[15];//assign _500HzOut=Q[0];endmodule 3.2.8 校时模块程序 module top_clock(Second,Minute,Hour,_1Hz,nCR,AdjMinKey,AdjHrkey);input _1Hz,nCR,AdjMinKey,AdjHrkey;output [7:0] Second,Minute,Hour;wire [7:0] Hour,Minute,Second;supply1 Vdd;wire MinCP,HrCP;counter60 UT1(Second,nCR,Vdd,_1Hz);//调用counter60,对秒计时 counter60 UT2(Minute,nCR,Vdd,~MinCP);// 调用counter60,对分校时 counter24 UT3(Hour[7:4],Hour[3:0],nCR,Vdd,~HrCP);//调用counter24,对时校时 assign MinCP=AdjMinKey ? _1Hz:(Second==8'h59);//当MinCP=AdjMinKey时,执行校时,当MinCP≠AdjMinKey时,秒计时至59 时向分进位 assign HrCP=AdjHrkey?_1Hz:({Minute,Second}==16'h5959);//当HrCP=AdjHrkey时,执 行校时,当HrCP≠AdjHrkey时,分 秒计时至59分59秒时向时进位 Endmodule 四.调试及结果 4.1 模块仿真 4.1.1 counter10模块仿真 CP为时钟脉冲;当CP↑,EN和nCR为高电平时Q计数;Q的计数范围为[0,9] 图counter10仿真波形图 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 4.1.2 counter24模块仿真 CP为时钟脉冲;当CP↑,EN和nCR为高电平时Q计数;Q的计数范围为[0,23] 图24 counter24仿真波形图 4.1.3 counter60模块仿真 CP为时钟脉冲;当CP↑,EN和nCR为高电平时Q计数;Q的计数范围为[0,59] 图25 counter60仿真波形图 4.1.4 分频模块仿真 分频器是将输入的基本时钟信号分频为其他模块需要的5kHZ 和1HZ 的信号.其中CLK 输入为5kHZ , CLK2 输出1HZ 信号,分频实际也是用了计数器的原理。 图26 分频模块仿真波形图 4.1.5 top_clock计时模块仿真 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 当秒计时到59时,向分进一位,当秒计时到59且分计时到59时向时进一位。当时分秒计时到23’59’59时,计时器清零。 图27 top_clock计时模块仿真波形图 4.2 程序下载 图28 时测试校时,时至23 图29 时测试校时,时进位至00 图30 分测试校时分至59 图31 分测试校时,分进位至00 图32 59分52秒,LEDG1亮 图33 59分55秒,LEDG4亮 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 图34 59分57秒,LEDG6亮 图35 59分59秒,LEDR0亮 4.3分析运行结果 4.3.1 设计总结 本次大型作业我们所研究的课题是基于FPGA的数字电子时钟的设计与实现。时钟设计的方法是通过计时模块、分频模块、校时模块、译码显示模块和倒计时报时模块来构成该电子时钟。计时模块为时分秒计时,采用24进制计时。因此该模块中调用了24进制和60进制两个程序,其中60进制采用的是调用6进制和10进制的方法来实现。 分频模块输入一频率为50MHz的信号,经过四次10^2分频,将信号逐次分为500KHz、5KHz、50Hz直至0.5Hz。计时模块就由分频器分频出来的标准秒脉冲进行计时,时、分、秒计时模块分别由二十四进制时计数器、六十进制分计数器和六十进制秒计数器完成,校时模块完成时和分的校正。我们还进行了扩展功能设计——倒计时流水灯功能,从59分55秒至59分59秒,每秒亮一盏灯报时,55秒至58秒,依此亮绿灯,59秒亮红灯。 通过这两周的课程设计,我们熟悉了基于FPGA的数字电子时钟的设计与实现的整个流程,文本编辑,功能仿真,逻辑综合,布局布线,编程下载,每一步刚开始或多或少有些问题,但在我们不断努力学习补充修改后,最终圆满完成数字电子时钟的时、分、秒的计时和校时功能,复位功能,还设计实现了倒计时流水灯扩展功能。 4.3.2 心得体会 为期两周的大型作业,我们组顺利完成了基于FPGA的数字电子时钟设计与实现的课程设计。从刚开始对Verilog语言非常陌生,到最后接近熟练地掌握Verilog语言的程度,期间花费不少时间和精力,同时也收获了很多,学会了 2012.1 上海师范大学天华学院电信系数字集成器件与应用专业课程设计 使用Verilog语言编程仿真电路实验,掌握了可编程逻辑器件的应用开发技术,熟悉了一种EDA软件使用,掌握了Verilog设计方法,即分模块分层次的设计方法。 在设计的过程中,因为刚刚接触这种编程语言,我们也遇到了很多问题。但是我们没有放弃过,不断检查纠正错误。Verilog源程序的编写很容易出现错误,这就需要耐心的调试。因为很多情况下,一长串的错误往往是由一个不经意的小错误引起的。有时程序一直出错找不到原因的时候,我们也会去虚心向别的组的同学请教,或者和他们一起讨论问题,从中得到一些启发。 由于设备和时间的限制,我们还有一部分扩展内容没能够完成,即数字钟的整点蜂鸣报时功能。但本次设计实验已使我们对Verilog语言产生了浓厚的兴趣,在以后的学习生活中会主动去了解更多有关这方面的知识及其在实践中的应用。 这次大型作业,不仅让我们又掌握了一些新的知识,也提高了我们的动手能力和科学严谨的精神。其次也培养了我们自学的能力,遇到不明白的地方可以通过思考、查资料、与同学交流多种方式解决问题。这些对于我们以后的学习和工作都有极大的帮助。 4.3.3 致谢 最后,我们要感谢系里提供这一次的机会让我们学到更多知识,并且提供了这么好的学习条件,设备、学习环境、师资等方面都非常好。同时也要感谢周丽婕老师和陶亚雄老师两周以来耐心的指导,在我们遇到问题的时候,是她们悉心的指导帮助和不厌其烦的讲解下我们才得以顺利的完成这次的设计,我们再次表示由衷的感谢! 人事管理系统设计与实现 目 录 前 言....1 1 需求分析....2 1.1 系统需求...2 1.1 功能需求...2 1.3 可靠性要求...3 1.4 性能需求...3 2 开发环境简介....4 2.1 Delphi简介...4 2.1.1 Delphi7的集成开发环境(IDE)...5 2.1.2 Pascal简介...9 2.2 SQL Server 2000 简介...10 2.2.1 SQL Server 数据平台...10 2.3 TQuery部件在SQL编程中的运用...12 3 总体设计....14 3.1 基本设计...14 3.1.1 设计概念...14 3.1.2 功能分析...14 3.1.3 数据流图...14 3.1.4 系统模块...16 3.2 用例图...18 4 数据库设计....21 4.1 数据库概念设计...21 4.2 数据库逻辑结构设计...23 5 详细设计....30 5.1 系统主窗体...30 5.2 数据库连接...31 5.3 用户登陆界面...32 5.4 用户功能选择...34 5.5 用户信息录入...34 5.6 查询功能窗体...36 5.7 数据备份和还原窗体...37 5.8 工作日记及工作日记管理...39 5.9 用户管理及用户密码修改...41 5.10 打印报表模块...43 5.11 数据公用模块...45 5.12 其它模块...46 6 总 结....47 参考文献....49 致谢....50 人事管理系统 网络工程 雷灵明 指导老师:曹步青 摘要:随着企业自身人力资源的日益庞大、复杂程度逐渐增强,人机作坊再也无法适应如今企业的人事管理了,取代的是运用各种领域的知识,结合计算机科学而开发的人事管理系统。人事管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的数据库。而对于后者则要求应用程序功能完备,易使用等特点。人事管理系统是对工作人员进行统一的管理,可以方便的进行录入,查询,修改,删除,退出。经过以上分析,本系统使用Delphi 7.0作为界面和功能开发工具和SQL Sever 2000作为后台数据库,利用其提供的各种面向对象的开发工具进行界面和数据库开发。软件过程结合了快速原型模型与增量模型的优点:首先在短时间内建立系统应用原型,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成可行系统。关键词:人事管理;DEPHI;ADO;SQL server 2000 Personnel Management System Network engineering Lei Lingming Teacher:Cao Buqing Abstract: Along with their own human resources increasing, complexity growing, the man-machine workshop also is unable adapt the present enterprise’s personnel management again, but the personnel management system that make use of knowledge in different fields and computer science and technology.Personnel management system is a typical management information system(MIS), including the establishment and maintenance of the background-database and front-end application development.To the former, the request for the data which is powerful in consistency and integrity, database which is good in security.For the latter, the request for the applications program which is integrity and easy to easy, Personnel management system can manage the staff and admit input, enquiries, modify, delete, and exit.Through such analysis, the system use Delphi 7.0 as the interface and functions of development tools and take SQL Sever 2000 database as background-database, the development of the interface and database which made use of its object-oriented tools, the software process is formed which is combine the advantage of rapid prototype models and incremental model, as follows: At first application prototype of system is built in a short time, Secondly, the initial prototype system needs to be revised and improved, Finally, it is feasible that the system is built.Key words: human resource management;DEPHI;ADO;SQL server 2000 前 言 背景 在竞争越来越激烈的社会里,企业人事管理就越显示出其不可缺性,成为企业一个非常重要的模块。企业人事管理系统主要是用于员工个人相关信息的管理。使用人事管理系统,便于公司领导掌握人员的动向和人员的综合素质,及时调整人才的分配,使用计算机对人事劳资信息进行管理,具有检索迅速、查找方便、可靠性高、存储量大、保密性好、成本低等优点,能够极大地提高人事资源管理的效率,也是企业科学化、正规化管理的重要条件。目标 设计一个企业人事信息管理系统,此系统要以人为中心,为企业提供全面的人事管理解决方案; a)为企业建立规范化、实时化人事管理机制; b)提高企业人事管理的效率、节约相关的管理成本,增强人事管理的安全性; c)满足企业管理层,人事业务操作层和全体员工的不同层次和不同方面的需要; d)对企业将来的整体信息化建设提供必要的支持。需求分析 需求分析是系统开发必要环节,也是重中之重。作为该过程的结果,需求规格说明书是对系统的功能和行为完整的描述。系统设计将来自于需求分析的抽象规格说明转变为面向真实世界的设计。一旦构建完成,该系统就会投入使用,同时会不可避免地产生更多的新需求。同时,需求过程与分析活动之间有相当程度的重叠,分析建模对于设定工作的范围和其他一些事来说是必要的,所以我们利用分析模型来描述需求过程,随着开发工作的继续,分析活动在工作中占的比例将变得越来越大,直到所有需求都已知。[1] 1.1 系统需求 企业的人事管理职能主要分为人事档案信息管理、人事变动管理、员工培训管理、奖惩管理等内容。 a)在人事系统开发时应考虑以下需求: b)满足人事管理职能的基本要求; c)进行多层次数据汇总,为各层次管理者的决策分析提供数据; d)具有完整的系统接口,满足灵活的数据导入与导出; e)对操作人员的技能要求比较低,操作方便; f)能够实现方便的扩展,满足企业发展的需要; g)能够保障人事管理数据的安全、准确。 1.1 功能需求 基于系统需求分析,该系统需要实现以下基本功能: a)用户管理:管理系统操作人员,设置操作人员口令和权限。在满足不同系统用户的操作需求的基础上,提高系统的安全性。 b)人事档案管理:完成企业对员工个人档案(包括员工的基本档案和在职信息)的管理及相关操作。操作员进行员工档案信息录入及更改,其中包括员工的基本信息、工作经历、家庭关系、奖惩记录和培训经历,要求对这些员工档案信息进行新增、修改、删除操作,同时可以进行查询和浏览操作。该模块是本系统的重点,用户可以通过该模块为单位建立一个比较完整的人事档案系统,同时可以对档案进行查看。 c)基础数据管理:维护人事管理相关的一些基础数据。主要包括以下功能: (a)民族档案设置:维护职工中民族档案信息; (b)职工类型设置:维护当前企业职工与企业的关系的类别信息;(c)文化程度设置:维护企业职工的文化程度类别信息;(d)政治面貌设置:维护企业职工的政治面貌类别信息;(e)部门类别设置:维护企业中设立的部门类别信息;(f)职务类别设置:维护企业中设立的职务类别信息;(h)职称类别设置:维护企业职工的职称类别信息; d)人事变动管理:对于人事上的变动调整进行管理,对人员档案的信息进行更新(如:员工职务、员工职称、员工性质等的变动)。 e)工作日志管理:记录部门或系统用户的一些备忘信息,包括日常的一些事件记录,以及工作日记的管理维护。 f)数据库管理:对现有的数据库进行管理,包括数据备份和恢复,以方便用户对数据库的管理和维护工作,提高系统的数据安全性。1.3 可靠性要求 a)计算机稳定可靠,网络服务和数据库服务稳定可靠; b)网络通畅、稳定;软件运行稳定;数据计算及数据传输无误;提供数据备份和数据恢复方案。1.4 性能需求 1)硬件环境 在最低配置的情况下,系统的性能往往不尽如人意,现在的硬件性能已经相当出色,且 价格也很便宜,因此通常给服务器端配置高性能硬件。推荐配置为: ·处理器:Intel 奔腾Ⅲ 或更高 ·内存:128MB ·硬盘空间:40GB ·显卡:Geforce系列显示适配器或更高。2)软件环境 ·操作系统:windows 98/ME/2000/N ·数据库:Microsoft SQL server 2000 开发环境简介 2.1 Delphi简介 Delphi这个名字源于古希腊的城市名。它集中了第三代语言的优点。以Object Pascal为基础,扩充了面向对象的能力,并且完美地结合了可视化的开发手段。Delphi自1995年3月一推出就受到了人们的关注,并在当年一举夺得了多项大奖。 Delphi的出现打破了Visual系列可视化编程领域一统天下的局面。并且Delphi使用了本地编译器直接生成技术,使程序的执行性能远远高于其它产品生成的程序。它还是真正的面向对象的编程语言。PASCAL语言的严谨加上可视化的优势和强大的数据库功能使得它有充分的资本和微软的VB叫板。许多人当时都认为Pascal 是最有前途的程序设计语言,并预测Delphi将会成为可视化编程的主流环境。 Delphi在你编好程序后自动转换成。EXE文件它运行时速度比VB快,而且编译后不需要其他的支持库就能运行。它的数据库功能也挺强的,是开发中型数据库软件理想的编程工具。Delphi适用于应用软件、数据库系统、系统软件等类型的开发。而且它拥有和VB差不多一样的功能,而且一样能应用API函数,这在控制Windows很有用。 Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。它使用了Microsoft Windows图形用户界面的许多先进特性和设计思想,采用了弹性可重复利用的完整的面向对象程序语言(Object-Oriented Language)、当今世界上最快的编辑器、最为领先的数据库技术。对于广大的程序开发人员来讲,使用Delphi开发应用软件,无疑会大大地提高编程效率,而且随着应用的深入,您将会发现编程不再是枯燥无味的工作——Delphi的每一个设计细节,都将带给您一份欣喜。 Delphi实际上是Pascal语言的一种版本,但它与传统的Pascal语言有天壤之别。一个Delphi程序首先是应用程序框架,而这一框架正是应用程序的“骨架”。在骨架上即使没有附着任何东西,仍可以严格地按照设计运行。您的工作只是在“骨架”中加入您的程序。缺省的应用程序是一个空白的窗体(Form),您可以运行它,结果得到一个空白的窗口。这个窗口具有Windows窗口的全部性质:可以被放大缩小、移动、最大最小化等,但您却没有编写一行程序。因此,可以说应用程序框架通过提供所有应用程序共有的东西,为用户应用程序的开发打下了良好的基础。 Delphi已经为您做好了一切基础工作——程序框架就是一个已经完成的可运行应用程序,只是不处理任何事情。您所需要做的,只是在程序中加入完成您所需功能的代码而已。在空白窗口的背后,应用程序的框架正在等待用户的输入。由于您并未告诉它接收到用户输入后作何反应,窗口除了响应所有Windows的基本操作(移动、缩放等)外,它只是接受用户的输入,然后再忽略。Delphi把Windows编程的回调、句柄处理等繁复过程都放在一个不可见的Romulam覆盖物下面,这样您可以不为它们所困扰,轻松从容地对可视部件进行编程。 面向对象的程序设计(Object-Oriented Programming,简记为OOP)是Delphi诞生的基础。OOP立意于创建软件重用代码,具备更好地模拟现实世界环境的能力,这使它被公认为是自上而下编程的优胜者。它通过给程序中加入扩展语句,把函数“封装”进Windows编程所必需的“对象”中。面向对象的编程语言使得复杂的工作条理清晰、编写容易。 说它是一场革命,不是对对象本身而言,而是对它们处理工作的能力而言。对象并不与传统程序设计和编程方法兼 其中多媒体音频视频播放器是通过TMediaPlayer组件来实现的,支持的格式与系统已安装的解码器有关。 总 结 6.1 程序设计风格 在设计的时候采用了增量模型的思想:把软件作为一系列的构件来设计,编码,集成和测试。 用户管理,密码修改,用户登陆,万年历,这些模块都有高度的独立性,因此他们的可重用性比较高,基本上是一个单元完成一个功能,模块规模也比较小,模块的作用域在控制域之内,只使用了两个全局变量来存储用户名和用户权限。[1] 在人机界面设计方面,本系统做到了以下几点: a)保持一致性(界面,背景的致性); b)提供有意义的反馈(用户验证和用户管理,提供了比较精确的反馈信息); c)在执行有较大破坏性的动作之前要求用户确认(数据备份与还原); d)允许大多数取消操作(大多数单元有取消操作功能); e)允许犯错误(由于权限的限制,系统能保护自己不受严重错误的破坏); f)按功能对动作分类(在主窗口就是按动作类型组织菜单的); 6.2 有待加强项 a)帮助的制作 一个完整的应用程序必须具有完整的帮助系统;帮助系统可以在必要的时候给用户信息提示和一些系统相关服务。 b)声音制作在这里主要是对声音的加载,我们可以加载一些一般的声音;主要来源有:音频CD盘;波形音频文件;MP3文件等等。其中波形音频文件以WAV作为文件的后缀,我们可以播放现成的,也可以播放自己录制的文件。c)我们还可以使用各种组件和ActiveX控件等技术来完善系统。利用一些做好的activeX组件,会缩短开发周期。 由于在开发工程方面缺少经验,所以这个系统还存在着许多不足之处,在测试过程中总结如下: a)数据表的设计还不是很合理; b)数据异常处理要更加人性化,错误信息的反馈要更加精确; 6.3 心得 经过一个月的设计和开发,人事管理系统基本开发完毕,其基本功能符合用户需求,能够完成基础数据录入,数据查询等基本功能,以及相关报表的打印。在这次毕业设计中,我获益良多。首先我明白了需求分析对于一个系统的开发的重要性。其次我还学到了如何把一个软件作为一个工程来做,在真正的软件开发中,一个软件系统的开发不是一个人来做,而是很多人合作来完成的,另外还有软件的后期维护等等,这时就显现出了把软件作为一个工程来做的优越性,而这些都离不开数据流图和模块的分解。 Delphi是一个非常强大的开发工具,它具有运行速度快、易于学习和使用以及开发效率高的特点,使用起来真的是很顺手。学习好一门编程语言以后可以为今后的学习和工作带来很大的便利。 虽然本系统实现了基本的用户需求功能,但是还有待于完善和加强,总之通过这次设计和开发过程,我对软件开发有了进一步的了解。 参考文献 [1] 张海藩编著.软件工程导论[M].清华大学出版社出版,2003,1-173. [2] 宋一兵,赵景波,李春艳著.Delphi 7.0基础教程[M].机械工业出版社,2003,2-30. [3] 刘瑶儒著.新概念SQL Server2000教程[M].北京科海集团公司出,2001,12-23. [4] 韩强编著.SQL SERVER 2000 程序员手册[M].机械工业出版社出版,2000,4-35. [5] 萨师煊著.数据库系统概论(第二版)[M].高等教育出版社,1991,8-40. [6] 施伯乐,丁宝康,汪卫著.数据库系统教程[M].高等教育出版社,2002,1-202. [7] 肖健著.SQL Server2000实践与提高[M].中国电子出版社,2002,13-53. [8] 林金霖著.Delphi6 实务经典[M].中国铁道出版社,2002年5月,6-110. [9] 黄超,王志伟著.Delphi企业经营管理系统开发实例导航[M].人民邮电出版社,2003,20-90. [10] 程文刚主编.Delphi数据库实用编程100例[M].中国铁道出版社,2004,8-63. [11] 王晟,万科著.Delphi数据库开发经典案例解析[M].清华大学出版社,2005,85-89. [12] 王惠刚,唐晨光彭为著.delphi7/8程序设计[M].清华大学出版社, 2002,42-63. [13] 潇湘工作室,邢增平著.Delphi 6.0最佳专辑[M].人民邮电出版社,2003,1-404. [14] 心铃.Delphi问答.软件报[N],2004-07-5. [15] 高永惠.浅谈Delphi中的异常处理方法[J].湖南轻工业高等专科学校学报,2002-04,9-10. [16] 徐萌飞.在Delphi中使用ADO技术对数据库操作[J].中国学术期刊(光盘版)电子杂志社,2001,12-13. [17] 陈建兵.Delphi中基于安全灵活的动态连接远程数据库SQL的实现[J].福建电脑,2005,12-13. [18] 孙育红.关于地方法院管理信息系统分析设计与实施[D].中国学术期刊电子杂志社,2001,8-9. [19] 岳冰.南部引嫩工程信息管理系统开发[D].中国学术期刊电子杂志社,2003,20-21. [20] 庞芳,王丽玫.南宁市自动气象站业务服务数据库系统[D].中国学术期刊电子杂志社,2004,21-23. [21] 徐军.研究生院综合管理信息系统的研究与实现[D].中国学术期刊)电子杂志社,2004,32-33. [22] 鲁媛媛.硕士生导师综合素质能力评价指标体系的研究[D].中国学术期刊电子杂志社,2005,18-19. 1.设计要求 利用MAX PLUSII软件工具,设计一个全数字锁相环路,通过它从19.2k的信号中提取同步信号。本地源时钟为11.0592MHz。 要求实现的功能: a当远端信号(方波)的占空比分别为1: 1、1: 3、1:5和1:7时,从其中提取同步信号。b先将远端信号(方波)转变成伪随机序列,然后从中提取同步信号。完成仿真过程,给出测试结果,要求得到同步带宽、捕捉带宽和最大同步时间。 2.设计原理 2.1数字锁相环基本原理 一个典型的锁相环(PLL)系统,是由鉴相器(PD),压控荡器(VCO)和低通滤波器(LPF)三个基本电路组成,如图1所示。 图1 PLL模块图 传统的锁相环是模拟电路,它利用环路中误差信号去连续地调整位同步信号的相位。全数字锁相环路完全用数字电路构成,采用高稳定度的振荡器(信号钟),从鉴相器所获得的与同步误差成比例的误差信号不是直接用于调整振荡器,而是通过一个控制器在信号钟输出的脉冲序列中附加或扣除一个或几个脉冲,这样同样可以调整加到鉴相器上的位同步脉冲序列的相位,达到同步的目的。 全数字锁相环(ADPLL)由数字鉴相器(DP)、数字滤波器(DF)与数字压控振荡器(DCO)三个数字电路部件组成,如图2所示。 图2 ADPLL模块图 2.2数字锁相环原理框图 本设计中的数字锁相环由信号钟、控制器、分频器、相位比较器组成。其原理框图如图3所示。 图3 数字锁相环原理框图 信号钟包括一个高稳定度的晶体振荡器和整形电路。若接收码元的速率为F=1/T,那么振荡器频率设定在nF,经整形电路之后,输出周期性脉冲序列,其周期T0=1/(nF)=T/n。本设计中时钟为11.0592MHz。 控制器包括图中的扣除门(常开)、附加门(常闭)和“或门”,它根据相位比较器输出的控制脉冲(“超前脉冲”或“滞后脉冲”)对信号钟输出的序列实施扣除(或添加)脉冲。分频器是一个计数器,每当控制器输出n个脉冲时,它就输出一个脉冲。控制器与分频器的共同作用的结果就调整了加至相位比较器的位同步信号的相位。这种相位前、后移的调整量取决于信号钟的周期,每次的时间阶跃量为T0,相应的相位最小调整量为Δ=2πT0/T=2π/n。 相位比较器将接收脉冲序列与位同步信号进行相位比较,以判别位同步信号究竟是超前还是滞后,若超前就输出超前脉冲,若滞后就输出滞后脉冲。 3.数字锁相环的硬件实现 根据图3(数字锁相环原理框图),利用MAX PLUSII中的硬件仿真功能,实现数字锁相环。下面将给出信号钟、分频器和相位比较器的硬件实现图。 信号钟包含一个晶振和整形电路,晶振产生的方波信号经过整形电路后变成脉冲信号。为了和控制器相配合,需要两路脉冲信号。整形电路由D触发器和逻辑与、或、非门组成。D触发器起到延时的作用,然后通过逻辑或门和与门产生脉冲波。电路如图4所示。 图4 整形电路(rc) 分频器是一个计数器,由3片74LS161来实现。电路如图5所示。 图5 分频器(fd) 相位比较器主要由微分脉冲电路和逻辑与、非门组成。微分脉冲形成电路由D触发器和逻辑异或、与门组成。D触发器起延时的作用。微分脉冲形成电路如图6所示。 图6 微分脉冲形成电路(dp) 数字锁相环的硬件实现电路如图7所示。图中蓝色字样所在框图由上至下分别为微分脉冲形成电路(dp)、整形电路(rc)和分频器(fd),具体结构如图 6、图4和图5所示。 图7 数字锁相环电路 由于在MAX PLUSII中没有占空比为1: 3、1:5和1:7的方形波,所以要利用可用的元器件来生成满足要求的信号。可以通过把方波分别通过模 4、模6和模8计数器来达到这一目的。在本设计中,利用74LS161来实现这些计数器。模 4、模 6、模8计数器分别如图 8、图 9、图10所示。 图8 模4计数器(1_3) 图9 模6计数器(1_5) 图10 模8计数器(1_7) 方波通过这些计数器后就能形成占空比满足要求的信号,然后再将信号送入图7所示的数字锁相环电路中,便可以提取出同步信号。 在本设计中,将方波转变成伪随机序列用到74LS194和逻辑异或门、与非门。7位伪随机序列发生器电路如图11所示。将产生的伪随机序列送入图7所示的数字锁相环电路中,便可以提取出同步信号。 图11 7位伪随机序列发生器 4.仿真过程 4.1接收信号的占空比为1:1 条件设置为:End Time = 10ms,Grid Size = 45.2ns 位同步信号超前于接收脉冲序列的情况如图12所示,蓝色线条处放大后如图13所示。经过一段时间后锁相成功,达到同步状态,如图14所示。 图12 位同步信号超前于接收脉冲序列 图13 超前脉冲作用于扣除门 图14同步状态 位同步信号滞后于接收脉冲序列的情况如图15所示,蓝色线条处放大后如图16所示。经过一段时间后锁相成功,达到同步状态,如图17所示。 图15 位同步信号滞后于接收脉冲序列 图16 滞后脉冲作用于附加门 图17 同步状态 通过多次试验,可得测试结果如下: 同步建立时间:14.824ms 同步带宽:40hz 4.2接收信号的占空比为1:3 条件设置为:End Time = 10ms,Grid Size = 45.2ns 位同步信号超前于接收脉冲序列的情况如图18所示,蓝色线条处放大后如图19所示。经过一段时间后锁相成功,达到同步状态,如图20所示。同步建立时间:6.906ms 图18 位同步信号超前于接收脉冲序列 图19 超前脉冲作用于扣除门 图20 同步状态 位同步信号滞后于接收脉冲序列的情况如图21所示,蓝色线条处放大后如图22所示。经过一段时间后锁相成功,达到同步状态,如图23所示。 图21 位同步信号滞后于接收脉冲序列 图22 滞后脉冲作用于附加门 图23 同步状态 通过多次试验,可得测试结果如下: 同步建立时间:14.905ms 同步带宽:24hz 4.3接收信号的占空比为1:5 条件设置为:End Time = 10ms,Grid Size = 45.2ns 位同步信号超前于接收脉冲序列的情况如图24所示,蓝色线条处放大后如图25所示。经过一段时间后锁相成功,达到同步状态,如图26所示。 图24 位同步信号超前于接收脉冲序列 图25 超前脉冲作用于扣除门 图26 同步状态 位同步信号滞后于接收脉冲序列的情况如图27所示,蓝色线条处放大后如图28所示。经过一段时间后锁相成功,达到同步状态,如图29所示。 图27 位同步信号滞后于接收脉冲序列 图28 滞后脉冲作用于附加门 图29 同步状态 通过多次试验,可得测试结果如下: 同步建立时间:14.706ms 同步带宽:16hz 4.4接收信号的占空比为1:7 条件设置为:End Time = 20ms,Grid Size = 45.2ns 位同步信号超前于接收脉冲序列的情况如图30所示,蓝色线条处放大后如图31所示。经过一段时间后锁相成功,达到同步状态,如图32所示。 图30 位同步信号超前于接收脉冲序列 图31 超前脉冲作用于扣除门 图32 同步状态 位同步信号滞后于接收脉冲序列的情况如图33所示,蓝色线条处放大后如图34所示。经过一段时间后锁相成功,达到同步状态,如图35所示。 图33 位同步信号滞后于接收脉冲序列 图34 滞后脉冲作用于附加门 图35 同步状态 通过多次试验,可得测试结果如下: 同步建立时间:14.865ms 同步带宽:18hz 4.5远端信号(方波)转变成伪随机序列 条件设置为:End Time = 20ms,Grid Size = 45.2ns 位同步信号超前于接收脉冲序列的情况如图36所示,蓝色线条处放大后如图37所示。经过一段时间后锁相成功,达到同步状态,如图38所示。 图36 位同步信号超前于接收脉冲序列 图37 超前脉冲作用于扣除门 图38 同步状态 位同步信号滞后于接收脉冲序列的情况如图39所示,蓝色线条处放大后如图40所示。经过一段时间后锁相成功,达到同步状态,如图41所示。 图39 位同步信号滞后于接收脉冲序列 图40 滞后脉冲作用于附加门 图41 同步状态 通过多次试验,可得测试结果如下: 同步建立时间:52.476ms 同步带宽:8hz 5.心得体会 在做这个课程设计之前,我没有接触过MAX PLUSII这个软件,对数字锁相器亦没有太多的认识,所以刚开始感觉很难。在查阅了很多相关资料之后,对软件的操作和数字锁相器的理解已经比较深入,越到后边就感觉越得心应手。自己竟然在短短几天之内,掌握了这些东西,并且完整地将课程设计完成。在这过程中也学到了很多东西。一方面,在完成该课程设计的过程中,对数字锁相环技术有了深刻的理解,也学会了如何去利用仿真工具去验证一个设计的正确性和可行性。这对之后的毕业设计都有莫大的帮助。另一方面,自己又一次领悟到与人合作交流的重要性,期间遇到的许多问题都是在不断地讨论和请教中解决的,如果没有集体的智慧,可能到现在也无法完成该设计。总而言之,学期末的课程设计教会了我很多东西,也为本学期画上了一个完满的句号。感谢老师的指导。第二篇:基于单片机的数字PID控制直流电机PWM调压调速器系统
第三篇:基于FPGA的数字电子时钟设计与实现(范文模版)
第四篇:人事管理系统设计与实现
第五篇:数字锁相环的FPGA设计与实现-课设