switch_to_led7.vhd
上传用户:hbxtsdjs
上传日期:2022-07-03
资源大小:753k
文件大小:5k
源码类别:

汇编语言

开发平台:

Windows_Unix

  1. ----------------------------------------------------------------------------------
  2. -- Company: 
  3. -- Engineer: 
  4. -- 
  5. -- Create Date:    20:28:08 05/05/2010 
  6. -- Design Name: 
  7. -- Module Name:    switch_to_led7 - 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. use IEEE.STD_LOGIC_ARITH.ALL;
  23. use IEEE.STD_LOGIC_UNSIGNED.ALL;
  24. ---- Uncomment the following library declaration if instantiating
  25. ---- any Xilinx primitives in this code.
  26. --library UNISIM;
  27. --use UNISIM.VComponents.all;
  28. entity switch_to_led7 is
  29.     Port ( clk_in : in  STD_LOGIC;
  30.            switch_in : in  STD_LOGIC_VECTOR (7 downto 0);
  31.            led7 : out  STD_LOGIC_VECTOR (7 downto 0);
  32.            sel : out  STD_LOGIC_VECTOR (3 downto 0));
  33. end switch_to_led7;
  34. architecture Behavioral of switch_to_led7 is
  35. COMPONENT switch
  36. PORT(
  37. sw_in : IN std_logic_vector(7 downto 0);          
  38. sw_out : OUT std_logic_vector(7 downto 0)
  39. );
  40. END COMPONENT;
  41. COMPONENT kcpsm3
  42. PORT(
  43. instruction : IN std_logic_vector(17 downto 0);
  44. in_port : IN std_logic_vector(7 downto 0);
  45. interrupt : IN std_logic;
  46. reset : IN std_logic;
  47. clk : IN std_logic;          
  48. address : OUT std_logic_vector(9 downto 0);
  49. port_id : OUT std_logic_vector(7 downto 0);
  50. write_strobe : OUT std_logic;
  51. out_port : OUT std_logic_vector(7 downto 0);
  52. read_strobe : OUT std_logic;
  53. interrupt_ack : OUT std_logic
  54. );
  55. END COMPONENT;
  56. COMPONENT divid_200
  57. PORT(
  58. clk : IN std_logic;          
  59. clk_200Hz : OUT std_logic
  60. );
  61. END COMPONENT;
  62. COMPONENT Latch
  63. PORT(
  64. data_in : IN std_logic_vector(7 downto 0);
  65. cs : IN std_logic;
  66. clk : IN std_logic;          
  67. data_out : OUT std_logic_vector(7 downto 0)
  68. );
  69. END COMPONENT;
  70. COMPONENT LED_7scan
  71. PORT(
  72. i_led0 : IN std_logic_vector(7 downto 0);
  73. i_led1 : IN std_logic_vector(7 downto 0);
  74. i_led2 : IN std_logic_vector(7 downto 0);
  75. i_led3 : IN std_logic_vector(7 downto 0);
  76. clk : IN std_logic;          
  77. ledout : OUT std_logic_vector(7 downto 0);
  78. sel : OUT std_logic_vector(3 downto 0)
  79. );
  80. END COMPONENT;
  81. COMPONENT sw_led
  82. PORT(
  83. address : IN std_logic_vector(9 downto 0);
  84. clk : IN std_logic;          
  85. instruction : OUT std_logic_vector(17 downto 0)
  86. );
  87. END COMPONENT;
  88. signal address : std_logic_vector(9 downto 0);
  89. signal instruction : std_logic_vector(17 downto 0);
  90. signal clk : std_logic;
  91. signal port_id : std_logic_vector(7 downto 0);
  92. signal out_port : std_logic_vector(7 downto 0);
  93. signal write_strobe : std_logic;
  94. signal clk_200 : std_logic;
  95. signal sw_out : std_logic_vector(7 downto 0);
  96. signal led0 : std_logic_vector(7 downto 0);
  97. signal led1 : std_logic_vector(7 downto 0);
  98. signal led2 : std_logic_vector(7 downto 0);
  99. signal led3 : std_logic_vector(7 downto 0);
  100. signal cs0 : std_logic;
  101. signal cs1 : std_logic;
  102. signal cs2 : std_logic;
  103. signal cs3 : std_logic;
  104. signal in_port : std_logic_vector(7 downto 0);
  105. begin
  106. s1 : process(port_id)
  107.  begin
  108.  if port_id= "00000000"  then  
  109.      in_port <= sw_out;
  110.  else in_port <="00000000";
  111.  end if;
  112.  
  113.     if port_id= "00000001" then
  114.          cs0 <= '1';
  115.  else cs0 <= '0';
  116.  end if;
  117.  
  118.     if port_id= "00000010"  then
  119.        cs1 <= '1';
  120.  else cs1 <= '0';
  121.  end if;
  122.  
  123.     if port_id= "00000011" then
  124.        cs2 <= '1';
  125.  else cs2 <= '0';
  126.  end if;
  127.  
  128.     if port_id= "00000100"  then
  129.      cs3 <= '1';
  130.  else cs3 <= '0';
  131.  end if;
  132.  
  133.  end process;
  134.  
  135. Inst_sw_led: sw_led PORT MAP(
  136. address => address,
  137. instruction => instruction,
  138. clk => clk_in 
  139. );
  140. Inst_Latch0: Latch PORT MAP(
  141. data_in => out_port,
  142. data_out => led0,
  143. cs => cs0,
  144. clk => write_strobe
  145. );
  146. Inst_Latch1: Latch PORT MAP(
  147. data_in => out_port,
  148. data_out => led1,
  149. cs => cs1,
  150. clk => write_strobe
  151. );
  152. Inst_Latch2: Latch PORT MAP(
  153. data_in => out_port,
  154. data_out => led2,
  155. cs => cs2,
  156. clk => write_strobe
  157. );
  158. Inst_Latch3: Latch PORT MAP(
  159. data_in => out_port,
  160. data_out => led3,
  161. cs => cs3,
  162. clk => write_strobe
  163. );
  164. Inst_kcpsm3: kcpsm3 PORT MAP(
  165. address => address,
  166. instruction => instruction,
  167. port_id => port_id,
  168. write_strobe => write_strobe,
  169. out_port => out_port,
  170. read_strobe => open,
  171. in_port => in_port,
  172. interrupt => '0',
  173. interrupt_ack => open,
  174. reset => '0',
  175. clk => clk_in
  176. );
  177. Inst_divid_200: divid_200 PORT MAP(
  178. clk => clk_in,
  179. clk_200Hz =>clk_200 
  180. );
  181. Inst_LED_7scan: LED_7scan PORT MAP(
  182. i_led0 => led0,
  183. i_led1 => led1,
  184. i_led2 => led2,
  185. i_led3 => led3,
  186. clk => clk_200,
  187. ledout => led7,
  188. sel => sel
  189. );
  190. Inst_switch: switch PORT MAP(
  191. sw_in => switch_in,
  192. sw_out => sw_out
  193. );
  194. end Behavioral;