Guest User

datalink_sender

a guest
Apr 17th, 2012
25
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 2.02 KB | None | 0 0
  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.  
  6. entity datalink_sender is
  7.     port
  8.     (
  9.     din     : in  std_logic_vector (7 downto 0);
  10.     clk50Mhz : in std_logic;
  11.     clkPacket: in std_logic;
  12.     clkShift    : in std_logic;
  13.     output  : out std_logic;
  14.     triggerTouC : out std_logic
  15.     );
  16. end datalink_sender;
  17.  
  18. architecture arch of datalink_sender is
  19.  
  20. signal manData : std_logic_vector (15 downto 0);
  21.  
  22. TYPE SenderState IS (packetTrigger, packetStartDelay, readByte, readByteDelay, idle);
  23. signal sstate : SenderState;
  24.  
  25. signal triggerSignal : std_logic;
  26. signal bitOut : std_logic;
  27.  
  28. begin
  29.  
  30. triggerTouC <= triggerSignal;
  31. output <= bitOut;
  32.  
  33. process(clk50Mhz, clkShift)
  34.  
  35. constant bytePerPacket : integer := 320;
  36. constant packetDelay : integer := 144;
  37. constant byteDelay : integer := 70;
  38.  
  39. variable byteCount : integer;
  40. variable delayCount : integer;
  41. variable bitCount : integer;
  42. begin
  43.  
  44. if(falling_edge(clk50Mhz))then
  45.    
  46.     CASE sstate IS
  47.         WHEN idle =>
  48.             --count for 1KHz
  49.             if(falling_edge(clkPacket))then
  50.                 sstate <= packetTrigger;
  51.                 delayCount := 0;
  52.             end if;
  53.            
  54.         WHEN packetTrigger =>
  55.             byteCount := 0;
  56.             triggerSignal <= '1';
  57.             sstate <= packetStartDelay;
  58.            
  59.         WHEN packetStartDelay =>
  60.             delayCount := delayCount+1;
  61.             if(delayCount=packetDelay-byteDelay)then
  62.                 --put in SOF
  63.                 manData <= "0110101010101001";
  64.             elsif(delayCount=packetDelay)then
  65.                 triggerSignal <= '0';
  66.                 sstate <= readByte;
  67.             end if;
  68.            
  69.         WHEN readByte =>
  70.        
  71.             manData <= din(7)&NOT(din(7))&din(6)&NOT(din(6))&din(5)&NOT(din(5))&din(4)&NOT(din(4))&din(3)&NOT(din(3))&din(2)&NOT(din(2))&din(1)&NOT(din(1))&din(0)&NOT(din(0));
  72.             delayCount := 0;
  73.             byteCount := byteCount + 1;
  74.             sstate <= readByteDelay;
  75.        
  76.         WHEN readByteDelay =>
  77.             if(byteCount=bytePerPacket)then
  78.                 sstate <= idle;
  79.             else
  80.                 delayCount := delayCount+1;
  81.                 if(delayCount=packetDelay)then
  82.                     sstate <= readByte;
  83.                 end if;
  84.             end if;
  85.        
  86.     END CASE;
  87.    
  88. end if;
  89.  
  90. end process;
  91. end arch;
Advertisement
Add Comment
Please, Sign In to add comment