Professional Documents
Culture Documents
Verilog Code
Verilog Code
SIMULATION LAB
EXPERIMENT: 1
AIM:
LOGIC GATES
To design all the logic gates using dataflow modeling style and verify the
TRUTH TABLE:
a b Y[0] Y[1]
Y[2] Y[3]
Y[4]
Y[5]
Y[6]
0 0
0 1
1 0
1 1
10M11D5716
SIMULATION LAB
VERILOG CODE:
LOGIC GATES USING DATAFLOW MODELING STYLE
`resetall
`timescale 1ns / 1ps
module logicgate_df(a, b, y);
input a,b;
// input declarations
output [0:6]y;
//output declarations
wire a,b;
//input as wires
//not gate
//and gate
//or gate
//nand gate
//nor gate
//xor gate
//xnor gate
endmodule
LOGIC GATES TEST BENCH
`resetall
`timescale 1ns/1ps
module logicgate_df_tb_v;
// Inputs
reg a;
reg b;
// Outputs
wire [0:6] y;
// Instantiate the Unit Under Test (UUT)
logicgate_df uut (
.a(a),
.b(b),
.y(y)
);
initial
begin
a = 0; b = 0;
2
10M11D5716
SIMULATION LAB
#10 a = 0; b = 1;
#10 a = 1; b = 0;
#10 a = 1; b = 1;
end
initial
begin
#50 $finish;
end
endmodule
SYNTHESIS RESULTS:
10M11D5716
SIMULATION LAB
SIMULATION RESULTS:
CONCLUSION:
Basic logic gates NOT, AND, OR, NOR, NAND, XOR, XNOR are designed in dataflow,
behavioral models and outputs are verified using test bench.
10M11D5716
SIMULATION LAB
EXPERIMENT: 2
ADDERS
2.1. HALF ADDER
AIM: To design a half adder along with a verilog code in the dataflow model and verify
its functionality and check its simulation report.
TOOLS USED:
TRUTH TABLE:
a
carry
Sum
10M11D5716
SIMULATION LAB
VERILOG CODE:
HALF ADDER USING DATAFLOW MODELING STYLE
`resetall
`timescale 1ns/1ps
module halfadder(a, b, sum, carry);
input a;
input b;
output sum;
output carry;
wire a,b;
assign sum= a^b;
assign carry=a&b;
endmodule
HALF ADDER TEST BENCH
`resetall
`timescale 1ns/1ps
module halfadder_bh_tb_v;
// Inputs
reg a;
reg b;
// Outputs
wire sum;
wire carry;
// Instantiate the Unit Under Test (UUT)
halfadder_beh uut (
.a(a),
.b(b),
.sum(sum),
.carry(carry)
);
6
10M11D5716
SIMULATION LAB
initial begin
// Initialize Inputs
a = 0;
b = 0;
#20 a=0; b=1;
#20 a=1; b=0;
#20 a=1; b=1;
end
initial
begin
#100 $finish;
end
endmodule
SYNTHESIS RESULTS:
10M11D5716
SIMULATION LAB
SIMULATION RESULTS:
CONCLUSION:
HALF ADDER is designed in behavioral and dataflow styles and output is verified
through a test bench.
10M11D5716
SIMULATION LAB
AIM: To design a FULL ADDER along with a verilog code in behavioral and dataflow
the two models and verify its functionality and check its simulation report.
TOOLS USED: Xilinx 9.2i Hardware Tool
DESCRIPTION OF THE MODULE:
The FULL ADDER is a combinational circuit that performs the arithmetic sum of three
input bits. It consists of three inputs and two outputs. A FULL ADDER can also be
implemented using two HALF ADDERS and one OR gate.
BLOCK DIAGRAM:
TRUTH TABLE:
A
Sum
Carry
Where a, b, cin are the inputs and sum, carry are outputs
9
10M11D5716
SIMULATION LAB
VERILOG CODE:
FULL ADDER USING DATAFLOW MODELING STYLE
`resetall
`timescale 1ns/1ps
module fulladder_dt(a, b, c, sum, carry);
input a;
input b;
input c;
output sum;
output carry;
wire a,b;
assign sum=a^b^c;
assign carry=(a&b)|(b&c)|(c&a);
endmodule
10M11D5716
SIMULATION LAB
.carry(carry)
);
initial begin
// Initialize Inputs
a=0; b=0;c =0;
#20 a=0; b=0; c=1;
#20 a=0; b=1; c=0;
#20 a=0; b=1; c=1;
#20 a=1; b=0; c=0;
#20 a=1; b=0; c=1;
#20 a=1; b=1; c=0;
#20 a=1; b=1; c=1;
end
initial
begin
#220 $finish;
end
endmodule
11
10M11D5716
SIMULATION LAB
SYNTHESIS RESULTS:
SIMULATION RESULTS:
CONCLUSION:
FULL ADDER is designed in behavioral and dataflow styles and output is verified
through a test bench.
12
10M11D5716
SIMULATION LAB
AIM: To design a 4-BIT BINARY PARALLEL ADDER in the behavioral model and
verify its functionality and check its simulation report.
TOOLS USED:Xilinx 9.2i Hardware Tool
DESCRIPTION OF THE MODULE: 4 bit binary parallel adder adds four bit binary
numbers. The binary parallel adder is a digital function that produces the arithmetic sum
of two binary numbers in parallel. It consists of full adders connected in cascade, with the
output carry of one full adder connected to the input carry of the next full adder.
BLOCK DIAGRAM:
A[3]
Co
B[3]
A[2]
B[2]
A[1]
B[1]
A[0] B[0] Ci
FULL
ADDER
FULL
ADDER
FULL
ADDER
FULL
ADDER
S[3]
S[2]
S[1]
S[0]
S[3]
S[2]
S[1]
13
S[0]
10M11D5716
SIMULATION LAB
TRUTH TABLE:
S
Co
1
1
0001
0011
0
0
0100
0101
0110
0111
0100 0100
1000
1001
0101 0101
1010
1011
0110 0110
1100
1101
0111 0111
1110
1111
1000 1000
0000
0001
1001 1001
0010
0011
1010 1010
0100
0101
1011 1011
0110
0111
1100 1100
1000
1001
1101 1101
1010
1011
1110 1110
1100
1101
1111 1111
1110
1111
Co Ci
Ci
0000 0000
0000
0001 0001
0010
0010 0010
0011 0011
10M11D5716
SIMULATION LAB
output [0:3]s;
output co;
wire [0:3]a;
wire [0:3]b;
wire ci;
reg [0:3]s;
reg co;
always@(a or b or ci)
begin
if(ci==1'b0)
begin
case({a,b})
8'b00000000: begin s=4'b0000; co=1'b0;end
8'b00010001: begin s=4'b0010; co=1'b0;end
8'b00100010: begin s=4'b0100; co=1'b0;end
8'b00110011: begin s=4'b0110; co=1'b0;end
8'b01000100: begin s=4'b1000; co=1'b0;end
8'b01010101: begin s=4'b1010; co=1'b0;end
8'b01100110: begin s=4'b1100; co=1'b0;end
8'b01110111: begin s=4'b1110; co=1'b0;end
8'b10001000: begin s=4'b0000; co=1'b1;end
8'b10011001: begin s=4'b0010; co=1'b1;end
8'b10101010: begin s=4'b0100; co=1'b1;end
8'b10111011: begin s=4'b0110; co=1'b1;end
8'b11001100: begin s=4'b1000; co=1'b1;end
8'b11011101: begin s=4'b1010; co=1'b1;end
8'b11101110: begin s=4'b1100; co=1'b1;end
8'b11111111: begin s=4'b1110; co=1'b1;end
endcase
end
else
begin
case({a,b})
8'b00000000: begin s=4'b0001; co=1'b0;end
8'b00010001: begin s=4'b0011; co=1'b0;end
8'b00100010: begin s=4'b0101; co=1'b0;end
8'b00110011: begin s=4'b0111; co=1'b0;end
8'b01000100: begin s=4'b1001; co=1'b0;end
8'b01010101: begin s=4'b1011; co=1'b0;end
8'b01100110: begin s=4'b1101; co=1'b0;end
8'b01110111: begin s=4'b1111; co=1'b0;end
8'b10001000: begin s=4'b0001; co=1'b1;end
8'b10011001: begin s=4'b0011; co=1'b1;end
8'b10101010: begin s=4'b0101; co=1'b1;end
8'b10111011: begin s=4'b0111; co=1'b1;end
8'b11001100: begin s=4'b1001; co=1'b1;end
15
10M11D5716
SIMULATION LAB
a = 4'b0000;
a = 4'b0001;
a = 4'b0010;
a = 4'b0011;
a = 4'b0100;
a = 4'b0101;
a = 4'b0110;
a = 4'b0111;
a = 4'b1000;
a = 4'b1001;
a = 4'b1010;
a = 4'b1011;
b=4'b0000;
b=4'b0001;
b=4'b0010;
b=4'b0011;
b=4'b0100;
b=4'b0101;
b=4'b0110;
b=4'b0111;
b=4'b1000;
b=4'b1001;
b=4'b1010;
b=4'b1011;
ci=1'b0;
ci=1'b0;
ci=1'b0;
ci=1'b0;
ci=1'b0;
ci=1'b0;
ci=1'b0;
ci=1'b0;
ci=1'b0;
ci=1'b0;
ci=1'b0;
ci=1'b0;
16
10M11D5716
#5
a = 4'b1100;
#5
a = 4'b1101;
#5
a = 4'b1110;
#5
a = 4'b1111;
#5
a = 4'b0000;
#5
a = 4'b0001;
#5
a = 4'b0010;
#5
a = 4'b0011;
#5
a = 4'b0100;
#5
a = 4'b0101;
#5
a = 4'b0110;
#5
a = 4'b0111;
#5
a = 4'b1000;
#5
a = 4'b1001;
#5
a = 4'b1010;
#5
a = 4'b1011;
#5
a = 4'b1100;
#5
a = 4'b1101;
#5
a = 4'b1110;
#5
a = 4'b1111;
end
initial
begin
#200 $finish;
end
SIMULATION LAB
b=4'b1100;
b=4'b1101;
b=4'b1110;
b=4'b1111;
b=4'b0000;
b=4'b0001;
b=4'b0010;
b=4'b0011;
b=4'b0100;
b=4'b0101;
b=4'b0110;
b=4'b0111;
b=4'b1000;
b=4'b1001;
b=4'b1010;
b=4'b1011;
b=4'b1100;
b=4'b1101;
b=4'b1110;
b=4'b1111;
ci=1'b0;
ci=1'b0;
ci=1'b0;
ci=1'b0;
ci=1'b1;
ci=1'b1;
ci=1'b1;
ci=1'b1;
ci=1'b1;
ci=1'b1;
ci=1'b1;
ci=1'b1;
ci=1'b1;
ci=1'b1;
ci=1'b1;
ci=1'b1;
ci=1'b1;
ci=1'b0;
ci=1'b1;
ci=1'b1;
endmodule
17
10M11D5716
SIMULATION LAB
SYNTHESIS RESULTS:
18
10M11D5716
SIMULATION LAB
SIMULATION RESULTS:
CONCLUSION:
19
10M11D5716
SIMULATION LAB
EXPERIMENT: 4
DECODERS
( or
less) minterms of n input variables. A 2 to 4 decoder generates all the minterms of two
input variables. Exactly one of the output lines will be one for each combination of values
of input variables.
BLOCK DIAGRAM
TRUTH TABLE:
a b D0 D1 D2 D3
0 0 1
0 1 0
1 0 0
1 1 0
Here a,b are two inputs and D0,D1,D2,D3 denote the outputs of the decoder which
implies minterms of two input variables.
20
10M11D5716
SIMULATION LAB
VERILOG CODE:
2X4 DECODER USING DATA FLOW MODELING STYLE
`resetall
`timescale 1ns/1ps
module decoder24df(a, b, y);
input a;
input b;
output [0:3] y;
wire a,b;
assign y[0]=(~a) & (~b);
assign y[1]=(~a)& (b);
assign y[2]=(a) & (~b);
assign y[3]= a & b;
endmodule
2 TO 4 LINE DECODER TEST BENCH:
`resetall
`timescale 1ns/1ps
module decoder24_tb_v;
// Inputs
reg a;
reg b;
// Outputs
wire [0:3] y;
// Instantiate the Unit Under Test (UUT)
decoder24df uut (
.a(a),
.b(b),
.y(y)
);
21
10M11D5716
SIMULATION LAB
initial begin
// Initialize Inputs
a=0;b=0;
#10 a=0; b=1;
#10 a=1; b=0;
#10 a=1; b=1;
end
initial
begin
#60 $finish;
end
endmodule
SYNTHESIS RESULTS:
22
10M11D5716
SIMULATION LAB
SIMULATION RESULTS:
23
10M11D5716
SIMULATION LAB
TRUTH TABLE:
a b c D0 D1 D2 D3 D4 D5 D6 D7
0 0 0 1
0 0 1 0
0 1 0 0
0 1 1 0
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 0
24
10M11D5716
SIMULATION LAB
wire a,b,c;
always@(a or b or c)
begin
25
10M11D5716
SIMULATION LAB
case({a,b,c})
3'b000:begin y=8'b10000000; end
3'b001:begin y=8'b01000000; end
3'b010:begin y=8'b00100000; end
3'b011:begin y=8'b00010000; end
3'b100:begin y=8'b00001000; end
3'b101:begin y=8'b00000100; end
3'b110:begin y=8'b00000010; end
3'b111:begin y=8'b00000001; end
default :begin y=8'b00000000; end
endcase
end
endmodule
3 TO 8 LINE DECODER TEST BENCH
`resetall
`timescale 1ns/1ps
module decoder38beh_tb_v;
// Inputs
reg a;
reg b;
reg c;
// Outputs
wire [0:7] y;
// Instantiate the Unit Under Test (UUT)
decoder38beh uut (
.a(a),
.b(b),
.c(c),
.y(y)
);
initial
26
10M11D5716
SIMULATION LAB
begin
// Initialize Inputs
a =0;b=0;c=0;
#10 a=0; b=0; c=1;
#10 a=0; b=1; c=0;
#10 a=0; b=1; c=1;
#10 a=1; b=0; c=0;
#10 a=1; b=0; c=1;
#10 a=1; b=1; c=0;
#10 a=1; b=1; c=1;
end
initial
begin
#100 $finish;
end
endmodule
27
10M11D5716
SIMULATION LAB
SYNTHESIS RESULTS:
28
10M11D5716
SIMULATION LAB
SIMULATION RESULTS:
CONCLUSION:3 to 8 line decoder has been designed using different modeling styles
and is verified using the Test Bench.
EXPERIMENT: 5
ENCODERS
5.1------4: 2 LINE ENCODER
AIM: To design a 4:2 line encoder using behavioral and data flow modeling styles and
verified using the test bench
TOOLS USED:
29
10M11D5716
SIMULATION LAB
TRUTH TABLE:
0 0
0 1
1 0
1 1
Here din[0],din[1],din[2],din[3] are the inputs and the a,b are the outputs.
VERILOG CODE:
4 TO 2 LINE ENCODER USING BEHAVIORAL MODEL
`resetall
`timescale 1ns/1ps
module encoder42beh(din, a, b);
input [0:3] din;
output a;
output b;
reg a;
reg b;
always@(din)
begin
case({din})
4'b1000:begin a=1'b0; b=1'b0; end
4'b0100:begin a=1'b0; b=1'b1; end
4'b0010:begin a=1'b1; b=1'b0; end
30
10M11D5716
SIMULATION LAB
10M11D5716
SIMULATION LAB
begin
// Initialize Inputs
din=4'b1000;
#10 din=4'b0100;
#10 din=4'b0010;
#10 din=4'b0001;
end
initial
begin
#50 $finish;
end
endmodule
SYNTHESIS RESULTS:
32
10M11D5716
SIMULATION LAB
SIMULATION RESULTS:
CONCLUSION:
A 2 to 4 line encoder has been designed using different modeling styles and is verified
using test bench.
5.2---8 : 3 LINE ENCODER
AIM: To design a 8 : 3 line encoder using behavioral and data flow modeling styles and
verified using the test bench.
TOOLS USED:
33
10M11D5716
SIMULATION LAB
TRUTH TABLE:
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
10M11D5716
SIMULATION LAB
endcase
end
endmodule
`resetall
35
10M11D5716
SIMULATION LAB
`timescale 1ns/1ps
module encoder83df_tb_v;
// Inputs
reg [0:7] din;
// Outputs
wire a;
wire b;
wire c;
// Instantiate the Unit Under Test (UUT)
encoder83df uut (
.din(din),
.a(a),
.b(b),
.c(c)
);
initial
begin
// Initialize Inputs
din=8'b10000000;
#10 din=8'b01000000;
#10 din=8'b00100000;
#10 din=8'b00010000;
#10 din=8'b00001000;
#10 din=8'b00000100;
#10 din=8'b00000010;
#10 din=8'b00000001;
end
initial
begin
36
10M11D5716
SIMULATION LAB
#100 $finish;
end
endmodule
SYNTHESIS RESULTS:
SIMULATION RESULTS:
37
10M11D5716
SIMULATION LAB
CONCLUSION:
8 to 3 line encoder has been designed using behavioral and data flow modeling styles
and verified using the test bench.
EXPERIMENT: 6
MULTIPLEXER
6.1---4:1 MULTIPLEXER
38
10M11D5716
SIMULATION LAB
AIM: To design a 4:1 multiplexer using behavioral, dataflow models and verify its
functionality using the test bench.
TOOLS USED: Xilinx 9.2i Hardware Tool.
DESCRIPTION OF THE MODULE:
A multiplexer has a group of data inputs and a group of control inputs. It is also called as
data selector. The control inputs are used to select one of the data inputs and connect it to
the output terminal. A 4:1 mutliplexer has four inputs ,2 selection line and 1 output.
BLOCK DIAGRAM:
TRUTH TABLE:
S1 S0 Y
0
din[0]
din[1]
din[2]
din[3]
VERILOG CODE:
4:1 MUX USING DATA FLOW MODELING STYLE:
`resetall
`timescale 1ns/1ps
module mux41data (din,s,y);
input [0:3] din;
input[0:1]s;
output out;
assign out=din[s];
39
10M11D5716
SIMULATION LAB
endmodule
`resetall
`timescale 1ns/1ps
module mux42beh(din, s0, s1, y);
input [0:3] din;
input s0;
input s1;
output y;
reg y;
wire s0,s1;
always@(s0 or s1)
begin
case({s0,s1})
2'b00:y=din[0];
2'b01:y=din[1];
2'b10:y=din[2];
2'b11:y=din[3];
default:y=1'b1;
endcase
end
endmodule
4:1 MUX TEST BENCH:
`resetall
`timescale 1ns/1ps
module mux42beh_tb_v;
// Inputs
reg [0:3] din;
reg s0;
reg s1;
40
10M11D5716
SIMULATION LAB
// Outputs
wire y;
// Instantiate the Unit Under Test (UUT)
mux42beh uut (
.din(din),
.s0(s0),
.s1(s1),
.y(y)
);
initial
begin
din=4'b0011;
s0=1'b0; s1=1'b0;
#5 s0=1'b0; s1=1'b1;
#5 s0=1'b1; s1=1'b0;
#5 s0=1'b1; s1=1'b1;
end
initial
begin
#50 $finish;
end
endmodule
SYNTHESIS RESULTS:
41
10M11D5716
SIMULATION LAB
SIMULATION RESULTS:
6.2---8:1 MULTIPLEXER
42
10M11D5716
SIMULATION LAB
AIM: To design a 8:1 multiplexer using behavioral ,dataflow models and verify its
functionality using the test bench.
TOOLS USED:
TRUTH TABLE:
S0
S1
S2
Y[0]
Y[1]
Y[2]
Y[3]
Y[4]
Y[5]
Y[6]
Y[7]
VERILOG CODE:
43
10M11D5716
SIMULATION LAB
10M11D5716
SIMULATION LAB
begin
case(s)
3'b000: o=i[0];
3'b001: o=i[1];
3'b010: o=i[2];
3'b011: o=i[3];
3'b100: o=i[4];
3'b101: o=i[5];
3'b110: o=i[6];
3'b111: o=i[7];
endcase
end
endmodule
8:1 MUX TEST BENCH:
`resetall
`timescale 1ns/1ps
module mux81df_tb_v;
// Inputs
reg [0:7] din;
reg [0:2] s;
// Outputs
wire y;
// Instantiate the Unit Under Test (UUT)
mux81df uut (
.din(din),
.y(y),
.s(s)
);
initial
begin
// Initialize Inputs
45
10M11D5716
SIMULATION LAB
din=8'b01010101;
s=3'b000;
#10 s=3'b001;
#10 s=3'b010;
#10 s=3'b011;
#10 s=3'b100;
#10 s=3'b101;
#10 s=3'b110;
#10 s=3'b111;
end
initial
begin
#100 $finish;
end
endmodule
SYNTHESIS RESULTS:
46
10M11D5716
SIMULATION LAB
SIMULATION RESULTS:
EXPERIMENT: 7
DEMULTIPLEXER
47
10M11D5716
SIMULATION LAB
AIM: To design a 1X4 DEMULTIPLEXER and verify its functionality and check its
simulation report.
TOOLS USED: Xilinx 9.2i Hardware Tool.
DESCRIPTION OF THE MODULE:
The demultiplexer is the exact opposite to the multiplexer. In this, the data form one line
can be sent onto any one of many lines. The block diagram of multiplexer is given below
and the associated truth table.1:4 demultiplexer has one input and 4 output lines.
BLOCK DIAGRAM:
Z0
A
DEMULTIPLEXER
Z1
Z2
Z3
S0
S1
TRUTH TABLE:
S1
S0
Z0
Z1
Z2
Z3
10M11D5716
SIMULATION LAB
`resetall
`timescale 1ns/1ps
module demux14bh(din,s,y) ;
input [0:1]s;
input din;
output [0:3]y;
wire [0:1]s;
wire din;
reg [0:3]y;
always @(s or din)
begin
case(s)
2'b00: begin y[0]=din;y[1]=4'b0;y[2]=4'b0;y[3]=4'b0;end
2'b01: begin y[1]=din;y[0]=4'b0;y[2]=4'b0;y[3]=4'b0;end
2'b10: begin y[2]=din;y[1]=4'b0;y[0]=4'b0;y[3]=4'b0;end
2'b11: begin y[3]=din;y[1]=4'b0;y[2]=4'b0;y[0]=4'b0 ;end
endcase
end
endmodule
TEST BENCH FOR 1:4 DEMULTIPLEXER:
`resetall
`timescale 1ns/1ps
module demux14bh_tb;
// Inputs
reg din;
reg [0:1] s;
// Outputs
wire [0:3] y;
10M11D5716
SIMULATION LAB
demux14bh uut (
.din(din),
.s(s),
.y(y)
);
initial begin
// Initialize Inputs
din = 1;
s=2'b00;
#10 s=2'b01;
#10 s=2'b10;
#10 s=2'b11;
end
initial
begin
#50 $finish;
end
endmodule
50
10M11D5716
SIMULATION LAB
SYNTHESIS RESULTS:
SIMULATION RESULTS:
CONCLUSION:
A 1:4 demultiplexer is designed and is verified using test bench.
51
10M11D5716
SIMULATION LAB
AIM: To design a 1:8 DEMULTIPLEXER and verify its functionality and check its
simulation report.
TOOLS USED: Xilinx 9.2i Hardware Tool.
DESCRIPTION OF THE MODULE:
The demultiplexer is the exact opposite to the multiplexer. In this, the data form one line
can be sent onto any one of many lines. The block diagram of multiplexer is given below
and the associated truth table.1:8 demultiplexer has one input and 8 output lines.
BLOCK DIAGRAM:
Y0
Y1
Y2
Y3
DEMULTIPLEXER
1x8
Y4
Y5
Y6
Y7
S0
S1
S2
TRUTH TABLE:
S0
0
0
0
0
1
1
S1
0
0
1
1
0
0
S2
0
1
0
1
0
1
Y[0]
A
0
0
0
0
0
Y[1]
0
A
0
0
0
0
Y[2]
0
0
A
0
0
0
52
Y[3]
0
0
0
A
0
0
Y[4]
0
0
0
0
A
0
Y[5]
0
0
0
0
0
A
Y[6]
0
0
0
0
0
0
Y[7]
0
0
0
0
0
0
10M11D5716
SIMULATION LAB
1 1 0 0
0
0
1 1 1 0
0
0
VERILOG CODE FOR 1:8 DEMUX:
`resetall
0
0
`timescale 1ns/1ps
module demux18beh(din, s, y);
input din;
input [0:2] s;
output [0:7] y;
//
reg din;
// reg [0:2] s;
wire din;
wire [0:2] s;
reg [0:7]y;
always@(s)
begin
case (s)
3'b000:y=8'b10000000;
3'b001:y=8'b01000000;
3'b010:y=8'b00100000;
3'b011:y=8'b00010000;
3'b100:y=8'b00001000;
3'b101:y=8'b00000100;
3'b110:y=8'b00000010;
3'b111:y=8'b00000001;
default:y=8'b11111111;
endcase
end
endmodule
53
0
0
0
0
A
0
0
A
10M11D5716
SIMULATION LAB
10M11D5716
SIMULATION LAB
endmodule
SYNTHESIS RESULTS:
SIMULATION RESULTS:
CONCLUSION:
A 1:8 demultiplexer is designed and is verified using test bench.
55
10M11D5716
SIMULATION LAB
EXPERIMENT: 8
COMPARATORS
4- BIT COMPARATOR
AIM: To design a four bit comparator using behavioral model and verify using the
functionality using test bench.
TOOLS USED:
BLOCK DIAGRAM:
56
10M11D5716
SIMULATION LAB
TRUTH TABLE:
0000 1111
0001 1110
0010 1101
0011 1100
0100 1011
0101 1010
0110 1001
0111 0111
1000 1000
1001 0110
1010 0101
1011 0100
1100 0011
1101 0010
1110 0001
1111 0000
Where aeqb denotes a equals b and altb denotes a less than b and agtb denotes a greater
than b
VERILOG CODE:
`resetall
57
10M11D5716
SIMULATION LAB
`timescale 1ns/1ps
module comparator1(a, b, altb, aeqb, agtb);
input [0:3] a;
input [0:3] b;
output altb;
output aeqb;
output agtb;
//wire a[0:3];
//wire b[0:3];
reg altb,aeqb,agtb;
always@(a or b)
begin
if(a<b)
begin
altb=1'b1;
{aeqb,agtb}=1'b0;
end
else if(a==b)
begin
aeqb=1'b1;
{altb,agtb}=1'b0;
end
else
begin
agtb=1'b1;
{aeqb,altb}=1'b0;
end
end
endmodule
4 BIT COMPARATOR TEST BENCH
`resetall
58
10M11D5716
SIMULATION LAB
`timescale 1ns/1ps
module comparator_tv_v;
// Inputs
reg [0:3] a;
reg [0:3] b;
// Outputs
wire altb;
wire aeqb;
wire agtb;
// Instantiate the Unit Under Test (UUT)
comparator1 uut (
.a(a),
.b(b),
.altb(altb),
.aeqb(aeqb),
.agtb(agtb)
);
initial
begin
a=4'b0101; b=4'b0101;
#10 a=4'b0100; b=4'b0110;
#10 a=4'b1010; b=4'b0011;
end
initial
begin
#30 $finish;
end
endmodule
59
10M11D5716
SIMULATION LAB
SYNTHESIS RESULTS:
SIMULATION RESULTS:
60
10M11D5716
SIMULATION LAB
\
EXPERIMENT: 9
AIM: To design all the logic ALU using the behavioral modeling style and verify the
functionalities along with their synthesis and simulation reports.
TOOLS USED: Xilinx 9.2i Hardware Tool.
DESCRIPTION OF THE MODULE:
Arithmetic logic unit is used to perform all the arithmetic operations like
Addition, Subtraction, division, multiplication etc and logical operations like AND, OR,
NOR, NAND, XOR, XNOR etc.
VERILOG CODE:
`resetall
`timescale 1ns/1ps
module alu4(a, b, s, y);
input [3:0] a;
input [3:0] b;
input [1:0] s;
output [3:0] y;
wire [3:0]a;
wire [3:0]b;
wire [3:0]s;
reg [3:0]y;
always@(s)
begin
case(s)
2'b00:y=b;
2'b01:y=a+b;
2'b10:y=a|b;
2'b11:y={b[2:0],1'b0};
endcase
end
endmodule
61
10M11D5716
SIMULATION LAB
62
10M11D5716
SIMULATION LAB
SYNTHESIS RESULTS:
63
10M11D5716
SIMULATION LAB
SIMULATION RESULTS:
CONCLUSION:
ARITHEMETIC AND LOGIC UNIT is designed in behavioral model and output is
verified using test bench.
64
10M11D5716
SIMULATION LAB
D-FLIP FLOP
EXPERIMENT: 10
AIM: To design a D-flip flop with synchronous reset in behavioral model and testing the
functionality using test bench
TOOLS USED: Xilinx 9.2i Hardware Tool.
DESCRIPTION OF THE MODULE:
The flip flop circuit can maintain a binary state indefinitely (as long as the power is
delivered to the circuit) until directed by an input signal to switch states. The major
difference among the various types of the flip flops are in the number of inputs they
possess and in the manner in which the inputs affect the binary states. A D- flip flop has
one input D ,the input D is sampled during the occurrence of the clock pulse. In D-flip
flop with synchronous reset, the output depends only on the clock..
BLOCK DIAGRAM:
TRUTH TABLE:
Clk Q D Q(n+1)
1
0 0
65
10M11D5716
SIMULATION LAB
0 1
1 0
1 1
VERILOG CODE:
`resetall
`timescale 1ns/1ps
module dff1(data, clk, reset, q);
input data;
input clk;
input reset;
output q;
wire data,clk,reset;
reg q;
always @ ( posedge clk )
if (reset)
begin
q <= 1'b0;
end
else
begin
q <= data;
end
endmodule
TEST BENCH:
`resetall
`timescale 1ns/1ps
module dff1_tb_v;
// Inputs
reg data;
reg clk;
reg reset;
// Outputs
wire q;
// Instantiate the Unit Under Test (UUT)
dff1 uut (
.data(data),
.clk(clk),
.reset(reset),
66
10M11D5716
SIMULATION LAB
.q(q)
);
initial
clk = 1'b1;
always
#5 clk = ~clk;
initial
begin
data=1; reset=1;
#5 data=0; reset=0;
#5 data=1; reset=0;
#10 data=1; reset=0;
end
initial
begin
#50 $finish;
end
endmodule
SYNTHESIS RESULTS:
SIMULATION RESULTS:
67
10M11D5716
SIMULATION LAB
CONCLUSION:
A D- Flip flop with synchronous reset is designed in behavioral model and tested using
test bench.
EXPERIMENT:11
SHIFT REGISTERS
Qa
Da
A
Qb
Db
Qc
Dc
C
Qd
Db
Ser
D
clk
TRUTH TABLE:
Clk Reset Q
68
Ser
10M11D5716
SIMULATION LAB
0000 0
0001 1
0011 1
0111 1
1111 1
VERILOG CODE:
10M11D5716
SIMULATION LAB
// Inputs
reg clk;
reg reset;
reg sr;
// Outputs
wire [0:3] q;
// Instantiate the Unit Under Test (UUT)
leftshiftreg uut (
.clk(clk),
.reset(reset),
.sr(sr),
.q(q)
);
initial
clk=1'b1;
always
#5 clk=~clk;
initial
begin
reset=1'b1;
#3 reset=1'b0;
#6 reset=1'b0;
end
initial
begin
sr=1'b0;
#10 sr=1'b1;
#10 sr=1'b1;
#10 sr=1'b1;
#10 sr=1'b1;
#10 sr=1'b1;
70
10M11D5716
SIMULATION LAB
#10 sr=1'b1;
end
initial
begin
#100 $finish;
end
endmodule
SYNTHESIS RESULTS:
SIMULATION RESULTS:
CONCLUSION:
A 4-bit shift register using asynchronous reset is designed in behavioral model and tested
using test bench.
71
10M11D5716
SIMULATION LAB
EXPERIMENT:12
AIM: To design UNIVERSAL SHIFT REGISTER and verify the functionalities along
with their synthesis and simulation reports.
TOOLS USED:
clock
reset
leftsh
rightsf
Universal
Shift register
pin
10M11D5716
SIMULATION LAB
`timescale 1ns/1ps
module universalshiftreg(clk, reset, leftsh, rightsf, sel, pin, q);
input clk;
input reset;
input leftsh;
input rightsf;
input [0:1]sel;
input [0:3] pin;
output [0:3] q;
wire clk,sel,leftsh,rightsf,reset;
wire [0:3] pin;
reg [3:0] q;
always@(posedge clk )
begin
if (reset)
q=4'b0000;
else
begin
case(sel)
2'b00:q=4'b0000;
2'b01:
q={q[2:0],leftsh};
2'b10:
q={rightsf,q[3:1]};
2'b11:
q=pin;
endcase
end
end
endmodule
USR TEST BENCH:
73
10M11D5716
SIMULATION LAB
`resetall
`timescale 1ns/1ps
module universalshift_tb_v;
// Inputs
reg clk;
reg reset;
reg leftsh;
reg rightsf;
reg [0:1] sel;
reg [0:3] pin;
// Outputs
wire [3:0] q;
// Instantiate the Unit Under Test (UUT)
universalshiftreg uut (
.clk(clk),
.reset(reset),
.leftsh(leftsh),
.rightsf(rightsf),
.sel(sel),
.pin(pin),
.q(q)
);
initial
clk=1'b1;
always
#5 clk=~clk;
initial
begin
reset=1'b1;
#5 reset=1'b0;
end
74
10M11D5716
SIMULATION LAB
initial
begin
leftsh=1'b1;
#5 rightsf=1'b1;
#10 pin=4'b1010;
end
initial
begin
sel=2'b00;
#5 sel=2'b01;
#5 sel=2'b10;
#5 sel=2'b11;
end
initial
#50 $finish;
endmodule
SYNTHESIS RESULTS:
75
10M11D5716
SIMULATION LAB
SIMULATION RESULTS:
76
10M11D5716
SIMULATION LAB
EXPERIMENT:13
COUNTERS
77
10M11D5716
SIMULATION LAB
12.1 UP COUNTER
AIM: To design UP COUNTER and verify functionality along with its synthesis and
simulation reports.
TOOLS USED: Xilinx 9.2i Hardware Tool.
DESCRIPTION OF THE MODULE: A sequential circuit that goes through a
prescribed sequence of states upon the application of input pulses is called counter. If a
counter counts from lower value to higher value then it is known as UP COUNTER.
BLOCK DIAGRAM:
q
clock
Up counter
reset
enable
TRUTH TABLE:
0000
0001
0010
0011
0100
0101
0110
0111
1000
10
1001
10M11D5716
SIMULATION LAB
`timescale 1ns/1ps
module upcounter(clk, reset, enable, q);
input clk;
input reset;
input enable;
output [0:3] q;
wire clk,reset,enable;
reg [0:3] q;
always@(posedge clk)
begin
if(reset==1'b1)
q=4'b0000;
else if(enable==1'b1)
begin
q=q+4'b0001;
end
end
endmodule
UPCOUNTER TEST BENCH:
`resetall
`timescale 1ns/1ps
module upcounter_tb_v;
// Inputs
reg clk;
reg reset;
reg enable;
// Outputs
wire [0:3] q;
// Instantiate the Unit Under Test (UUT)
upcounter uut (
.clk(clk),
79
10M11D5716
SIMULATION LAB
reset(reset),
.enable(enable),
.q(q)
);
initial
clk=1'b1;
always #5 clk=~clk;
initial
begin
enable=1'b1;
reset=1'b1;
#5 reset=1'b0;
end
initial
begin
#160 $finish;
end
endmodule
SYNTHESIS RESULTS:
80
10M11D5716
SIMULATION LAB
SIMULATION RESULTS:
10M11D5716
SIMULATION LAB
AIM: To design DOWN COUNTER and verify functionality along with its synthesis and
simulation reports.
TOOLS USED:
clock
q
Down counter
reset
enable
TRUTH TABLE:
1111
1110
1101
1100
1011
1010
1001
1000
0111
10
0110
VERILOG CODE:
82
10M11D5716
SIMULATION LAB
`resetall
`timescale 1ns/1ps
module downcounter(clk, enable, reset, q);
input clk;
input enable;
input reset;
output [0:3] q;
wire enable,clk,reset;
reg [3:0]q;
always@(posedge clk)
begin
if(reset)
q=4'b1111;
else if(enable==1'b1)
q=q-4'b0001;
end
endmodule
DOWN COUNTER TEST BENCH:
`resetall
`timescale 1ns/1ps
module downcounter_tb_v;
// Inputs
reg clk;
reg enable;
reg reset;
// Outputs
wire [3:0] q;
// Instantiate the Unit Under Test (UUT)
downcounter uut (
.clk(clk),
83
10M11D5716
SIMULATION LAB
.enable(enable),
.reset(reset),
.q(q)
);
initial
clk=1'b1;
always #5 clk=~clk;
initial
begin
enable=1'b1;
reset=1'b1;
#5 reset=1'b0;
end
initial
begin
#300 $finish;
end
endmodule
SYNTHESIS RESULTS:
84
10M11D5716
SIMULATION LAB
SIMULATION RESULTS:
85