Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
4 views10 pages

Module and

The document contains Verilog code for various digital logic components including AND, OR, NOT, XOR gates, flip-flops (SR, JK, T, D), and arithmetic operations (4-bit and 8-bit adders, 8-bit multiplier, 8-bit divider, and 2-to-1 multiplexer). Each component is accompanied by a testbench to simulate its behavior and output results. The testbenches monitor inputs and outputs over time to verify the functionality of the respective components.

Uploaded by

fasenob153
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views10 pages

Module and

The document contains Verilog code for various digital logic components including AND, OR, NOT, XOR gates, flip-flops (SR, JK, T, D), and arithmetic operations (4-bit and 8-bit adders, 8-bit multiplier, 8-bit divider, and 2-to-1 multiplexer). Each component is accompanied by a testbench to simulate its behavior and output results. The testbenches monitor inputs and outputs over time to verify the functionality of the respective components.

Uploaded by

fasenob153
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 10

module and_gate(input a, input b, output y);

assign y = a & b;

endmodule

module and_gate_tb;

reg a, b;

wire y;

and_gate uut(.a(a), .b(b), .y(y));

initial begin

$monitor("a=%b b=%b y=%b", a, b, y);

a=0; b=0; #10;

a=0; b=1; #10;

a=1; b=0; #10;

a=1; b=1; #10;

$finish;

end

endmodule

module or_gate(input a, input b, output y);

assign y = a | b;

endmodule

module or_gate_tb;

reg a, b;

wire y;

or_gate uut(.a(a), .b(b), .y(y));

initial begin

$monitor("a=%b b=%b y=%b", a, b, y);

a=0; b=0; #10;

a=0; b=1; #10;


a=1; b=0; #10;

a=1; b=1; #10;

$finish;

end

endmodule

module not_gate(input a, output y);

assign y = ~a;

endmodule

module not_gate_tb;

reg a;

wire y;

not_gate uut(.a(a), .y(y));

initial begin

$monitor("a=%b y=%b", a, y);

a=0; #10;

a=1; #10;

$finish;

end

endmodule

module xor_gate(input a, input b, output y);

assign y = a ^ b;

endmodule

module xor_gate_tb;

reg a, b;

wire y;

xor_gate uut(.a(a), .b(b), .y(y));

initial begin

$monitor("a=%b b=%b y=%b", a, b, y);


a=0; b=0; #10;

a=0; b=1; #10;

a=1; b=0; #10;

a=1; b=1; #10;

$finish;

end

endmodule

module sr_ff(input S, input R, input clk, output reg Q);

always @(posedge clk) begin

if (S & ~R) Q <= 1;

else if (~S & R) Q <= 0;

else if (S & R) Q <= 1'bx; // Invalid state

end

endmodule

module sr_ff_tb;

reg S, R, clk;

wire Q;

sr_ff uut(.S(S), .R(R), .clk(clk), .Q(Q));

initial begin

clk=0;

forever #5 clk = ~clk;

end

initial begin

$monitor("clk=%b S=%b R=%b Q=%b", clk, S, R, Q);

S=0; R=0; #10;

S=1; R=0; #10;

S=0; R=1; #10;

S=1; R=1; #10;


$finish;

end

endmodule

module jk_ff(input J, input K, input clk, output reg Q);

always @(posedge clk) begin

case ({J, K})

2'b00: Q <= Q;

2'b01: Q <= 0;

2'b10: Q <= 1;

2'b11: Q <= ~Q;

endcase

end

endmodule

module jk_ff_tb;

reg J, K, clk;

wire Q;

jk_ff uut(.J(J), .K(K), .clk(clk), .Q(Q));

initial begin

clk=0;

forever #5 clk = ~clk;

end

initial begin

$monitor("clk=%b J=%b K=%b Q=%b", clk, J, K, Q);

J=0; K=0; #10;

J=1; K=0; #10;

J=0; K=1; #10;

J=1; K=1; #10;

$finish;
end

endmodule

module t_ff(input T, input clk, output reg Q);

always @(posedge clk) begin

if (T)

Q <= ~Q;

end

endmodule

module t_ff_tb;

reg T, clk;

wire Q;

t_ff uut(.T(T), .clk(clk), .Q(Q));

initial begin

clk=0;

forever #5 clk = ~clk;

end

initial begin

$monitor("clk=%b T=%b Q=%b", clk, T, Q);

T=0; #10;

T=1; #10;

T=1; #10;

T=0; #10;

$finish;

end

endmodule

module d_ff(input D, input clk, output reg Q);


always @(posedge clk) begin

Q <= D;

end

endmodule

module d_ff_tb;

reg D, clk;

wire Q;

d_ff uut(.D(D), .clk(clk), .Q(Q));

initial begin

clk=0;

forever #5 clk = ~clk;

end

initial begin

$monitor("clk=%b D=%b Q=%b", clk, D, Q);

D=0; #10;

D=1; #10;

D=0; #10;

D=1; #10;

$finish;

end

endmodule

module adder_4bit(

input [3:0] a, b,

output [4:0] sum

);

assign sum = a + b;

endmodule
module tb_adder_4bit;

reg [3:0] a, b;

wire [4:0] sum;

adder_4bit uut (a, b, sum);

initial begin

$monitor("a=%d b=%d sum=%d", a, b, sum);

a=4; b=3;

#10 a=7; b=5;

#10 a=15; b=1;

#10 $finish;

end

endmodule

module adder_8bit(

input [7:0] a, b,

output [8:0] sum

);

assign sum = a + b;

endmodule

module tb_adder_8bit;

reg [7:0] a, b;

wire [8:0] sum;

adder_8bit uut (a, b, sum);

initial begin

$monitor("a=%d b=%d sum=%d", a, b, sum);


a=25; b=75;

#10 a=128; b=128;

#10 a=200; b=55;

#10 $finish;

end

endmodule

module multiplier_8bit(

input [7:0] a, b,

output [15:0] product

);

assign product = a * b;

endmodule

module tb_multiplier_8bit;

reg [7:0] a, b;

wire [15:0] product;

multiplier_8bit uut (a, b, product);

initial begin

$monitor("a=%d b=%d product=%d", a, b, product);

a=10; b=20;

#10 a=15; b=12;

#10 a=255; b=2;

#10 $finish;

end

endmodule
module mux8bit_2to1(

input [7:0] a, b,

input sel,

output [7:0] y

);

assign y = sel ? b : a;

endmodule

module tb_mux8bit_2to1;

reg [7:0] a, b;

reg sel;

wire [7:0] y;

mux8bit_2to1 uut (a, b, sel, y);

initial begin

$monitor("a=%d b=%d sel=%b y=%d", a, b, sel, y);

a=20; b=30; sel=0;

#10 sel=1;

#10 $finish;

end

endmodule

module divider_8bit(

input [7:0] a, b,

output [7:0] quotient, remainder

);

assign quotient = a / b;

assign remainder = a % b;
endmodule

module tb_divider_8bit;

reg [7:0] a, b;

wire [7:0] quotient, remainder;

divider_8bit uut (a, b, quotient, remainder);

initial begin

$monitor("a=%d b=%d quotient=%d remainder=%d", a, b, quotient, remainder);

a=50; b=7;

#10 a=100; b=10;

#10 a=200; b=30;

#10 $finish;

end

endmodule

You might also like