Experiment 4
User-defined Primitives
CPE114L
3Q1920Info! Broken links? Email us at gtechphofficial@gmail.com
Drill4_1
primitive Majority3 ( Z, A, B, C ) ;
input A, B, C ;
output Z ;
table
// A B C Z
0 0 ? : 0 ;
0 ? 0 : 0 ;
? 0 0 : 0 ;
1 1 ? : 1 ;
1 ? 1 : 1 ;
? 1 1 : 1 ;
endtable
endprimitive
module testprimitive1;
reg A, B, C;
wire X;
Majority3 (X,A,B,C);
initial begin
A=1'b0;B=1'b0;C=1'b0;
$display(" A B C X");
$monitor(" %b %b %b %b",A,B,C,X);
#2 A=1'b0; B=1'b0; C=1'b0;
#2 A=1'b0; B=1'b0; C=1'b1;
#2 A=1'b0; B=1'b1; C=1'b0;
#2 A=1'b0; B=1'b1; C=1'b1;
#2 A=1'b1; B=1'b0; C=1'b0;
#2 A=1'b1; B=1'b0; C=1'b1;
#2 A=1'b1; B=1'b1; C=1'b0;
#2 A=1'b1; B=1'b1; C=1'b1;
#2 $finish;
end
endmodule
Drill4_2
primitive T_FF(F, clk, T);
input clk, T;
output F;
reg F;
initial F=0;
table
// CLK T : F(STATE) : F(NEXT)
(01) ? : x : 0 ;
(01) 0 : 0 : 0 ;
(01) 0 : 1 : 1 ;
(01) 1 : 0 : 1 ;
(01) 1 : 1 : 0 ;
(10) ? : x : 0 ;
(10) 0 : 0 : 0 ;
(10) 0 : 1 : 1 ;
(10) 1 : 0 : 0 ;
(10) 1 : 1 : 1 ;
endtable
endprimitive
module pri;
reg x, clk;
wire y;
T_FF TF(y, clk, x);
initial begin
x=0; clk=0;
end
always #1 clk=!clk;
initial begin
x=0;
#4 x=1;
repeat(8)
#8 x=~x;
end
initial begin
$display(" TIME clk T Q");
$monitor($time,,," %b %b %b ",clk, x, y);
#16 $finish;
end
endmodule
Exercise4_1
primitive DemuxD0(D, Y, S0, S1, S2);
input Y, S0, S1, S2;
output D;
table
// Y S0 S1 S2 D
0 b b b : 0;
1 0 0 0 : 1;
1 0 0 1 : 0;
1 0 1 0 : 0;
1 0 1 1 : 0;
1 1 0 0 : 0;
1 1 0 1 : 0;
1 1 1 0 : 0;
1 1 1 1 : 0;
endtable
endprimitive
primitive DemuxD1(D, Y, S0, S1, S2);
input Y, S0, S1, S2;
output D;
table
// Y S0 S1 S2 D
0 b b b : 0;
1 0 0 0 : 0;
1 0 0 1 : 1;
1 0 1 0 : 0;
1 0 1 1 : 0;
1 1 0 0 : 0;
1 1 0 1 : 0;
1 1 1 0 : 0;
1 1 1 1 : 0;
endtable
endprimitive
primitive DemuxD2(D, Y, S0, S1, S2);
input Y, S0, S1, S2;
output D;
table
// Y S0 S1 S2 D
0 b b b : 0;
1 0 0 0 : 0;
1 0 0 1 : 0;
1 0 1 0 : 1;
1 0 1 1 : 0;
1 1 0 0 : 0;
1 1 0 1 : 0;
1 1 1 0 : 0;
1 1 1 1 : 0;
endtable
endprimitive
primitive DemuxD3(D, Y, S0, S1, S2);
input Y, S0, S1, S2;
output D;
table
// Y S0 S1 S2 D
0 b b b : 0;
1 0 0 0 : 0;
1 0 0 1 : 0;
1 0 1 0 : 0;
1 0 1 1 : 1;
1 1 0 0 : 0;
1 1 0 1 : 0;
1 1 1 0 : 0;
1 1 1 1 : 0;
endtable
endprimitive
primitive DemuxD4(D, Y, S0, S1, S2);
input Y, S0, S1, S2;
output D;
table
// Y S0 S1 S2 D
0 b b b : 0;
1 0 0 0 : 0;
1 0 0 1 : 0;
1 0 1 0 : 0;
1 0 1 1 : 0;
1 1 0 0 : 1;
1 1 0 1 : 0;
1 1 1 0 : 0;
1 1 1 1 : 0;
endtable
endprimitive
primitive DemuxD5(D, Y, S0, S1, S2);
input Y, S0, S1, S2;
output D;
table
// Y S0 S1 S2 D
0 b b b : 0;
1 0 0 0 : 0;
1 0 0 1 : 0;
1 0 1 0 : 0;
1 0 1 1 : 0;
1 1 0 0 : 0;
1 1 0 1 : 1;
1 1 1 0 : 0;
1 1 1 1 : 0;
endtable
endprimitive
primitive DemuxD6(D, Y, S0, S1, S2);
input Y, S0, S1, S2;
output D;
table
// Y S0 S1 S2 D
0 b b b : 0;
1 0 0 0 : 0;
1 0 0 1 : 0;
1 0 1 0 : 0;
1 0 1 1 : 0;
1 1 0 0 : 0;
1 1 0 1 : 0;
1 1 1 0 : 1;
1 1 1 1 : 0;
endtable
endprimitive
primitive DemuxD7(D, Y, S0, S1, S2);
input Y, S0, S1, S2;
output D;
table
// Y S0 S1 S2 D
0 b b b : 0;
1 0 0 0 : 0;
1 0 0 1 : 0;
1 0 1 0 : 0;
1 0 1 1 : 0;
1 1 0 0 : 0;
1 1 0 1 : 0;
1 1 1 0 : 0;
1 1 1 1 : 1;
endtable
endprimitive
module exercise4_1;
reg Y, A, B, C;
wire [7:0]X;
DemuxD0 (X[0],Y,A,B,C);
DemuxD1 (X[1],Y,A,B,C);
DemuxD2 (X[2],Y,A,B,C);
DemuxD3 (X[3],Y,A,B,C);
DemuxD4 (X[4],Y,A,B,C);
DemuxD5 (X[5],Y,A,B,C);
DemuxD6 (X[6],Y,A,B,C);
DemuxD7 (X[7],Y,A,B,C);
initial begin
#2 Y=1'b0; A=1'b0; B=1'b0; C=1'b0;
$display("");
$display(" 8x1 Demultiplexer Truth Table");
$display("");
$display(" Y S1 S2 S3 D0 D1 D2 D3 D4 D5 D6 D7 ");
$monitor(" %b %b %b %b %b %b %b %b %b %b %b %b ", Y, A, B, C, X[0], X[1], X[2], X[3], X[4], X[5], X[6], X[7]);
#2 Y=1'b0; A=1'b0; B=1'b0; C=1'b1;
#2 Y=1'b0; A=1'b0; B=1'b1; C=1'b0;
#2 Y=1'b0; A=1'b0; B=1'b1; C=1'b1;
#2 Y=1'b0; A=1'b1; B=1'b0; C=1'b0;
#2 Y=1'b0; A=1'b1; B=1'b0; C=1'b1;
#2 Y=1'b0; A=1'b1; B=1'b1; C=1'b0;
#2 Y=1'b0; A=1'b1; B=1'b1; C=1'b1;
#2 Y=1'b1; A=1'b0; B=1'b0; C=1'b0;
#2 Y=1'b1; A=1'b0; B=1'b0; C=1'b1;
#2 Y=1'b1; A=1'b0; B=1'b1; C=1'b0;
#2 Y=1'b1; A=1'b0; B=1'b1; C=1'b1;
#2 Y=1'b1; A=1'b1; B=1'b0; C=1'b0;
#2 Y=1'b1; A=1'b1; B=1'b0; C=1'b1;
#2 Y=1'b1; A=1'b1; B=1'b1; C=1'b0;
#2 Y=1'b1; A=1'b1; B=1'b1; C=1'b1;
#200 $finish;
end
endmodule
Drill4_2
primitive Diff(D, A, B, Bin);
input A, B, Bin;
output D;
table
// A B Bin D
0 0 0 : 0;
0 0 1 : 1;
0 1 0 : 1;
0 1 1 : 0;
1 0 0 : 1;
1 0 1 : 0;
1 1 0 : 0;
1 1 1 : 1;
endtable
endprimitive
primitive Bout (Bout, A, B, Bin);
input A, B, Bin;
output Bout;
table
// A B Bin Bout
0 0 0 : 0;
0 0 1 : 1;
0 1 0 : 1;
0 1 1 : 1;
1 0 0 : 0;
1 0 1 : 0;
1 1 0 : 0;
1 1 1 : 1;
endtable
endprimitive
module exercise4_2;
reg A, B, Bin;
wire [1:0] D;
Diff (D[0], A, B, Bin);
Bout (D[1], A, B, Bin);
initial begin
#2 A=1'b0; B=1'b0; Bin=1'b0;
$display("");
$display(" Full Binary Subtrator");
$display("");
$display(" A B Bin Diff Bout ");
$monitor(" %b %b %b %b %b", A, B, Bin, D[0], D[1]);
#2 A=1'b0; B=1'b0; Bin=1'b1;
#2 A=1'b0; B=1'b1; Bin=1'b0;
#2 A=1'b0; B=1'b1; Bin=1'b1;
#2 A=1'b1; B=1'b0; Bin=1'b0;
#2 A=1'b1; B=1'b0; Bin=1'b1;
#2 A=1'b1; B=1'b1; Bin=1'b0;
#2 A=1'b1; B=1'b1; Bin=1'b1;
#2 $finish;
end
endmodule
Laboratory Report: Click here to download the file