Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Library IEEE;
- use IEEE.std_logic_1164.all;
- use IEEE.std_logic_arith.all;
- use IEEE.std_logic_unsigned.all;
- entity datalink_sender is
- port
- (
- din : in std_logic_vector (7 downto 0);
- clk50Mhz : in std_logic;
- clkPacket: in std_logic;
- clkShift : in std_logic;
- output : out std_logic;
- triggerTouC : out std_logic
- );
- end datalink_sender;
- architecture arch of datalink_sender is
- signal manData : std_logic_vector (15 downto 0);
- TYPE SenderState IS (packetTrigger, packetStartDelay, readByte, readByteDelay, idle);
- signal sstate : SenderState;
- signal triggerSignal : std_logic;
- signal bitOut : std_logic;
- begin
- triggerTouC <= triggerSignal;
- output <= bitOut;
- process(clk50Mhz, clkShift)
- constant bytePerPacket : integer := 320;
- constant packetDelay : integer := 144;
- constant byteDelay : integer := 70;
- variable byteCount : integer;
- variable delayCount : integer;
- variable bitCount : integer;
- begin
- if(falling_edge(clk50Mhz))then
- CASE sstate IS
- WHEN idle =>
- --count for 1KHz
- if(falling_edge(clkPacket))then
- sstate <= packetTrigger;
- delayCount := 0;
- end if;
- WHEN packetTrigger =>
- byteCount := 0;
- triggerSignal <= '1';
- sstate <= packetStartDelay;
- WHEN packetStartDelay =>
- delayCount := delayCount+1;
- if(delayCount=packetDelay-byteDelay)then
- --put in SOF
- manData <= "0110101010101001";
- elsif(delayCount=packetDelay)then
- triggerSignal <= '0';
- sstate <= readByte;
- end if;
- WHEN readByte =>
- 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));
- delayCount := 0;
- byteCount := byteCount + 1;
- sstate <= readByteDelay;
- WHEN readByteDelay =>
- if(byteCount=bytePerPacket)then
- sstate <= idle;
- else
- delayCount := delayCount+1;
- if(delayCount=packetDelay)then
- sstate <= readByte;
- end if;
- end if;
- END CASE;
- end if;
- end process;
- end arch;
Advertisement
Add Comment
Please, Sign In to add comment