Skip to content

Instantly share code, notes, and snippets.

@erdemalkim
Created March 18, 2012 19:14
Show Gist options
  • Save erdemalkim/2079950 to your computer and use it in GitHub Desktop.
Save erdemalkim/2079950 to your computer and use it in GitHub Desktop.
Gecen hafta yaptigimiz toplama isleminin kodlari
module uygulama1 (SW, HEX7, HEX6, HEX5, HEX4, HEX3, HEX2, HEX1, HEX0);
input [15:0] SW;
output [0:6] HEX7, HEX6, HEX5, HEX4, HEX3, HEX2, HEX1, HEX0;
wire[3:0] A1, A0, B1, B0;
assign A1 = SW[15:12];
assign A0 = SW[11:8];
assign B1 = SW[7:4];
assign B0 = SW[3:0];
wire [4:0] S0, S1;
wire S2;
reg C1, C2;
wire [4:0] T1, T0; // BSD toplayici icin kullanilacak
reg [4:0] Z1, Z0; // BSD toplayici icin kullanilacak
// Iki sayinin birler basamagi toplanir (alabilecegi en yuksek deger
// 9+9=18 5-bit): C1,S0
assign T0 = {1'b0,A0} + {1'b0,B0};
always @ (T0) // T0 her degistiginde asagidaki blogu isletir.
begin // Verilogda kod bloklari beginle baslar end ile biter.
if (T0 > 5'd9)// Eger birler basamaklarinin toplami 9'dan buyukse...
begin
Z0 = 5'd10; // Toplam 9'dan buyukse sadece birler
// basamagini almak icin 10 cikarilacak.
C1 = 1'b1; // elde biti 1 olur.
end
else
begin
Z0 = 5'd0; // eger 9'dan buyuk degilse cikarmaya
// gerek yok.
C1 = 1'b0; // elde sifir olur.
end
end
assign S0 = T0 - Z0; // toplamin birler basamagi alinir.
// onlar basamaklari ve bir onceki toplamdan gelen elde biti toplanir.
assign T1 = {1'b0,A1} + {1'b0,B1} + C1;
always @ (T1) // T1 her degistiginde asagidaki blogu isletir.
begin // Bu blok birler basamagi ile ayni yapida.
if (T1 > 5'd9)
begin
Z1 = 5'd10;
C2 = 1'b1;
end
else
begin
Z1 = 5'd0;
C2 = 1'b0;
end
end
assign S1 = T1- Z1;
assign S2 = C2; // Elde biti yuzler basamagi olarak atanir.
// degerlerin 7-segment dekoderler ile gostergelerde gosterimi
bcd7seg digit7 (A1, HEX7);
bcd7seg digit6 (A0, HEX6);
bcd7seg digit5 (B1, HEX5);
bcd7seg digit4 (B0, HEX4);
bcd7seg digit2 ({3'b000, S2}, HEX2); // yuzler basamagi sadece bir oldugu
// icin onune 3 tane sifir ekledik.
bcd7seg digit1 (S1[3:0], HEX1);
bcd7seg digit0 (S0[3:0], HEX0);
assign HEX3 = 7'b1111111; // 7-bit uzunlugunda binary karsiligi
// 1111111 olan bir deger atadik
// (bunu 7'd127 seklindede atayabilirdik).
endmodule
module bcd7seg (bcd, display);
input [3:0] bcd;
output [0:6] display;
reg [0:6] display;
/*
* 0
* ---
* | |
* 5| |1
* | 6 |
* ---
* | |
* 4| |2
* | |
* ---
* 3
*/
always @ (bcd)
case (bcd) // Verilogda case islemi
// sart: dogruysa yapilacak atama
4'h0: display = 7'b0000001;
4'h1: display = 7'b1001111;
4'h2: display = 7'b0010010;
4'h3: display = 7'b0000110;
4'h4: display = 7'b1001100;
4'h5: display = 7'b0100100;
4'h6: display = 7'b0100000;
4'h7: display = 7'b0001111;
4'h8: display = 7'b0000000;
4'h9: display = 7'b0000100;
default: display = 7'b1111111;
endcase
endmodule
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment