Chinaunix首页 | 论坛 | 博客
  • 博客访问: 569891
  • 博文数量: 65
  • 博客积分: 2844
  • 博客等级: 上尉
  • 技术积分: 996
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-02 12:01
文章分类

全部博文(65)

文章存档

2014年(7)

2012年(20)

2011年(35)

2010年(3)

分类: IT业界

2011-07-20 21:52:32

本片博文主要讲述把分频器和发送器模块组合成一个可用的发送器,即可以通过该发送器,实现pc机接收信息,而FPGA发送信息。
用xilinx公司的软件ISE10.1编译,编写ucf文件,使FPGA要发送的信息和8个按钮相对应,布局布线,把编译好的程序下载到FPGA中,利用串口调试工具,频率设置成115200,设置成十六进制,设置8个按钮为:10000110。在串口调试工具中会看到:86

  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. use IEEE.STD_LOGIC_ARITH.ALL;
  4. use IEEE.STD_LOGIC_UNSIGNED.ALL;
  5. ---- Uncomment the following library declaration if instantiating
  6. ---- any Xilinx primitives in this code.
  7. --library UNISIM;
  8. --use UNISIM.VComponents.all;
  9. entity TopTransfer is
  10. Port ( clk100mhz : in STD_LOGIC; -- FPGA的时钟
  11. reset : in STD_LOGIC; -- 总reset, = '1'时复位
  12. xmit_cmd_p : in STD_LOGIC; -- 传输命令, = '1' 开始准备传输
  13. txdbuf_in : in STD_LOGIC_VECTOR (7 downto 0); -- 传输数据缓冲区,存放待传送的数据
  14. txd_out : out STD_LOGIC; -- 发送数据(Transmitted Data,TXD),通过TXD串行发送数据
  15. txd_done_out : out STD_LOGIC); -- 数据发送完毕信号,也是标志位,没有控制作用,在停止位后变化. <= '1' 表示数据发送完毕
  16. end TopTransfer;
  17. architecture Behavioral of TopTransfer is
  18. --signal iSendCmd : STD_LOGIC ; -- 保存发送命令,使发送命令值保持 67 个125MHZ时钟周期,即115200/9600HZ的16个时钟周期,作用:在125MHZ信号下,使很短的发送命令都可以得到执行
  19. --shared variable iSendCnt : INTEGER := 0; -- 发送命令计数器,
  20. component baud -- 分频元件
  21. Port(
  22. clk :in STD_LOGIC; -- 待分频时钟
  23. resetb :in STD_LOGIC; -- RESET 信号, <= '1' 有效
  24. bclk :out STD_LOGIC -- 分频后时钟输出
  25. );
  26. end component;
  27. component transfer -- TRANSFER 元件
  28. Port(
  29. bclkt : in STD_LOGIC; -- 100MHZ的分频
  30. resett : in STD_LOGIC; -- RESET OF COMPONENT,<= '1' 有效
  31. xmit_cmd_p : in STD_LOGIC; -- 传输命令信号,
  32. txdbuf : in STD_LOGIC_VECTOR (7 downto 0); -- 发送数据缓冲区
  33. busy : buffer std_logic;
  34. txd : out STD_LOGIC; -- TXD IN TRANSFER
  35. txd_done : out STD_LOGIC -- 数据发送完毕信号,也是标志位,没有控制作用,在停止位后变化. <= '1' 表示数据发送完毕
  36. );
  37. end component; -- END OF TRANSFER
  38. signal b : std_logic;
  39. -- 顶层映射
  40. u1:
  41. baud port map( clk => clk100mhz,
  42. resetb => reset,
  43. bclk => b
  44. );
  45. u3:
  46. transfer port map(
  47. bclkt => b,
  48. resett => reset,
  49. xmit_cmd_p => xmit_cmd_p,
  50. txdbuf => txdbuf_in,
  51. txd => txd_out,
  52. txd_done => txd_done_out
  53. );
  54. end Behavioral;




阅读(3538) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

小susan妹2011-07-22 16:01:38

又发现了错误,连续发送一串数字,或字符,总是有漏掉的,如123456789,接收到是13579,abcee接收到的是ace

Renwen05242011-07-22 10:14:15

小susan妹: 谢谢,根据书上写的提示,也编了这三个模块,可是死活调试不出想要的结果,总是多移了一位,看了你的程序,知道书上也写错了,现在结果正确了,我可以继续往下加.....
调试的时候,通过仿真差不多都能找到错误的地方。

小susan妹2011-07-22 09:53:17

谢谢,根据书上写的提示,也编了这三个模块,可是死活调试不出想要的结果,总是多移了一位,看了你的程序,知道书上也写错了,现在结果正确了,我可以继续往下加东西了。