波特率产生模块的主要功能:当输入不同数据时,将对输入的时钟信号有不同的分频比,从而产生不同的波特率。波特率发生器采用加法计数器来实现多种分频。产生38 400 b/s的VHDL程序如下:
process(clk,bo)
begin
case bo is
when "100"=>clkout<=clk38400;
when others=>clkout<=null;
end case;
end process;
process(clk,res)
variable cnt5:integer range 39 downto 0;
begin
if res=′1′ then cnt5:=0; clk38400<=′0′; //复位
elsif rising_edge(clk) then
if cnt5>=39 then cnt5:=0;clk38400<=not clk38400;
//设置分频系数38 400波特率
else cnt5:=cnt5+1;
end if;
end if;
end process;
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY led_display IS
PORT
(
ledclk: IN STD_LOGIC;
res: IN STD_LOGIC;
data: IN STD_LOGIC_VECTOR(7 downto 0);
ledout: OUT STD_LOGIC_VECTOR(7 downto 0);
sel: OUT STD_LOGIC_VECTOR(2 downto 0)
);
END led_display;
ARCHITECTURE led_architecture OF led_display IS
BEGIN
process(ledclk,res,data)
begin
if ledclk′event and ledclk=′1′ then
if res=′1′ then ledout<="00000000";
end if;
case data is
when "00000000" =>ledout<="00111111";
//显示数据0
when "00000001" =>ledout<="00000110";
//显示数据1
when "00000010" =>ledout<="01011011";
//显示数据2
: :
: :
when "00001111" =>ledout<="01110001";
//显示数据F
when others =>null;
end case;
end if;
sel<="000"; end process;
END led_architecture;
4 系统下载与调试结果
在Quartus II 7.2中建立项目后,输入顶层设计文件及各个模块的VHDL程序代码,编译、仿真、管脚分配之后产生编程文件,将编程文件下载到FPGA芯片EP2C5Q208上,通过串口线连接实验箱与PC机进行调试及验证。通过FPGA的4×4键盘输入0~F数据,并发送给PC机,PC机可以正确接收到所发送的数据;同时,通过PC机串口调试助手发送数据给FPGA时,FPGA也可以准确接收到相应数据,并且将接收到的数据在数码管上显示;改变波特率时也可以实现上述功能。实验结果表明,本设计满足设计要求。