MALTEPE ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSİĞİ BÖLÜMÜ BİL 321- Mantık Devreleri Tasarımı 2. Ara Sınavı Öğrenci Adı Soyadı : Öğrenci no : Akademik yıl : 2014-2015 Dönem : Güz Tarih : 09.12.2014 Sınav yeri : MA-3 Sınav süresi : 90 dakika : Yrd.Doç.Dr. Serap ÇEKLİ Ders sorumlusu Yrd.Doç.Dr. Ali AKMAN Soru 1 2 3 4 5 Toplam Puan 15 30 15 20 20 100 Not KURALLAR • Sınavdan önce adınızı-soyadınızı ve öğrenci numaranızı yazınız. • Soruların tamamını cevaplayınız. • Cevaplarınızı sadece ekteki sayfalara yazınız. Yazınız mutlaka düzgün ve okunaklı olmalıdır. Okunamayan ve anlaşılmayan karalama vb. kısımlar değerlendirmeye alınmayacaktır. • Sonuçlarınızı mutlaka birimleri (m, kg, m/s. vb) ile veriniz. Birimsiz sonuçlar sayısal değer doğru olsa bile eksik puanla (örneğin yarısı gibi) değerlendirilecektir. • Sınav sırasında sadece sınav kağıtları, kalem, silgi, 3 yaprak hatırlatma kağıdı ve hesap makinesi masa üzerinde bulunabilir. Diğer tüm eşyalarınız masa altında olmalıdır. • Sınav sırasında; sınavla ilgili soru sormak, arkadaşınızla konuşmak, malzeme alıp vermek, sözlük, cep telefonu, ders notları ve dersle ilgili diğer kişisel notları kullanmak yasaktır. • Kurallara uymayanların davranışları “sınavda kopya yapmaya teşebbüs etmek veya kopya yapmak” olarak değerlendirilecektir. SORULAR 1. [15 puan] Bir data girişine ve bir çıkışa sahip yeni bir flip flop tasarlanıyor. Bu flip flop saat işaretinin yükselen kenarında tetikleniyor ve eğer girişinde ‘0’ değeri var ise çıkışı değişmiyor. Flip flop’un girişine ‘1’ değeri uygulandığında çıkış eski değerin değili oluyor. Ayrıca bu flip flop bir reset girişine sahiptir. Bu reset girişine ‘0’ uygulandığında flip flop çıkışı sıfırlanmaktadır. Bu flip flop’un kullanıcı tanımlı temel öğe (UDP) modülünü yazınız. primitive flip_flop(output reg qout, input clk, input rst, input data); table //clk ? ? r r r n endtable endprimitive rst 0 r 1 1 1 1 data ? ? 0 1 1 ? : : : : : : : qout ? ? ? 0 1 ? : : : : : : : qout+ 0 1 0 - 2. [30 puan] Aşağıda 1x4 tekilleyici (demultiplexer) elemanının blok gösterimi ve Verilog HDL modülü verilmiştir. Bu 1x4 tekilleyici elemanında 2 tane ve gerekli kapı elemanları kullanılarak 1x8 tekilleyici elemanı tasarlanmak isteniyor. Buna göre 1x4 tekilleyici elemanından 2 tane ve gerekli lojik kapıları kullanarak 1x8 tekilleyici elemanını tasarlayınız. a) [15 puan] Tasarlanan 1x8 tekilleyici elemanın blok şemasını çiziniz. b) [15 puan] Yukarıda tasarımı istenen 1x8 tekilleyici elemanın Verilog HDL modülünü yazınız. module demux4(input in,input [1:0] sel, input en, output reg [3:0] out); localparam SEL0=2'b00, SEL1=2'b01, SEL2=2'b10, SEL3=2'b11; out[0] always @(in or sel or en) begin if(!en) out = 4'b0000; else case(sel) SEL0: out = 4'b0001; SEL1: out = 4'b0010; SEL2: out = 4'b0100; SEL3: out = 4'b1000; default: out = 4'b0000; endcase end endmodule in en out[1] 1x4 DeMux out[3] sel[1] sel[0] a) out[0] out[0] out[1] in in en out[1] 1x4 DeMux out[2] out[2] out[3] out[3] out[4] sel[1] out[5] sel[0] out[6] out[0] out[7] in en out[1] 1x4 DeMux out[2] out[3] sel[1] sel[0] en sel[2] sel[1] sel[0] out[2] b) module demux8( input in, input [2:0] sel, input en, output [7:0] out ); wire en1, en2; demultiplexer u1(.in(in), .sel(sel[1:0]), .en(en1), .out(out[3:0])); demultiplexer u2(.in(in), .sel(sel[1:0]), .en(en2), .out(out[7:4])); assign en1 = en & (~sel[2]); assign en2 = en & sel[2]; endmodule 3. [15 puan] Şekilde 2 bitlik hızlı toplama yapabilen bir ardışıl devre verilmiştir. Bu toplama devresi 2 tane 1 bitlik tam toplayıcıdan oluşmuştur. İlk toplayıcı elde bitini ikinci toplayıcıya taşımaktadır. Toplayıcı girişleri ve çıkışları registera sahiptir ve toplama işlemi 1 saat çevriminde yapılmalıdır. İki tam toplayıcı da aşağıda verilen yayılım ve bulaşma geçikmelerine sahiptir: Cin’den Cout’a 20 ps yayılım geçikmesi Cin’den S’e 20 ps yayılım geçikmesi A veya B’den Cout’a 25 ps yayılım geçikmesi A veya B’den S’e 30 ps yayılım geçikmesi Cin’den Cout’a 15 ps bulaşma geçikmesi Cin’den S’e 15 ps bulaşma geçikmesi A veya B’den Cout’a 22 ps bulaşma geçikmesi A veya B’den S’e 22 ps bulaşma geçikmesi Registerları oluşturan flip floplar: 30 ps kurma zamanı (setup time) 10 ps tutma zamanı (hol time) 35 ps clock-to-Q yayılım zamanı (tpcq) 21 ps clock-to-Q bulaşma zamanı (tccq) değerlerine sahiptir. Buna göre bu devre için maksimum saat frekansını bulunuz. ÇÖZÜM: Kurma Zamanı Kısıtı Tc ≥ tpcq + tpd + tsetup tpd toplayıcılarda en uzun gecikmeye sahip yol tarafından belirlenir. En uzun gecikmeli yol 1. toplayıcının A veya B girişinden Cout çıkışına ve buradan 2. toplayıcının Cin girişinden S çıkışına olan yoldur. Buradaki toplam yayılım geçikmesi tpd = 25 ps + 20 ps = 45 ps Tc ≥ tpcq + tpd + tsetup Tc ≥ 35 ps + 45 ps + 30 ps = 110 ps Maximum frekans = 1/110 ps = 9.09 GHz Tutma Zamanı Kısıtı thold < tccq + tcd tcd toplayıcılarda en kısa gecikmeye sahip yol tarafından belirlenir. En kısa bulaşma gecikmeli yol Cin girişinden S çıkışına olan yoldur. Buna göre tcd = 15 ps 10 ps < 21 ps + 15 ps = 36 ps tutma zamanı kısıtı sağlanır 4. [10 puan] Bir devrenin Verilog HDL modülü aşağıda verilmiştir. module devre #(parameter delay1 = 2, delay2 = 8) (output x, output y, input a, input b, input c, input d); assign #delay1 y = (a | b) & (~c | d); assign #delay2 x = ~a ^ b; endmodule Başka bir Verilog HDL modülünde yukarıda verilen devre modülünün delay1 = 7 ve delay2 = 5 için bir örneği oluşturulmak isteniyor. Bu örneğin ismi uut_devre olmak üzere devre modülünün örneğini yazınız. devre #(7, 5) uut_devre(.x(x), .y(y), .a(a), .b(b), .c(c), .d(d)); 5. [20 puan] N bitlik bir veri registerı tasarlanıyor. Bu register saat sinyalinin yükselen kenarlarında tetikleniyor ve her yükselen saat kenarında girişindeki veriyi çıkışta depoluyor. Bu register N bitlik veri girişi, saat girişi ve N bitlik veri çıkışı yanında en (izin - enable), reset ve set girişlerine de sahiptir. Register negatif asenkron resetlidir ve reset oluştuğunda çıkışlar lojik 0 olmaktadır. Register pozitif senkron set edilebilirdir ve set edildiğinde çıkışlar lojik 1 olmaktadır. en girişi lojik 1 olduğunda register normal fonksiyonunu yerine getirmektedir. en girişi lojik 0 olduğunda ise girişlerde değişiklikler olsa dahi çıkış en son değerini korumaktadır. module data_reg #(parameter N=8)(input clk, input rst, input set, input en, input [N-1:0] data, output reg [N-1:0] qout); always @(posedge clk or negedge rst) begin if(en) begin if(!rst) qout <= {N{1’b0}}; else begin if(set) qout <= {N{1’b1}}; else qout <= data; end end end endmodule
© Copyright 2024 Paperzz