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

全部博文(65)

文章存档

2014年(7)

2012年(20)

2011年(35)

2010年(3)

分类: IT业界

2011-07-20 21:59:09

把分频器,发送器模块,接收器模块组合成一个顶层模块,就是串口。该串口具有收发功能。
用xilinx公司的软件ISE10.1编译,编写ucf文件,布局布线,把编译好的程序下载到FPGA中,利用串口调试工具,频率设置成115200,设置成十六进制,在串口调试工具的发送区域中输入:86,会在串口调试工具的接收区域内收到: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. entity top is -- 顶层实体
  6. Port ( clk100mhz : in STD_LOGIC; -- FPGA的时钟
  7. reset : in STD_LOGIC; -- 总reset, = '1'时复位
  8. rxd : in STD_LOGIC; -- 接受数据(Received Data,RXD),通过RXD终端接受外来数据
  9. txd_out : out STD_LOGIC; -- 发送数据(Transmitted Data,TXD),通过TXD串行发送数据
  10. txd_done_out : out STD_LOGIC); -- 数据发送完毕信号,也是标志位,没有控制作用,在停止位后变化. <= '1' 表示数据发送完毕
  11. end top;
  12. architecture Behavioral of top is
  13. signal iBuffer : STD_LOGIC_VECTOR (7 downto 0); -- 测试信号,无关变量,可以忽略
  14. signal irdy : std_logic;
  15. component receiver -- receiver元件
  16. Port( bclkr : in STD_LOGIC; -- 分频后的时钟
  17. resetr : in STD_LOGIC; -- RESET OF RECEIVER,<= '1' 有效
  18. rxdr : in STD_LOGIC; -- RXD IN RECEIVER COMPONENT
  19. r_ready : out STD_LOGIC; -- RECEIVER 接受数据后给出的ready信号
  20. rbuf : out STD_LOGIC_VECTOR (7 downto 0) -- 数据接受缓冲区
  21. );
  22. end component; -- END OF RECEIVER
  23. component transfer -- TRANSFER 元件
  24. Port(
  25. bclkt : in STD_LOGIC; -- 125MHZ的分频
  26. resett : in STD_LOGIC; -- RESET OF COMPONENT,<= '1' 有效
  27. xmit_cmd_p : in STD_LOGIC; -- 传输命令信号,
  28. txdbuf : in STD_LOGIC_VECTOR (7 downto 0); -- 发送数据缓冲区
  29. txd : out STD_LOGIC; -- TXD IN TRANSFER
  30. txd_done : out STD_LOGIC -- 数据发送完毕信号,也是标志位,没有控制作用,在停止位后变化. <= '1' 表示数据发送完毕
  31. );
  32. end component; -- END OF TRANSFER
  33. component baud -- 分频元件
  34. Port(
  35. clk :in STD_LOGIC; -- 待分频时钟
  36. resetb :in STD_LOGIC; -- RESET 信号, <= '1' 有效
  37. bclk :out STD_LOGIC -- 分频后时钟输出
  38. );
  39. end component; -- END OF BAUD
  40. signal b: STD_LOGIC; -- 全局分频信号,与bclk,bclkr,bclkt等价
  41. begin
  42. -- 顶层映射
  43. u1:
  44. baud port map( clk => clk100mhz,
  45. resetb => reset,
  46. bclk => b
  47. );
  48. u2:
  49. receiver port map(
  50. bclkr => b,
  51. resetr => reset,
  52. rxdr => rxd,
  53. r_ready => irdy,
  54. rbuf => ibuffer
  55. );
  56. u3:
  57. transfer port map(
  58. bclkt => b,
  59. resett => reset,
  60. xmit_cmd_p => irdy,
  61. txdbuf => ibuffer,
  62. txd => txd_out,
  63. txd_done => txd_done_out
  64. );
  65. end Behavioral;


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

Renwen05242011-07-29 15:30:58

natel6k: 请教一下,如果我要有奇偶校验位功能,该怎么改程序?.....
和自己要处理的数据结合,试试

Renwen05242011-07-29 15:30:28

natel6k: 这是我们老师的要求:
1、数据帧起始位和结束位均1位  2、有奇偶校验位  3具有置位复位功能
4、若数据传输错误,具有重发功能
5、波特率可设置  
   靠你了大虾,.....
1、发送或接受数据时,加入判断即可
2、处理的数据的程序中,进行奇偶校验
3、加入一个标志位
4、在奇偶校验时,如果错误,重发
5、该程序波特率可以设置,改一下分频计数即可

natel6k2011-07-29 15:21:37

这是我们老师的要求:
1、数据帧起始位和结束位均1位  2、有奇偶校验位  3具有置位复位功能
4、若数据传输错误,具有重发功能
5、波特率可设置  
   靠你了大虾,我明天要交上去了

natel6k2011-07-29 15:19:49

请教一下,如果我要有奇偶校验位功能,该怎么改程序?