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

MALTEPE ÜNİVERSİTESİ
BİLGİSAYAR MÜHENDİSİĞİ BÖLÜMÜ
BİL 321- Mantık Devreleri Tasarımı
1. Ara Sınavı
Öğrenci Adı Soyadı
:
Öğrenci no
:
Akademik yıl
: 2014-2015
Dönem
: Güz
Tarih
: 04.11.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
Toplam
Puan
20
25
30
25
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. [20 puan] Aşağıdaki soruları cevaplayınız.
a) [10 puan]
,
,
ve
(a,b,c,d tel (wire)
tipinde sinyallerdir) girişler için aşağıda verilen her Verilog HDL ifadesini değerlendirerek, sonucu
ikili (binary) tabanda yandaki boşluklara yazınız.
f = 1’b0
g = 12’b010101010101
h = 8’b11101111
w = 3’b101
z = 4’b0101
b) [10 puan] Aşağıda verilen clk_gen modülü bir saat sinyali üretmek için kullanılmaktadır. Bu
modül ile oluşturulan saat sinyalinde başlangıç değeri 0 dır ve 0 değeri 90 ns ve 1 değeri 50 ns
olarak periyodik olarak sürmektedir . Buna göre bu Verilog HDL modülünü yazınız.
`timescale 10ns / 1ps
module clk_gen;
reg clk;
initial clk = 0;
always
begin
if(clk)
#5 clk = ~clk;
else
#9 clk = ~clk;
end
endmodule
2. [25 puan] Aşağıda verilen Verilog HDL modüllerini göz önüne alınız. x = 4’b1000 ve y = 4’b1011
değerleri için devre_ana modülü çaıştırılırsa bu modül içinde oluşan sinyalleri aşağıda verilen tabloya
yazınız.
module devre_t(input [7:0] x, input [7:0] y, input c_in, output [8:0] s);
assign s = x + y + c_in;
endmodule
module devre_c(input [1:0] x, input [1:0] y, output [3:0] f);
assign f = x*y;
endmodule
module devre_ana(input [3:0] x, input [3:0] y, output [8:0] f);
wire
wire
wire
wire
[1:0]
[3:0]
[7:0]
[8:0]
devre_c
devre_c
devre_c
devre_c
x1, x2, y1, y2;
f1, f2, f3, f4;
fs1, fs2, fs3, fs4;
s1, s2, s3;
carp1(.x(x1),
carp2(.x(x1),
carp3(.x(x2),
carp4(.x(x2),
.y(y1),
.y(y2),
.y(y1),
.y(y2),
.f(f1));
.f(f2));
.f(f3));
.f(f4));
devre_t top1(.x(fs1), .y(fs2), .c_in(1'b0), .s(s1));
devre_t top2(.x(fs3), .y(s1[7:0]), .c_in(s1[8]), .s(s2));
devre_t top3(.x(fs4), .y(s2[7:0]), .c_in(s2[8]), .s(s3));
assign
assign
assign
assign
assign
assign
assign
assign
assign
endmodule
Sinyal
x1 = x[1:0];
x2 = x[3:2];
y1 = y[1:0];
y2 = y[3:2];
fs1 = {4'b0, f1};
fs2 = {2'b0, f2, 2'b0};
fs3 = {2'b0, f3, 2'b0};
fs4 = {f4, 4'b0};
f = s3;
Değer (İkili Taban)
Sinyal
Değer (İkili Taban)
f1
4’b0000
fs1
8’b00000000
f2
4’b0000
fs2
8’b00000000
f3
4’b0110
fs3
8’b00011000
f4
4’b0100
fs4
8’b01000000
s1
9’b000000000
s2
9’b000011000
s3
9’b001011000
f
9’b001011000
3. [30 puan] Aşağıda verilen soruları cevaplayınız.
a) [10 puan] Aşağıda verilen birleşimsel mantık devresinin Verilog HDL modülünü kapı
seviyesinde modellemeyi kullanarak yazınız.
a1
a2
G1
G3
b1
b2
G4
c
G2
module soru3a(input a1, input a2, input b1, input b2, output c);
wire x1, x2, x3;
and G1(x1, a1, a2);
and G2(x2, b1, b2);
or G3(x3, x1, x2);
not G4(c, x3);
endmodule
b) [10 puan] a) şıkkında verilen devrede AND ve OR kapılarının eylemsizlik geçikmesi 8ns,
NOT kapısının eylemsizlik geçikmesi 3 ns ve kapıları birbirine bağlayan tellerin (wire) transport
geçikmesi 2 ns ise bu devrenin Verilog HDL modülünü tekrar yazınız.
NOT: ‘timescale 100ps/1ps olarak göz önüne alınmalıdır.
module soru3a(input a1, input a2, input b1, input b2, output c);
wire #20 x1, x2, x3;
and #80 G1(x1, a1, a2);
and #80 G2(x2, b1, b2);
or #80 G3(x3, x1, x2);
not #30 G4(c, x3);
endmodule
c) [10 puan] Aşağıda bir Verilog HDL modülü verilmiştir. Bu modülün modellediği devreyi
sentezleyerek aşağıya çiziniz.
module devre(input [3:0] a, input [3:0] b, input en, output d);
wire [3:0] c;
wire dd;
xor g1[3:0](c, a, b);
or g2(dd, c);
notif1 g3(d, dd, en);
endmodule
a[0]
b[0]
XOR
a[1]
b[1]
XOR
d
a[2]
b[2]
XOR
Notif1
en
a[3]
b[3]
OR
XOR
4. [25 puan] Hızı 0-8 km/s arasında 1 km/s kademelerle ayarlanabilen bir oyuncak arabanın hızını
kontrol edecek bir mantıksal devre tasarlanmak isteniyor. Bu devrenin girişleri 4 adet butona
bağlanacaktır. İlk buton arabayı durdurmak için kullanılmaktadır. İkinci buton basıldığında araba en
yüksek hıza çıkmaktadır. Üçüncü ve dördürncü butonlar sırasıyla arabanın hızını kademeli olarak
arttırmak ve azaltmak için kullanılmaktadır. Devrenin çıkışında arabanın hızı oluşacaktır. Buna göre
bu devreyi davranışsal modelleme ile gerçekleyiniz ve Verilog HDL modülünü yazınız.
module soru4(
input arttir,
input azalt,
input durdur,
input son_hiz,
output [3:0] hiz
);
reg [3:0] hiz_reg;
initial hiz_reg = 0;
assign hiz = hiz_reg;
always
always
always
always
endmodule
@(posedge
@(posedge
@(posedge
@(posedge
arttir) if(hiz_reg != 8) hiz_reg= hiz_reg + 1;
azalt) if(hiz_reg != 0) hiz_reg = hiz_reg - 1;
durdur) hiz_reg = 0;
son_hiz) hiz_reg = 8;