Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. ----------------------------------------------------------------------------------
  2. -- Company:
  3. -- Engineer:
  4. --
  5. -- Create Date: 15:32:02 11/10/2010
  6. -- Design Name:
  7. -- Module Name: new_mod - Behavioral
  8. -- Project Name:
  9. -- Target Devices:
  10. -- Tool versions:
  11. -- Description:
  12. --
  13. -- Dependencies:
  14. --
  15. -- Revision:
  16. -- Revision 0.01 - File Created
  17. -- Additional Comments:
  18. --
  19. ----------------------------------------------------------------------------------
  20. library IEEE;
  21. use IEEE.STD_LOGIC_1164.ALL;
  22.  
  23. entity new_mod is
  24. Port ( DI : in STD_LOGIC_VECTOR (7 downto 0);
  25. DO : out STD_LOGIC_VECTOR (7 downto 0);
  26. DIRdy : in STD_LOGIC;
  27. Reset : in STD_LOGIC;
  28. Clk : in STD_LOGIC;
  29. TxBusy : in STD_LOGIC;
  30. DORdy : out STD_LOGIC;
  31. Busy : out STD_LOGIC);
  32. end new_mod;
  33.  
  34. architecture RTL of new_mod is
  35.  
  36. type state_type is (sReset, sReady, sWaitH, sSendH, sWaitL, sSendL);
  37.  
  38. signal State, NextState: state_type;
  39. signal regDI: STD_LOGIC_VECTOR (7 downto 0);
  40. signal HalfByte : STD_LOGIC_VECTOR (3 downto 0);
  41.  
  42.  
  43. begin
  44.  
  45. regDI <= DI when rising_edge( Clk ) and State = sReady ;
  46. HalfByte <= regDI( 7 downto 4 ) when State = sSendH or State = sWaitL
  47. else regDI( 3 downto 0 );
  48.  
  49. process ( Clk, Reset )
  50. begin
  51. if Reset = '1' then
  52. State <= sReset;
  53. elsif rising_edge( Clk ) then
  54. State <= NextState;
  55. end if;
  56. end process;
  57.  
  58.  
  59. process (State, DIRdy, TxBusy)
  60. begin
  61. NextState <= State;
  62. case State is
  63. when sReset =>
  64. NextState <=sReady;
  65.  
  66. when sReady =>
  67. if DIRdy = '1' then
  68. NextState <= sWaitH;
  69. end if;
  70.  
  71. when sWaitH =>
  72. if TxBusy = '0' then
  73. NextState <= sSendH;
  74. end if;
  75.  
  76. when sSendH =>
  77. NextState <= sWaitL;
  78.  
  79. when sWaitL =>
  80. if TxBusy = '0' then
  81. NextState <= sSendL;
  82. end if;
  83.  
  84. when sSendL =>
  85. NextState <= sReady;
  86.  
  87. end case;
  88. end process;
  89.  
  90. with HalfByte select
  91. DO <= X"30" when "0000",
  92. X"31" when "0001",
  93. X"32" when "0010",
  94. X"33" when "0011",
  95. X"34" when "0100",
  96. X"35" when "0101",
  97. X"36" when "0110",
  98. X"37" when "0111",
  99. X"38" when "1000",
  100. X"39" when "1001",
  101. X"41" when "1010",
  102. X"42" when "1011",
  103. X"43" when "1100",
  104. X"44" when "1101",
  105. X"45" when "1110",
  106. X"46" when others;
  107.  
  108. DORdy <= '1' when State = sSendH or State = sSendL
  109. else '0';
  110.  
  111. Busy <= '1' when State /= sReady
  112. else '0';
  113.  
  114.  
  115. end RTL;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement