实 验 报 告实验日期: 学 号:姓 名:实验名称:软硬件平台的使用 总 分:一、实验原理1、介绍多位数码管显示电路由显示字符的段选线和选通数码管的位选线控制,各位数码管共为8位的电路结构,使得同一时刻选通的各位数码管显示字符。
通过采用动态扫描显示方式,只要美味数码管显示间隔足够短,由于人眼视觉暂留效应及数码管余晖特性,观察同时显示本位字符。
2、方法利用Quartus II 完成三位数码管显示电路的逻辑设计,通过模4计数器引入时钟频率、2-3译码器将频率代码二位制转化为三位制、3选1多路选择器将数据选择性输出即控制位选、7段译码器将数据选择性输出即控制段选,通过波形仿真及硬件实验箱验证设计。
产生时钟信号 00 01 10 11 选择一组信号二、实验设计①模4计数器②3选1多路选择器 ③2-3译码器④7段译码器(自行编程) ⑤下载后测试1、工程建立(以模4计数器为例)以模4计数器为例,详细介绍基于原理图输入的quartusII 工程设计过程:创建工程文件、编辑设计图形、编译综合、仿真验证、管脚配置、编程下载、硬件验证测试等。
(1)指定工程文件名模4计数器 2-3编译器确定位选 3选1多路选择器 7段译码器 确定段选选择File→New Project Wizard。
在弹出的对话框中分别输入新建工程所在的文件夹,且名称、工程名称和顶层实体名称保持一致点击Next按钮,在此对话框中可以设置添加的文件或者库,按提示操作。
完成后,单击Next按钮。
(2)选择目标器件,可在device中设置单击Next按钮。
(3)工程创立结束查看设置信息是否正确,正确,则单击Next。
2、原理设计(1)模4计数器:产生周期性时钟信号“00”“01”“10”“11”,并亮灯;(2)2-3编译器:将二位信号转化为三位信号进行段选;(3)3选1多路选择器:输出其中一条的信号;(4)7段译码器:通过控制段选输出数字。
由于软件中“7499”7段译码器无法输出“A”“B”“C”“D”“E”“F”“G”,因此这里用VHDL语言自行编辑代码,得出符合要求的7段译码器。
代码如下:library IEEE;use IEEE.std_logic_1164.all;entity BcdTo7Seg isport(dout:in STD_LOGIC_VECTOR(3 downto 0);q:out STD_LOGIC_VECTOR(6 downto 0));end BcdTo7Seg;architecture BcdTo7Seg_arch of BcdTo7Seg isbeginq<= "1111110"when dout="0000"else"0110000"when dout="0001"else"1101101"when dout="0010"else"1111001"when dout="0011"else"0110011"when dout="0100"else"1011011"when dout="0101"else"1011111"when dout="0110"else"1110000"when dout="0111"else"1111111"when dout="1000"else"1111011"when dout="1001"else"1110111"when dout="1010"else"0011111"when dout="1011"else"1001110"when dout="1100"else"0111101"when dout="1101"else"1001111"when dout="1110"else"1000111";end BcdTo7Seg_arch;顶层电路原理图:3位数码管扫描电路:三、波形仿真网格大小100ns结束时间2μs(1)功能仿真①②③④⑤①:时钟信号初始输出“00”;②:时钟信号持续输出“00”,并于150ns处跳变输出至“01”;③:时钟信号持续输出“01”,并于250ns处跳变输出至“10”;④:时钟信号持续输出“10”,并于350ns处跳变输出至“11”;⑤:时钟信号持续输出“11”,并于450ns处跳变输出至“00”;(2)时序仿真数码管段选数码管位选以组为单位输入信号仿真结论:时序仿真相比于功能仿真发生延迟,使得信号变化略微得不稳定,但基本保持一致。
时钟信号由clk输入之后,由bsg[2..0]选择信号使得每一次亮一个数码管,之后din0、din1、din2分别输入数字,即数码管亮的数字,最后由q[7..0]选择信号执行数码管的明亮情况,完成实验。
周期显示位选bsg[2..0] 段选q[7..0]0~T PIN_100 100 0110000T~2T PIN_101 010 *******2T~3T PIN_102 001 1111001四、管脚分配(1)3选1多路选择器PIN_72 -to d0[3]PIN_73 -to d0[2]PIN_78 -to d0[1]PIN_79 -to d0[0]PIN_80 -to d1[3]PIN_81 -to d1[2]PIN_82 -to d1[1]PIN_83 -to d1[0]PIN_86 -to d2[3]PIN_87 -to d2[2]PIN_88 -to d2[1]PIN_89 -to d2[0]PIN_30 -to dout[3]PIN_29 -to dout[2]PIN_28 -to dout[1]PIN_27 -to dout[0]PIN_92 -to sel[1]PIN_95 -to sel[0](2)2-3译码器PIN_100 -to bsg[2]PIN_101 -to bsg[1]PIN_102 -to bsg[0](3)7段译码器PIN_51 -to qaPIN_49 -to qbPIN_48 -to qcPIN_47 -to qdPIN_46 -to qePIN_44 -to qfPIN_43 -to qg(4)模4计数器PIN_125 -to clk结论:下载验证结果与管脚分配保持一致。
五、思考题(1)Quartus软件如何复用Maxplus工程文件?答:通过转换工程文件的版本,即将Maxplus工程文件移至Quartus文件夹中,然后在软件中的symbol---library----others中调用即可。
(2)如何获取工程所占用资源情况(逻辑单元和管脚)?答:逻辑单元即View---Utility---Project NAvigator;管脚即Assignments---Pins。
(3)图形输入法时有哪些方法提高连线效率?答:直接画出总线,而不是用单线一一连接。
(4)解释功能仿真和时序仿真流程是什么?区别在哪?答:功能仿真先产生功能仿真网表,再对仿真进行设置,形成波形激励文件,启动功能仿真,对所创建的逻辑进行的验证其功能是否正确;时序仿真进行仿真设置,形成波形激励文件,完成目标器件选择和管脚分配,执行全编译,启动时序仿真,对电路行为作出估计判断。
时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时,并且在仿真结果波形图中,时序仿真后的信号加载了时延,而功能仿真没有。
(5)如何解决下载电缆(Byteblaster)不能下载的问题?答:检查芯片型号与实际使用的芯片型号是否一致;检查管脚分配情况是否一致;检查Byteblaster是否插入情况;检查管脚分配后是否进行编译;检查芯片各边例如VCC,GND是否正常;检查Byteblaster的连线情况。
六、实验日志1、运行至mux4-3-1,编译无法通过其原因是工程名与顶层实体名不同,将文件名改为mux4_3_1后,顺利通过编译并运行;2、想调整显示数码管的位置,一直无法实现,直至在修改管脚后进行编译,顺利实现显示数码管位置的改变;3、完成顶层bdf文件的制作后,按步骤进行,无法出现最终的仿真图,通过在管脚分配进行全编译,顺利解决问题;4、在时序仿真图中,段选的二进制代码为常量,其原因是忘记对din0、din1、din2进行命名,顺利解决问题;疑问:为什么00的代码段要比01、10、11的都要长?七、实验总结没学过数字设计的相关知识,在进行试验中还是相当吃力的,后来经过一段时间的摸索,掌握了其中的一些知识后,变得容易许多了,可能也会加强我在学习相关理论知识的理解程度。
不管是画图还是敲写代码,一定要认真,学会了一步一步的仿真,看结果,从而找出问题的所在,进一步锻炼了自己的耐心。
下载验证的过程让我重新熟悉了计数器、译码器以及数码管显示的设计,更激发了我对电路板操作使用的兴趣,加深了我对EDA的认识。