1、各信号之间的时序关系如下图所示:被测信号:闸门信号:计数脉冲:清零信号:锁存信号: 图2.数字频率计工作时序3.顶层原理图设计 图3. 4位数字频率计顶层原理图说明:根据数字频率计的工作原理和设计方案,可得到如图3所示的4位数字频率计的顶层设计原理图。原理图包括计数器CNT10、锁存器LATCH4、显示译码器LED7S、控制器CONTROL四种底层模块。4个十进制计数器CNT10级联构成10000进制计数器,使频率计的测量范围达到0000Hz9999Hz。CNT10的输出送锁存器LATCH4,LATCH4的输出送显示译码器LED7S。LED7S的输出驱动7段LED数码管。CONTROL用于产生
2、图3中所示的清零信号CLR、闸门信号CS、锁存信号LE三种控制信号。 4.底层模块仿真(1)CNT10模块CNT10的VHDL语言:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 isport(clk:in std_logic; clr: cs: qq:buffer std_logic_vector(3 downto 0); co:out std_logic );end cnt10;architecture one of cnt10 isbegin process(clk
3、,clr,cs) begin if(clr=1)then qq=0000;elsif(clkevent and clk=if (cs=if (qq=9)thenqqelse=qq+1;end if;end process;process(qq)if(qq=9)thenconext_state=st1;clrcsle=st2;when st2=st3;when st3=st4;when st4=st5;when st5=st6;when st6=st7;when st7=st8;when st8=st9;when st9=st0;when others=end case;end process
4、com1;reg: process(clk)if(clkcurrent_statey=null; end case; end process;LED7S模块的逻辑符号:LED7S模块的仿真:LED7S模块说明: LED7S为显示译码器,是将BCD码译成驱动数码管所需代码的译码器。顶层原理的仿真: 5.引脚锁定和下载测试(1)引脚锁定:实验截图:操作步骤:、选择AssignmentsPin命令,打开引脚锁定窗口;、用鼠标双击Location栏中的空白处,在出现的下拉栏中选择把对应端 口信号名的器件引脚号。用相同的方法依次把所有的计数器输出锁定到相 应的引脚。(注意:该实验板采用的FPGA型号为E
5、P2C3F672C8,该芯片的总引脚数远大于频率计所需的引脚,为了避免未用引脚对其他电路产生影响,在编译之前应将EP2C3F672C8未用的I/O引脚设为输入高阻。具体操作:、选择AssignmentsDevice;、单击Device&Pin Option按钮;、单击Unused Pins,在对话框中选择As input tri-stated 按确定键。 )、对工程重新编译,以将引脚对应关系存入设计。(2)下载测试:实验板的实验照片:、用USB下载电缆将PC机与实验板连接,合上电源开关;、选择ToolProgrammer菜单,进入下载和编辑窗口;、单击编辑窗口左上方的Hardware Setu
6、p按钮,在打开的窗口中选择 USB-Blaster;、在编辑模式Mode中选择JTAG,并用鼠标选中Program/Configure 下方的小方框;、单击Start按钮,开始下载,当Progress显示100%时,下载结束。四、实验总结本次数字电路大型实验让我颇有体会,不仅让我们掌握了VHDL语言,而且还让我们学会了Quartus的使用,从中我们知道了如何利用VHDL语言构建模块、如何进行模块的仿真、如何进行顶层原理的设计等这些使我们受益良多,同时还让我们学会了硬件电路设计的又一种新的方法。并且通过这次实验的亲身操作,增强了我们自己的动手能力,也提高了我们的学习能力,以后如果碰到硬件电路的设
7、计,就会轻松的多,就可以用现在学过的知识运用到实践中去。不过在实验中,我也碰到了一些问题,例如,在构建原理图编译时碰到有错误的问题,这时可能是由于原理图中线没连好的缘故而不是VHDL语言的错误造成的。当时我们碰到这个问题时一直以为是某一模块的VHDL语言出现问题,于是一直在对VHDL语言进行检查,后来才知道我们是受C+这些语言影响太大,一有错就以为是代码的问题,而忽略了电路图的问题。(其实VHDL语言在模块的编译时如果没有报错,那在以后的原理图的使用时一般也不会报错)最后的建议就是:如果能够在平时多一点VHDL语言的教学就更好了,我们这次实验的模块的编写基本是照本宣科,就是在重复把书上的代码转移到电脑里,其实我们对各个模块的VHDL为什么要这么编写,为什么这样就能表示出他们的功能基本不知道,所以如果在平时多一点这方面的教学,再通过这次大型实验,那我们基本上就能掌握VHDL语言的基本应用,这样更有实践性。