spartan 3e 500k kiti ve adc kodu yardım

Başlatan azizmamur, 01 Kasım 2011, 21:57:45

azizmamur

selam. spartan 3e 500k kiti  için yazdığım kod da bir sorun var. spi iletişimi gerçekleştirmiyor veya frenkans sorunu var sanırım. yardımcı olursanız sevinirim.
[ library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;


entity aziz_adc4 is
Port ( CLK_50MHZ : in STD_LOGIC;
	  	 AD_CONV : out  STD_LOGIC;
       SPI_SCK : out  STD_LOGIC;
		 SPI_MISO : inout  STD_LOGIC;
		 SPI_MOSI : out  STD_LOGIC;
       AMP_CS : out  STD_LOGIC;
		 
       AMP_DOUT : in  STD_LOGIC;
	    AMP_SHDN : out std_logic ;
		 SPI_SS_B: out std_logic;
		 DAC_CS: out std_logic;	
		 SF_CE0: inout std_logic;
		 FPGA_INIT_B: out std_logic;	
	    
		 ADC0_OUT : out  std_logic_vector (13 downto 0):= (others => '0');
		 ADC1_OUT : out  std_logic_vector (13 downto 0):= (others => '0'));
		 
end entity ;


architecture Behavioral of aziz_adc4 is		

 constant gain : std_logic_vector(7 downto 0) := "00010001";		-- kazanç (-1) 
 signal count : integer range 0 to 50000000 := 0;
 signal ADC0, ADC1 : std_logic_vector (13 downto 0):= (others => '0');

begin

SPI_SS_B <= '1';		 
SF_CE0 <='1';			 
FPGA_INIT_B <='1';
DAC_CS <= '1';
--AMP_SHDN <= '0';

process (CLK_50MHZ)

begin

		if CLK_50MHZ' event and CLK_50MHZ = '1' then
			    						
			count  <= count + 1;	
      	
		case count is 			
								
				when 0 =>
						AD_CONV <= '1';
						AMP_CS <= '1' ;
						AMP_SHDN <= '0';
						SPI_SCK <= '0';
						SPI_MISO <= 'Z';
						SPI_MOSI <= 'Z';
						
				when 1 =>
						AD_CONV <= '1';
						AMP_CS <= '1' ;
						AMP_SHDN <= '0';
						SPI_SCK <= '0';
						SPI_MISO <= 'Z';
						SPI_MOSI <= 'Z';
						
				when 2 =>			
						AMP_CS <= '0' ;
						AMP_SHDN <= '1';
						SPI_SCK <= '0';
						
				when 3 =>							--KAZANÇ AYARI 8.3MHZ
						AMP_CS <= '0' ;  
						SPI_SCK <= '0';				
						SPI_MOSI <= gain(7);
				when 4 =>		   
						SPI_SCK <= '1';
						SPI_MOSI <= gain(7);
				when 5 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(7);
				when 6 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(7);
				when 7 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(7);
				when 8 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(6);
				when 9 =>
						SPI_SCK <= '0'; 
						SPI_MOSI <= gain(6);
				when 10 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(6);
				when 11 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(6);
				when 12 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(6);						
				when 13 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(6);
				when 14 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(5);
				when 15 =>
						SPI_SCK <= '0'; 
						SPI_MOSI <= gain(5);
				when 16 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(5);
				when 17 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(5);
				when 18 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(5);	
				when 19 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(5);
				when 20 =>
						SPI_SCK <= '0';	
						SPI_MOSI <= gain(4);
				when 21 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(4);
				when 22 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(4);
				when 23 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(4);
				when 24 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(4);
				when 25 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(4);
				when 26 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(3);
				when 27 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(3);
				when 28 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(3);
				when 29 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(3);
				when 30 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(3);	
				when 31 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(3);
				when 32 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(2);
				when 33 =>
						SPI_SCK <= '0'; 
						SPI_MOSI <= gain(2);
				when 34 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(2);
				when 35 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(2);
				when 36 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(2);
				when 37 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(2);
				when 38 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(1);
				when 39 =>
						SPI_SCK <= '0'; 
						SPI_MOSI <= gain(1);
				when 40 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(1);
				when 41 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(1);
				when 42 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(1);	
				when 43 =>
						SPI_SCK <= '0';
						SPI_MOSI <= gain(1);
				when 44 =>
						SPI_SCK <= '0';	
						SPI_MOSI <= gain(0);
				when 45 =>
						SPI_SCK <= '0'; 
						SPI_MOSI <= gain(0);
				when 46 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(0);
				when 47 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(0);
				when 48 =>
						SPI_SCK <= '1';
						SPI_MOSI <= gain(0);	
				when 49 =>       					
						SPI_SCK <= '0';
						SPI_MOSI <= gain(0);
				
				
				when 50 =>
						AD_CONV <= '1';
						AMP_CS <= '1' ; 
						AMP_SHDN <= '0';
						SPI_SCK <= '0';						
						SPI_MOSI <= 'Z';
						SPI_MISO <='Z';
								

				when 51 =>						-- adc 1.4MHZ
						AMP_CS <= '1' ; 
						AD_CONV <= '1';
						SPI_SCK <= '0';
						SPI_MISO <='Z';
						SPI_MOSI <='Z';
				when 52 =>
						AD_CONV <= '1';
						SPI_SCK <= '0';
						SPI_MISO <='Z';
				when 53 =>
						AD_CONV <= '0';
						SPI_SCK <= '0';
						SPI_MISO <='Z';
				when 54 =>
						SPI_SCK <= '0'; 
						SPI_MISO <='Z';
				
				
				when 55 to 72 =>
						SPI_SCK <= '1';  		--17 adet 1 olacak 1.4MHZ için
						SPI_MISO <='Z';	
									
					 	
				when 73 to 90 =>
						SPI_SCK <= '0'; 		 --17 adet 0 olacak 1.4MHZ için
						SPI_MISO <='Z';						
							
												
				when 91 to 108 =>
						SPI_SCK <= '1';  
						SPI_MISO <='Z';	
				
										
				when 109 to 126 =>
						SPI_SCK <= '0';  
						SPI_MISO <='Z';						
								
															
				when 127 to 144 =>
						SPI_SCK <= '1';
						ADC0(13) <= SPI_MISO;   --CHANEL 0 DATA
											
				
				when 145 to 162 =>
						SPI_SCK <= '0';
						ADC0(13) <= SPI_MISO;
				
				
				when 163 to 180 =>
						SPI_SCK <= '1';
						ADC0(12) <= SPI_MISO;   --CHANEL 0 DATA
				
													
				when 181 to 198 =>
						SPI_SCK <= '0';
						ADC0(12) <= SPI_MISO;
				
										
				when 199 to 216 =>
						SPI_SCK <= '1';
						ADC0(11) <= SPI_MISO;   --CHANEL 0 DATA
							
				
				when 217 to 234 =>
						SPI_SCK <= '0';
						ADC0(11) <= SPI_MISO;
				
								
				when 235 to 252 =>
						SPI_SCK <= '1';
						ADC0(10) <= SPI_MISO;   --CHANEL 0 DATA
									
				
				when 253 to 270 =>
						SPI_SCK <= '0';
						ADC0(10) <= SPI_MISO;
				
									
				when 271 to 288 =>
						SPI_SCK <= '1';
						ADC0(9) <= SPI_MISO;   --CHANEL 0 DATA
				
				
				when 289 to 306 =>
						SPI_SCK <= '0';
						ADC0(9) <= SPI_MISO;
				
				
				when 307 to 324 =>
						SPI_SCK <= '1';
						ADC0(8) <= SPI_MISO;   --CHANEL 0 DATA
				
													
				when 325 to 342 =>
						SPI_SCK <= '0';
						ADC0(8) <= SPI_MISO;
				

				when 343 to 360 =>
						SPI_SCK <= '1';
						ADC0(7) <= SPI_MISO;   --CHANEL 0 DATA
				
								
				when 361 to 378 =>
						SPI_SCK <= '0';
						ADC0(7) <= SPI_MISO;
				
				
				when 379 to 396 =>
						SPI_SCK <= '1';
						ADC0(6) <= SPI_MISO;   --CHANEL 0 DATA
				
													
				when 397 to 414 =>
						SPI_SCK <= '0';
						ADC0(6) <= SPI_MISO;
				
				
				when 415 to 432 =>
						SPI_SCK <= '1';
						ADC0(5) <= SPI_MISO;   --CHANEL 0 DATA
				
														
				when 433 to 450 =>
						SPI_SCK <= '0';
						ADC0(5) <= SPI_MISO;
				
				
				when 451 to 468 =>
						SPI_SCK <= '1';
						ADC0(4) <= SPI_MISO;   --CHANEL 0 DATA
									
				
				when 469 to 486 =>
						SPI_SCK <= '0';
						ADC0(4) <= SPI_MISO;
				

				when 487 to 504 =>
						SPI_SCK <= '1';
						ADC0(3) <= SPI_MISO;   --CHANEL 0 DATA
				
														
				when 505 to 522 =>
						SPI_SCK <= '0';
						ADC0(3) <= SPI_MISO;
				
				
				when 523 to 540 =>
						SPI_SCK <= '1';
						ADC0(2) <= SPI_MISO;   --CHANEL 0 DATA
					
				
				when 541 to 558 =>
						SPI_SCK <= '0';
						ADC0(2) <= SPI_MISO;
				
				
				when 559 to 576 =>
						SPI_SCK <= '1';
						ADC0(1) <= SPI_MISO;   --CHANEL 0 DATA
							
				
				when 577 to 594 =>
						SPI_SCK <= '0';
						ADC0(1) <= SPI_MISO;
				
				
				when 595 to 612 =>
						SPI_SCK <= '1';
						ADC0(0) <= SPI_MISO;   --CHANEL 0 DATA
				
														
				when 613 to 630 =>
						SPI_SCK <= '0';
						ADC0(0) <= SPI_MISO;
				
				
				
				when 631 to 648 =>
						SPI_SCK <= '1';  --17 adet 1 olacak 1.4MHZ İÇİN
						SPI_MISO <='Z';	
				
						
				when 649 to 666 =>
						SPI_SCK <= '0';  --17 adet 0 olacak 1.4MHZ İÇİN
						SPI_MISO <='Z';						
				
								
				when 667 to 684 =>
						SPI_SCK <= '1';  
						SPI_MISO <='Z';	
				
						
				when 685 to 702 =>
						SPI_SCK <= '0';  
						SPI_MISO <='Z';						
				
				

				
				when 703 to 720 =>
						SPI_SCK <= '1';
						ADC1(13) <= SPI_MISO;   --CHANEL 1 DATA
							
				
				when 721 to 738 =>
						SPI_SCK <= '0';
						ADC1(13) <= SPI_MISO;
				
				
				when 739 to 756 =>
						SPI_SCK <= '1';
						ADC1(12) <= SPI_MISO;   --CHANEL 1 DATA
				
				
										
				when 757 to 774 =>
						SPI_SCK <= '0';
						ADC1(12) <= SPI_MISO;
				
														
				when 775 to 792 =>
						SPI_SCK <= '1';
						ADC1(11) <= SPI_MISO;   --CHANEL 1 DATA
				
													
				when 793 to 810 =>
						SPI_SCK <= '0';
						ADC1(11) <= SPI_MISO;
				
				
				when 811 to 828 =>
						SPI_SCK <= '1';
						ADC1(10) <= SPI_MISO;   --CHANEL 1 DATA
									
				
				when 829 to 846 =>
						SPI_SCK <= '0';
						ADC1(10) <= SPI_MISO;
								
						
				when 847 to 864 =>
						SPI_SCK <= '1';
						ADC1(9) <= SPI_MISO;   --CHANEL 1 DATA
				
										
				
				when 865 to 882 =>
						SPI_SCK <= '0';
						ADC1(9) <= SPI_MISO;
				

				when 883 to 900 =>
						SPI_SCK <= '1';
						ADC1(8) <= SPI_MISO;   --CHANEL 1 DATA
				
														
				when 901 to 918 =>
						SPI_SCK <= '0';
						ADC1(8) <= SPI_MISO;
				
				
				when 919 to 936 =>
						SPI_SCK <= '1';
						ADC1(7) <= SPI_MISO;   --CHANEL 1 DATA
				
														
				when 937 to 954 =>
						SPI_SCK <= '0';
						ADC1(7) <= SPI_MISO;
				
				
				when 955 to 972 =>
						SPI_SCK <= '1';
						ADC1(6) <= SPI_MISO;   --CHANEL 1 DATA
				
														
				when 973 to 990 =>
						SPI_SCK <= '0';
						ADC1(6) <= SPI_MISO;
				
				
				when 991 to 1008 =>
						SPI_SCK <= '1';
						ADC1(5) <= SPI_MISO;   --CHANEL 1 DATA
				
										
				when 1009 to 1026 =>
						SPI_SCK <= '0';
						ADC1(5) <= SPI_MISO;
				
				
				when 1027 to 1044 =>
						SPI_SCK <= '1';
						ADC1(4) <= SPI_MISO;   --CHANEL 1 DATA
				
														
				when 1045 to 1062 =>
						SPI_SCK <= '0';
						ADC1(4) <= SPI_MISO;
				
				
				when 1063 to 1080 =>
						SPI_SCK <= '1';
						ADC1(3) <= SPI_MISO;   --CHANEL 1 DATA
										
				
				when 1081 to 1098 =>
						SPI_SCK <= '0';
						ADC1(3) <= SPI_MISO;
				
				
				when 1099 to 1116 =>
						SPI_SCK <= '1';
						ADC1(2) <= SPI_MISO;   --CHANEL 1 DATA
				
														
				when 1117 to 1134 =>
						SPI_SCK <= '0';
						ADC1(2) <= SPI_MISO;
				
				
				when 1135 to 1152 =>
						SPI_SCK <= '1';
						ADC1(1) <= SPI_MISO;   --CHANEL 1 DATA
									
				
				when 1153 to 1170 =>
						SPI_SCK <= '0';
						ADC1(1) <= SPI_MISO;
				
				

				when 1171 to 1188 =>
						SPI_SCK <= '1';
						ADC1(0) <= SPI_MISO;   --CHANEL 1 DATA
				
				
				when 1189 to 1206 =>
						SPI_SCK <= '0';
						ADC1(0) <= SPI_MISO;
				

				when 1207 to 1224 =>
						SPI_SCK <= '1';  
						SPI_MISO <='Z';	
				
						
				when 1225 to 1242 =>
						SPI_SCK <= '0';  
						SPI_MISO <='Z';						

				
				when 1243 to 1260 =>
						SPI_SCK <= '1';  
						SPI_MISO <='Z';	
				
				
											
				when 1261 to 1278 =>
						SPI_SCK <= '0';  
						SPI_MISO <='Z';						
				
				
				when 1279 to 49999999 =>     --1sn de bir ölçüm alsın
						AD_CONV <= '1';  
						SPI_SCK <= '0';
						SPI_MOSI <='Z';
						AMP_CS <= '1' ;
						AMP_SHDN <= '0';
						SPI_MISO <='Z';
				

ADC0_OUT <= ADC0;
ADC1_OUT <= ADC1;
				when others   =>					  	
						AD_CONV <= '1';  
						SPI_SCK <= '0';
						SPI_MOSI <='Z';
						AMP_CS <= '1' ;
						AMP_SHDN <= '0';
						SPI_MISO <='Z';
						count <= 0;
						

			end case;

    end if;	
	 
end process;




end Behavioral; ]