Girilen iki sayının birbiriyle karşılaştırılıp sonucunda büyük, küçük veya eşit sinyallerinin verileceği bir programı VHDL dili ile yazınız. A : karşılaştırılacak 1.sayıdır. 8 bitlik giriştir. B : karşılaştırılacak 2.sayıdır. 8 bitlik giriştir. Less : A küçüktür B ise 1 olacaktır. 1 bitlik çıkıştır. Greater : A büyük B ise 1 olacaktır. 1 bitlik çıkıştır. Equal : A eşittir B ise 1 olacaktır. 1 bitlik çıkıştır. (A<B), (A>B) ve (A=B) durumunu sağlayacak 2 şer tane değeri girerek modelsimde oluşan sonuçları çiziniz. library ieee; entity Comparator is port( A: in std_logic_vector(n-1 downto 0); B: in std_logic_vector(n-1 downto 0); less: out std_logic; equal: out std_logic; greater: out std_logic); end Comparator; architecture behv of Comparator is process(a,b) if (A<B) then less <= '1'; equal <= '0'; greater <= '0'; elsif (A=B) then less <= '0'; equal <= '1'; greater <= '0'; else less <= '0'; equal <= '0'; greater <= '1'; end behv;
4 bitlik D flip-flop bellek yapısını VHDL dili ile yazınız. Enable sinyali 1 iken, clk sinyalinin yükselen kenar tetiklemesi geldiği zaman Data_in girişindeki bilgi iç değişkende saklanacak ve Q çıkışına yazılacaktır. Aynı zamanda saklanan bilginin tersi (not) Q_not çıkışına yazılacaktır. Enable sinyali 0 ise var olan değeri tutmaya, bu değeri Q ve Q_not da göstermeye devam edecek ve yeni değer kaydetmeyecektir. Data_in : 4 bitlik veri girişi. Enable : 1 bitlik giriş. (logic 1 için kaydetme yapar.) Clk : 1 bitlik clock tetikleme sinyali Q : 4bitlik saklanan bilgi değeri Q_not : 4 bitlik saklanan bilginin tersinin değeri 6 farklı değeri Data_in girişine uygulayarak bu değerleri D-flip-flop bellek yapısına kaydettirmeye çalışın. Q ve Q_not değerlerini gözlemleyin. 6 değerin 2 tanesinde enable 0 için kayıt yapılamadığını gösterin. Simülasyon sonuçlarınızı çizdiriniz. library ieee ; entity dff is port( data_in: clock: data_out: end dff; in std_logic; in std_logic; out std_logic); architecture behv of dff is process(data_in, clock) if (rising_edge(clock)) then data_out <= data_in; end behv;
1 bitlik JK flip-flop bellek yapısını VHDL dili ile yazınız. JK flip flop bellek yapısının davranışı yandaki tabloda verilmiştir. J : 1 bitlik giriş. K : 1 bitlik giriş. CP : 1 bitlik clock tetikleme sinyali Q : 1 bitlik saklanan değer Q_not : 1 bitlik saklanan değerin tersi En az 6 adım simülasyon yaparak doğruluk tablosunun çalıştığını gösteriniz. library ieee; entity JK_FF is port ( clock: in std_logic; J, K: in std_logic; reset: in std_logic; Q, Qbar: out std_logic ); end JK_FF; architecture behv of JK_FF is signal state: std_logic; signal input: std_logic_vector(1 downto 0); input <= J & K; p: process(clock, reset) is if (reset='1') then state <= '0'; elsif (rising_edge(clock)) then case (input) is when "11" => state <= not state; when "10" => state <= '1'; when "01" => state <= '0'; when others => null; end case; Q <= state; Qbar <= not state; end behv;
Seri girişli paralele çıkışlı 8-bit Shift- Register yapısını VHDL dili yazınız. Shift register; 1 bitlik data_in girişindeki değeri tetikleme sinyalinin her yükselen kenarında bir adım sağa kaydıran yapıdır. İp ucu: kaydırılacak sayının istenilen değerleri seçilerek ve birleştirme operatörü (&) ile yeniden birleştirilerek kaydırma işlemi yapılabilir. Sistem girişleri; data_in : 1 bitlik giriş. ( veri girişi.) clk: 1 bitlik tetikleme sinyali data_out: 4 bitlik paralel veri çıkışı. (kaydırılan değer çıkarılacaktır.) Herhangi bir 4 bitlik sayının bitleri teker teker data_in girişinden yazılarak kaydırma işlemi ile bu sayının data_out da yazılmasını sağlayınız. Simülasyon sonucunu çiziniz. (seçtiğiniz sayı 0000 veya 1111 olmasın.) library ieee; entity shift is port(c, SI, LEFT_RIGHT : in std_logic; PO : out std_logic_vector(7 downto 0)); end shift; architecture archi of shift is signal tmp: std_logic_vector(7 downto 0); process (C) if (rising_edge(c)) then if (LEFT_RIGHT='0') then tmp <= tmp(6 downto 0) & SI; else tmp <= SI & tmp(7 downto 1); PO <= tmp; end archi;
1 bitlik T flip-flop bellek yapısını VHDL dili ile yazınız. T flip flop bellek yapısının davranışı yandaki tabloda verilmiştir. CP nin her yükselen kenarında T=1 ise sakladığı değeri tersleycek, T=0 ise değeri değiştirmeyecektir. T : 1 bitlik giriş. CP : 1 bitlik clock tetikleme sinyali Enable: 1 bitlik giriş. (enable 1 ise çalışır. ) Reset: 1 bitlik giriş. (reset 1 ise sakladığı değeri 0 yapar.) Q : 1 bitlik saklanan değer Q_not : 1 bitlik saklanan değerin tersi En az 6 adım simülasyon yaparak doğruluk tablosunun çalıştığını gösteriniz. library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity t_trigger is port (T,Reset,CLK,CLK_enable: in std_logic; Q: out std_logic); end t_trigger; architecture beh_t_trigger of t_trigger is signal temp: std_logic; process (Reset,CLK) if (rising_edge(clk)) then if Reset='1' then temp <= '0'; elsif CLK_enable ='1' then temp <= T xor temp; Q <= temp; end beh_t_trigger;
paralel girişli seri çıkışlı 8-bit Shift- Register yapısını VHDL dili yazınız. Shift register; 4 bitlik data_in girişindeki değeri tetikleme sinyalinin her yükselen kenarında bir adım sağa kaydıran yapıdır. İp ucu: kaydırılacak sayının istenilen değerleri seçilerek ve birleştirme operatörü (&) ile yeniden birleştirilerek kaydırma işlemi yapılabilir. Sistem girişleri; data_in : 4 bitlik giriş. ( veri girişi.) clk: 1 bitlik tetikleme sinyali data_out: 1 bitlik seri veri çıkışı. (kaydırılan değer çıkarılacaktır.) Herhangi bir 4 bitlik sayının bitleri data_in girişinden yazılarak kaydırma işlemi ile bu sayının data_out da yazılmasını sağlayınız. Simülasyon sonucunu çiziniz. (seçtiğiniz sayı 0000 veya 1111 olmasın.) library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity ParalellToSerial is Port ( reset,clk,start : in STD_LOGIC; data_in:in STD_LOGIC_VECTOR (7 downto 0); data_out:out STD_LOGIC); end ParalellToSerial; architecture Behavioral of ParalellToSerial is signal DST:STD_LOGIC_VECTOR (7 downto 0):=(others=>'0'); signal DATA,STOP:STD_LOGIC:='0'; process(reset,clk) if reset='1' then DST<=(others=>'0'); DATA<='0'; STOP<='0'; elsif rising_edge(clk) then if start='1' then DATA<='1';--start bit STOP<='1';--stop bit DST<=data_in; Else DATA<=DST(7); STOP<='0'; DST<=DST(6 downto 0)&STOP; data_out<=data; end Behavioral;
Girilen 2 matrisin toplamasını ve/veya çıkarmasını yapan programı VHDL dili ile yazınız. Girilen matriler 2x2 boyutundadır. Matrislerin her bir elemanı 4 bitlik vektör olarak ayrı ayrı girilmektedir. İşlem sonucunda oluşan 2x2 boyutundaki matrisin her bir elemanı ayrı ayrı 4bitlik vektör olarak çıkışa verilmektedir. 1 1 2 3 + 2 = 3 1 1 2 2 3 3 a1,b1,c1,d1: 1.matrisin 4 bitlik elemanları a2,b2,c2,d2: 2.matrisin 4 bitlik elemanları islem: 1 bitlik işlem seçici. (1 için toplama yapar, 0 için çıkarma yapar.) a3,b3,c3,d3: çıkış matrisinin 4 bitlik elemanları 2 farklı toplama ve 2 farklı çıkarma işlemi gerçekleştirin. Simülasyon sonucunu çiziniz. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity matris_add_subb is port ( a1,b1,c1,d1: in std_logic_vector(3 downto 0); a2,b2,c2,d2: in std_logic_vector(3 downto 0); islem: in std_logic; a3,b3,c3,d3: out std_logic_vector(3 downto 0)); end matris_add_subb; architecture behaviour of matris_add_subb is process(a1,b1,c1,d1,a2,b2,c2,d2,islem) if islem='1' then a3=a1+a2; b3=b1+b2; c3=c1+c2; d3=d1+d2; else a3=a1-a2; b3=b1-b2; c3=c1-c2; d3=d1-d2; end behaviour;
Girilen 2 matrisin çarpımını yapan programı VHDL dili ile yazınız. Girilen matriler 2x2 boyutundadır. Matrislerin her bir elemanı 4 bitlik vektör olarak ayrı ayrı girilmektedir. Çarpım sonucunda oluşan 2x2 boyutundaki matrisin her bir elemanı ayrı ayrı 8bitlik vektör olarak çıkışa verilmektedir. 1 1 2 3 2 = 3 (skaler çarpım değil. Matris çarpımı yapılacaktır.) 1 1 2 2 3 3 a1,b1,c1,d1: 1.matrisin 4 bitlik elemanları a2,b2,c2,d2: 2.matrisin 4 bitlik elemanları a3,b3,c3,d3: çıkış matrisinin 8 bitlik elemanları 3 farklı çarpım işlemi gerçekleştirin. Simülasyon sonucunu çiziniz. Çarpım işlemlerinden 1 tanesi için sonucun doğruluğunu matematiksel olarak da gösterip ispatlayınız. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity matris_mull is port ( a1,b1,c1,d1: in std_logic_vector(3 downto 0); a2,b2,c2,d2: in std_logic_vector(3 downto 0); a3,b3,c3,d3: out std_logic_vector(7 downto 0)); end matris_mull; architecture behaviour of matris_mull is process(a1,b1,c1,d1,a2,b2,c2,d2) a3= conv_std_logic_vector(conv_integer(a1)* conv_integer(a2),8); b3= conv_std_logic_vector(conv_integer(b1)* conv_integer(b2),8); c3= conv_std_logic_vector(conv_integer(c1)* conv_integer(c2),8); d3= conv_std_logic_vector(conv_integer(d1)* conv_integer(d2),8); end behaviour;
Girilen 2x2 boyutlarındaki bir matrisin determinantını bulduran programı VHDL dili ile yazınız. Determinantın işareti pozitif ise isaret çıkışı 1 yapılacaktır. Negatif ise 0 yapılacaktır. a,b,c,d: 1.matrisin 4 bitlik elemanları det: determinant sonucu 4 bitlik vektör. isaret: 1 bitlik çıkış. 6 farklı matris için determinant işleminin gerçekleştiriniz. Simülasyon sonucunu çiziniz. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity matris_det is port ( a,b,c,d : in std_logic_vector(3 downto 0); det : out std_logic_vector(3 downto 0); isaret : out std_logic;); end matris_det; architecture behaviour of matris_det is signal temp:std_logic_vector(4 downto 0); process(a,b,c,d) temp=conv_std_logic_vector((conv_integer(a)*conv_integer(d)- conv_integer(b)*conv_integer(c)),5); det=temp(3 downto 0); isaret=temp(4); end behaviour;
Aşağıda verilen Fonksiyon tablosu için VHDL ile ALU kodlarını yazınız. library ieee; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity soru1 is port( secim :in std_logic_vector(2 downto 0); in_a,in_b :in std_logic_vector(7 downto 0); sonuc:out std_logic_vector(7 downto 0)); end soru1; Secim İslem 000 Not A 001 A and B 010 A xor B 011 Shift left 1 bit A 100 Shift right 1 bit B 101 A+B 110 A*B 111 A/B architecture behaviour of matris_det is process(a,b,c,d) case secim is when 000 => sonuc <=not in_a; when 001 => sonuc <= in_a and in_b; when 010 => sonuc <= in_a xor in_b; when 011 => sonuc <= in_a sll 1; when 100 => sonuc <= in_b srl 1 when 101 => sonuc <= in_a + in_b; when 110 => sonuc <= conv_std_logic_vector(conv_integer(in_a)*conv_integer(in_b),8); when 111 => sonuc <= conv_std_logic_vector(conv_integer(in_a)/conv_integer(in_b),8); end behaviour;
Verilen state machine koduna göre; a)her state in içinde yapılan işlemi yazarak akış diyagramını çiziniz. b)verilen sinyal girdilerine göre oluşacak simülasyon sonucunu türetiniz. (Zaman grafiği üzerinde çiziniz.) library ieee; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity state is port( clock:in std_logic; start:in std_logic; reset:in std_logic; a: in std_logic_vector(7 downto 0); led_out: out std_logic_vector(7 downto 0); bitti: out std_logic); end state; architecture beh of state is type state is (st1,st2,st3,st4); signal pr_state,next_state:state; signal data,temp: std_logic_vector(7 downto 0); process(clock,reset) if(reset='1')then pr_state<=st1; elsif(rising_edge(clock))then pr_state<=next_state; process(pr_state, start) case pr_state is when st1=> temp<=a; data<="00000001 ; led_out<="00000000"; bitti<='0'; if start='1' then next_state<=st2; else next_state<=st1; when st2=> data<= conv_std_logic_vector( conv_integer(data)* conv_integer(temp),8); led_out<="00000000"; bitti<='0'; next_state<=st3; when st3=> temp<=temp-"00000001"; led_out<="00000000"; bitti<='0'; if temp<="00000001" then next_state<=st4; else next_state<=st2; when st4=> led_out<=data; next_state<=st4; bitti<='1'; end case; end beh;