Experiment 4

User-defined Primitives

CPE114L
3Q1920
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