-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdecoder 3 to 8
106 lines (99 loc) · 2.9 KB
/
decoder 3 to 8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// This code implements different levels of abstraction of 3 to 8 decoder. It also contains stimulus block to test the functionality of the modules that implement decoder
//functionality.
module dec1_3to8 (y7,y6,y5,y4,y3,y2,y1,y0,a,b,c); // Gate level abstraction using primitive gates
output y7,y6,y5,y4,y3,y2,y1,y0;
input a,b,c;
wire abar,bbar,cbar;
not(abar,a);
not(bbar,b);
not(cbar,c);
and(y0,abar,bbar,cbar);
and(y1,abar,bbar,c);
and(y2,abar,b,cbar);
and(y3,abar,b,c);
and(y4,a,bbar,cbar);
and(y5,a,bbar,c);
and(y6,a,b,cbar);
and(y7,a,b,c);
endmodule
module dec2_3to8 (y7,y6,y5,y4,y3,y2,y1,y0,a,b,c); // Data flow abstraction
output y7,y6,y5,y4,y3,y2,y1,y0;
input a,b,c;
assign y0=(~a)&(~b)&(~c),
y1=(~a)&(~b)&(c),
y2=(~a)&(b)&(~c),
y3=(~a)&(b)&(c),
y4=(a)&(~b)&(~c),
y5=(a)&(~b)&(c),
y6=(a)&(b)&(~c),
y7=(a)&(b)&(c);
endmodule
module dec3_3to8 (y7,y6,y5,y4,y3,y2,y1,y0,a,b,c); //Behavioural modelling
output reg y7,y6,y5,y4,y3,y2,y1,y0;
input a,b,c;
always @ (*)
begin
case ({a,b,c})
3'b000: begin y7=0;y6=0;y5=0;y4=0;y3=0;y2=0;y1=0;y0=1;end
3'b001: begin y7=0;y6=0;y5=0;y4=0;y3=0;y2=0;y1=1;y0=0;end
3'b010: begin y7=0;y6=0;y5=0;y4=0;y3=0;y2=1;y1=0;y0=0;end
3'b011: begin y7=0;y6=0;y5=0;y4=0;y3=1;y2=0;y1=0;y0=0;end
3'b100: begin y7=0;y6=0;y5=0;y4=1;y3=0;y2=0;y1=0;y0=0;end
3'b101: begin y7=0;y6=0;y5=1;y4=0;y3=0;y2=0;y1=0;y0=0;end
3'b110: begin y7=0;y6=1;y5=0;y4=0;y3=0;y2=0;y1=0;y0=0;end
3'b111: begin y7=1;y6=0;y5=0;y4=0;y3=0;y2=0;y1=0;y0=0;end
default : begin y7=1'bx;y6=1'bx;y5=1'bx;y4=1'bx;y3=1'bx;y2=1'bx;y1=1'bx;y0=1'bx;end
endcase
end
endmodule
module stimulus1;
reg a,b,c;
wire y7,y6,y5,y4,y3,y2,y1,y0;
dec1_3to8 d(y7,y6,y5,y4,y3,y2,y1,y0,a,b,c);
initial
begin
$monitor ($time, " y7= %b , y6 = %b , y5 = %b , y4 = %b , y3 = %b , y2 = %b , y1 = %b , y0 = %b , a = %b , b = %b , c = %b ",y7,y6,y5,y4,y3,y2,y1,y0,a,b,c);
#10 {a,b,c}=3'b000;
#10 {a,b,c}=3'b001;
#10 {a,b,c}=3'b010;
#10 {a,b,c}=3'b011;
#10 {a,b,c}=3'b100;
#10 {a,b,c}=3'b101;
#10 {a,b,c}=3'b110;
#10 {a,b,c}=3'b111;
end
endmodule
module stimulus2;
reg a,b,c;
wire y7,y6,y5,y4,y3,y2,y1,y0;
dec2_3to8 d(y7,y6,y5,y4,y3,y2,y1,y0,a,b,c);
initial
begin
$monitor ($time, " y7= %b , y6 = %b , y5 = %b , y4 = %b , y3 = %b , y2 = %b , y1 = %b , y0 = %b , a = %b , b = %b , c = %b ",y7,y6,y5,y4,y3,y2,y1,y0,a,b,c);
#10 {a,b,c}=3'b000;
#10 {a,b,c}=3'b001;
#10 {a,b,c}=3'b010;
#10 {a,b,c}=3'b011;
#10 {a,b,c}=3'b100;
#10 {a,b,c}=3'b101;
#10 {a,b,c}=3'b110;
#10 {a,b,c}=3'b111;
end
endmodule
module stimulus3;
reg a,b,c;
wire y7,y6,y5,y4,y3,y2,y1,y0;
dec3_3to8 d(y7,y6,y5,y4,y3,y2,y1,y0,a,b,c);
initial
begin
$monitor ($time, " y7= %b , y6 = %b , y5 = %b , y4 = %b , y3 = %b , y2 = %b , y1 = %b , y0 = %b , a = %b , b = %b , c = %b ",y7,y6,y5,y4,y3,y2,y1,y0,a,b,c);
#10 {a,b,c}=3'b000;
#10 {a,b,c}=3'b001;
#10 {a,b,c}=3'b010;
#10 {a,b,c}=3'b011;
#10 {a,b,c}=3'b100;
#10 {a,b,c}=3'b101;
#10 {a,b,c}=3'b110;
#10 {a,b,c}=3'b111;
end
endmodule