3.3实验三七人表决器设计
3.3.1实验目的1、掌握用QuartusII软件设计基本数字系统流程及注意事项。2、进一步熟练掌握程序的编译、仿真、生成模块及芯片引脚号码锁定方法。3、掌握分层设计的方法和注意事项3.3.2实验内容基于QuartusII软件及VHDL语言实现七人表决器。当参与表决的7人中有4个或4个以上赞同时,表决器输出“1”表示通过,否则输出“0”表示不通过,并显示赞成和反对的人数。用7个开关作为表决器的7个输入变量,数码管显示人数,LED灯显示是否通过。本实验4学时。3.3.3实验仪器ZY11EDA13BE型实验箱。3.3.4实验原理分析实验要求,七人表决器系统主要由两个模块构成:投票计数模块和数码管显示模块。一、建立项目(1)新建文件夹。路径及文件名中不可出现汉字。(2)新建项目。一个数字系统可以由多个模块构成,使所有模块连接在一起的总文件叫做顶层文件,只有顶层文件名可以且必须与项目名相同。项目取名为bjq7。
(3)选择芯片二、建立文件首先,建立各个VHDL功能模块。1.投票计数模块。(1)新建VHDL文件编辑VHDL程序。投票计数模块输入为七个电平开关input,输出为同意的人数agree,反对的人数disagree,是否通过指示灯y,程序清单如下:libraryieee;useieee.std_logic_11.all;useieee.std_logic_unsigned.all;entityBJQisport(input:instd_logic_vector(6downto0);agree:outstd_logic_vector(3downto0);disagree:outstd_logic_vector(3downto0);y:outstd_logic);end;architectureoneofBJQisbeginprocess(input)variablecnt:integerrange0to7;variablecnt0:integerrange0to7;begincnt:=0;foriin6downto0loopifinput(i)='1'thencnt:=cnt+1;endif;endloop;cnt0:=7-cnt;ifcnt>3theny<='1';elsey<='0';endif;casecntiswhen0=>agree<=\"0000\";when1=>agree<=\"0001\";when2=>agree<=\"0010\";when3=>agree<=\"0011\";when4=>agree<=\"0100\";when5=>agree<=\"0101\";when6=>agree<=\"0110\";when7=>agree<=\"0111\";whenothers=>agree<=\"0000\";endcase;casecnt0iswhen0=>disagree<=\"0000\";when1=>disagree<=\"0001\";when2=>disagree<=\"0010\";when3=>disagree<=\"0011\";when4=>disagree<=\"0100\";when5=>disagree<=\"0101\";when6=>disagree<=\"0110\";when7=>disagree<=\"0111\";whenothers=>disagree<=\"0000\";七个输入开关同意的人数不同意的人数是否通过标志endcase;endprocess;end;程序输入完成后进行保存,名字与实体名一致BJQ。(2)对保存好的vhdl文件进行编译。对表决器程序编译。点击ProjectNavigator小窗口下方的Files查看已有文件,可以看到项目中已有的文件。选中BJQ.vhd,点击右键选择“setastop-levelentity”,此步骤将BJQ.vhd设置为当前需要编译的文件。执行“Processing”菜单下的“StartCompilation”命令,开始编译。(3)将VHDL文件生成原理图可调用的器件点击ProjectNavigator小窗口下方的Files,选中BJQ.vhd,点击右键选择“CreateSymbolFilesforcurrentFile”,将BJQ的VHDL文件生成为可调用的器件。生成器件成功后显示“CreateSymbolFilewassuccessful”2.数码管显示模块建立操作步骤与投票计数模块方法相同,新建VHDL程序、保存文件、设置为顶层实体、编译机生成可调用器件。程序清单如下:libraryieee;useieee.std_logic_11.all;useieee.std_logic_unsigned.all;entityXIANSHIisport(led:outstd_logic_vector(0to6);agree:instd_logic_vector(3downto0);disagree:instd_logic_vector(3downto0);clk:instd_logic);end;architectureoneofXIANSHIissignalqn:std_logic_vector(3downto0);beginprocess(clk,agree,disagree)begincaseclkiswhen'0'=>qn<=agree;when'1'=>qn<=disagree;whenothers=>qn<=\"0000\";endcase;caseqniswhen\"0000\"=>led<=\"1111110\";when\"0001\"=>led<=\"0110000\";when\"0010\"=>led<=\"1101101\";when\"0011\"=>led<=\"1111001\";when\"0100\"=>led<=\"0110011\";when\"0101\"=>led<=\"1011011\";when\"0110\"=>led<=\"1011111\";when\"0111\"=>led<=\"1110000\";whenothers=>led<=\"0000000\";endcase;endprocess;end;程序输入完成后进行保存,名字与实体名一致XIANSHI。仿照上一个模块的操作步骤,最终生成可调用器件。建立顶层文件各个模块建立好后,需要建立顶层文件。在原理图中将所有模块连接起来,实现数字系统的功能,此原理图为本项目的顶层文件,必须与项目名相同,保存为bjq7。在原理图文件中,双击画图区域,输入VHDL程序的名字BJQ,就可以调用上面步骤所生成的相应的器件,如下图。在原理图文件中,连接各个功能模块,设置输入输出,如下图。需要特别注意的是,一位二进制数据连接是用细线,多位二进制数据用粗线,多位二进制数输入或输出的命名方式为out[0..6],与模块内的数据格式一致,如下图所示。三、项目编译。原理图编辑好后,需要对其进行编译。点击ProjectNavigator小窗口下方的Files,选中bjq.bdf,将其设置为当前顶层实体,进行编译。四、管脚分配编译成功后,通过管脚分配使设计的数字系统控制实验箱。选择菜单栏中的Assignments下的“Pins”,进入管脚分配界面。管脚79为实验箱上第一排时钟,45、46、47、53、54、55、56控制实验箱上电平开关,10,11,12,13,14,15,16为实验箱数码管的七段译码数据输入端,管脚7为数码管片选端,控制将哪个数码管点亮,19为LED灯显示是否通过。{注意}管脚分配好后,回到主界面对顶层文件进行重新编译。编译成功后,设置的管脚信息会显示在原理图上。五、程序下载。编译成功后,将所设计的数字系统下载到实验箱芯片上,方法与实验一的下载步骤相同。下载时,(1)打开实验箱侧面总开关,(2)打开实验箱右上角第一个黄色按钮开关APW1,(3)关闭实验箱左下角按钮开关(关闭时钟源),(4)实验箱红色模式选择开关,6、7为下,其余拨到上端,点击下载。下载成功后,打开时钟开关。