AMBPEX5_v20_SX50T_CORE
|
00001 --------------------------------------------------------------------------------------------------- 00002 -- 00003 -- Title : cl_test0_v4 00004 -- Author : Dmitry Smekhov 00005 -- Company : Instrumental Systems 00006 -- E-mail : dsmv@insys.ru 00007 -- 00008 -- Version : 1.1 00009 -- 00010 --------------------------------------------------------------------------------------------------- 00011 -- 00012 -- Description : Модуль начального тестирования. 00013 -- Модификация 4 - шина данных 64 разряда, шина адреса 7 разрядов 00014 -- Есть отдельный сброс тестового регистра 00015 -- 00016 --------------------------------------------------------------------------------------------------- 00017 -- 00018 -- Version 1.1 10.06.2010 00019 -- Добавлен режим формирования псевдослучайной последовательности 00020 -- 00021 --------------------------------------------------------------------------------------------------- 00022 00023 library ieee; 00024 use ieee.std_logic_1164.all; 00025 00026 package cl_test0_v4_pkg is 00027 00028 component cl_test0_v4 is 00029 port( 00030 reset : in std_logic; -- 0 - общий сброс, переход в режим по test_mode_init 00031 reset_reg : in std_logic; -- 0 - сброс сдвигового регистра 00032 clk : in std_logic; -- Тактовая частота 00033 reg_test_mode : in std_logic:='0'; -- 1 - формирование псевдослучайной последовательности 00034 00035 adr_in : in std_logic_vector( 6 downto 0 ); -- шина адреса 00036 data_in : in std_logic_vector( 63 downto 0 ); -- шина данных, вход 00037 data_en : in std_logic; -- 1 - запись в регистр 00038 data_cs : in std_logic; -- 0 - чтение 00039 00040 data_out : out std_logic_vector( 63 downto 0 ); -- шина данных, выход 00041 test_mode_init : in std_logic; -- начальное состояние 00042 test_mode : out std_logic -- 1 - тестовый режим 00043 ); 00044 00045 end component; 00046 00047 end package; 00048 00049 00050 library ieee; 00051 use ieee.std_logic_1164.all; 00052 00053 entity cl_test0_v4 is 00054 port( 00055 reset : in std_logic; -- 0 - общий сброс, переход в режим по test_mode_init 00056 reset_reg : in std_logic; -- 0 - сброс сдвигового регистра 00057 clk : in std_logic; -- Тактовая частота 00058 reg_test_mode : in std_logic:='0'; -- 1 - формирование псевдослучайной последовательности 00059 00060 adr_in : in std_logic_vector( 6 downto 0 ); -- шина адреса 00061 data_in : in std_logic_vector( 63 downto 0 ); -- шина данных, вход 00062 data_en : in std_logic; -- 1 - запись в регистр 00063 data_cs : in std_logic; -- 0 - чтение 00064 00065 data_out : out std_logic_vector( 63 downto 0 ); -- шина данных, выход 00066 test_mode_init : in std_logic; -- начальное состояние 00067 test_mode : out std_logic -- 1 - тестовый режим 00068 ); 00069 00070 end cl_test0_v4; 00071 00072 00073 architecture cl_test0_v4 of cl_test0_v4 is 00074 00075 signal reg: std_logic_vector( 63 downto 0 ); 00076 00077 signal reg_en2, reg_sen: std_logic; 00078 signal tmode, tmode1: std_logic; -- 1 - режим тестирования 00079 signal reg_clr: std_logic; -- 1 - сброс регистра 00080 00081 begin 00082 00083 00084 00085 00086 00087 00088 pr_tmode: process( reset, clk ) begin 00089 if( reset='0' ) then 00090 tmode<=test_mode_init; 00091 elsif( rising_edge( clk ) ) then 00092 if( tmode='1' ) then 00093 if( data_en='1' ) then 00094 tmode <= not data_in(0); 00095 end if; 00096 else 00097 if( data_en='1' ) then 00098 tmode<= data_in(1); 00099 end if; 00100 end if; 00101 end if; 00102 end process; 00103 00104 00105 test_mode<=tmode; 00106 00107 pr_reg: process( reset, reset_reg, tmode, clk ) begin 00108 if( reset='0' or reset_reg='0' or reg_clr='1' ) then 00109 reg<=( 1=>reg_test_mode, others=>'0' ); 00110 elsif( rising_edge( clk ) ) then 00111 if( data_en='1' ) then 00112 reg( 6 downto 0 )<=adr_in( 6 downto 0 ) after 1 ns; 00113 reg( 63 downto 7 )<=data_in( 63 downto 7 ) after 1 ns; 00114 elsif( reg_sen='1' ) then 00115 for i in 63 downto 1 loop 00116 reg( i )<=reg(i-1); 00117 end loop; 00118 if( reg_test_mode='0' ) then 00119 reg( 0 )<= not reg( 63 ) after 1 ns; 00120 else 00121 reg(0) <= reg(63) xor reg(62) xor reg(60) xor reg(59) after 1 ns; 00122 end if; 00123 end if; 00124 end if; 00125 end process; 00126 00127 reg_sen<=data_cs; 00128 00129 pr_tmode1: process( clk ) begin 00130 if( rising_edge( clk ) ) then 00131 tmode1<=tmode; 00132 end if; 00133 end process; 00134 00135 reg_clr<=tmode xor tmode1; 00136 00137 00138 data_out<=reg; 00139 00140 00141 00142 end cl_test0_v4;