FPGA 学习小组
直播中

alexdos

6年用户 804经验值
擅长:可编程逻辑 电源/新能源 嵌入式技术 模拟技术
私信 关注

FPGA中的信号监测器模块是如何实现的

信号监测器模块的功能是监测 RS-232 输入端的信号,当有新的数据传输时通知 UART 内核开始接收数据,其端口定义如表 5-5 所示。
1.png
在监测到传输的起始位后,信号监测器需要将自己锁定,即不对输入信号进行监测,直到UART 内核将其复位。信号监测器的实现代码如下:

  1. -- 库声明
  2. library IEEE;
  3. use IEEE.STD_LOGIC_1164.all;
  4. use WORK.UART_PACKAGE.ALL;
  5. -- 实体声明
  6. entity detector is
  7. port (
  8. clk : in std_logic;
  9. reset_n : in std_logic;
  10. RxD : in std_logic;
  11. new_data : out std_logic );
  12. end detector;
  13. --}} End of automatically maintained section
  14. -- 结构体
  15. architecture detector of detector is
  16. -- 信号监测器状态机
  17. signal state : dt_state;
  18. begin
  19. -- enter your statements here --
  20. -- 主过程
  21. main : process(reset_n, clk)
  22. begin
  23. -- 复位信号
  24. if reset_n = '0' then
  25. state <= dt_unlock;
  26. new_data <= '0';
  27. elsif rising_edge(clk) then
  28. -- 检查输入信号和状态,当输入为低并且不在锁定状态时,输出 new_data 信号
  29. if state = dt_unlock and RxD = '0' then
  30. new_data <= '1';
  31. state <= dt_lock;
  32. else
  33. new_data <= '0';
  34. end if;
  35. end if;
  36. end process;
  37. end detector;


代码中的状态机 dt_state 是在 UART_PACKAGE 包中定义的,如下:

  1. -- 信号监测器状态
  2. type dt_state is
  3. (
  4. dt_unlock, -- 未锁定状态
  5. dt_lock -- 锁定状态
  6. );


为了验证信号监测器模块的实现,需要编写一个测试平台测试其功能。测试平台的代码请参考 UART 工程源代码中的 detector_tb.vhd 文件,测试的结果如图 5-8 所示。
2.png
图 5-8 信号监测器仿真时序图
其中,RxD 第一次变为低时,new_data 信号产生输出;之后,RxD 又变为低,但由于信号监测器处于锁定状态,所以 new_data 并没有输出;最后,由于 reset_n 信号将信号监测器复位了,RxD 再次变为低时,new_data 上又有输出了。可见,信号监测器的实现完全正确,其功能完全符合设计的要求。

更多回帖

发帖
×
20
完善资料,
赚取积分