Kasırga Verilog Gelişmeleri

Transkript

Kasırga Verilog Gelişmeleri
[Gizli]
PROJE EKİBİ
Yrd. Doç. Dr. Oğuz ERGĠN
Meltem ÖZSOY
Engin ÖZGER
Nezire Nur PEPEOĞLU
Yusuf Onur KOÇBERBER
ġadi Çağatay ÖZTÜRK
Özcan YURT
Çağatay GÜNGÖR
29.01.2008
Ankara
[Gizli]
ĠÇĠNDEKĠLER
PROJE AŞAMALARI .......................................................................................................................................... 3
BENZETĠM YAZILIMI SEÇĠMĠ ....................................................................................................................... 3
SENTEZ .............................................................................................................................................................. 3
BUYRUK YAKALAMA................................................................................................................................ 3
BUYRUK ÇÖZÜMLEME .............................................................................................................................. 3
YÜRÜTME ..................................................................................................................................................... 4
BELLEK ....................................................................................................................................................... 45
YAZMA ........................................................................................................................................................ 45
BUYRUK KÜMESĠ...................................................................................................................................... 45
BENZETĠM ...................................................................................................................................................... 47
2
[Gizli]
PROJE AŞAMALARI
BENZETİM YAZILIMI SEÇİMİ
Benzetim için ilk önce Icarus ve Modelsim kullanılmıĢtır. Icarus ile tasarımda bellek iĢlemleri hariç
diğer iĢlemler çalıĢabilir durumundayken, Icarusun fazla sanal olması ve kartlara uyum sorunu olduğu
için Icarus kullanımına son verilmiĢ ve Modelsim kullanımına ağırlık verilmiĢtir. Benzetimler
Modelsim üzerinde devam ettirilmiĢtir. Sonrasında Okul tarafından bize sağlanan Altera marka bir
FPGA kartı üzerinde çalıĢabilmek için benzetim için Quartus kullanılmaya baĢlanmıĢtır. Böylelikle
iĢlemcinin gerçekleĢtirileceği platform olan fpga üzerinde de deneyim sahibi olundu. Quartus’u
kullanırken ayrıca bazı durumlarda yine Modelsimden yararlanılmıĢtır. ġu an bize gönderilen Xilinx
kartlara uyum adına ISE WebPack 9.1 ve onun benzetim aracını kullanılmaya baĢlanmıĢtır. Çarpma,
AMB ve Kaydırıcı birimleri kodlanmıĢ ve benzetimleri gerçekleĢtirilmiĢtir.
Benzetim yazılımı seçim süreci basitten karmaĢığa doğru bir yol izlemiĢtir. Bu Ģekilde grubun verilog
konusunda da bilgi birikimini artırması sağlanmıĢtır. Son olarak benzetim için yarıĢma tarafından bize
sağlanan kartlarla da geçiĢi sağlayacak olan Xilinx ISE benzetim aracı ve Modelsim kullanımında
karar kılınmıĢtır. Platform değiĢimleri bilgi birikimimizin ve öğrenme kolaylığı açısından faydalı
olduysa da projenin ilerleyiĢini yavaĢlatmıĢtır.
SENTEZ
BUYRUK YAKALAMA
ĠĢlemcinin sanal tasarımı yapılırken ilk adım buyruk türleri ve bir buyrukta hangi bitlerin neleri ifade
ettiğini belirlenmesi olmuĢtur. Buyrukların yakalanma iĢlemi sırasında program sayacından belleğe
verilen değerin bellekte gösterdiği ilgili adresteki buyruk, veriyoluna verilir.
Program sayacının artırılması için birkaç ihtimal bulunmaktadır. Bunlardan birincisi anlık değerle
program sayacının artırılması durumudur. Ġkinci olarak program sayacı bir arttırılır. Üçüncü olarak da
program sayacına anlık değer yazılmaktadır.
BUYRUK ÇÖZÜMLEME
GerçekleĢtirilen Kasırga1 iĢlemcisinin buyrukları 16 bit olacaktır ve 11 bitlik anlık değerler
kullanılacaktır. GerçekleĢtirilmesi gereken 30 buyruk ise 5 bitle ifade edilecektir. Kasırga1
iĢlemcisinde üç tür buyruk vardır. Bunlar A-tipi, Y-tipi ve D-tipi buyruklardır. A-tipi buyruklar anlık
değerle yapılan iĢlemleri ifade eder. Burada 5 bit yapılacak iĢlemi bildirir ve geri kalan 11 bit anlık
değerdir.
3
[Gizli]
Anlık değerle yapılan iĢlemler genelde birikeçle yapılan iĢlemlerdir. Bunlarda yazmaçtan değer almak
yerine direkt kullanıcıdan alınan değerler kullanılır. Y-tipi buyruklar ise yazmaç tipi buyruklardır.
Yazmaç tipi buyruklarda iki yazmaçla yapılan iĢlem bir sonuç yazmacına yazılır. Bu tip buyruklarda
16 bit içinden ilk 5 bit iĢlemi gösterirken sonraki 3 bit sonucun yazılacağı yazmacı, daha sonra gelen 6
bit ise iĢlemlerin yapılacağı iki yazmacı gösterir. D-tipi buyruk ise iĢlem biti ve iki yazmacı gösterir.
Ġkinci yazmaçtaki değer birinci yazmaçla yapılacak iĢleme dair değerler tutar.
YÜRÜTME
ARĠTMETĠK MANTIK BĠRĠMĠ (AMB)
Bu birimin etkilediği bayraklar sıfır, elde, taĢma ve iĢaret bayraklarıdır. AMB’de iĢlenen temel
iĢlemler ve iĢlem bitleri Ģunlardır;

000 ADD

111 SUB

010 XOR

011 AND

100 OR

001 NOT
ADD
A ve B yazmaçlarındaki 16 bitlik iki sayının toplanması iĢlemidir.
SUB
B yazmacındaki değerin A yazmacından çıkarılması iĢlemidir. Bu iĢlem toplama iĢleminin aynısıdır.
Fakat toplayıcıya giren B yazmacındaki değerin tersi alınarak toplayıcıya sokulması gerekmektedir.
XOR
A ve B yazmacındaki 16 bitlik iki değere özel veya iĢlemi uygulanmasıdır. ĠĢlem biti 010’dir.
AND
A ve B yazmacındaki 16 bitlik iki değere “VE” iĢlemi uygulanmasıdır. ĠĢlem biti 011’dir.
OR
A ve B yazmacındaki 16 bitlik iki değere “VEYA” iĢlemi uygulanmasıdır. ĠĢlem biti 100’dir.
4
[Gizli]
NOT
B yazmacındaki tersinin alınmasıdır.
AMB Bloğu
AMB’nin Ģeması
5
[Gizli]
Toplayıcı ve bayraklar
4 bitlik CLA toplayıcı
6
[Gizli]
Alu.v
module alu (a,b,s,out,c_out,overflow,sign,zero,clk);
input [15:0] a,b;
input [2:0] s;
input clk;
reg [15:0] out_r;
output c_out,overflow,sign,zero;
output [15:0] out;
reg [2:0] temp_s0;
reg [2:0] temp_s1;
reg [2:0] temp_s2;
wire [15:0] sump,sumn;
wire zeronot,c_out2,c_out;
always @(posedge clk) begin
temp_s0 <= s;
temp_s1 <= temp_s0;
temp_s2 <= temp_s1;
if(temp_s2 == 3'b000) begin
out_r <= sump;
end
else if(temp_s2 == 3'b001) begin
out_r <= ~b;
end
else if(temp_s2 == 3'b010) begin
out_r <= a ^ b;
end
else if(temp_s2 == 3'b011) begin
out_r <= a&b ;
end
else if(temp_s2 == 3'b100) begin
out_r <= a | b;
end
7
[Gizli]
else if(temp_s2 == 3'b101) begin
out_r <= out_r;
end
else if (temp_s2 == 3'b110) begin
out_r <= out_r;
end
else begin
out_r <= sumn;
end
end
neg U2(sump,sumn,c_out,a,b,overflow,temp_s2,clk);
assign sign=out_r[15];
assign zeronot=out_r[15]
|out_r[14]|out_r[13]|out_r[12]|out_r[11]|out_r[10]|out_r[9]|out_r[8]
|out_r[7]|out_r[6]|out_r[5]
|out_r[4]|out_r[3]|out_r[2]|out_r[1]|out_r[0];
assign zero=~zeronot;
assign out = out_r;
endmodule
Neg.v
module neg(sump,sumn,c_out,a,b,overflow,s,clk);
input [15:0] a,b;
input [2:0] s;
input clk;
output [15:0] sump,sumn;
output c_out,overflow;
reg overflow_r,x,c,c_outr;
wire [15:0] y,z;
wire c_out1,c_out2,overflow2,overflow1,t,d;
assign y=~b;
assign z=y+16'd1;
always @(posedge clk) begin
8
[Gizli]
if(s == 3'b000) begin
overflow_r
<= overflow2;
c_outr
<= c_out2;
end
else if(s == 3'b111) begin
overflow_r
<= overflow1;
c_outr
<= c_out1;
end
else begin
overflow_r
<= overflow1;
c_outr
<= c_out1;
end
end
add U8(sumn,c_out1,a,z,overflow1);
add U7 (sump,c_out2,a,b,overflow2);
assign overflow = overflow_r;
assign c_out=c_outr;
endmodule
Add.v
module add (sum,c_out,a,b,overflag);
output [15:0] sum;
output overflag,c_out;
input [15:0] a,b;
wire [3:0] sum1,sum2,sum3,sum4;
wire c_out1,c_out2,c_out3,c_out4,overflag,over3;
assign c_in=1'b0;
cla4 u1(sum1,c_out1,a[3:0],b[3:0],c_in,over0);
cla4 u2(sum2,c_out2,a[7:4],b[7:4],c_out1,over1);
cla4 u3(sum3,c_out3,a[11:8],b[11:8],c_out2,over2);
cla4 u4(sum4,c_out4,a[15:12],b[15:12],c_out3,over3);
assign sum [3:0]=sum1;
assign sum [7:4]=sum2;
assign sum [11:8]=sum3;
assign sum [15:12]=sum4;
9
[Gizli]
assign overflag=(a[15]&b[15]&~sum[15]) |( ~a[15]&~b[15]&sum [15]);
//assign overflag=over3;
assign c_out = c_out4;
endmodule
Cla4.v
module cla4(sum,c_out,a,b,c_in,overflag);
output [3:0] sum;
output c_out,overflag;
input [3:0] a,b;
input c_in;
wire p0,g0,p1,g1,p2,g2,p3,g3;
wire c4,c3,c2,c1,c_in;
//assign c_in= 1'b0;
assign p0= a[0] ^ b[0];
assign p1= a[1] ^ b[1];
assign p2= a[2] ^ b[2];
assign p3= a[3] ^ b[3];
assign g0= a[0] & b[0],
g1= a[1] & b[1],
g2= a[2] & b[2],
g3= a[3] & b[3];
assign
c1=g0 | (p0 & c_in),
c2=g1 | (p1 & g0) | (p1 & p0 & c_in),
c3= g2 | (p2 & g1) | (p2 & p1 & g0) | (p2 & p1 & p0 & c_in),
c4= g3 | (p3&g2) | (p3&p2&g1) | (p3&p2&p1&g0) | (p3 & p2 & p1 & p0 & c_in)
;
10
[Gizli]
assign sum[0] = p0 ^ c_in ,
sum[1] = p1 ^ c1 ,
sum[2] = p2 ^ c2 ,
sum[3] = p3 ^ c3 ,
c_out = c4,
overflag=c3;
endmodule
ÇARPMA BĠRĠMĠ
Çarpma Birimi belirli bir çarpım algoritmasını gerçekleĢtirecek bir devredir.

Karatsuba Algoritması (1962) : 2320 den büyük sayıların çarpımında etkilidir.

Toom - Cook(1966) : Orta büyüklükteki sayıların çarpımında etkili olan bir algoritmadır.

Schönhage – Strassen (1971) : Büyük boyutlu sayıların çarpımında en etkili algoritmadır. 217 den
büyük sayılarda etkili olduğu için değerlendirilmemiĢtir. FFT kullanılan bir Ģekli de mevcuttur.

Booth Algoritması (1951) : Booth çarpım algoritması iĢaretli sayıları 2’ye tümleyen Ģeklinde
çarpan bir algoritmadır.

CSA Çarpım algoritması : (Carry Selected Adder) Çarpımın toplamalar üzerinden yapılığı bir
algoritmadır ancak elde değerlerinin önceden hesaplanıp seçimi yapılması ile hız kazanır.
Kasırga iĢlemcisinde CSA algoritması kullanılmıĢtır. Algoritmayı gerçekleĢtiren kodlar ve devre
Ģeması aĢağıda gösterilmiĢtir.
11
[Gizli]
Çarpıcı ġeması
12
[Gizli]
256 Ara çarpma hücresinden birinin Ģeması
16 bitlik çarpıcı
13
[Gizli]
Csa_carpici.v
module multiplication_16(x,y,su,outHi,outLo,zr,sgn,clk);
input [15:0] x,y;
input clk;
input su;
output [15:0] outHi,outLo;
output zr,sgn;
reg [15:0] outHi_r,outLo_r;
reg zr_r,sgn_r;
wire [31:0] sonuc;
wire [15:0] satir1_s, satir1_c,satir2_s, satir2_c, satir3_s, satir3_c,
satir4_s, satir4_c;
wire [15:0] satir5_s, satir5_c,satir6_s, satir6_c, satir7_s, satir7_c,
satir8_s, satir8_c;
wire [15:0] satir9_s, satir9_c,satir10_s, satir10_c, satir11_s,
satir11_c, satir12_s, satir12_c;
wire [15:0] satir13_s, satir13_c,satir14_s, satir14_c, satir15_s,
satir15_c, satir16_s, satir16_c;
wire [13:0] ha_ara;
//csa_hucre(toplam,elde,giren_toplam,giren_elde,a,b)
//satır1
csa_hucre CSA1(satir1_s[0],satir1_c[0],1'b0,1'b0,x[0],y[0]);
csa_hucre CSA2(satir1_s[1],satir1_c[1],1'b0,1'b0,x[1],y[0]);
csa_hucre CSA3(satir1_s[2],satir1_c[2],1'b0,1'b0,x[2],y[0]);
csa_hucre CSA4(satir1_s[3],satir1_c[3],1'b0,1'b0,x[3],y[0]);
csa_hucre CSA5(satir1_s[4],satir1_c[4],1'b0,1'b0,x[4],y[0]);
csa_hucre CSA6(satir1_s[5],satir1_c[5],1'b0,1'b0,x[5],y[0]);
csa_hucre CSA7(satir1_s[6],satir1_c[6],1'b0,1'b0,x[6],y[0]);
csa_hucre CSA8(satir1_s[7],satir1_c[7],1'b0,1'b0,x[7],y[0]);
csa_hucre CSA9(satir1_s[8],satir1_c[8],1'b0,1'b0,x[8],y[0]);
csa_hucre CSA10(satir1_s[9],satir1_c[9],1'b0,1'b0,x[9],y[0]);
csa_hucre CSA11(satir1_s[10],satir1_c[10],1'b0,1'b0,x[10],y[0]);
[Gizli]
csa_hucre CSA12(satir1_s[11],satir1_c[11],1'b0,1'b0,x[11],y[0]);
csa_hucre CSA13(satir1_s[12],satir1_c[12],1'b0,1'b0,x[12],y[0]);
csa_hucre CSA14(satir1_s[13],satir1_c[13],1'b0,1'b0,x[13],y[0]);
csa_hucre CSA15(satir1_s[14],satir1_c[14],1'b0,1'b0,x[14],y[0]);
csa_hucre CSA16(satir1_s[15],satir1_c[15],1'b0,1'b0,x[15],y[0]);
//satır2
csa_hucre
CSA17(satir2_s[0],satir2_c[0],satir1_s[1],satir1_c[0],x[0],y[1]);
csa_hucre
CSA18(satir2_s[1],satir2_c[1],satir1_s[2],satir1_c[1],x[1],y[1]);
csa_hucre
CSA19(satir2_s[2],satir2_c[2],satir1_s[3],satir1_c[2],x[2],y[1]);
csa_hucre
CSA20(satir2_s[3],satir2_c[3],satir1_s[4],satir1_c[3],x[3],y[1]);
csa_hucre
CSA21(satir2_s[4],satir2_c[4],satir1_s[5],satir1_c[4],x[4],y[1]);
csa_hucre
CSA22(satir2_s[5],satir2_c[5],satir1_s[6],satir1_c[5],x[5],y[1]);
csa_hucre
CSA23(satir2_s[6],satir2_c[6],satir1_s[7],satir1_c[6],x[6],y[1]);
csa_hucre
CSA24(satir2_s[7],satir2_c[7],satir1_s[8],satir1_c[7],x[7],y[1]);
csa_hucre
CSA25(satir2_s[8],satir2_c[8],satir1_s[9],satir1_c[8],x[8],y[1]);
csa_hucre
CSA26(satir2_s[9],satir2_c[9],satir1_s[10],satir1_c[9],x[9],y[1]);
csa_hucre
CSA27(satir2_s[10],satir2_c[10],satir1_s[11],satir1_c[10],x[10],y[1]);
csa_hucre
CSA28(satir2_s[11],satir2_c[11],satir1_s[12],satir1_c[11],x[11],y[1]);
csa_hucre
CSA29(satir2_s[12],satir2_c[12],satir1_s[13],satir1_c[12],x[12],y[1]);
csa_hucre
CSA30(satir2_s[13],satir2_c[13],satir1_s[14],satir1_c[13],x[13],y[1]);
csa_hucre
CSA31(satir2_s[14],satir2_c[14],satir1_s[15],satir1_c[14],x[14],y[1]);
csa_hucre
CSA32(satir2_s[15],satir2_c[15],1'b0,satir1_c[15],x[15],y[1]);
15
[Gizli]
//satır3
csa_hucre
CSA33(satir3_s[0],satir3_c[0],satir2_s[1],satir2_c[0],x[0],y[2]);
csa_hucre
CSA34(satir3_s[1],satir3_c[1],satir2_s[2],satir2_c[1],x[1],y[2]);
csa_hucre
CSA35(satir3_s[2],satir3_c[2],satir2_s[3],satir2_c[2],x[2],y[2]);
csa_hucre
CSA36(satir3_s[3],satir3_c[3],satir2_s[4],satir2_c[3],x[3],y[2]);
csa_hucre
CSA37(satir3_s[4],satir3_c[4],satir2_s[5],satir2_c[4],x[4],y[2]);
csa_hucre
CSA38(satir3_s[5],satir3_c[5],satir2_s[6],satir2_c[5],x[5],y[2]);
csa_hucre
CSA39(satir3_s[6],satir3_c[6],satir2_s[7],satir2_c[6],x[6],y[2]);
csa_hucre
CSA40(satir3_s[7],satir3_c[7],satir2_s[8],satir2_c[7],x[7],y[2]);
csa_hucre
CSA41(satir3_s[8],satir3_c[8],satir2_s[9],satir2_c[8],x[8],y[2]);
csa_hucre
CSA42(satir3_s[9],satir3_c[9],satir2_s[10],satir2_c[9],x[9],y[2]);
csa_hucre
CSA43(satir3_s[10],satir3_c[10],satir2_s[11],satir2_c[10],x[10],y[2]);
csa_hucre
CSA44(satir3_s[11],satir3_c[11],satir2_s[12],satir2_c[11],x[11],y[2]);
csa_hucre
CSA45(satir3_s[12],satir3_c[12],satir2_s[13],satir2_c[12],x[12],y[2]);
csa_hucre
CSA46(satir3_s[13],satir3_c[13],satir2_s[14],satir2_c[13],x[13],y[2]);
csa_hucre
CSA47(satir3_s[14],satir3_c[14],satir2_s[15],satir2_c[14],x[14],y[2]);
csa_hucre
CSA48(satir3_s[15],satir3_c[15],1'b0,satir2_c[15],x[15],y[2]);
//satır4
csa_hucre
CSA49(satir4_s[0],satir4_c[0],satir3_s[1],satir3_c[0],x[0],y[3]);
csa_hucre
CSA50(satir4_s[1],satir4_c[1],satir3_s[2],satir3_c[1],x[1],y[3]);
csa_hucre
CSA51(satir4_s[2],satir4_c[2],satir3_s[3],satir3_c[2],x[2],y[3]);
16
[Gizli]
csa_hucre
CSA52(satir4_s[3],satir4_c[3],satir3_s[4],satir3_c[3],x[3],y[3]);
csa_hucre
CSA53(satir4_s[4],satir4_c[4],satir3_s[5],satir3_c[4],x[4],y[3]);
csa_hucre
CSA54(satir4_s[5],satir4_c[5],satir3_s[6],satir3_c[5],x[5],y[3]);
csa_hucre
CSA55(satir4_s[6],satir4_c[6],satir3_s[7],satir3_c[6],x[6],y[3]);
csa_hucre
CSA56(satir4_s[7],satir4_c[7],satir3_s[8],satir3_c[7],x[7],y[3]);
csa_hucre
CSA57(satir4_s[8],satir4_c[8],satir3_s[9],satir3_c[8],x[8],y[3]);
csa_hucre
CSA58(satir4_s[9],satir4_c[9],satir3_s[10],satir3_c[9],x[9],y[3]);
csa_hucre
CSA59(satir4_s[10],satir4_c[10],satir3_s[11],satir3_c[10],x[10],y[3]);
csa_hucre
CSA60(satir4_s[11],satir4_c[11],satir3_s[12],satir3_c[11],x[11],y[3]);
csa_hucre
CSA61(satir4_s[12],satir4_c[12],satir3_s[13],satir3_c[12],x[12],y[3]);
csa_hucre
CSA62(satir4_s[13],satir4_c[13],satir3_s[14],satir3_c[13],x[13],y[3]);
csa_hucre
CSA63(satir4_s[14],satir4_c[14],satir3_s[15],satir3_c[14],x[14],y[3]);
csa_hucre
CSA64(satir4_s[15],satir4_c[15],1'b0,satir3_c[15],x[15],y[3]);
//satır5
csa_hucre
CSA65(satir5_s[0],satir5_c[0],satir4_s[1],satir4_c[0],x[0],y[4]);
csa_hucre
CSA66(satir5_s[1],satir5_c[1],satir4_s[2],satir4_c[1],x[1],y[4]);
csa_hucre
CSA67(satir5_s[2],satir5_c[2],satir4_s[3],satir4_c[2],x[2],y[4]);
csa_hucre
CSA68(satir5_s[3],satir5_c[3],satir4_s[4],satir4_c[3],x[3],y[4]);
csa_hucre
CSA69(satir5_s[4],satir5_c[4],satir4_s[5],satir4_c[4],x[4],y[4]);
csa_hucre
CSA70(satir5_s[5],satir5_c[5],satir4_s[6],satir4_c[5],x[5],y[4]);
csa_hucre
17
[Gizli]
CSA71(satir5_s[6],satir5_c[6],satir4_s[7],satir4_c[6],x[6],y[4]);
csa_hucre
CSA72(satir5_s[7],satir5_c[7],satir4_s[8],satir4_c[7],x[7],y[4]);
csa_hucre
CSA73(satir5_s[8],satir5_c[8],satir4_s[9],satir4_c[8],x[8],y[4]);
csa_hucre
CSA74(satir5_s[9],satir5_c[9],satir4_s[10],satir4_c[9],x[9],y[4]);
csa_hucre
CSA75(satir5_s[10],satir5_c[10],satir4_s[11],satir4_c[10],x[10],y[4]);
csa_hucre
CSA76(satir5_s[11],satir5_c[11],satir4_s[12],satir4_c[11],x[11],y[4]);
csa_hucre
CSA77(satir5_s[12],satir5_c[12],satir4_s[13],satir4_c[12],x[12],y[4]);
csa_hucre
CSA78(satir5_s[13],satir5_c[13],satir4_s[14],satir4_c[13],x[13],y[4]);
csa_hucre
CSA79(satir5_s[14],satir5_c[14],satir4_s[15],satir4_c[14],x[14],y[4]);
csa_hucre
CSA80(satir5_s[15],satir5_c[15],1'b0,satir4_c[15],x[15],y[4]);
//satır6
csa_hucre
CSA81(satir6_s[0],satir6_c[0],satir5_s[1],satir5_c[0],x[0],y[5]);
csa_hucre
CSA82(satir6_s[1],satir6_c[1],satir5_s[2],satir5_c[1],x[1],y[5]);
csa_hucre
CSA83(satir6_s[2],satir6_c[2],satir5_s[3],satir5_c[2],x[2],y[5]);
csa_hucre
CSA84(satir6_s[3],satir6_c[3],satir5_s[4],satir5_c[3],x[3],y[5]);
csa_hucre
CSA85(satir6_s[4],satir6_c[4],satir5_s[5],satir5_c[4],x[4],y[5]);
csa_hucre
CSA86(satir6_s[5],satir6_c[5],satir5_s[6],satir5_c[5],x[5],y[5]);
csa_hucre
CSA87(satir6_s[6],satir6_c[6],satir5_s[7],satir5_c[6],x[6],y[5]);
csa_hucre
CSA88(satir6_s[7],satir6_c[7],satir5_s[8],satir5_c[7],x[7],y[5]);
csa_hucre
CSA89(satir6_s[8],satir6_c[8],satir5_s[9],satir5_c[8],x[8],y[5]);
csa_hucre
CSA90(satir6_s[9],satir6_c[9],satir5_s[10],satir5_c[9],x[9],y[5]);
18
[Gizli]
csa_hucre
CSA91(satir6_s[10],satir6_c[10],satir5_s[11],satir5_c[10],x[10],y[5]);
csa_hucre
CSA92(satir6_s[11],satir6_c[11],satir5_s[12],satir5_c[11],x[11],y[5]);
csa_hucre
CSA93(satir6_s[12],satir6_c[12],satir5_s[13],satir5_c[12],x[12],y[5]);
csa_hucre
CSA94(satir6_s[13],satir6_c[13],satir5_s[14],satir5_c[13],x[13],y[5]);
csa_hucre
CSA95(satir6_s[14],satir6_c[14],satir5_s[15],satir5_c[14],x[14],y[5]);
csa_hucre
CSA96(satir6_s[15],satir6_c[15],1'b0,satir5_c[15],x[15],y[5]);
//satır7
csa_hucre
CSA97(satir7_s[0],satir7_c[0],satir6_s[1],satir6_c[0],x[0],y[6]);
csa_hucre
CSA98(satir7_s[1],satir7_c[1],satir6_s[2],satir6_c[1],x[1],y[6]);
csa_hucre
CSA99(satir7_s[2],satir7_c[2],satir6_s[3],satir6_c[2],x[2],y[6]);
csa_hucre
CSA100(satir7_s[3],satir7_c[3],satir6_s[4],satir6_c[3],x[3],y[6]);
csa_hucre
CSA101(satir7_s[4],satir7_c[4],satir6_s[5],satir6_c[4],x[4],y[6]);
csa_hucre
CSA102(satir7_s[5],satir7_c[5],satir6_s[6],satir6_c[5],x[5],y[6]);
csa_hucre
CSA103(satir7_s[6],satir7_c[6],satir6_s[7],satir6_c[6],x[6],y[6]);
csa_hucre
CSA104(satir7_s[7],satir7_c[7],satir6_s[8],satir6_c[7],x[7],y[6]);
csa_hucre
CSA105(satir7_s[8],satir7_c[8],satir6_s[9],satir6_c[8],x[8],y[6]);
csa_hucre
CSA106(satir7_s[9],satir7_c[9],satir6_s[10],satir6_c[9],x[9],y[6]);
csa_hucre
CSA107(satir7_s[10],satir7_c[10],satir6_s[11],satir6_c[10],x[10],y[6]);
csa_hucre
CSA108(satir7_s[11],satir7_c[11],satir6_s[12],satir6_c[11],x[11],y[6]);
csa_hucre
CSA109(satir7_s[12],satir7_c[12],satir6_s[13],satir6_c[12],x[12],y[6]);
csa_hucre
19
[Gizli]
CSA110(satir7_s[13],satir7_c[13],satir6_s[14],satir6_c[13],x[13],y[6]);
csa_hucre
CSA111(satir7_s[14],satir7_c[14],satir6_s[15],satir6_c[14],x[14],y[6]);
csa_hucre
CSA112(satir7_s[15],satir7_c[15],1'b0,satir6_c[15],x[15],y[6]);
//satır8
csa_hucre
CSA113(satir8_s[0],satir8_c[0],satir7_s[1],satir7_c[0],x[0],y[7]);
csa_hucre
CSA114(satir8_s[1],satir8_c[1],satir7_s[2],satir7_c[1],x[1],y[7]);
csa_hucre
CSA115(satir8_s[2],satir8_c[2],satir7_s[3],satir7_c[2],x[2],y[7]);
csa_hucre
CSA116(satir8_s[3],satir8_c[3],satir7_s[4],satir7_c[3],x[3],y[7]);
csa_hucre
CSA117(satir8_s[4],satir8_c[4],satir7_s[5],satir7_c[4],x[4],y[7]);
csa_hucre
CSA118(satir8_s[5],satir8_c[5],satir7_s[6],satir7_c[5],x[5],y[7]);
csa_hucre
CSA119(satir8_s[6],satir8_c[6],satir7_s[7],satir7_c[6],x[6],y[7]);
csa_hucre
CSA120(satir8_s[7],satir8_c[7],satir7_s[8],satir7_c[7],x[7],y[7]);
csa_hucre
CSA121(satir8_s[8],satir8_c[8],satir7_s[9],satir7_c[8],x[8],y[7]);
csa_hucre
CSA122(satir8_s[9],satir8_c[9],satir7_s[10],satir7_c[9],x[9],y[7]);
csa_hucre
CSA123(satir8_s[10],satir8_c[10],satir7_s[11],satir7_c[10],x[10],y[7]);
csa_hucre
CSA124(satir8_s[11],satir8_c[11],satir7_s[12],satir7_c[11],x[11],y[7]);
csa_hucre
CSA125(satir8_s[12],satir8_c[12],satir7_s[13],satir7_c[12],x[12],y[7]);
csa_hucre
CSA126(satir8_s[13],satir8_c[13],satir7_s[14],satir7_c[13],x[13],y[7]);
csa_hucre
CSA127(satir8_s[14],satir8_c[14],satir7_s[15],satir7_c[14],x[14],y[7]);
csa_hucre
CSA128(satir8_s[15],satir8_c[15],1'b0,satir7_c[15],x[15],y[7]);
//satır9
20
[Gizli]
csa_hucre
CSA129(satir9_s[0],satir9_c[0],satir8_s[1],satir8_c[0],x[0],y[8]);
csa_hucre
CSA130(satir9_s[1],satir9_c[1],satir8_s[2],satir8_c[1],x[1],y[8]);
csa_hucre
CSA131(satir9_s[2],satir9_c[2],satir8_s[3],satir8_c[2],x[2],y[8]);
csa_hucre
CSA132(satir9_s[3],satir9_c[3],satir8_s[4],satir8_c[3],x[3],y[8]);
csa_hucre
CSA133(satir9_s[4],satir9_c[4],satir8_s[5],satir8_c[4],x[4],y[8]);
csa_hucre
CSA134(satir9_s[5],satir9_c[5],satir8_s[6],satir8_c[5],x[5],y[8]);
csa_hucre
CSA135(satir9_s[6],satir9_c[6],satir8_s[7],satir8_c[6],x[6],y[8]);
csa_hucre
CSA136(satir9_s[7],satir9_c[7],satir8_s[8],satir8_c[7],x[7],y[8]);
csa_hucre
CSA137(satir9_s[8],satir9_c[8],satir8_s[9],satir8_c[8],x[8],y[8]);
csa_hucre
CSA138(satir9_s[9],satir9_c[9],satir8_s[10],satir8_c[9],x[9],y[8]);
csa_hucre
CSA139(satir9_s[10],satir9_c[10],satir8_s[11],satir8_c[10],x[10],y[8]);
csa_hucre
CSA140(satir9_s[11],satir9_c[11],satir8_s[12],satir8_c[11],x[11],y[8]);
csa_hucre
CSA141(satir9_s[12],satir9_c[12],satir8_s[13],satir8_c[12],x[12],y[8]);
csa_hucre
CSA142(satir9_s[13],satir9_c[13],satir8_s[14],satir8_c[13],x[13],y[8]);
csa_hucre
CSA143(satir9_s[14],satir9_c[14],satir8_s[15],satir8_c[14],x[14],y[8]);
csa_hucre
CSA144(satir9_s[15],satir9_c[15],1'b0,satir8_c[15],x[15],y[8]);
//satır10
csa_hucre
CSA145(satir10_s[0],satir10_c[0],satir9_s[1],satir9_c[0],x[0],y[9]);
csa_hucre
CSA146(satir10_s[1],satir10_c[1],satir9_s[2],satir9_c[1],x[1],y[9]);
csa_hucre
CSA147(satir10_s[2],satir10_c[2],satir9_s[3],satir9_c[2],x[2],y[9]);
csa_hucre
21
[Gizli]
CSA148(satir10_s[3],satir10_c[3],satir9_s[4],satir9_c[3],x[3],y[9]);
csa_hucre
CSA149(satir10_s[4],satir10_c[4],satir9_s[5],satir9_c[4],x[4],y[9]);
csa_hucre
CSA150(satir10_s[5],satir10_c[5],satir9_s[6],satir9_c[5],x[5],y[9]);
csa_hucre
CSA151(satir10_s[6],satir10_c[6],satir9_s[7],satir9_c[6],x[6],y[9]);
csa_hucre
CSA152(satir10_s[7],satir10_c[7],satir9_s[8],satir9_c[7],x[7],y[9]);
csa_hucre
CSA153(satir10_s[8],satir10_c[8],satir9_s[9],satir9_c[8],x[8],y[9]);
csa_hucre
CSA154(satir10_s[9],satir10_c[9],satir9_s[10],satir9_c[9],x[9],y[9]);
csa_hucre
CSA155(satir10_s[10],satir10_c[10],satir9_s[11],satir9_c[10],x[10],y[9]);
csa_hucre
CSA156(satir10_s[11],satir10_c[11],satir9_s[12],satir9_c[11],x[11],y[9]);
csa_hucre
CSA157(satir10_s[12],satir10_c[12],satir9_s[13],satir9_c[12],x[12],y[9]);
csa_hucre
CSA158(satir10_s[13],satir10_c[13],satir9_s[14],satir9_c[13],x[13],y[9]);
csa_hucre
CSA159(satir10_s[14],satir10_c[14],satir9_s[15],satir9_c[14],x[14],y[9]);
csa_hucre
CSA160(satir10_s[15],satir10_c[15],1'b0,satir9_c[15],x[15],y[9]);
//satır11
csa_hucre
CSA161(satir11_s[0],satir11_c[0],satir10_s[1],satir10_c[0],x[0],y[10]);
csa_hucre
CSA162(satir11_s[1],satir11_c[1],satir10_s[2],satir10_c[1],x[1],y[10]);
csa_hucre
CSA163(satir11_s[2],satir11_c[2],satir10_s[3],satir10_c[2],x[2],y[10]);
csa_hucre
CSA164(satir11_s[3],satir11_c[3],satir10_s[4],satir10_c[3],x[3],y[10]);
csa_hucre
CSA165(satir11_s[4],satir11_c[4],satir10_s[5],satir10_c[4],x[4],y[10]);
csa_hucre
CSA166(satir11_s[5],satir11_c[5],satir10_s[6],satir10_c[5],x[5],y[10]);
csa_hucre
CSA167(satir11_s[6],satir11_c[6],satir10_s[7],satir10_c[6],x[6],y[10]);
22
[Gizli]
csa_hucre
CSA168(satir11_s[7],satir11_c[7],satir10_s[8],satir10_c[7],x[7],y[10]);
csa_hucre
CSA169(satir11_s[8],satir11_c[8],satir10_s[9],satir10_c[8],x[8],y[10]);
csa_hucre
CSA170(satir11_s[9],satir11_c[9],satir10_s[10],satir10_c[9],x[9],y[10]);
csa_hucre
CSA171(satir11_s[10],satir11_c[10],satir10_s[11],satir10_c[10],x[10],y[10]);
csa_hucre
CSA172(satir11_s[11],satir11_c[11],satir10_s[12],satir10_c[11],x[11],y[10]);
csa_hucre
CSA173(satir11_s[12],satir11_c[12],satir10_s[13],satir10_c[12],x[12],y[10]);
csa_hucre
CSA174(satir11_s[13],satir11_c[13],satir10_s[14],satir10_c[13],x[13],y[10]);
csa_hucre
CSA175(satir11_s[14],satir11_c[14],satir10_s[15],satir10_c[14],x[14],y[10]);
csa_hucre
CSA176(satir11_s[15],satir11_c[15],1'b0,satir10_c[15],x[15],y[10]);
//satır12
csa_hucre
CSA177(satir12_s[0],satir12_c[0],satir11_s[1],satir11_c[0],x[0],y[11]);
csa_hucre
CSA178(satir12_s[1],satir12_c[1],satir11_s[2],satir11_c[1],x[1],y[11]);
csa_hucre
CSA179(satir12_s[2],satir12_c[2],satir11_s[3],satir11_c[2],x[2],y[11]);
csa_hucre
CSA180(satir12_s[3],satir12_c[3],satir11_s[4],satir11_c[3],x[3],y[11]);
csa_hucre
CSA181(satir12_s[4],satir12_c[4],satir11_s[5],satir11_c[4],x[4],y[11]);
csa_hucre
CSA182(satir12_s[5],satir12_c[5],satir11_s[6],satir11_c[5],x[5],y[11]);
csa_hucre
CSA183(satir12_s[6],satir12_c[6],satir11_s[7],satir11_c[6],x[6],y[11]);
csa_hucre
CSA184(satir12_s[7],satir12_c[7],satir11_s[8],satir11_c[7],x[7],y[11]);
csa_hucre
CSA185(satir12_s[8],satir12_c[8],satir11_s[9],satir11_c[8],x[8],y[11]);
csa_hucre
CSA186(satir12_s[9],satir12_c[9],satir11_s[10],satir11_c[9],x[9],y[11]);
csa_hucre
23
[Gizli]
CSA187(satir12_s[10],satir12_c[10],satir11_s[11],satir11_c[10],x[10],y[11]);
csa_hucre
CSA188(satir12_s[11],satir12_c[11],satir11_s[12],satir11_c[11],x[11],y[11]);
csa_hucre
CSA189(satir12_s[12],satir12_c[12],satir11_s[13],satir11_c[12],x[12],y[11]);
csa_hucre
CSA190(satir12_s[13],satir12_c[13],satir11_s[14],satir11_c[13],x[13],y[11]);
csa_hucre
CSA191(satir12_s[14],satir12_c[14],satir11_s[15],satir11_c[14],x[14],y[11]);
csa_hucre
CSA192(satir12_s[15],satir12_c[15],1'b0,satir11_c[15],x[15],y[11]);
//satır13
csa_hucre
CSA193(satir13_s[0],satir13_c[0],satir12_s[1],satir12_c[0],x[0],y[12]);
csa_hucre
CSA194(satir13_s[1],satir13_c[1],satir12_s[2],satir12_c[1],x[1],y[12]);
csa_hucre
CSA195(satir13_s[2],satir13_c[2],satir12_s[3],satir12_c[2],x[2],y[12]);
csa_hucre
CSA196(satir13_s[3],satir13_c[3],satir12_s[4],satir12_c[3],x[3],y[12]);
csa_hucre
CSA197(satir13_s[4],satir13_c[4],satir12_s[5],satir12_c[4],x[4],y[12]);
csa_hucre
CSA198(satir13_s[5],satir13_c[5],satir12_s[6],satir12_c[5],x[5],y[12]);
csa_hucre
CSA199(satir13_s[6],satir13_c[6],satir12_s[7],satir12_c[6],x[6],y[12]);
csa_hucre
CSA200(satir13_s[7],satir13_c[7],satir12_s[8],satir12_c[7],x[7],y[12]);
csa_hucre
CSA201(satir13_s[8],satir13_c[8],satir12_s[9],satir12_c[8],x[8],y[12]);
csa_hucre
CSA202(satir13_s[9],satir13_c[9],satir12_s[10],satir12_c[9],x[9],y[12]);
csa_hucre
CSA203(satir13_s[10],satir13_c[10],satir12_s[11],satir12_c[10],x[10],y[12]);
csa_hucre
CSA204(satir13_s[11],satir13_c[11],satir12_s[12],satir12_c[11],x[11],y[12]);
csa_hucre
CSA205(satir13_s[12],satir13_c[12],satir12_s[13],satir12_c[12],x[12],y[12]);
csa_hucre
CSA206(satir13_s[13],satir13_c[13],satir12_s[14],satir12_c[13],x[13],y[12]);
24
[Gizli]
csa_hucre
CSA207(satir13_s[14],satir13_c[14],satir12_s[15],satir12_c[14],x[14],y[12]);
csa_hucre
CSA208(satir13_s[15],satir13_c[15],1'b0,satir12_c[15],x[15],y[12]);
//satır14
csa_hucre
CSA209(satir14_s[0],satir14_c[0],satir13_s[1],satir13_c[0],x[0],y[13]);
csa_hucre
CSA210(satir14_s[1],satir14_c[1],satir13_s[2],satir13_c[1],x[1],y[13]);
csa_hucre
CSA211(satir14_s[2],satir14_c[2],satir13_s[3],satir13_c[2],x[2],y[13]);
csa_hucre
CSA212(satir14_s[3],satir14_c[3],satir13_s[4],satir13_c[3],x[3],y[13]);
csa_hucre
CSA213(satir14_s[4],satir14_c[4],satir13_s[5],satir13_c[4],x[4],y[13]);
csa_hucre
CSA214(satir14_s[5],satir14_c[5],satir13_s[6],satir13_c[5],x[5],y[13]);
csa_hucre
CSA215(satir14_s[6],satir14_c[6],satir13_s[7],satir13_c[6],x[6],y[13]);
csa_hucre
CSA216(satir14_s[7],satir14_c[7],satir13_s[8],satir13_c[7],x[7],y[13]);
csa_hucre
CSA217(satir14_s[8],satir14_c[8],satir13_s[9],satir13_c[8],x[8],y[13]);
csa_hucre
CSA218(satir14_s[9],satir14_c[9],satir13_s[10],satir13_c[9],x[9],y[13]);
csa_hucre
CSA219(satir14_s[10],satir14_c[10],satir13_s[11],satir13_c[10],x[10],y[13]);
csa_hucre
CSA220(satir14_s[11],satir14_c[11],satir13_s[12],satir13_c[11],x[11],y[13]);
csa_hucre
CSA221(satir14_s[12],satir14_c[12],satir13_s[13],satir13_c[12],x[12],y[13]);
csa_hucre
CSA222(satir14_s[13],satir14_c[13],satir13_s[14],satir13_c[13],x[13],y[13]);
csa_hucre
CSA223(satir14_s[14],satir14_c[14],satir13_s[15],satir13_c[14],x[14],y[13]);
csa_hucre
CSA224(satir14_s[15],satir14_c[15],1'b0,satir13_c[15],x[15],y[13]);
//satır15
csa_hucre
25
[Gizli]
CSA225(satir15_s[0],satir15_c[0],satir14_s[1],satir14_c[0],x[0],y[14]);
csa_hucre
CSA226(satir15_s[1],satir15_c[1],satir14_s[2],satir14_c[1],x[1],y[14]);
csa_hucre
CSA227(satir15_s[2],satir15_c[2],satir14_s[3],satir14_c[2],x[2],y[14]);
csa_hucre
CSA228(satir15_s[3],satir15_c[3],satir14_s[4],satir14_c[3],x[3],y[14]);
csa_hucre
CSA229(satir15_s[4],satir15_c[4],satir14_s[5],satir14_c[4],x[4],y[14]);
csa_hucre
CSA230(satir15_s[5],satir15_c[5],satir14_s[6],satir14_c[5],x[5],y[14]);
csa_hucre
CSA231(satir15_s[6],satir15_c[6],satir14_s[7],satir14_c[6],x[6],y[14]);
csa_hucre
CSA232(satir15_s[7],satir15_c[7],satir14_s[8],satir14_c[7],x[7],y[14]);
csa_hucre
CSA233(satir15_s[8],satir15_c[8],satir14_s[9],satir14_c[8],x[8],y[14]);
csa_hucre
CSA234(satir15_s[9],satir15_c[9],satir14_s[10],satir14_c[9],x[9],y[14]);
csa_hucre
CSA235(satir15_s[10],satir15_c[10],satir14_s[11],satir14_c[10],x[10],y[14]);
csa_hucre
CSA236(satir15_s[11],satir15_c[11],satir14_s[12],satir14_c[11],x[11],y[14]);
csa_hucre
CSA237(satir15_s[12],satir15_c[12],satir14_s[13],satir14_c[12],x[12],y[14]);
csa_hucre
CSA238(satir15_s[13],satir15_c[13],satir14_s[14],satir14_c[13],x[13],y[14]);
csa_hucre
CSA239(satir15_s[14],satir15_c[14],satir14_s[15],satir14_c[14],x[14],y[14]);
csa_hucre
CSA240(satir15_s[15],satir15_c[15],1'b0,satir14_c[15],x[15],y[14]);
//satır16
csa_hucre
CSA241(satir16_s[0],satir16_c[0],satir15_s[1],satir15_c[0],x[0],y[15]);
csa_hucre
CSA242(satir16_s[1],satir16_c[1],satir15_s[2],satir15_c[1],x[1],y[15]);
csa_hucre
CSA243(satir16_s[2],satir16_c[2],satir15_s[3],satir15_c[2],x[2],y[15]);
csa_hucre
CSA244(satir16_s[3],satir16_c[3],satir15_s[4],satir15_c[3],x[3],y[15]);
26
[Gizli]
csa_hucre
CSA245(satir16_s[4],satir16_c[4],satir15_s[5],satir15_c[4],x[4],y[15]);
csa_hucre
CSA246(satir16_s[5],satir16_c[5],satir15_s[6],satir15_c[5],x[5],y[15]);
csa_hucre
CSA247(satir16_s[6],satir16_c[6],satir15_s[7],satir15_c[6],x[6],y[15]);
csa_hucre
CSA248(satir16_s[7],satir16_c[7],satir15_s[8],satir15_c[7],x[7],y[15]);
csa_hucre
CSA249(satir16_s[8],satir16_c[8],satir15_s[9],satir15_c[8],x[8],y[15]);
csa_hucre
CSA250(satir16_s[9],satir16_c[9],satir15_s[10],satir15_c[9],x[9],y[15]);
csa_hucre
CSA251(satir16_s[10],satir16_c[10],satir15_s[11],satir15_c[10],x[10],y[15]);
csa_hucre
CSA252(satir16_s[11],satir16_c[11],satir15_s[12],satir15_c[11],x[11],y[15]);
csa_hucre
CSA253(satir16_s[12],satir16_c[12],satir15_s[13],satir15_c[12],x[12],y[15]);
csa_hucre
CSA254(satir16_s[13],satir16_c[13],satir15_s[14],satir15_c[13],x[13],y[15]);
csa_hucre
CSA255(satir16_s[14],satir16_c[14],satir15_s[15],satir15_c[14],x[14],y[15]);
csa_hucre
CSA256(satir16_s[15],satir16_c[15],1'b0,satir15_c[15],x[15],y[15]);
assign sonuc[0] = satir1_s[0];
assign sonuc[1] = satir2_s[0];
assign sonuc[2] = satir3_s[0];
assign sonuc[3] = satir4_s[0];
assign sonuc[4] = satir5_s[0];
assign sonuc[5] = satir6_s[0];
assign sonuc[6] = satir7_s[0];
assign sonuc[7] = satir8_s[0];
assign sonuc[8] = satir9_s[0];
assign sonuc[9] = satir10_s[0];
assign sonuc[10] = satir11_s[0];
assign sonuc[11] = satir12_s[0];
assign sonuc[12] = satir13_s[0];
assign sonuc[13] = satir14_s[0];
assign sonuc[14] = satir15_s[0];
assign sonuc[15] = satir16_s[0];
27
[Gizli]
// full adder basamağı
// full_adder(sum,cout,a,b,cin)
full_adder FA1(sonuc[16],ha_ara[0],satir16_s[1],satir16_c[0],1'b0);
full_adder
FA2(sonuc[17],ha_ara[1],satir16_s[2],satir16_c[1],ha_ara[0]);
full_adder
FA3(sonuc[18],ha_ara[2],satir16_s[3],satir16_c[2],ha_ara[1]);
full_adder
FA4(sonuc[19],ha_ara[3],satir16_s[4],satir16_c[3],ha_ara[2]);
full_adder
FA5(sonuc[20],ha_ara[4],satir16_s[5],satir16_c[4],ha_ara[3]);
full_adder
FA6(sonuc[21],ha_ara[5],satir16_s[6],satir16_c[5],ha_ara[4]);
full_adder
FA7(sonuc[22],ha_ara[6],satir16_s[7],satir16_c[6],ha_ara[5]);
full_adder
FA8(sonuc[23],ha_ara[7],satir16_s[8],satir16_c[7],ha_ara[6]);
full_adder
FA9(sonuc[24],ha_ara[8],satir16_s[9],satir16_c[8],ha_ara[7]);
full_adder
FA10(sonuc[25],ha_ara[9],satir16_s[10],satir16_c[9],ha_ara[8]);
full_adder
FA11(sonuc[26],ha_ara[10],satir16_s[11],satir16_c[10],ha_ara[9]);
full_adder
FA12(sonuc[27],ha_ara[11],satir16_s[12],satir16_c[11],ha_ara[10]);
full_adder
FA13(sonuc[28],ha_ara[12],satir16_s[13],satir16_c[12],ha_ara[11]);
full_adder
FA14(sonuc[29],ha_ara[13],satir16_s[14],satir16_c[13],ha_ara[12]);
full_adder
FA15(sonuc[31],sonuc[30],satir16_s[15],satir16_c[14],ha_ara[13]);
always @ (posedge clk)
begin
outHi_r <= sonuc[31:16];
outLo_r <= sonuc[15:0];
zr_r <= !(|sonuc);
sgn_r <= sonuc[31];
end
28
[Gizli]
assign zr = zr_r;
assign sgn = sgn_r;
assign outHi = outHi_r;
assign outLo = outLo_r;
endmodule
Csa_hucre.v
module csa_hucre(toplam,elde,giren_toplam,giren_elde,a,b);
input giren_toplam,giren_elde,a,b;
output toplam,elde;
wire ara;
assign ara = a&b;
full_adder FA(toplam,elde,ara,giren_toplam,giren_elde);
endmodule
Full_adder.v
module full_adder(sum,cout,a,b,cin);
output sum,cout;
input a,b,cin;
assign sum = a^b^cin;
assign cout = (a&b)|(cin&(a|b));
endmodule
29
[Gizli]
KAYDIRMA BĠRĠMĠ
Kaydırma iĢlemi sağa/sola ve aritmetik/mantıksal olarak farklılaĢmıĢtır. Buna göre sağa aritmetik,
sağa mantıksal ve sola aritmetik, sola mantıksal olmak üzere dört Ģekilde yapılabilir. Sağ ve sol
kaydırmanın yönlerini bildirirken aritmetik ve mantıksal olması da kaydırmanın türünü bildirir.
Kaydırıcı bloğu
Sonucu seçmek için kullanılan 17 çoklayıcıdan biri
30
[Gizli]
Kaydırıcı Devre ġeması
31
[Gizli]
Shifter.v
module shifter_16(reset,toShift,shifted,cAl,amount,cRl,zf,sf,clk);
input [15:0] toShift;
input [3:0] amount;
input cAl;
input cRl;
input clk;
input reset;
output [15:0] shifted;
output zf;
output sf;
reg [15:0] shifted_r;
reg zf_r;
reg sf_r;
reg [4:0] cntrl;
reg [1:0] ind;
reg temp_cAl0;
reg temp_cAl1;
reg temp_cAl2;
reg temp_cRl0;
reg temp_cRl1;
reg temp_cRl2;
reg [31:0] in1,in2,in3,in4,in5,in6,in7,in8;
reg [31:0] in9,in10,in11,in12,in13,in14,in15,in16;
wire out1,out2,out3,out4,out5,out6,out7,out8;
wire out9,out10,out11,out12,out13,out14,out15,out16;
wire direc;
always @ (posedge clk)
32
[Gizli]
begin
if(reset == 1'b0) begin
in1 <= 0;
in2 <= 0;
in3 <= 0;
in4 <= 0;
in5 <= 0;
in6 <= 0;
in7 <= 0;
in8 <= 0;
in9 <= 0;
in10 <= 0;
in11 <= 0;
in12 <= 0;
in13 <= 0;
in14 <= 0;
in15 <= 0;
in16 <= 0;
cntrl <= 0;
ind <= 0;
temp_cAl0 <= 0;
temp_cAl1 <= 0;
temp_cAl2 <= 0;
temp_cRl0 <= 0;
temp_cRl1 <= 0;
temp_cRl2 <= 0;
end
else begin
temp_cAl0 <= cAl;
temp_cAl1 <= temp_cAl0;
temp_cAl2 <= temp_cAl1;
temp_cRl0 <= cRl;
temp_cRl1 <= temp_cRl0;
33
[Gizli]
temp_cRl2 <= temp_cRl1;
cntrl [4:0] <= {temp_cRl2,amount};
ind[0] <= 1'b0;
ind[1] <= toShift[15];
in1[0] <= toShift[0];
in1[15:1] <= 15'h0;
in1[16] <= toShift[0];
in1[17] <= toShift[1];
in1[18] <= toShift[2];
in1[19] <= toShift[3];
in1[20] <= toShift[4];
in1[21] <= toShift[5];
in1[22] <= toShift[6];
in1[23] <= toShift[7];
in1[24] <= toShift[8];
in1[25] <= toShift[9];
in1[26] <= toShift[10];
in1[27] <= toShift[11];
in1[28] <= toShift[12];
in1[29] <= toShift[13];
in1[30] <= toShift[14];
in1[31] <= toShift[15];
in2[0] <= toShift[1];
in2[1] <= toShift[0];
in2[15:2] <= 14'h0;
in2[16] <= toShift[1];
in2[17] <= toShift[2];
in2[18] <= toShift[3];
in2[19] <= toShift[4];
in2[20] <= toShift[5];
in2[21] <= toShift[6];
in2[22] <= toShift[7];
in2[23] <= toShift[8];
in2[24] <= toShift[9];
in2[25] <= toShift[10];
in2[26] <= toShift[11];
34
[Gizli]
in2[27] <= toShift[12];
in2[28] <= toShift[13];
in2[29] <= toShift[14];
in2[30] <= toShift[15];
in2[31] <= direc;
in3[0] <= toShift[2];
in3[1] <= toShift[1];
in3[2] <= toShift[0];
in3[15:3] <= 13'h0;
in3[16] <= toShift[2];
in3[17] <= toShift[3];
in3[18] <= toShift[4];
in3[19] <= toShift[5];
in3[20] <= toShift[6];
in3[21] <= toShift[7];
in3[22] <= toShift[8];
in3[23] <= toShift[9];
in3[24] <= toShift[10];
in3[25] <= toShift[11];
in3[26] <= toShift[12];
in3[27] <= toShift[13];
in3[28] <= toShift[14];
in3[29] <= toShift[15];
in3[31:30] <= {2{direc}};
in4[0] <= toShift[3];
in4[1] <= toShift[2];
in4[2] <= toShift[1];
in4[3] <= toShift[0];
in4[15:4] <= 12'h0;
in4[16] <= toShift[3];
in4[17] <= toShift[4];
in4[18] <= toShift[5];
in4[19] <= toShift[6];
in4[20] <= toShift[7];
in4[21] <= toShift[8];
in4[22] <= toShift[9];
in4[23] <= toShift[10];
in4[24] <= toShift[11];
35
[Gizli]
in4[25] <= toShift[12];
in4[26] <= toShift[13];
in4[27] <= toShift[14];
in4[28] <= toShift[15];
in4[31:29] <= {3{direc}};
in5[0] <= toShift[4];
in5[1] <= toShift[3];
in5[2] <= toShift[2];
in5[3] <= toShift[1];
in5[4] <= toShift[0];
in5[15:5] <= 11'h0;
in5[16] <= toShift[4];
in5[17] <= toShift[5];
in5[18] <= toShift[6];
in5[19] <= toShift[7];
in5[20] <= toShift[8];
in5[21] <= toShift[9];
in5[22] <= toShift[10];
in5[23] <= toShift[11];
in5[24] <= toShift[12];
in5[25] <= toShift[13];
in5[26] <= toShift[14];
in5[27] <= toShift[15];
in5[31:28] <= {4{direc}};
in6[0] <= toShift[5];
in6[1] <= toShift[4];
in6[2] <= toShift[3];
in6[3] <= toShift[2];
in6[4] <= toShift[1];
in6[5] <= toShift[0];
in6[15:6] <= 10'h0;
in6[16] <= toShift[5];
in6[17] <= toShift[6];
in6[18] <= toShift[7];
in6[19] <= toShift[8];
in6[20] <= toShift[9];
in6[21] <= toShift[10];
in6[22] <= toShift[11];
36
[Gizli]
in6[23] <= toShift[12];
in6[24] <= toShift[13];
in6[25] <= toShift[14];
in6[26] <= toShift[15];
in6[31:27] <= {5{direc}};
in7[0] <= toShift[6];
in7[1] <= toShift[5];
in7[2] <= toShift[4];
in7[3] <= toShift[3];
in7[4] <= toShift[2];
in7[5] <= toShift[1];
in7[6] <= toShift[0];
in7[15:7] <= 9'h0;
in7[16] <= toShift[6];
in7[17] <= toShift[7];
in7[18] <= toShift[8];
in7[19] <= toShift[9];
in7[20] <= toShift[10];
in7[21] <= toShift[11];
in7[22] <= toShift[12];
in7[23] <= toShift[13];
in7[24] <= toShift[14];
in7[25] <= toShift[15];
in7[31:26] <= {6{direc}};
in8[0] <= toShift[7];
in8[1] <= toShift[6];
in8[2] <= toShift[5];
in8[3] <= toShift[4];
in8[4] <= toShift[3];
in8[5] <= toShift[2];
in8[6] <= toShift[1];
in8[7] <= toShift[0];
in8[15:8] <= 8'h0;
in8[16] <= toShift[7];
in8[17] <= toShift[8];
in8[18] <= toShift[9];
in8[19] <= toShift[10];
in8[20] <= toShift[11];
37
[Gizli]
in8[21] <= toShift[12];
in8[22] <= toShift[13];
in8[23] <= toShift[14];
in8[24] <= toShift[15];
in8[31:25] <= {7{direc}};
in9[0] <= toShift[8];
in9[1] <= toShift[7];
in9[2] <= toShift[6];
in9[3] <= toShift[5];
in9[4] <= toShift[4];
in9[5] <= toShift[3];
in9[6] <= toShift[2];
in9[7] <= toShift[1];
in9[8] <= toShift[0];
in9[15:9] <= 7'h0;
in9[16] <= toShift[8];
in9[17] <= toShift[9];
in9[18] <= toShift[10];
in9[19] <= toShift[11];
in9[20] <= toShift[12];
in9[21] <= toShift[13];
in9[22] <= toShift[14];
in9[23] <= toShift[15];
in9[31:24] <= {8{direc}};
in10[0] <= toShift[9];
in10[1] <= toShift[8];
in10[2] <= toShift[7];
in10[3] <= toShift[6];
in10[4] <= toShift[5];
in10[5] <= toShift[4];
in10[6] <= toShift[3];
in10[7] <= toShift[2];
in10[8] <= toShift[1];
in10[9] <= toShift[0];
in10[15:10] <= 6'h0;
in10[16] <= toShift[9];
in10[17] <= toShift[10];
in10[18] <= toShift[11];
38
[Gizli]
in10[19] <= toShift[12];
in10[20] <= toShift[13];
in10[21] <= toShift[14];
in10[22] <= toShift[15];
in10[31:23] <= {9{direc}};
in11[0] <= toShift[10];
in11[1] <= toShift[9];
in11[2] <= toShift[8];
in11[3] <= toShift[7];
in11[4] <= toShift[6];
in11[5] <= toShift[5];
in11[6] <= toShift[4];
in11[7] <= toShift[3];
in11[8] <= toShift[2];
in11[9] <= toShift[1];
in11[10] <= toShift[0];
in11[15:11] <= 5'h0;
in11[16] <= toShift[10];
in11[17] <= toShift[11];
in11[18] <= toShift[12];
in11[19] <= toShift[13];
in11[20] <= toShift[14];
in11[21] <= toShift[15];
in11[31:22] <= {10{direc}};
in12[0] <= toShift[11];
in12[1] <= toShift[10];
in12[2] <= toShift[9];
in12[3] <= toShift[8];
in12[4] <= toShift[7];
in12[5] <= toShift[6];
in12[6] <= toShift[5];
in12[7] <= toShift[4];
in12[8] <= toShift[3];
in12[9] <= toShift[2];
in12[10] <= toShift[1];
in12[11] <= toShift[0];
in12[15:12] <= 4'h0;
in12[16] <= toShift[11];
39
[Gizli]
in12[17] <= toShift[12];
in12[18] <= toShift[13];
in12[19] <= toShift[14];
in12[20] <= toShift[15];
in12[31:21] <= {11{direc}};
in13[0] <= toShift[12];
in13[1] <= toShift[11];
in13[2] <= toShift[10];
in13[3] <= toShift[9];
in13[4] <= toShift[8];
in13[5] <= toShift[7];
in13[6] <= toShift[6];
in13[7] <= toShift[5];
in13[8] <= toShift[4];
in13[9] <= toShift[3];
in13[10] <= toShift[2];
in13[11] <= toShift[1];
in13[12] <= toShift[0];
in13[15:13] <= 3'h0;
in13[16] <= toShift[12];
in13[17] <= toShift[13];
in13[18] <= toShift[14];
in13[19] <= toShift[15];
in13[31:20] <= {12{direc}};
in14[0] <= toShift[13];
in14[1] <= toShift[12];
in14[2] <= toShift[11];
in14[3] <= toShift[10];
in14[4] <= toShift[9];
in14[5] <= toShift[8];
in14[6] <= toShift[7];
in14[7] <= toShift[6];
in14[8] <= toShift[5];
in14[9] <= toShift[4];
in14[10] <= toShift[3];
in14[11] <= toShift[2];
in14[12] <= toShift[1];
in14[13] <= toShift[0];
40
[Gizli]
in14[15:14] <= 2'h0;
in14[16] <= toShift[13];
in14[17] <= toShift[14];
in14[18] <= toShift[15];
in14[31:19] <= {13{direc}};
in15[0] <= toShift[14];
in15[1] <= toShift[13];
in15[2] <= toShift[12];
in15[3] <= toShift[11];
in15[4] <= toShift[10];
in15[5] <= toShift[9];
in15[6] <= toShift[8];
in15[7] <= toShift[7];
in15[8] <= toShift[6];
in15[9] <= toShift[5];
in15[10] <= toShift[4];
in15[11] <= toShift[3];
in15[12] <= toShift[2];
in15[13] <= toShift[1];
in15[14] <= toShift[0];
in15[15] <= 1'b0;
in15[16] <= toShift[14];
in15[17] <= toShift[15];
in15[31:18] <= {14{direc}};
in16[0] <= toShift[15];
in16[1] <= toShift[14];
in16[2] <= toShift[13];
in16[3] <= toShift[12];
in16[4] <= toShift[11];
in16[5] <= toShift[10];
in16[6] <= toShift[9];
in16[7] <= toShift[8];
in16[8] <= toShift[7];
in16[9] <= toShift[6];
in16[10] <= toShift[5];
in16[11] <= toShift[4];
in16[12] <= toShift[3];
in16[13] <= toShift[2];
41
[Gizli]
in16[14] <= toShift[1];
in16[15] <= toShift[0];
in16[16] <= toShift[15];
in16[31:17] <= {15{direc}};
end
end
mux_32 mxx1(in1,out1,cntrl);
mux_32 mxx2(in2,out2,cntrl);
mux_32 mxx3(in3,out3,cntrl);
mux_32 mxx4(in4,out4,cntrl);
mux_32 mxx5(in5,out5,cntrl);
mux_32 mxx6(in6,out6,cntrl);
mux_32 mxx7(in7,out7,cntrl);
mux_32 mxx8(in8,out8,cntrl);
mux_32 mxx9(in9,out9,cntrl);
mux_32 mxx10(in10,out10,cntrl);
mux_32 mxx11(in11,out11,cntrl);
mux_32 mxx12(in12,out12,cntrl);
mux_32 mxx13(in13,out13,cntrl);
mux_32 mxx14(in14,out14,cntrl);
mux_32 mxx15(in15,out15,cntrl);
mux_32 mxx16(in16,out16,cntrl);
mux_2 mxx(ind,direc,temp_cAl2);
assign shifted[0] = out1;
assign shifted[1] = out2;
assign shifted[2] = out3;
assign shifted[3] = out4;
assign shifted[4] = out5;
assign shifted[5] = out6;
assign shifted[6] = out7;
assign shifted[7] = out8;
assign shifted[8] = out9;
assign shifted[9] = out10;
assign shifted[10] = out11;
42
[Gizli]
assign shifted[11] = out12;
assign shifted[12] = out13;
assign shifted[13] = out14;
assign shifted[14] = out15;
assign shifted[15] = out16;
assign zf = !(|shifted);
assign sf = out16;
//assign zf = zf_r;
//assign sf = sf_r;
//assign shifted = shifted_r;
endmodule
Mux32.v
module mux_32(in,out,sel);
input [31:0] in;
input [4:0] sel;
output out;
assign out=in[sel];
endmodule
Mux2.v
module mux_2(in,out,sel);
input [1:0] in;
input sel;
output out;
reg out_r;
always @ (in or sel)
begin
43
[Gizli]
out_r <= in[sel];
end
assign out=out_r;
endmodule
DENETĠM BĠRĠMĠ
Denetim birimi iĢlemcinin çoklayıcıları ve diğer birimleri için denetim değerleri üreten bir birimdir.
ĠĢlem bitleri ve bayraklar denetim biriminin giriĢleri, denetim değerleri ise denetim biriminin
çıktılarıdır.
YAZMAÇ ÖBEĞĠ
Yazmaç öbeği sekiz satırlık onaltıĢar SRAM hücresinin birleĢiminden oluĢmaktadır.
Birinci ve Ġkinci yoldan AMB, Çarpma ve Kaydırma birimlerine gelen değerlerle iĢlemler
gerçekleĢtirilmektedir. Her birim iĢlemini bitirdikten sonra sonucunu veriyolunun sonunda bulunan
çoklayıcıya gönderir. ĠĢlenen buyruğa göre sonuç değeri seçilerek yazmaçlara gönderilir. ĠĢlemler
yapıldığı sırada bayrak bitleri de güncellenir. Ayrıca bayrak bitleri denetim birimine de gönderilerek
Dallanma iĢlemlerinin yapılması sağlanır.
Dallanma buyruklarının gerçekleĢtirilmesi için “sıfır” bayrak bitinden yararlanılır. Eğer bayrak bitinin
değeri 1 ise ve BEQ buyruğu iĢletiliyorsa program sayacı önündeki çoklayıcıdan program sayacının
iĢaretle geniĢletilmiĢ anlık değerle toplanmıĢ hali seçilir. Bu Ģekilde program sayacına anlık değerle
gelen atlama miktarı eklenmiĢ olur. Anlık değer eksi ya da artı olarak seçilebilir. Artı seçilen anlık
değer programın ileriye doğru, eksi seçilen ise geriye doğru atlamasını sağlar. Eğer BNE buyruğu
iĢletiliyorsa ve sıfır bayrağı 0 ise PS için iĢaretle geniĢletilmiĢ anlık değerin PS ile toplanmıĢ hali
seçilir.
BA buyruğunda ise program sayacının değeri olarak anlık değerin iĢaretle geniĢletilmiĢ hali seçilir.
Dallanma buyrukları haricinde PS değeri 1 artırılır. Bunun nedeni bellekte verilerin 16 bitlik kelimeler
halinde durmasıdır.
Yukarda verilen kodların hepsi çalĢır halde bulunan, kart üzerinde denenmiĢ kodlardır. Tüm birimler
saat darbesi ile çalıĢmaktadır.
44
[Gizli]
BELLEK
GerçekleĢtirilecek iĢlemcinin belleği iki giriĢ ve iki çıkıĢtan oluĢmaktadır. Program sayacından
gelecek buyruk adresleri için bir giriĢ, load ve store iĢlemlerindeki verilerin adresleri için bir giriĢ
bulunmaktadır. Belleğin tek giriĢe değil de iki giriĢe sahip olmasının nedeni load ve store iĢlemlerinde
veriyolunda buyruk iĢlenirken program sayacının artmasında sorun olmaması içindir. Ayrıca belleğin
veri adresi ve buyruk adresleri için iki ayrı çıkıĢı bulunmaktadır.
YAZMA
Program sayacından gelen değerle bellekten alınan buyruk yazmaç öbeğine getirilir. Yazmaç öbeğine
gelindiğinde Ra sonucun yazılacağı yazmacı gösterir, bu yazmaç herhangi bir yazmaç ya da birikeç
olabilir. Birikeç ve diğer yazmaç arasında seçim yapabilmek için sonuç yazmacının adresinin verildiği
giriĢe bir çoklayıcı bağlanmıĢtır. Bu çoklayıcının giriĢleri Ra’yı bildiren <5:7> arasındaki 3 bit ve
birikecin adresini bildiren 000 bitleridir. Yazmaç öbeğinde bulunan “yaz” denetimi sonuç yazmacına
gelen değerin yazılıp yazılmayacağını denetler. Eğer yaz denetimi etkinse sonuç yazmacı olarak
seçilmiĢ olan birikeç ya da genel amaçlı yazmaca yazmaç öbeğinin Veri GiriĢinden giren değer yazılır.
BUYRUK KÜMESİ
ĠġLEMLER
00000 HLT
10000 SLL (D Tipi)
00001 SYSCALL
10001 SRL (D Tipi)
100: Kaydırma
00010 - Idle
10010 SLA (D Tipi)
ĠĢlemleri
00011 - Idle
10011 SRA (D Tipi)
00100 ADD (Y Tipi)
10100 LW (D Tipi)
00101 SUB (Y Tipi)
00110 MUL (D Tipi)
001: Aritmetik
ĠĢlemler
10101 SW (A Tipi)
10110 MOV (D Tipi)
00111 MULU (D Tipi)
10111 CMP (D Tipi)
01000 AND (Y Tipi)
11000 MOVI (A Tipi)
01001 OR (Y Tipi)
01010 NOT (D Tipi)
010: Mantık
ĠĢlemleri
11001 ANDI (A Tipi)
11010 ORI (A Tipi)
01011 XOR (Y Tipi)
11011 XORI (A Tipi)
01100 BEQ (A Tipi)
11100 ADDI (A Tipi)
01101 BNE (A Tipi)
01110 BA (A Tipi)
01111 BL
011: Dallanma
11101 SUBI (A Tipi)
ĠĢlemleri
11110 MULI (A Tipi)
11111 NOP (A Tipi)
101: Load, Store,
Move ve Compare
110: Anlık Değer ile
Mantık ve MOV
111: Anlık Değerle
Aritmetik
ĠĢlemler ve NOP
45
[Gizli]
BUYRUK TÜRLERĠ
A-TİPİ: 5 bit iĢlem için, diğer 11 bit ise anlık değer için ayrılmıĢtır. Anlık değer ile yapılan tüm
iĢlemlerde bu buyruk türü kullanılmaktadır.
Y-TİPİ: 5 bit iĢlem için, 3 adet 3’er bit ise Ra, Rb ve Rc yazmaçları için ayrılmıĢtır. Ra’ya Rb ve Rc
yazmaçlarındaki veriler ile yapılan iĢlemin sonucu yazılır. Aritmetik iĢlemler iin kullanılmaktadır.
D-TİPİ: 5 bit iĢlem için, 2 adet 3’er bit ise Ra ve Rb yazmaçları için ayrılmıĢtır. Load, store, compare
ve shift gibi iĢlemler için kullanılmaktadır.
BAYRAKLAR
Sıfır  AMB veya çarpma biriminden çıkan sonucun sıfır olup olmadığına dair bilgi verir.
Elde  AMB de yapılan toplama iĢlemi sonucunda son basamağın toplanmasında ortaya çıkan bir
elde değerinin olup olmadığını bildirir.
Taşma  AMB de yapılacak iĢlemlerin sonucunun 16 bite sığmaması durumunda etkinleĢtirilir.
Çarpma biriminde bulunmaz.
İşaret  Çarpma birimi ya da AMB de yapılan iĢlemlerin sonucunun iĢaretinin negatif ya da pozitif
olmasını gösterir.
YAZMAÇLAR
000 Birikeç
001 Üst
010 Alt
011 Genel Amaçlı Yazmaç
100 Genel Amaçlı Yazmaç
101 Genel Amaçlı Yazmaç
110 Genel Amaçlı Yazmaç
111 Genel Amaçlı Yazmaç
46
[Gizli]
BENZETİM
Benzetim için tek tek tüm birimlerin benzetimin bitirilmesinden sonra tüm parçaların
birleĢtirilmesiyle tüm iĢlemci elde edilecektir. Tüm benzetimin tamamlanması için birleĢtirilmenin
bitmesi gerekmektedir. Bu nedenle bu kısma dair verilerin daha sonraki raporlarda eklenmesi
planlanmaktadır.
47

Benzer belgeler

Plazma 5

Plazma 5 EE&    :F2 $%!!!B !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! LD + +  0 # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!...

Detaylı