BİL 321- Mantık Devreleri Tasarımı 2. Ara Sınavı

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