文章目录
一、实验目的
二、实验内容
三、实验设计与结果
四、实验思考与小结
一、实验目的
在上次加法计数器仿真实验的基础上,掌握端口的引脚配置、实验箱的接线及程序的下载、调试等。
二、实验内容
1.在上次实验的基础上,编译、仿真可以进行0-99加法计数功能的计数器,其中输入端口包括时钟、清零、使能,输出端口包括个位、十位的七段译码输出,以及输出进位信号。
2. 在Quartus II上进行输入、输出端口的引脚配置。并根据引脚配置完成接线,下载至FPGA芯片中,在实验箱上完成验证。
三、实验设计与结果
1.修改上一次实验实现的“进行0-99加法计数功能的计数器“的VHDL描述,其中输入端口包括时钟、清零、使能,输出端口包括个位、十位的七段译码输出,以及输出进位信号。并将其封装成一个元件。其代码及封装后的元件如下:
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY cnt10 IS PORT ( clk, rst, en, load : IN STD_LOGIC ; data : IN STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ; dout : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ; cout : OUT STD_LOGIC ) ; END ENTITY cnt10 ; ARCHITECTURE bhv OF cnt10 IS BEGIN PROCESS (clk,rst,en,load) VARIABLE q : STD_LOGIC_VECTOR ( 3 DOWNTO 0 ); BEGIN IF rst = '0' THEN q := ( OTHERS => '0') ; ELSIF clk 'EVENT AND clk = '1' THEN IF en = '1' THEN IF ( load = '0') THEN q := data ; ELSE IF q < 9 THEN q := q+1; ELSE q := ( OTHERS => '0') ; END IF ; END IF ; END IF ; END IF ; IF q = "1001" THEN cout <= '1' ; ELSE cout <= '0' ; END IF ; dout <= q; END PROCESS ; END ARCHITECTURE bhv ;
2.其中的“输出端口包括个位、十位的七段译码输出”,需要修改上一次实验的七段译码的VHDL描述,并将其封装成一个元件。代码如下:
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL ; use Ieee.std_logic_unsigned.all; entity led7s is port (a: in std_logic_vector(3 downto 0); d: out std_logic_vector(6 downto 0) ); end entity led7s; architecture bhv of led7s is begin process (a) begin case (a) is when "0000" => d<= "0111111" ; when "0001" => d<= "0000110" ; when "0010" => d<= "1011011" ; when "0011" => d<= "1001111" ; when "0100" => d<= "1100110" ; when "0101" => d<= "1101101" ; when "0110" => d<= "1111101" ; when "0111" => d<= "0000111" ; when "1000" => d<= "1111111" ; when "1001" => d<= "1101111" ; when others => null; end case; end process; end architecture bhv;
3.如下图将以上封装好的元件连接成可以实现功能的原理图,让其可以实现0-99加法计数功能,其中输入端口包括时钟、清零、使能,输出端口包括个位、十位的七段译码输出,以及输出进位信号。
4.进行输入、输出端口的引脚配置。注意配置引脚位置的合理性。如下图为相关的配置信息。
clk外接一个频率合适的时钟信号,使能端信号则由外接的上下推动的开关决定,而进位信号的输出则用一个外接的发光二极管指示灯表示。两个七段数码管则根据相关引脚信息给出。
5.根据引脚配置完成接线,下载至FPGA芯片中,在实验箱上完成验证。如下图为相关的实验验证。
四、实验思考与小结
七段数码管有直流驱动和动态显示驱动两种。直流驱动:是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。优点是编程简单,显示亮度高,缺点是占用I/O端口多。动态显示驱动:是将所有数码管通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示。将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。