VHDL ile Eşlik Bit Kontrolü

Parity (Eşlik) biti seri data iletiminde datanın doğru gönderilip gönderilmediğini anlamak için kullanılır. İkilik tabandaki bitlerin “ Tek-ODD “ yada “ Çift-EVEN “ olması durumuna göre kullanılır.

Örneğin 7 bitlik bir data paketimizin bit değerlerinin toplamı tek ise “ 1 “, çift ise “ 0 “ bilgisi bu 7 bitlik data paketimize eklenerek data paketimiz 8 bite çıkarılmış olur. Haberleşme sistemimizin “ Receiver(alıcı) “ kısmı gelen data paketinin bit değerlerini toplayarak parity bitine ulaşır ve gelen data paketinde ki parity biti ile karşılaştırır, eğer hatalı ise paketin tekrar gönderilmesini ister.

PB

Örneğin ;

7 bitlik paketimiz “ 1110110 “ olsun

Bu duruma göre bit değerleri toplamı 5 olur. Bit değerimiz tek olduğundan data, parity biti 1 olacak şekilde alıcıya gönderilir.

Parity biti ile yeni paket “ 11101101 ”olur.

Alıcı taraf ise ilk 7 biti toplayarak parity bitinin “ 1 “ olması gerektiğini anlar ve gelen paketin parity bitini kontrol eder.

VHDL de 8 bitlik “ generic parity “ tasarlayacak olursak;

  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3.  
  4. entity Parity is
  5. Generic(
  6. DATA_WIDTH : integer := 8
  7. );
  8. Port (
  9. in_data : in std_logic_vector(DATA_WIDTH - 1 downto 0);
  10. out_parity_odd : out std_logic;
  11. out_parity_even : out std_logic
  12. );
  13. end Parity;
  14.  
  15. architecture Behavioral of Parity is
  16.  
  17. signal r_parity_odd : std_logic := '0';
  18. signal r_parity_even : std_logic := '0';
  19.  
  20. function f_parity(in_data : std_logic_vector(DATA_WIDTH - 1 downto 0)) return std_logic is
  21. variable v_parity : std_logic := '0';
  22. begin
  23. v_parity := '0';
  24. for n_i in 0 to in_data'length - 1 loop
  25. v_parity := v_parity xor in_data(n_i);
  26. end loop;
  27. return v_parity;
  28. end f_parity;
  29.  
  30. begin
  31.  
  32. out_parity_odd <= r_parity_odd;
  33. out_parity_even <= r_parity_even;
  34.  
  35. process(in_data)
  36. begin
  37. r_parity_odd <= f_parity(in_data);
  38. r_parity_even <= not(f_parity(in_data));
  39. end process;
  40.  
  41. end Behavioral;

Kodu sentezledikten sonra Synthesize –XST sekmesi içerisindeki View RTL Schematik seçeneğini seçerek karşımıza çıkan Startup Mode ekranından “Start with a schematic of the top –level block” seçeneğini seçerek şematik tasarımımıza ulaşıyoruz.

Şematikte karşımıza çıkan bloklara çift tıklayarak logic gate seviyesine kadar inip tasarımı detaylandırabiliriz.

parity_seme

 

 

Test Bench Programı

  1. LIBRARY ieee;
  2. USE ieee.std_logic_1164.ALL;
  3. ENTITY tb IS
  4. END tb;
  5. ARCHITECTURE behavior OF tb IS
  6. COMPONENT Parity
  7. PORT(
  8. in_data : IN std_logic_vector(7 downto 0);
  9. out_parity_odd : OUT std_logic;
  10. out_parity_even : OUT std_logic
  11. );
  12. END COMPONENT;
  13. --Inputs
  14. signal in_data : std_logic_vector(7 downto 0) := (others => '0');
  15.  
  16. --Outputs
  17. signal out_parity_odd : std_logic;
  18. signal out_parity_even : std_logic;
  19.  
  20. BEGIN
  21. uut: Parity PORT MAP (
  22. in_data => in_data,
  23. out_parity_odd => out_parity_odd,
  24. out_parity_even => out_parity_even
  25. );
  26.  
  27. stim_proc: process
  28. begin
  29. wait for 100 ns;
  30. in_data <= "10000011" ;
  31. wait for 100 ns;
  32. in_data <= "01010011" ;
  33. wait for 100 ns;
  34. in_data <= "10111001" ;
  35. wait for 100 ns;
  36. in_data <= "00100001" ;
  37. wait; end process;
  38. END;

tb

Yorum

  1. By Ali Çubuk

    Cevapla

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir