Created
March 18, 2012 19:14
-
-
Save erdemalkim/2079950 to your computer and use it in GitHub Desktop.
Gecen hafta yaptigimiz toplama isleminin kodlari
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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