电子综合设计题目七人抢答器设计学院计信学院专业电子信息工程班级学生姓名指导教师2012年6月18日一、设计原理所谓表决器就是对于一个行为,由多个人投票,如果同意的票数过半,就认为此行为可行;否则如果否决的票数过半,则认为此行为无效。七人表决器顾名思义就是由七个人来投票,当同意的票数大于或者等于4时,则认为同意;反之,当否决的票数大于或者等于4时,则认为不同意。二、分析讨论七人表决器这一功能可以用C语言、汇编语言或VHDL编程后下载到单片机上实现,不过用VHDL编程不仅技术含量高而且能让我们更熟练的掌握和使用quartus软件的步骤和方法。所以我们是采用VHDL编程来实现的。三、设计准备根据七人表决器的原理,我们的准备过程如下:1、使用Altera的CycloneII器件,所用的芯片为EP2C35F672C8,开发平台为quartusII。2、使用七个拨动开关(K1~K7)作为输入变量来表示七个投票人,当拨动开关输入为‘1’时,表示对应的人投同意票,否则当拨动开关输入为‘0’时,表示对应的人投反对票。3、使用一个七段数码管来显示同意的票数。4、使用七个LED(LED2~LED8)用来分别记录投票人的个人投票结果,当LED亮起时就表示对应的投票人同意,否则就表示不同意。5、使用一个LED(LED1)来表示最终的投票结果,当LED1亮起时表示表决通过,不亮时就表示表决不通过。6、使用一个拨动开关(K8)来达到复位要求,即需要复位时能够达到同时清零数码管的显示结果和LED的显示情况。7、软件仿真成功后,通过专用的连接线再用硬件进行测试,并将硬件测试的结果以照片的形式做记录。四、设计思路根据程序设计的一般步骤,我们首先设计出七人表决器的系统框图,也就是说先要确定一个大的设计方向;然后再根据设计要求并结合系统框图来设计程序流程图;由程序流程图来编写VHDL程序,并画出表决器的外围引脚图;再将程序用软件仿真,软件仿真成功后进行硬件测试。1、系统框图如下:2、程序流程图如下:YN3、外围管脚图如下:CLKLED1CLRLEDAG[0:6]K[0:6]LED[0:6]注释:CLK:系统时钟数码管显示LED灯显示复位按钮电源系统开关按钮FPGA开始按键输入表决同意人数(3)用LED灯显示同意的投票人表决通过(LED1亮)表决不通过(LED1不亮)用LED灯显示反对的投票人biaojueqiCLR:复位引脚,当需要复位时,按下该管脚对应的开关就可以复位。K[0:6]:表决输入,分别是七个拨动开关。LED1:表示最终的投票结果,当LED1亮起时表示表决通过,不亮时就表示表决不通过。LEDAG[0:6]:为七段数码管,用来显示同意的票数。LED[0:6]:为七个LED(LED2~LED8),用来分别记录投票人的个人投票结果。五、VHDL源程序设计根据设计要求,我们组设计的七人表决器程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYBJQISPORT(CLK,CLR:INSTD_LOGIC;----CLK为系统时钟,CLR为复位按键K:INSTD_LOGIC_VECTOR(6DOWNTO0);----拨动开关输入表决Result:OUTSTD_LOGIC;----显示表决是否通过LEDAG,LED:OUTSTD_LOGIC_VECTOR(6DOWNTO0));----LEDAG为七段数码管,用来显示同意的人数;LED为七个指示灯,用来指示投票人的个人投票结果。ENDENTITYBJQ;ARCHITECTUREoneOFBJQISBEGINPROCESS(K)VARIABLEshu:INTEGER;----定义变量shu来统计同意的个数BEGINIF(CLR='1')THEN----不复位,即正常工作LED=K;----将指示灯和投票人对应,即记名投票shu:=0;IFCLK'EVENTANDCLK='1'THENIFK(0)='1'THENshu:=shu+1;ENDIF;IFK(1)='1'THENshu:=shu+1;ENDIF;IFK(2)='1'THENshu:=shu+1;ENDIF;IFK(3)='1'THENshu:=shu+1;ENDIF;IFK(4)='1'THENshu:=shu+1;ENDIF;IFK(5)='1'THENshu:=shu+1;ENDIF;IFK(6)='1'THENshu:=shu+1;ENDIF;CASEshuIS----指示灯显示投票结果,数码管显示同意人数WHEN0=Result='0';LEDAG=0111111;LED=K;WHEN1=Result='0';LEDAG=0000110;LED=K;WHEN2=Result='0';LEDAG=1011011;LED=K;WHEN3=Result='0';LEDAG=1001111;LED=K;WHEN4=Result='1';LEDAG=1100110;LED=K;WHEN5=Result='1';LEDAG=1101101;LED=K;WHEN6=Result='1';LEDAG=1111101;LED=K;WHEN7=Result='1';LEDAG=0100111;LED=K;WHENOTHERS=Result='Z';LEDAG=ZZZZZZZ;LED=K;ENDCASE;ENDIF;ELSE-----启动复位功能,同时复位指示灯和数码管Result='0';LEDAG=0111111;LED=0000000;ENDIF;ENDPROCESS;ENDARCHITECTUREone;六、仿真测试过程1、创建工程首先启动QuartusII软件,点击FileNewProjectWizard,创建一个新的工程;输入此工程所在的工作目录(应为每个工程创建一个单独的目录)、工程名称(通常和顶层设计实体名称相同)、顶层设计实体名称(每个工程只有一个);注意工作目录不要建在默认位置,最好建立在自带的U盘上。所选的芯片为CycloneII系列的EP2C35F672C8;最后点击点击Finish,完成一个新工程的创建。2、建立程序文件1)在创建好设计工程后,选择FileNEW…菜单2)在New对话框中选择DeviceDesignFiles页下的VHDLFile,点击OK按钮,打开程序编辑器对话框,然后在输入自己编写的VHDL程序。3)程序输入完成后,进行保存,然后再选择菜单项Processing→StartCompilation,或者通过点击图标进行编译。3、管脚分配有以下两种方法进行管脚分配:1)点击Assignments菜单下面的AssignmentEditor,进入到引脚分配窗口;然后将需要分配管脚的信号放置在To下方,双击To下方的《New》,选择NodeFinder,在Filter窗口中选择Pins:all,在Named窗口中输入“*”,点击List在NodesFound窗口出现所有信号的名称,点击中间的按钮,则SelectedNodes窗口下方出现被选择的端口名称,然后再双击OK按钮,完成设置。2)点击Assignments菜单下面的PinPlanner也能进行管脚分配。3)本次设计所用到的管脚分配表如下:当管脚分配完之后一定要进行再进行一次全编译,以使分配的管脚有效。4、对设计文件进行仿真1)创建一个仿真波形文件,选择QUARTUSII软件FileNew,选取对话框中的OtherFile标签页,从中选取VectorWaveformFile,点击OK按钮。2)设置仿真结束时间,选择QUARTUSII软件的EditEndTime命令,弹出线路束时间对话框,在Time框中输入仿真结束时间,点击OK按钮。3)加入输入、输出端口,在波形编辑器窗口左边的端口名列表区点击鼠标右键,在弹出的右键菜单中选择InsertNodeorBus…命令,在弹出的InsertNodeorBus对话框中点击NodeFinder…按钮。在出现的NodeFinder界面中,在Filter列表中选择Pins:all,在Named窗口中输入“*”,点击List在NodesFound窗口出现所有信号的名称,点击中间的按钮则在SelectedNodes窗口下方出现被选择的端口名称,双击OK按钮,完成设置。4)编辑输入端口波形,即指定输入端口的逻辑电平变化,根据仿真的需要输入波形,最后选择软件的FileSave进行保存。5)指定仿真器设置,在仿真过程中有时序仿真和功能仿真之分,测试过程中选择的是功能仿真,在QUARTUSII软件中选择ToolSimulatorTool命令,打开仿真器工具窗口,首先产生功能仿真网表文件,点击产生功能仿真网表的按钮GenerateFunctionalSimulationNetlist,产生功能仿真网表,然后点击开始仿真的START按钮开始进行仿真,直到仿真进度条为100%时完成仿真。6)本次仿真的波形如下图所示:从波形图可以看出:当拨动开关的输入序列为“0100101”时,即同意的投票人数小于4时,用于显示个人投票结果的LED(6)—LED(0)显示序列也为“0100101”,这样就实现了记名投票的功能;此时七段数码管的LEDAG(6)—LEDAG(0)显示为“1001111”,由于同意的投票人数只有3个,没有超过4个人,所以最终的投票结果是不同意,即最终投票结果Result显示为低电平。当拨动开关的输入序列为“1010111”时,即同意的投票人数大于4时,用于显示个人投票结果的LED(6)—LED(0)显示序列也为“1010111”,同样也实现了记名投票的功能;此时七段数码管的LEDAG(6)—LEDAG(0)显示为“1101101”,由于同意的投票人数有5个,已经超过4个人,所以最终的投票结果是同意,即图示最终投票结果Result显示为高电平。5、从设计文件到目标器件的加载完成对器件的加载有两种形式,一种是对目标器件进行加载文件,一种是对目标器件的配置芯片进行加载。我们在测试过程中采用的是对目标器件EP2C35F672C8进行加载的方法。1)使用下载电缆线将PC机与实验系统连接起来。2)选择QUARTUSII软件的ToolProgrammer命令,进入编程器窗口,如果没有设置编程硬件,则编程硬件类型为NoHardware,所以需要对编程硬件进行设置,点击HardwareSetup…编程硬件设置按钮。3)点击AddHardware按钮,出现AddHardware对话框,在AddHardware对话框中,测试过程中选择的是USB-Blaster[USB-0],配置模式选择JTAG,然后添加与工程对应的.sof文件,在Program/Configure一栏打勾。点击Start开始配置。七、硬件测试结果根据上述准备,我们组所做的七人表决器的硬件测试结果已用照片的形式记录,如下面各图所示:1)K8为复位开关,当不需要复位时必须向上拨;当只有一个人同意时,如下图所示,当K1向上拨时,对应的D2点亮,并且七段数码管的显示为“1”,由于同意的人数小于4个,所以D1不亮。2)当K1、K2向上拨时,对应的D2、D3点亮,并且七段数码管的显示为“2”。由于同意的人数小于4个,所以D1不亮。3)当K1、K3、K5向上拨时,对应的D2、D4、D5点亮,并且七段数码管的显示为“3”。这表明了拨动开关和LED是一一对应的,也就是前面提到的记名投票功能。由于同意的人数小于4个,所以D1不亮。4)当K1、K2、K3、K4向上拨时,对应的D2、D3、D4、D5点亮,并且七段数码管的显示为“4”,由于同意的人数大于3个,所以表决结果D1也会点亮。5)当K1、K3、K5、K6、K7向上拨时,对应的D2、D4、D6、D7、D8点亮,并且七段数码管的显示为“5”,由于同意的人数大于3个,