北华航天工业学院课程设计报告(论文)课设名称: EDA技术与应用设计课题:计数器及数码显示综合设计专业班级: B12241学生姓名:白冬雪田尉均指导教师:齐建玲设计时间: 2014年 12月 15日北华航天工业学院电子工程系EDA 课程设计任务书姓名:白冬雪田尉均专业:测控技术与仪器班级:B12241指导教师:齐建玲职称:教授课程设计题目:计数器及数码显示综合设计已知技术参数和设计要求:①总体设计要求:设计一个能在7段数码管上动态刷新显示十进制、十二进制、六十进制、四位二进制计数器计数结果的VHDL语言程序并在EDA实验开发系统上实现该功能。
②技术要点:VHDL语言编辑程序、共阴7段数码管及FPGA可编程芯片的工作原理与连线。
所需仪器设备:实验箱,电脑成果验收形式:实验报告,硬件实验结果参考文献:李国洪、胡辉、沈明山等编著《EDA技术与实验》—机械工业出版社出版。
时间安排2014年12月14日-15日编辑VHDL语言程序2014年12月16日硬件调试程序2014年12月17日实验箱答辩验收指导教师:齐建玲教研室主任:王晓2014年 12月 17日内容摘要用VHDL语言在MAX+PLUS2环境下设计一个带使能输入、进位输出及同步清零的十进制计数器。
设计一个带使能输入及同步清零的十二进制计数器。
设计一个带使能输入及同步清零的六十进制加法计数器。
设计一个四位二进制可逆计数器。
设计一个共阴7段数码管控制接口,在时钟信号的控制下,使六位数码管动态刷新显示上述计数器的计数结果。
最后在EDA实验开发系统实验操作。
目录一、概述 (1)二、方案设计与论证 (1)三、单元电路设计与参数计算 (1)1、十进制计数器 (1)2、十二进制计数器 (2)3、六十进制计数器 (3)4、十六进制可逆计数器 (4)5、六进制计数器 (5)6、数据选择器 (6)7、 4-7译码器 (7)四、顶层文件截图 (8)五、安装与调试 (8)六、心得体会 (8)1.实验注意事项 (8)2.收获与体会 (9)一、概述用VHDL语言在MAX+PLUS2环境下设计一个带使能输入、进位输出及同步清零的十进制计数器。
设计一个带使能输入及同步清零的十二进制计数器。
设计一个带使能输入及同步清零的六十进制加法计数器。
设计一个四位二进制可逆计数器。
设计一个共阴7段数码管控制接口,在时钟信号的控制下,使六位数码管动态刷新显示上述计数器的计数结果。
二、方案设计与论证四个计数器同时开始计数,通过计数器的使能端可以随时控制计数器是否继续工作,通过同步清零端可以随时把任何一个计数器清零重新开始计数。
四位二进制可逆计数器可以随时进行加计数或减计数。
通过六进制计数器扫描数码管和作为对其他4个计数器的选择信号,再通过一个数据选择器选择出计数器的输出信号,通过4-7译码器的输出信号在数码当时钟信号频率足够大时可以实现六个数码管“同时”显示各计数器的计数结果。
因为人的眼睛分辨不出各数码管的快速跳变。
所以能实现所要求的同步计数的目的。
三、单元电路设计与参数计算1、十进制计数器①代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JINZHI10 ISPORT( CLK,en,rst:IN STD_LOGIC;ci :OUT STD_LOGIC;dout :BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) );END JINZHI10;ARCHITECTURE ABC OF JINZHI10 ISBEGINci<='1' WHEN dout="1001" AND en='1' ELSE '0';PROCESS(CLK,en,rst)BEGINIF RISING_EDGE(CLK) THENIF rst='1' THEN dout<=(OTHERS=>'0');ELSIF en='1' THENIF dout="1001" THEN dout<="0000";ELSE dout<=dout+1;END IF;END IF;END IF;END PROCESS;END ABC;②仿真结果:2、十二进制计数器①代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JINZHI12 ISPORT( CLK,en,rst:IN STD_LOGIC;dout :BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); END JINZHI12;ARCHITECTURE ABC OF JINZHI12 ISBEGINPROCESS(CLK,en,rst)BEGINif RISING_EDGE(CLK) THENif rst='1'then dout<=(others=>'0');ELSIF en='1' THENIF dout="1011" THEN dout<="0000";ELSE dout<=dout+1;END IF;END IF;END IF;END PROCESS;END ABC;②仿真结果3、六十进制计数器①代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JINZHI60 ISPORT( CLK,en,rst:IN STD_LOGIC;OL,OH :BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); END JINZHI60;ARCHITECTURE ABC OF JINZHI60 ISBEGINPROCESS(CLK,en,rst)BEGINIF RISING_EDGE(CLK) THENIF rst='1' THEN OL<="0000";OH<="0000";ELSIF en='1' THENIF OL="1001" THEN OL<="0000";IF OH="0101" THEN OH<="0000";ELSE OH<=OH+1;END IF;ELSE OL<=OL+1;END IF;END IF;END IF;END PROCESS;END ABC;②仿真结果4、十六进制可逆计数器①代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY KENI16 ISPORT( CLK,JJ,E:IN STD_LOGIC;OL,OH :BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END KENI16;ARCHITECTURE ABC OF KENI16 ISBEGINPROCESS(CLK,JJ,E)BEGINIF RISING_EDGE(CLK) THENIF E='1' THENIF JJ='1' THENIF OL="0101" AND OH="0001" THEN OL<="0000"; OH<="0000"; ELSIF OL="1001" THEN OL<="0000"; OH<=OH+1; ELSE OL<=OL+1;END IF;ELSIF JJ='0' THENIF OL="0000" AND OH="0000" THEN OL<="0101"; OH<="0001"; ELSIF OL="0000" THEN OL<="1001"; OH<=OH-1; ELSE OL<=OL-1;END IF;END IF;END IF;END IF;END PROCESS;END ABC;②仿真结果5、六进制计数器①代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JINZHI6 ISPORT( CLK,E :IN STD_LOGIC;O :BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0)); END JINZHI6;ARCHITECTURE ABC OF JINZHI6 ISBEGINPROCESS(CLK,E)BEGINIF RISING_EDGE(CLK) THENIF E='1' THENIF O="101" THEN O<="000";ELSE O<=O+1;END IF;END IF;END IF;END PROCESS;END ABC;②仿真结果6、数据选择器①代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY XUANZE ISPORT( A,B,C,D,E,F :IN STD_LOGIC_VECTOR(3 DOWNTO 0);I :IN STD_LOGIC_VECTOR(2 DOWNTO 0); O :OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END XUANZE;ARCHITECTURE ABC OF XUANZE ISBEGINPROCESS(I)BEGINCASE I ISWHEN "000" => O<=A;WHEN "001" => O<=B;WHEN "010" => O<=C;WHEN "011" => O<=D;WHEN "100" => O<=E;WHEN "101" => O<=F;WHEN OTHERS => NULL;END CASE;END PROCESS;END ABC;②仿真结果7、4-7译码器①代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY YM_47 ISPORT( I:IN STD_LOGIC_VECTOR(3 DOWNTO 0); O:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END YM_47;ARCHITECTURE ABC OF YM_47 ISBEGINWITH I SELECTO<="1111110" WHEN "0000","0110000" WHEN "0001","1101101" WHEN "0010","1111001" WHEN "0011","0110011" WHEN "0100","1011011" WHEN "0101","1011111" WHEN "0110","1110000" WHEN "0111","1111111" WHEN "1000","1111011" WHEN "1001","1110111" WHEN "1010","0011111" WHEN "1011","0000000" WHEN OTHERS;END ABC;②仿真结果四、顶层文件截图五、安装与调试在计算机和试验箱均断电的情况下连接好下载电缆和芯片的各端口之间的连线,接下来先给试验箱供电然后打开计算机找到MAX+plus2软件将先前已编辑好的的程序下载到芯片上。