IR 紅外線遙控解碼

该博客详细介绍了红外遥控解码的过程,包括9ms和4.5ms脉冲的计数与检测,以及状态机的实现。通过Verilog代码展示了如何识别红外信号并解析出器件地址和数据,最后通过测试程序验证了解码模块的功能。
摘要由CSDN通过智能技术生成

  1. //系統f=50MHz, T=20ns
  2. //9ms=9x10^-3, (9x10^-3)/(20x10^-9)=450000 (取可接受誤差為正負10%)
  3. //4.5ms=4.5x10^-3, (4.5x10^-3)/(20x10^-9)=225000 (取可接受誤差為正負10%)
  4. //560μs =560x10^-6, (560x10^-6)/(20x10^-9)=28000 (取可接受誤差為正負10%)
  5. //1690μs =1690x10^-6, (1690x10^-6)/(20x10^-9)=84500 (取可接受誤差為正負10%)
  6.  
  7. module Infrared(
  8.      clk,
  9.      rst,
  10.      ir,       //紅外線輸入
  11.      addr,  //器件地址
  12.      data,  //數據
  13.      done  //傳輸結束標誌信號
  14. );
  15.  
  16. input    clk;
  17. input    rst;
  18. input    ir;
  19. output [15:0] addr;
  20. output [15:0] data;
  21. output done;
  22.  
  23. reg ir_reg0;
  24. reg ir_reg1;
  25. reg ir_tmp0;
  26. reg ir_tmp1;
  27. wire nedge;
  28. wire pedge;
  29. reg [18:0] T9ms_cnt;
  30. reg [17:0] T4_5ms_cnt;
  31. reg T9ms_en;
  32. reg T4_5ms_en;
  33. reg [16:0] cnt;
  34. reg [5:0] n_cnt;
  35. reg [31:0] data_tmp;
  36.  
  37. //================================================
  38. //狀態機
  39. //================================================
  40.  
  41. parameter  [5:0] Idle0      = 6'b00_0001, //空閒態
  42.                             T9ms     = 6'b00_0010, //9ms
  43.                             T4_5ms = 6'b00_0100, //4.5ms
  44.                             Trans     = 6'b00_1000, //傳輸地址和數據
  45.                             Stop       = 6'b01_0000, //停止
  46.                             Idle1       = 6'b10_0001; //空閒態
  47.  
  48. reg [5:0] present_state, next_state;
  49.  
  50. always@(posedge clk or negedge rst)
  51. begin
  52.     if(!rst)  present_state <= Idle0;
  53.     else     present_state <= next_state;
  54. end
  55.  
  56. always@(*)
  57. begin
  58.     case(present_state)
  59.     Idle0  : if(nedge) 
  60.                    next_state = T9ms;
  61.                  else      
  62.                    next_state = Idle0;
  63.   T9ms   : if(pedge && (T9ms_cnt >= 19'd405000 && T9ms_cnt <= 19'd495000)) 
  64.                    next_state = T4_5ms;
  65.                 else   </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值