当前位置:文档之家› 数控分频器实验报告

数控分频器实验报告

《数控分频实验》姓名:谭国榕班级:12电子卓越班学号:201241301132一、实验目的1.熟练编程VHDL语言程序。

2.设计一个数控分频器。

二、实验原理本次实验我是采用书上的5分频电路进行修改,通过观察其5分频的规律进而修改成任意奇数分频,再在任意奇数分频的基础上修改为任意偶数分频,本次实验我分为了三个部分,前两部分就是前面所说的任意奇数分频和任意偶数分频,在这个基础上,再用奇数输入的最低位为1,偶数最低位为0的原理实现合并。

三、实验步骤1.任意奇数分频程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DIV1 ISPORT(CLK:IN STD_LOGIC;D:IN INTEGER RANGE 0 TO 255;K1,K2,K_OR:OUT STD_LOGIC);END;ARCHITECTURE BHV OF DIV1 ISSIGNAL TEMP3,TEMP4:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL M1,M2:STD_LOGIC;--SIGNAL OUT1,OUT2,OUT3:STD_LOGIC;BEGINPROCESS(CLK,TEMP3) BEGINIF RISING_EDGE(CLK) THENIF(TEMP3=D-1) THEN TEMP3<="00000000"; ELSE TEMP3<=TEMP3+1; END IF;IF(TEMP3=D-(D+3)/2) THEN M1<=NOT M1; ELSIF (TEMP3=D-2) THEN M1<=NOT M1; END IF; END IF;END PROCESS;PROCESS(CLK,TEMP4) BEGINIF FALLING_EDGE(CLK) THENIF(TEMP4=D-1) THEN TEMP4<="00000000"; ELSE TEMP4<=TEMP4+1; END IF;IF(TEMP4=D-(D+3)/2) THEN M2<=NOT M2; ELSIF (TEMP4=D-2) THEN M2<=NOT M2;END IF; END IF;END PROCESS;K1<=M1; K2<=M2; K_OR <=M1 OR M2;END BHV;此段程序最主要的部分为:PROCESS(CLK,TEMP3) BEGINIF RISING_EDGE(CLK) THENIF(TEMP3=D-1) THEN TEMP3<="00000000"; ELSE TEMP3<=TEMP3+1; END IF;IF(TEMP3=D-(D+3)/2) THEN M1<=NOT M1; ELSIF (TEMP3=D-2) THEN M1<=NOT M1; END IF; END IF;END PROCESS;PROCESS(CLK,TEMP4) BEGINIF FALLING_EDGE(CLK) THENIF(TEMP4=D-1) THEN TEMP4<="00000000"; ELSE TEMP4<=TEMP4+1; END IF;IF(TEMP4=D-(D+3)/2) THEN M2<=NOT M2; ELSIF (TEMP4=D-2) THEN M2<=NOT M2; END IF; END IF;END PROCESS;在这里,我通过研究书上的占空比为50%的5分频电路的程序,通过实验发现了一个规律,就是书上的C1="100",在奇数任意分频中为输入信号减一,即D-1,而在第二个if里,5分频为C1="001",7分频为C1="010",9分频为C1="011",以此类推,则不难发现:5-4=1;7-5=2;9-6=3.。

即为程序中的TEMP4=D-(D+3)/2;而ELSIF里的C2="011"则为我程序中的TEMP4=D-2。

通过这样的修改就可以实现任意奇数分频。

程序仿真:3分频:5分频:7分频:2.任意偶数分频程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DIV2 ISPORT(CLK:IN STD_LOGIC;D:IN INTEGER RANGE 0 TO 255;K1:OUT STD_LOGIC);END;ARCHITECTURE BHV OF DIV2 ISSIGNAL TEMP3,TEMP4:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL M1:STD_LOGIC;--SIGNAL OUT1,OUT2,OUT3:STD_LOGIC;BEGINPROCESS(CLK,TEMP3) BEGINIF FALLING_EDGE(CLK) THENIF(TEMP3=D-1) THEN TEMP3<="00000000"; ELSE TEMP3<=TEMP3+1; END IF;IF(TEMP3=D-(D+2)/2) THEN M1<=NOT M1; ELSIF (TEMP3=D-1) THEN M1<=NOT M1; END IF; END IF;END PROCESS;K1<=M1;END BHV;此段程序比任意奇数分频简单,原因是偶数分频所用到的周期是整数,例如二分频那么就要用到4个周期,占空比为50%则为高电平两个周期,低电平两个周期,而任意奇数分频则需要半个周期的高电平或低电平,故需要两个信号相或。

任意偶数分频的原理与任意奇数分频的原理相似,同样是我在书上的程序上修改而来,其中最重要的是发现其变化规律。

程序仿真:2分频:4分频:8分频:3.数控分频程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DIV ISPORT(CLK_IN:IN STD_LOGIC;D:IN INTEGER RANGE 0 TO 255;CLK_OUT:OUT STD_LOGIC);END;ARCHITECTURE BHV OF DIV ISSIGNAL C1,C2,C3,D1:STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL M1,M2,M3:STD_LOGIC;BEGINPROCESS(CLK_IN,C1) BEGIND1<=CONV_STD_LOGIC_VECTOR(D,8);IF D1(0)='1' THENIF RISING_EDGE(CLK_IN) THENIF(C1=D-1) THEN C1<="00000000"; ELSE C1<=C1+1; END IF;IF(C1=D-(D+3)/2) THEN M1<=NOT M1; ELSIF (C1=D-2) THEN M1<=NOT M1; END IF; END IF;END IF;END PROCESS;PROCESS(CLK_IN,C2) BEGIND1<=CONV_STD_LOGIC_VECTOR(D,8);IF D1(0)='1' THENIF FALLING_EDGE(CLK_IN) THENIF(C2=D-1) THEN C2<="00000000"; ELSE C2<=C2+1; END IF;IF(C2=D-(D+3)/2) THEN M2<=NOT M2; ELSIF (C2=D-2) THEN M2<=NOT M2; END IF; END IF;END IF;END PROCESS;PROCESS(CLK_IN,C3) BEGIND1<=CONV_STD_LOGIC_VECTOR(D,8);IF D1(0)='0' THENIF FALLING_EDGE(CLK_IN) THENIF(C3=D-1) THEN C3<="00000000"; ELSE C3<=C3+1; END IF;IF(C3=D-(D+2)/2) THEN M3<=NOT M3; ELSIF (C3=D-1) THEN M3<=NOT M3;END IF; END IF; END IF;END PROCESS;CLK_OUT <=M1 OR M2 OR M3;END BHV;此程序原理在1、2已经说过了,这里主要用到的就是if的奇偶判断语句:D1<=CONV_STD_LOGIC_VECTOR(D,8);IF D1(0)='1' THEN此为奇数判断;D1<=CONV_STD_LOGIC_VECTOR(D,8);IF D1(0)='0' THEN此为偶数判断。

从而实现了数控分频。

程序仿真:2分频:3分频:4分频:四、实验心得此次实验我并没有按照老师的要求,在上课之前先把程序做好,对此我深感抱歉,没有在课前写好程序是我认为自己能够在几个小时内完成,其实不然,是自己太高估了自己,没有放很多时间在EDA这门课程上,可是通过这次的实验,我深刻意识到,其实自己再也普通不过,在上课之前的一天晚上,我从10点开始编写这个数控分频程序,然而我却发现了难度,想法我是有的,可是却编写不出来。

刚刚开始我是想通过时钟上下沿跳变计数来实现数控分频,因为这样能够简单的实现,可是在编程上却遇到了难度,因为对VHDL的语法规则的不熟悉,我一直熬夜到了半夜两点还是一点也没写出来,只好上床睡觉了,第二天中午还想了一中午,通过两个进程来实现计数,对同一个信号进行两个进程的奇数,一个是上升沿,一个是下降沿,再次碰壁。

时间过得飞快,到了上课时间,我还是毫无收获,当老师问起我的作业时,我顿时哑口无言,深感惭愧。

相关主题