本片博文主要讲述把分频器和发送器模块组合成一个可用的发送器,即可以通过该发送器,实现pc机接收信息,而FPGA发送信息。 用xilinx公司的软件ISE10.1编译,编写ucf文件,使FPGA要发送的信息和8个按钮相对应,布局布线,把编译好的程序下载到FPGA中,利用串口调试工具,频率设置成115200,设置成十六进制,设置8个按钮为:10000110。在串口调试工具中会看到:86
- library IEEE;
-
use IEEE.STD_LOGIC_1164.ALL;
-
use IEEE.STD_LOGIC_ARITH.ALL;
-
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-
-
---- Uncomment the following library declaration if instantiating
-
---- any Xilinx primitives in this code.
-
--library UNISIM;
-
--use UNISIM.VComponents.all;
-
-
entity TopTransfer is
-
Port ( clk100mhz : in STD_LOGIC; -- FPGA的时钟
-
reset : in STD_LOGIC; -- 总reset, = '1'时复位
-
xmit_cmd_p : in STD_LOGIC; -- 传输命令, = '1' 开始准备传输
-
txdbuf_in : in STD_LOGIC_VECTOR (7 downto 0); -- 传输数据缓冲区,存放待传送的数据
-
txd_out : out STD_LOGIC; -- 发送数据(Transmitted Data,TXD),通过TXD串行发送数据
-
txd_done_out : out STD_LOGIC); -- 数据发送完毕信号,也是标志位,没有控制作用,在停止位后变化. <= '1' 表示数据发送完毕
-
end TopTransfer;
-
-
architecture Behavioral of TopTransfer is
-
--signal iSendCmd : STD_LOGIC ; -- 保存发送命令,使发送命令值保持 67 个125MHZ时钟周期,即115200/9600HZ的16个时钟周期,作用:在125MHZ信号下,使很短的发送命令都可以得到执行
-
--shared variable iSendCnt : INTEGER := 0; -- 发送命令计数器,
-
-
component baud -- 分频元件
-
Port(
-
clk :in STD_LOGIC; -- 待分频时钟
-
resetb :in STD_LOGIC; -- RESET 信号, <= '1' 有效
-
bclk :out STD_LOGIC -- 分频后时钟输出
-
);
-
end component;
-
-
component transfer -- TRANSFER 元件
-
Port(
-
bclkt : in STD_LOGIC; -- 100MHZ的分频
-
resett : in STD_LOGIC; -- RESET OF COMPONENT,<= '1' 有效
-
xmit_cmd_p : in STD_LOGIC; -- 传输命令信号,
-
txdbuf : in STD_LOGIC_VECTOR (7 downto 0); -- 发送数据缓冲区
-
busy : buffer std_logic;
-
txd : out STD_LOGIC; -- TXD IN TRANSFER
-
txd_done : out STD_LOGIC -- 数据发送完毕信号,也是标志位,没有控制作用,在停止位后变化. <= '1' 表示数据发送完毕
-
);
-
-
end component; -- END OF TRANSFER
-
-
signal b : std_logic;
-
-
-- 顶层映射
-
u1:
-
baud port map( clk => clk100mhz,
-
resetb => reset,
-
bclk => b
-
);
-
-
u3:
-
transfer port map(
-
bclkt => b,
-
resett => reset,
-
xmit_cmd_p => xmit_cmd_p,
-
txdbuf => txdbuf_in,
-
-
txd => txd_out,
-
txd_done => txd_done_out
-
);
-
-
end Behavioral;
阅读(3597) | 评论(3) | 转发(0) |