您好,欢迎访问三七文档
EDA电路设计结课论文(2014-2015学年第一学期)论文题目:万人计数表决显示器机械与车辆学院二O一四年十二月1第一部分前言内容提要电子科学的应用已经渗透入我们的日常生活之中,计数器、数码管显示器、分频器、比较器在我们的生活之中随处可见。本次课程设计是EDA电路设计,通过将多种基本功能元器件组合在一起,实现计数、表决的功能。应用QuartusII9.1软件,用VHDL语言编译完成课程设计,并通过时序仿真波形图验证其正确性。现实生活中参加表决的人数往往都是上百上千人,甚至上万人。万人表决计数器就是模拟现实中这种人数较多的情况下对表决的人数进行统计、比较和显示的一种运算器。关键词:表决计数显示器时序仿真波形图QuartusII9.1一、设计思路万人表决计数器还具备了异步复位,使能端功能。在规定的时间能进行投票表决,到达规定时间按下使能端,不能再进行投票。若要重新投票或者对另一项决策进行投票则按下复位键,对统计结果进行清零。2第二部分正文二、设计原理和内容万人表决器,用时钟时钟信号中“1”代表投赞成票的人数,以时钟信号中“0”代表投反对票的人数。先通过分频器对时钟信号进行调整,通过十进制的万位计数器,计算投赞成票的人数,然后,将计算的人数通过译码管显示出来,最后,将计数得到的人数通过比较器,比较是否超过半数,如果超过半数则显示通过“1”,如果没有超过半数就显示不通过“0”。原理框架图三、实验程序分析1、10进制计数器LIBRARYIEEE;--打开ieee库USEIEEE.STD_LOGIC_1164.ALL;--使用库中std_logic_1164所有内容USEIEEE.STD_LOGIC_UNSIGNED.ALL;--使用库中STD_LOGIC_UNSIGNED所有内容ENTITYcounterIS--定义实体counter,进行信号端口定义PORT(RST,EN,CLK:INSTD_LOGIC;--输入信号引脚端OC:OUTSTD_LOGIC;--OC进位输出信号引脚端Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));--输出信号引脚端ENDcounter;--结束实体counterARCHITECTUREbhvOFcounterIS--定义结构体bhv,描述逻辑功能和电路结构BEGINPROCESS(RST,EN,CLK)--敏感信号VARIABLETMP:STD_LOGIC_VECTOR(3DOWNTO0);--设置6位移位数据输出信号STD时序电路计数器分频器比较器显示译码器结果显示结果显示图一3BEGINIFRST='1'THENTMP:=0000;OC='0';--RST=‘1’时,数据清零ELSIFEN='0'THENNULL;--EN=‘0’时,不进行任何操作ELSIFCLK'EVENTANDCLK='1'--时钟信号上升沿触发THENIFTMP=9THENOC='1';--如果TMP=‘9’时,进位OC赋值“1”TMP:=0000;--同时TMP赋值为“0000”ELSETMP:=TMP+1;--如果TMP不等于“9”时,TMP加1,OC='0';--同时进位OC赋值“0”ENDIF;--结束IF语句ENDIF;--结束IF语句Q=TMP;--将TMP计算结果赋值给QENDPROCESS;--结束进程ENDbhv;--结束结构体bhv------------------引用程序,程序进行累加进位计数---------------LIBRARYIEEE;--打开ieee库USEIEEE.STD_LOGIC_1164.all;--使用库中std_logic_1164所有内容USEIEEE.STD_LOGIC_UNSIGNED.all;--使用库中STD_LOGIC_UNSIGNED所有内容ENTITYjsq10ISPORT(RST,EN,CLK:INSTD_LOGIC;Q1,Q2,Q3,Q4,Q5,Q6:OUTSTD_LOGIC_VECTOR(3DOWNTO0));endjsq10;--定义实体clkdiv,进行信号端口定义RET,ENCLK为输入引脚端ARCHITECTUREBHVofjsq10is--定义结构体BHV和信逻辑号,描述逻辑功能和电路结构SIGNALOC2,OC3,OC4,OC5,OC6,OC7:STD_LOGIC;componentcounterPORT(RST,EN,CLK:INSTD_LOGIC;--定义上一个封装元件的端口OC:OUTSTD_LOGIC;--定义上一个封装元件的输入端口Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));--定义上一个封装元件的输出端口ENDcomponent;--结束对封装元件端口的定义程序beginu1:counterPORTMAP(RST=RST,EN=EN,CLK=CLK,Q=Q1,OC=OC2);4--将封装元件运算后的输出端Q赋给Q1,进位端OC赋给OC2,使能和复位端不变u2:counterPORTMAP(RST=RST,EN=EN,CLK=OC2,Q=Q2,OC=OC3);--将封装元件运算后的输出端Q赋给Q2,进位端OC赋给OC3,时钟信号赋予CO2u3:counterPORTMAP(RST=RST,EN=EN,CLK=OC3,Q=Q3,OC=OC4);--将封装元件运算后的输出端Q赋给Q4,进位端OC赋给OC5,时钟信号赋予CO4u4:counterPORTMAP(RST=RST,EN=EN,CLK=OC4,Q=Q4,OC=OC5);u5:counterPORTMAP(RST=RST,EN=EN,CLK=OC5,Q=Q5,OC=OC6);u6:counterPORTMAP(RST=RST,EN=EN,CLK=OC6,Q=Q6,OC=OC7);ENDBHV;--结束结构体BHV**************************************************************************************************************************************************************2、64分频器LIBRARYIEEE;--打开ieee库USEIEEE.STD_LOGIC_1164.ALL;--使用库中std_logic_1164所有内容USEIEEE.STD_LOGIC_ARITH.ALL;--使用库中STD_LOGIC_ARITH所有内容USEIEEE.STD_LOGIC_UNSIGNED.ALL;--使用库中STD_LOGIC_UNSIGNED所有内容ENTITYclkdivIS--定义实体clkdiv,进行信号端口定义PORT(clk:INSTD_LOGIC;--clk时钟信号输入引脚端clk_div16:OUTSTD_LOGIC--clk_div16输出引脚端);ENDENTITYclkdiv;--结束实体clkdivARCHITECTURErtlOFclkdivIS--定义结构体rtl,描述逻辑功能和电路结构SIGNALcount:STD_LOGIC_VECTOR(6DOWNTO0);BEGIN--设置6位移位数据输出信号countPROCESS(clk)--敏感信号CLKBEGINIF(clk'eventANDclk='1')THEN--CLK为上升沿有效IF(count=111111)THEN--IF语句判决count是否等于111111count=(OTHERS='0');--当count=111111是,count清零ELSE--count不等于11111是,count加1count=count+1;ENDIF;--结束IF语句5ENDIF;--结束IF语句ENDPROCESS;--结束进程clk_div16=count(5);--将count的値赋予clk_div16ENDARCHITECTURErtl;--结束结构体rt1**************************************************************************************************************************************************************3、7位数码管显示译码器LIBRARYIEEE;--打开ieee库USEIEEE.STD_LOGIC_1164.ALL;--使用库中std_logic_1164所有内容ENTITYYMQIS--定义实体YMQ,进行信号端口定义PORT(A:INSTD_LOGIC_VECTOR(3DOWNTO0);--A输入引脚端LED7S:OUTSTD_LOGIC_VECTOR(6DOWNTO0));--LED7S输出引脚端END;--结束实体YMQARCHITECTUREbhvOFYMQIS--定义结构体rtl,描述逻辑功能和电路结构BEGINPROCESS(A)BEGIN--敏感信号ACASEAIS--信号A的case语句WHEN0=LED7S=0111111;--当A的值为“0”时,LED7S数码管显示0WHEN1=LED7S=0000110;--当A的值为“1”时,LED7S数码管显示1WHEN2=LED7S=1011011;--当A的值为“2”时,LED7S数码管显示2WHEN3=LED7S=1001111;--当A的值为“3”时,LED7S数码管显示3WHEN4=LED7S=1100110;--当A的值为“4”时,LED7S数码管显示4WHEN5=LED7S=1101101;--当A的值为“5”时,LED7S数码管显示5WHEN6=LED7S=1111101;--当A的值为“6”时,LED7S数码管显示6WHEN7=LED7S=0000111;--当A的值为“7”时,LED7S数码管显示7WHEN8=LED7S=1111111;--当A的值为“8”时,LED7S数码管显示8WHEN9=LED7S=1101111;--当A的值为“9”时,LED7S数码管显示9WHENOTHERS=NULL;--其他的情况,不进行任何操作ENDCASE;--结束CASE语句ENDPROCESS;--结束进程ENDbhv;--结束结构体bhv**************************************************************************************************************************************************************64、比较器LIBRARYIEEE;--打开ieee库USEIEEE.STD_LOGIC_1164.ALL;--使用库中std_logic_1164所有内容USEIEEE.STD_LOGIC_ARITH.ALL;--使用库中STD_LOGIC_UNSIGNED所有内容USEIEEE.STD_LOGIC_UNSIGNED.ALL;--使用库中STD_LOGIC_UNSIGNED所有内容ENTITYbjqIS--定义实体bjq,进行信号端口定义GENERIC(A,Q1,Q2,Q3,Q4,Q5:NATURAL);--自然数信号定义PORTB:ININTEGER--输入信号B引脚端Q:OUTSTD_LOGIC_VECTOR);--输出信号Q引脚端END;--结束实体bjqARCHITECTUREbhvOFbjQIS--定义结构体rtl,描述逻辑功能和电路结构BEGINPROCESS(Q1,Q2,Q3,Q4,Q5,B,Q)--敏感性号BEGINA=Q1+Q2*10=Q3*100+Q4*1000+Q5*
本文标题:万人表决器
链接地址:https://www.777doc.com/doc-2816879 .html