Basys 3 ile Mantık Devresi Tasarımı ve Testbench Yapımı | Vivado
Basys 3 Digilent tarafından geliştirilmiş bir adet FPGA geliştirme kartıdır. Bugün Basys 3 de çalışan ve Vivado üzerinden testbench simülasyonunu yapacağımız bir devre tasarlayacağız.
Bu tasarımımızda basit mantık kapıları olan “VE” ve “VEYA” kapıları kullanacağız (And, Or). 3 adet bizim tarafımızdan belirlenecek girdi(input) alacağız ve bu girdilerle bir mantık denklemi kuracağız ve bunu yürtmeye çalışacağız.
in1 = A , in2 = B, in3 = C, out1 = L şeklinde kısaltacağım.
Denklemimiz : L = (A.B).(B+C)
Bu denklemi uygulamak içinse gereken kodları en altta bulabileceksiniz. Bu denklemin şematik diagramı ise şu şekilde olacaktır:
Burada out1’ı Basys 3 üzerindeki herhangi bir lede bağlamayı ise sonraki projelerimizde görebilirsiniz. Ayrıca biz bu örnekteki inputları herhangi bir değere bağlamadık (simülasyon kısmı hariç) ama bunları da Basys 3 üzerindeki switchlerden almayı da sonraki projelerimizde görebileceksiniz.
Doğruluk Tablosu:
Testbenchte yaptığımız simülasyonun sonuçları ise şu şekilde gerçekleşti (kodları aşağı kısımda):
KODLAR:
main.vhd
library IEEE; use IEEE.STD_LOGIC_1164.ALL; --library UNISIM; --use UNISIM.VComponents.all; entity test1 is Port ( in1 : in STD_LOGIC; in2 : in STD_LOGIC; in3 : in STD_LOGIC; io1 : inout STD_LOGIC; io2 : inout STD_LOGIC; out1 : out STD_LOGIC); end test1; architecture Behavioral of test1 is begin io1 <= in1 and in2; io2 <= in2 or in3; out1 <= io1 and io2; end Behavioral;
Testbench Kodları
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity testBench is -- Port ( ); end testBench; architecture Behavioral of testBench is COMPONENT test1 PORT( in1 : in STD_LOGIC; in2 : in STD_LOGIC; in3 : in STD_LOGIC; io1 : inout STD_LOGIC; io2 : inout STD_LOGIC; out1 : out STD_LOGIC); END COMPONENT; SIGNAL in1 : STD_LOGIC; SIGNAL in2 : STD_LOGIC; SIGNAL in3 : STD_LOGIC; SIGNAL io1 : STD_LOGIC; SIGNAL io2 : STD_LOGIC; SIGNAL out1 : STD_LOGIC; BEGIN UUT: test1 PORT MAP( in1 => in1, in2 => in2, in3 => in3, io1 => io1, io2 => io2, out1 => out1 ); testBench1 : PROCESS BEGIN wait for 112 ns; in1<='0';in2<='0';in3<='0'; wait for 112 ns; in1<='0';in2<='0';in3<='1'; wait for 112 ns; in1<='0';in2<='1';in3<='0'; wait for 112 ns; in1<='0';in2<='1';in3<='1'; wait for 112 ns; in1<='1';in2<='0';in3<='0'; wait for 112 ns; in1<='1';in2<='0';in3<='1'; wait for 112 ns; in1<='1';in2<='1';in3<='0'; wait for 112 ns; in1<='1';in2<='1';in3<='1'; END PROCESS; end Behavioral;
Ayrıca sizde bildiğiniz diğer kalıpları yorumlarda belirtebilirsiniz. Bu yazıyı beğendiyseniz arkadaşlarınızla paylaşarak herkese ulaşmasını sağlayabilirsiniz ve diğer yazılarımdan haberdar olmak için beni Twitter‘dan takip edebilirsiniz.
İletişim: onur@bilalonureskili.com