Advertisement
Guest User

Untitled

a guest
Jul 18th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date:    14:14:30 01/23/2011
  7. // Design Name:
  8. // Module Name:    PPM
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module PPM(
  22.   Clk,
  23.   SDA,
  24.   SCL,
  25.   PPMIN
  26. );
  27.  
  28. input Clk;
  29. inout SDA;
  30. input SCL;
  31. input PPMIN;
  32.  
  33. wire [7:0] I2C_Out;
  34. wire [7:0] I2C_In;
  35. wire [7:0] I2C_Addr;
  36. wire I2C_WEn;
  37. reg UsClk;
  38. reg [4:0] MclkDiv_Count;
  39. reg [15:0] Channel[7:0];
  40. reg [2:0] ChannelSelect = 0;
  41. reg LastPosition = 0;
  42. reg [15:0] CurrentCount = 0;
  43.    
  44. i2cSlave u_i2cSlave(
  45.   .clk(Clk),
  46.   .rst(0),
  47.   .sda(SDA),
  48.   .scl(SCL),
  49.   .Out(I2C_Out),
  50.   .In(I2C_In),
  51.   .Addr(I2C_Addr),
  52.   .WEn(I2C_WEn)
  53. );
  54.  
  55. assign I2C_In = (I2C_Addr[0]==0)?Channel[I2C_Addr[7:1]][7:0]:Channel[I2C_Addr[7:1]][15:8];
  56.  
  57. // 1us counter
  58. always @(posedge Clk) begin
  59.   if (MclkDiv_Count==25) begin
  60.     MclkDiv_Count <= 5'h00;
  61.      UsClk <= !UsClk;
  62.   end
  63.   else
  64.     MclkDiv_Count <= MclkDiv_Count+1;
  65. end
  66.  
  67. // Process the PPM signal
  68. always @(posedge UsClk) begin
  69.     LastPosition <= PPMIN;
  70.    
  71.     if ((PPMIN==1) & (LastPosition==0))
  72.     begin
  73.         if (CurrentCount > 2500) begin
  74.             CurrentCount = 0;
  75.             ChannelSelect = 0;
  76.         end
  77.         else begin
  78.             Channel[ChannelSelect] = CurrentCount;
  79.             CurrentCount = 0;
  80.             ChannelSelect = ChannelSelect + 1;
  81.         end
  82.     end
  83.     else begin
  84.         CurrentCount = CurrentCount + 1;
  85.     end
  86. end
  87.  
  88. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement