Spartan 3E Fpga ile Com Port uygulaması

Başlatan turkplc, 13 Kasım 2009, 11:40:24

turkplc

Seri Porttan gelen verileri Ledlerde gösteren uygulama

-- Spartan 3E XC3S500E
-- RS 232 COM 9600 BAUD  
-- www.cemalettinalbayrak.com
-- turkplc@qmail.com

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity b is
    Port ( LED : out  STD_LOGIC_vector(7 downto 0) ;
			Rx : in  STD_LOGIC;
			 clk : in  STD_LOGIC);

end b;

architecture Behavioral of b is
	Signal DATA : STD_LOGIC_VECTOR (7 downto 0);
	Signal StartTimer:STD_LOGIC:='0';
begin
	process (clk)
	variable say1:integer range 0 to 50;
	variable say2:integer range 0 to 104;
	variable say3:integer range 0 to 7;
	
	begin
	if (clk'EVENT and clk='1') then
	say1:=say1+1;
		if (say1>49) then	--1 MHZ
		say1:=0;
		say2:=say2+1;
			if (say2>103) then	--9600 bps
			say2:=0;
			if (Rx='0') then StartTimer<='1';end if;
			if (StartTimer='1') then
			Data(say3)<=Rx;
				if (say3=7) then
				StartTimer<='0';
				say3:=0;
				Led<=Data;
				else
				say3:=say3+1;
				end if;
			end if;
			end if;
		end if;
	end if;
	end process;
end Behavioral;

-- UCF FILE
NET "LED<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<5>" LOC = "D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<2>" LOC = "E11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "clk" LOC = "C9" | IOSTANDARD = LVCMOS33 ;
NET "clk"  period = 20 ns high 50 %;

NET "RX" LOC = "R7" | IOSTANDARD = LVTTL ;
#NET "TX" LOC = "M14" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = SLOW ;

turkplc

Bu program seri porttan aldığı dataları geri göndermektedir. aynı zamanda ledlerde binary olarak gelen veriyi göstermektedir.

-- Spartan 3E XC3S500E
-- RS 232 COM 9600 BAUD Echo program
-- www.cemalettinalbayrak.com
-- turkplc@qmail.com

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity b is
    Port ( LED : out  STD_LOGIC_vector(7 downto 0) ;
			Rx : in  STD_LOGIC;
			Tx : out  STD_LOGIC;
			 clk : in  STD_LOGIC);

end b;

architecture Behavioral of b is
	Signal DATA : STD_LOGIC_VECTOR (7 downto 0);
	Signal SENDDATA : STD_LOGIC_VECTOR (7 downto 0);
	Signal SendEnable:STD_LOGIC:='0';
	Signal StartTimer:STD_LOGIC:='0';
begin
	process (clk)
	variable say1:integer range 0 to 50;
	variable say2:integer range 0 to 104;
	variable say3:integer range 0 to 7;
	variable say4:integer range 0 to 20;
	
	begin
	if (clk'EVENT and clk='1') then
	say1:=say1+1;
		if (say1>49) then	--1 MHZ
		say1:=0;
		say2:=say2+1;
			if (say2>103) then	--9600 bps
			say2:=0;
				if (SendEnable='1') then --Gönderme
					case say4 is
					when 0=>Tx<='0';--Start Bit
					when 1 to 8 => Tx<=SENDDATA(say4-1);
					when 9=>Tx<='1';--Stop Bit
					when others=>SendEnable<='0';
					end case;
					say4:=say4+1;
				else
				say4:=0;
				end if;
				
				if (Rx='0') then StartTimer<='1';end if;
				if (StartTimer='1') then	'Alma
				Data(say3)<=Rx;
					if (say3=7) then
					StartTimer<='0';
					say3:=0;
					Led<=Data;
					SENDDATA<=Data;
					SendEnable<='1';
					else
					say3:=say3+1;
					end if;
				end if;
			end if;
		end if;
	end if;
	end process;
end Behavioral;



-- UCF FILE
NET "LED<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<5>" LOC = "D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<2>" LOC = "E11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "clk" LOC = "C9" | IOSTANDARD = LVCMOS33 ;
NET "clk"  period = 20 ns high 50 %;

NET "RX" LOC = "R7" | IOSTANDARD = LVTTL ;
NET "TX" LOC = "M14" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = SLOW ;

turkplc

Aşağıdaki VHDL kodları com porttan gelen karakterleri LCD ekranda göstermektedir.

-- Spartan 3E XC3S500E
-- RS232 9600 BAUD Echo program ve LCD 
-- www.cemalettinalbayrak.com
-- turkplc@qmail.com

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity b is
    Port ( LED : out  STD_LOGIC_vector(7 downto 0) ;
			Rx : in  STD_LOGIC;
			Tx : out  STD_LOGIC;
			clk : in  STD_LOGIC;
			DB : out  STD_LOGIC_VECTOR (7 downto 4); 
			LCD_E :out STD_LOGIC;
			LCD_RS :out STD_LOGIC;
			LCD_RW :out STD_LOGIC);

end b;

architecture Behavioral of b is
	Signal DATA : STD_LOGIC_VECTOR (7 downto 0);
	Signal DATARX : STD_LOGIC_VECTOR (7 downto 0);
	Signal SENDDATA : STD_LOGIC_VECTOR (7 downto 0);
	Signal SendEnable:STD_LOGIC:='0';
	Signal StartTimer:STD_LOGIC:='0';
	Signal StopTimer:std_logic:='0';
begin
	process (clk)
	variable say1:integer range 0 to 50;
	variable say2:integer range 0 to 104;
	variable say3:integer range 0 to 7;
	variable say4:integer range 0 to 20;
	
	begin
	if (clk'EVENT and clk='1') then
	say1:=say1+1;
		if (say1>49) then	--1 MHZ
		say1:=0;
		say2:=say2+1;
			if (say2>103) then	--9600 bps
			say2:=0;
				if (SendEnable='1') then --Gönderme
					case say4 is
					when 0=>Tx<='0';--Start Bit
					when 1 to 8 => Tx<=SENDDATA(say4-1);
					when 9=>Tx<='1';--Stop Bit
					when others=>SendEnable<='0';
					end case;
					say4:=say4+1;
				else
				say4:=0;
				end if;
				
				if (Rx='0') then StartTimer<='1';end if;
				if (StartTimer='1') then	--Alma
				DataRX(say3)<=Rx;
					if (say3=7) then
					StartTimer<='0';
					say3:=0;
					Led<=DataRX;
					SENDDATA<=DataRX;
					SendEnable<='1';
					--LCDEnable<='1';
					else
					say3:=say3+1;
					end if;
				end if;
			end if;
		end if;
	end if;
	end process;
	
	process (clk)
	variable say1:integer range 0 to 50000;
	variable say2:integer range 0 to 500;
	begin
	if (clk'EVENT and clk='1') then
	say1:=say1+1;
		if (say1>49999) then	--1 KHZ
		say1:=0;
		if (sendEnable='1') then 
		StopTimer<='0';
		say2:=300;
		end if;
		if (StopTimer='0') then say2:=say2+1;end if;
			case say2 is
			when 90=>
				LCD_RW<='0';
				LCD_RS<='0'; --CMD
				DB<="0011";
			when 99=>LCD_E<='1';
			when 100=>LCD_E<='0';
			when 115=>LCD_E<='1';
			when 116=>LCD_E<='0';
			when 121=>LCD_E<='1';
			when 122=>LCD_E<='0';
			when 127=>DB<="0010";
			when 128=>LCD_E<='1';
			when 129=>LCD_E<='0';

			
			when 149=>DATA<=X"28";
			when 150=>DB<=DATA(7 downto 4);
			when 151=>LCD_E<='1';			
			when 152=>LCD_E<='0';
			when 153=>DB<=DATA(3 downto 0);
			when 154=>LCD_E<='1';
			when 155=>LCD_E<='0';			
			DATA<=X"08";

			when 156=>DB<=DATA(7 downto 4);
			when 157=>LCD_E<='1';			
			when 158=>LCD_E<='0';
			when 159=>DB<=DATA(3 downto 0);
			when 160=>LCD_E<='1';
			when 161=>LCD_E<='0';				
				DATA<=X"01"; 
			when 162=>
				DB<=DATA(7 downto 4);
			when 163=>LCD_E<='1';			
			when 164=>LCD_E<='0';
			when 165=>DB<=DATA(3 downto 0);
			when 166=>LCD_E<='1';
			when 167=>LCD_E<='0';	
				DATA<=X"06";
			when 168=>
				DB<=DATA(7 downto 4);
			when 169=>LCD_E<='1';			
			when 170=>LCD_E<='0';
			when 171=>DB<=DATA(3 downto 0);
			when 172=>LCD_E<='1';
			when 173=>LCD_E<='0';
				DATA<=X"0C";
			when 174=>
				DB<=DATA(7 downto 4);
			when 175=>LCD_E<='1';			
			when 176=>LCD_E<='0';
			when 177=>DB<=DATA(3 downto 0);
			when 178=>LCD_E<='1';
			when 179=>LCD_E<='0';			
			when 180=>LCD_RS<='1'; --Chr

			when 250=>StopTimer<='1';

			when 301=>DATA<=DataRx;		--Com porttan gelen veriyi LCD 1. satıra yaz
			when 302=>DB<=DATA(7 downto 4);
			when 303=>LCD_E<='1';			
			when 304=>LCD_E<='0';
			when 305=>DB<=DATA(3 downto 0);
			when 306=>LCD_E<='1';
			when 307=>LCD_E<='0';	
			when 308=>StopTimer<='1';

			when others=>
			end case;
		
		end if;
	end if;
	end process;
	
end Behavioral;

-- UCF File
NET "LED<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<5>" LOC = "D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<2>" LOC = "E11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "clk" LOC = "C9" | IOSTANDARD = LVCMOS33 ;
NET "clk"  period = 20 ns high 50 %;

NET "RX" LOC = "R7" | IOSTANDARD = LVTTL ;
NET "TX" LOC = "M14" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = SLOW ;

NET "LCD_E" LOC = "M18" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
NET "LCD_RS" LOC = "L18" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
NET "LCD_RW" LOC = "L17" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
NET "DB<4>" LOC = "R15" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
NET "DB<5>" LOC = "R16" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
NET "DB<6>" LOC = "P17" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;
NET "DB<7>" LOC = "M15" | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ;

turkplc

Aşağıdaki vhdl dilindeki kodlar FPGA'e bağlı olan PS2 Klavyeden basılan tuşları seri porttan göndermektedir.

-- Spartan 3E XC3S500E
-- From PS2 Keyboard to Uart
-- www.cemalettinalbayrak.com
-- turkplc@qmail.com
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity keyboard is
  Port ( LED : out  STD_LOGIC_VECTOR (7 downto 0);
			PS2_CLK : in  STD_LOGIC;
         PS2_DATA : in  STD_LOGIC;
			clk : in  STD_LOGIC;
			Rx : in  STD_LOGIC;
			Tx : out  STD_LOGIC);
end keyboard;

architecture arc_ps2 of keyboard is
	signal DataPS2: STD_LOGIC_VECTOR (10 downto 0);
	signal KeyData: STD_LOGIC_VECTOR (7 downto 0);
	signal KeyAscii: STD_LOGIC_VECTOR (7 downto 0);
	signal KeyAsciiSave: STD_LOGIC_VECTOR (7 downto 0);
	signal KeyUp: STD_LOGIC;
	signal index:integer range 0 to 10:=0;
	
	Signal DATA : STD_LOGIC_VECTOR (7 downto 0);
	Signal DATARX : STD_LOGIC_VECTOR (7 downto 0);
	Signal SENDDATA : STD_LOGIC_VECTOR (7 downto 0);
	Signal SendEnable:STD_LOGIC:='0';
	Signal StartTimer:STD_LOGIC:='0';
	--Signal StopTimer:std_logic:='0';
begin
	process (PS2_CLK)
	begin
		if (PS2_CLK'EVENT and PS2_CLK='0') then
					DataPS2(index)<=PS2_DATA;
					if index=10 then
					index<=0;
					KeyData<=DataPS2(8 downto 1);
					Case DataPS2(8 downto 1) is
					when "00011100"=>KeyAscii<=x"61";  -- A
					when "00110010"=>KeyAscii<=x"62";  -- B
					when "00100001"=>KeyAscii<=x"63";  -- C
					when "00100011"=>KeyAscii<=x"64";  -- D
					when "00100100"=>KeyAscii<=x"65";  -- E
					when "00101011"=>KeyAscii<=x"66";  -- F
					when "00110100"=>KeyAscii<=x"67";  -- G
					when "00110011"=>KeyAscii<=x"68";  -- H
					when "01000011"=>KeyAscii<=x"69";  -- I
					when "00111011"=>KeyAscii<=x"6A";  -- J
					when "01000010"=>KeyAscii<=x"6B";  -- K
					when "01001011"=>KeyAscii<=x"6C";  -- L
					when "00111010"=>KeyAscii<=x"6D";  -- M
					when "00110001"=>KeyAscii<=x"6E";  -- N
					when "01000100"=>KeyAscii<=x"6F";  -- O
					when "01001101"=>KeyAscii<=x"70";  -- P
					when "00010101"=>KeyAscii<=x"71";  -- Q
					when "00101101"=>KeyAscii<=x"72";  -- R
					when "00011011"=>KeyAscii<=x"73";  -- S
					when "00101100"=>KeyAscii<=x"74";  -- T
					when "00111100"=>KeyAscii<=x"75";  -- U
					when "00101010"=>KeyAscii<=x"76";  -- V
					when "00011101"=>KeyAscii<=x"77";  -- W
					when "00100010"=>KeyAscii<=x"78";  -- X
					when "00110101"=>KeyAscii<=x"79";  -- Y
					when "00011010"=>KeyAscii<=x"7A";  -- Z
					
					when "01000101"=>KeyAscii<=x"30";  -- 0
					when "00010110"=>KeyAscii<=x"31";  -- 1
					when "00011110"=>KeyAscii<=x"32";  -- 2
					when "00100110"=>KeyAscii<=x"33";  -- 3
					when "00100101"=>KeyAscii<=x"34";  -- 4
					when "00101110"=>KeyAscii<=x"35";  -- 5
					when "00110110"=>KeyAscii<=x"36";  -- 6
					when "00111101"=>KeyAscii<=x"37";  -- 7
					when "00111110"=>KeyAscii<=x"38";  -- 8
					when "01000110"=>KeyAscii<=x"39";  -- 9

					when "00001110"=>KeyAscii<=x"60";  -- `
					when "01001110"=>KeyAscii<=x"2D";  -- -
					when "01010101"=>KeyAscii<=x"3D";  -- =
					when "01010100"=>KeyAscii<=x"5B";  -- [
					when "01011011"=>KeyAscii<=x"5D";  -- ]
					when "01011101"=>KeyAscii<=x"5C";  -- 
					when "01001100"=>KeyAscii<=x"3B";  -- ;
					when "01010010"=>KeyAscii<=x"27";  -- '
					when "01000001"=>KeyAscii<=x"2C";  -- ,
					when "01001001"=>KeyAscii<=x"2E";  -- .
					when "01001010"=>KeyAscii<=x"2F";  -- /
			
					when "00101001"=>KeyAscii<=x"20";  -- (space)
					when "01011010"=>KeyAscii<=x"0D";  -- (enter, cr)
					when "01100110"=>KeyAscii<=x"08";  -- (backspace)
					
					when X"F0"=>KeyAscii<=x"00";  -- (KeyUp)
					When others=>KeyAscii<=DataPS2(8 downto 1);
					END CASE;
						
					else
						if Data(0)='0' then --Start Bit Gelmişse Say
						index<=index+1;
						else
						index<=0;
						end if;
					end if;
		end if;		
	end process;
	
	process (clk)
	variable say1:integer range 0 to 50;
	variable say2:integer range 0 to 104;
	variable say3:integer range 0 to 7;
	variable say4:integer range 0 to 20;
	
	begin
	if (clk'EVENT and clk='1') then
				if (KeyAscii/=KeyAsciiSave) then	--Klavyeden basılan tuşta değişiklik olursa seri porttan gönder
				KeyAsciiSave<=KeyAscii;
					if (KeyAscii/=X"00") then
						SENDDATA<=KeyAscii;
						SendEnable<='1';
					end if;
				end if;
	say1:=say1+1;
		if (say1>49) then	--1 MHZ
		say1:=0;
		say2:=say2+1;
			if (say2>103) then	--9600 bps
			say2:=0;

				
				if (SendEnable='1') then --Gönderme
					case say4 is
					when 0=>Tx<='0';--Start Bit
					when 1 to 8 => Tx<=SENDDATA(say4-1);
					when 9=>Tx<='1';--Stop Bit
					when others=>SendEnable<='0';
					end case;
					say4:=say4+1;
				else
				say4:=0;
				end if;
				
				if (Rx='0') then StartTimer<='1';end if;
				if (StartTimer='1') then	--Alma
				DataRX(say3)<=Rx;
					if (say3=7) then
					StartTimer<='0';
					say3:=0;
					Led<=DataRX;
					else
					say3:=say3+1;
					end if;
				end if;
			end if;
		end if;
	end if;
	end process;
	
end arc_ps2;

--UCF File
NET "LED<7>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<6>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<5>" LOC = "D11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<4>" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<3>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<2>" LOC = "E11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<1>" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "LED<0>" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "clk" LOC = "C9" | IOSTANDARD = LVCMOS33 ;
NET "clk"  period = 20 ns high 50 %;

NET "PS2_CLK" LOC = "G14" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;
NET "PS2_DATA" LOC = "G13" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ;


NET "RX" LOC = "R7" | IOSTANDARD = LVTTL ;
NET "TX" LOC = "M14" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = SLOW ;

demirkan1

Sayın Turkpls,
Seri Porttan gelen verileri Ledlerde gösteren uygulamayı ben biraz değiştirmek istedim yapacağım uygulamada 5 byte bilgi almam lazım
örneğin visual basic ile  MSComm1.Output = "A" & "B" & "C" & "D" & "E" bu bilgiyi gönderip fpga ile işlem yaptıracağım
size ait olan vhdl kodunu 5 byte göre değiştirdim ancak sonuç alamadım , nasıl bir değişiklik yapmak gerekiyor size danışma geregi duydum
saygılarımla.

-- Spartan 3E XC3S500E
-- RS 232 COM 9600 BAUD 
-- www.cemalettinalbayrak.com
-- turkplc@qmail.com

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity b is
    Port ( LED : out  STD_LOGIC_vector(7 downto 0) ;
         Rx : in  STD_LOGIC;
          clk : in  STD_LOGIC);

end b;

architecture Behavioral of b is
   Signal DATA : STD_LOGIC_VECTOR (39 downto 0);
   Signal StartTimer:STD_LOGIC:='0';
   Signal id : STD_LOGIC_VECTOR (7 downto 0);   
   Signal gorev : STD_LOGIC_VECTOR (7 downto 0);   
   Signal deger1 : STD_LOGIC_VECTOR (7 downto 0);   
   Signal deger2 : STD_LOGIC_VECTOR (7 downto 0);   
   Signal deger3 : STD_LOGIC_VECTOR (7 downto 0);   

Begin

id<=data(7 downto 0);
gorev<=data(15 downto 8);
deger1<=data(23 downto 16);
deger2<=data(31 downto 24);
deger3<=data(39 downto 32);
led<=id;


   process (clk)
   variable say1:integer range 0 to 50;
   variable say2:integer range 0 to 104;
   variable say3:integer range 0 to 39;
   
   begin
   if (clk'EVENT and clk='1') then
   say1:=say1+1;
      if (say1>49) then   --1 MHZ
      say1:=0;
      say2:=say2+1;
         if (say2>103) then   --9600 bps
         say2:=0;
         if (Rx='0') then StartTimer<='1';end if;
         if (StartTimer='1') then
         Data(say3)<=Rx;
            if (say3=39) then
            StartTimer<='0';
            say3:=0;
            --Led<=Data;
            else
            say3:=say3+1;
            end if;
         end if;
         end if;
      end if;
   end if;
   end process;
end Behavioral;





demirkan1

arkadaşlar ,
en sonunda yaptım denemek isteyen arkadaşlar için kodu aşağıda veriyorum

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity b is
    Port ( LED : out  STD_LOGIC_vector(7 downto 0) ;
         Rx : in  STD_LOGIC;
          clk : in  STD_LOGIC);

end b;

architecture Behavioral of b is
   Signal DATA : STD_LOGIC_VECTOR (47 downto 0);
   Signal StartTimer:STD_LOGIC:='0';
   Signal id : STD_LOGIC_VECTOR (7 downto 0);   
   Signal gorev : STD_LOGIC_VECTOR (7 downto 0);   
   Signal deger1 : STD_LOGIC_VECTOR (7 downto 0);   
   Signal deger2 : STD_LOGIC_VECTOR (7 downto 0);   
   Signal deger3 : STD_LOGIC_VECTOR (7 downto 0);   

Begin

id<=data(7 downto 0);
gorev<=data(17 downto 10);
deger1<=data(27 downto 20);
deger2<=data(37 downto 30);
deger3<=data(47 downto 40);
led<=id;


   process (clk)
   variable say1:integer range 0 to 50;
   variable say2:integer range 0 to 104;
   variable say3:integer range 0 to 47;
   
   begin
   if (clk'EVENT and clk='1') then
   say1:=say1+1;
      if (say1>49) then   --1 MHZ
      say1:=0;
      say2:=say2+1;
         if (say2>103) then   --9600 bps
         say2:=0;
         if (Rx='0') then StartTimer<='1';end if;
         if (StartTimer='1') then
         Data(say3)<=Rx;
            if (say3=47) then
            StartTimer<='0';
            say3:=0;
            --Led<=Data;
            else
            say3:=say3+1;
            end if;
         end if;
         end if;
      end if;
   end if;
   end process;
end Behavioral;



teknikelektronikci

merhaba yeri gelmisken sormak isterim sopc builder ile seri port uygulamasi deneyen varmi ?
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!