VHDL ile Dört Bit Toplayıcı ve Çıkarıcı Tasarımı

Tam toplayıcı 3 bitlik girişlerin toplamını veren mantıksal devredir. Girişlere göre aşağıda ki doğruluk tablosu elde edilir,

DT_TOPLAYICI

Tam çıkarıcı, borç girişi olan yarı çıkarıcı devredir.

DT_CIKARICI

4 bitlik Tam Toplayıcı ve Tam Çıkarıcı devre eldenin bir sonraki girişe toplam olarak verildiği devredir. Devrenin toplayıcı ya da çıkarıcı devre olacağını girişten dijital olarak verdiğimiz sinyal belirlemektedir.

GENEL

E lojik 0 olduğu durumda devre 4 bitlik Tam Toplayıcı, E lojik 1 olduğu durumda ise devre 4 bitlik Tam Çıkarıcı olur.

  1. ------------------------------------------------------------ XOR Gate
  2. library ieee;
  3. use ieee.std_logic_1164.all;
  4. entity xorGate is
  5. port( A, B : in std_logic;
  6. F : out std_logic);
  7. end xorGate;
  8. architecture davranıs of xorGate is
  9. begin
  10. F <= A xor B;
  11. end davranıs;
  1. ------------------------------------------------------------ FullAdder
  2. library ieee;
  3. use ieee.std_logic_1164.all;
  4. entity Full_Adder is
  5. port(  X, Y, Cin : in std_logic;
  6. S, Cout    : out std_logic);
  7. end Full_Adder;
  8. architecture davranıs of Full_Adder is
  9. begin
  10. S <= (X xor Y) xor Cin;
  11. Cout <= (X and (Y or Cin)) or (Cin and Y);
  12. end davranıs;
  1. ------------------------------------------------------------ Subtractor&Adder
  2. library ieee;
  3. use ieee.std_logic_1164.all;
  4. entity adderSubtractor is
  5. port(  MODE                : in std_logic;
  6. A3, A2, A1, A0  : in std_logic;
  7. B3, B2, B1, B0   : in std_logic;
  8. S3, S2, S1, S0    : out std_logic;
  9. Cout                    : out std_logic);
  10. end adderSubtractor;
  11. architecture struct of adderSubtractor is
  12. component xorGate is --XOR gate hatırlatıldı
  13. port( A, B : in std_logic;
  14. F      : out std_logic);
  15. end component;
  16. component Full_Adder is --FullAdder gate hatırlatıldı
  17. port( X, Y, Cin : in std_logic;
  18. S, Cout    : out std_logic);
  19. end component;
  20. signal C1, C2, C3, C4: std_logic;
  21. signal xor0, xor1, xor2, xor3 : std_logic;
  22. begin
  23. XorGate0: XorGate port map(MODE, B0, xor0);
  24. XorGate1: XorGate port map(MODE, B1, xor1);
  25. XorGate2: XorGate port map(MODE, B2, xor2);
  26. XorGate3: XorGate port map(MODE, B3, xor3);
  27. FA0: Full_Adder port map(A0, xor0, MODE,S0, C1); -- S0
  28. FA1: Full_Adder port map(A1, xor1, C1, S1, C2);           -- S1
  29. FA2: Full_Adder port map(A2, xor2, C2, S2, C3);        -- S2
  30. FA3: Full_Adder port map(A3, xor3, C3, S3, C4);        -- S3
  31. Cout <= C4; -- Cout
  32. end struct;
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39. var quads_screen_width = document.body.clientWidth;
  40. if ( quads_screen_width >= 1140 ) {
  41. /* desktop monitors */
  42. document.write('');
  43. (adsbygoogle = window.adsbygoogle || []).push({});
  44. }if ( quads_screen_width >= 1024 && quads_screen_width < 1140 ) {
  45. /* tablet landscape */
  46. document.write('');
  47. (adsbygoogle = window.adsbygoogle || []).push({});
  48. }if ( quads_screen_width >= 768 && quads_screen_width < 1024 ) {
  49. /* tablet portrait */
  50. document.write('');
  51. (adsbygoogle = window.adsbygoogle || []).push({});
  52. }if ( quads_screen_width < 768 ) {
  53. /* phone */
  54. document.write('');
  55. (adsbygoogle = window.adsbygoogle || []).push({});
  56. }

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.

3

 

Test Bench Programı

Test Bench simülasyonu sayesinde sentezlediğimiz devrenin doğruluğu test edilir. Dijital olarak uyguladığımız sinyal 10ns’de terslenmektedir ve testler arası geçişler 20 ns’dir.

  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3.  
  4. entity adderSubtractor_tb is
  5. end adderSubtractor_tb;
  6.  
  7. architecture testbench of adderSubtractor_tb is
  8. component adderSubtractor is
  9. port( A3, A2, A1, A0 : in std_logic;
  10. B3, B2, B1, B0 : in std_logic;
  11. mode : in std_logic;
  12. S3, S2, S1, S0 : out std_logic;
  13. Cout : out std_logic);
  14. end component;
  15.  
  16. signal mode, A3, A2, A1, A0 : std_logic;
  17. signal B3, B2, B1, B0 : std_logic;
  18. signal S3, S2, S1, S0, Cout : std_logic;
  19.  
  20. begin
  21. mapping: adderSubtractor port map(mode,
  22. A3, A2, A1, A0,
  23. B3, B2, B1, B0,
  24. S3, S2, S1, S0,
  25. Cout );
  26. process
  27. begin
  28. mode <= '1'; -- Çıkarma Modu
  29. wait for 10 ns;
  30. mode <= '0'; -- Toplama Modu
  31. wait for 10 ns;
  32. end process;
  33. process
  34. begin
  35. --TEST 1
  36. A3 <= '1';
  37. A2 <= '0';
  38. A1 <= '1';
  39. A0 <= '1';
  40.  
  41. B3 <= '0';
  42. B2 <= '1';
  43. B1 <= '1';
  44. B0 <= '0';
  45. wait for 20 ns;
  46.  
  47. --TEST 2
  48. A3 <= '0';
  49. A2 <= '1';
  50. A1 <= '1';
  51. A0 <= '1';
  52.  
  53. B3 <= '0';
  54. B2 <= '1';
  55. B1 <= '0';
  56. B0 <= '1';
  57. wait for 20 ns;
  58. end process;
  59. END;

TB

 

Yorum

  1. By Ali Çubuk

    Cevapla

  2. By Samet

    Cevapla

  3. By Sezer

    Cevapla

Bir Cevap Yazın

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