Verilog Code

Share Embed Donate


Short Description

Download Verilog Code...

Description

10M11D5716

SIMULATION LAB

EXPERIMENT: 1 AIM:

LOGIC GATES

To design all the logic gates using dataflow modeling style and verify the

functionalities along with their synthesis and simulation reports. TOOLS USED: Xilinx 9.2i Hardware Tool. DESCRIPTION OF THE MODULE: NOT GATE: Not is a unary operator. It is also called as an Inverter .The output is the complement of the input. AND GATE: The output of the AND gate is logic one only when all the inputs are equal to logic one .An N-input and gate has N inputs and 1 output. OR GATE: Or gate output is logic one if any one of the inputs to the gate is logic one. N-input or gate has N inputs and 1output. NAND GATE: NAND gate output is logic 1 when any one of the input is logic 0.An Ninput NAND gate has N inputs and one output. NAND gate is identical to and gate connected to an inverter. NOR GATE: NOR gate is nothing but a combination of OR gate and INVERTER .NOR gate output is logic one only when all the inputs are equal to logic zero. An N- input NOR gate is having N inputs and one output. XOR GATE: The output of XOR gate is logic zero when all the inputs are same. XNOR GATE: The output of XNOR gate is logic one only when both the inputs are at logic one. XNOR gate is nothing but the XOR gate followed by an INVERTER.

TRUTH TABLE:

a b Y[0] Y[1]

Y[2] Y[3]

(not) (and) (or)

Y[4]

Y[5]

Y[6]

(nand) (nor) (xor) (xnor)

0 0

1

0

0

1

1

0

1

0 1

1

0

1

1

0

1

0

1 0

0

0

1

1

0

1

0

1 1

0

1

1

0

0

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

assign y[0] = ~a;

//not gate

assign y[1] = a&b;

//and gate

assign y[2] = a|b;

//or gate

assign y[3] = ~(a&b);

//nand gate

assign y[4] = ~(a|b);

//nor gate

assign y[5] = a^b;

//xor gate

assign y[6] = ~(a^b);

//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:

3

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.

4

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:

Xilinx 9.2i Hardware Tool

DESCRIPTION OF THE MODULE: A combinational circuit that performs the addition of two bits is called half adder.The half adder operation needs two binary inputs (augends and addend bits)and two binary outputs (sum and carry). The sum can range from 0 to 2 which require two bits to express. The lower order bit may be named as half sum and the higher order bit may be named as carry. BLOCK DIAGRAM:

TRUTH TABLE: a

b

carry

Sum

0

0

0

0

0

1

0

1

1

0

0

1

1

1

1

0

a, b are inputs and carry, sum are outputs 5

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:

7

10M11D5716

SIMULATION LAB

SIMULATION RESULTS:

CONCLUSION: HALF ADDER is designed in behavioral and dataflow styles and output is verified through a test bench.

8

10M11D5716

SIMULATION LAB

2.2 FULL ADDER

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

B

C

Sum

Carry

0

0

0

0

0

0

0

1

1

0

0

1

0

1

0

0

1

1

0

1

1

0

0

1

0

1

0

1

0

1

1

1

0

0

1

1

1

1

1

1

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

FULL ADDER TEST BENCH `resetall `timescale 1ns/1ps module fulladder_beh_tb_v; // Inputs reg a; reg b; reg c; // Outputs wire sum; wire carry; // Instantiate the Unit Under Test (UUT) fulladder_beh uut ( .a(a), .b(b), .c(c), .sum(sum), 10

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

4-BIT BINARY PARALLEL ADDER

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

0

1 1

0001 0011

0 0

0100

0

1

0101

0

0

0110

0

1

0111

0

0100 0100

0

1000

0

1

1001

0

0101 0101

0

1010

0

1

1011

0

0110 0110

0

1100

0

1

1101

0

0111 0111

0

1110

0

1

1111

0

1000 1000

0

0000

1

1

0001

1

1001 1001

0

0010

1

1

0011

1

1010 1010

0

0100

1

1

0101

1

1011 1011

0

0110

1

1

0111

1

1100 1100

0

1000

1

1

1001

1

1101 1101

0

1010

1

1

1011

1

1110 1110

0

1100

1

1

1101

1

1111 1111

0

1110

1

1

1111

1

A

B

Co Ci

Ci

S

0000 0000

0

0000

0

0001 0001

0

0010

0010 0010

0

0011 0011

Where a,b,cin are the inputs and sum,carry are outputs VERILOG CODE:

4-BIT BINARY PARALLEL ADDER USING BEHAVIORAL MODELING `resetall `timescale 1ns/1ps module bit4pladbh(a,b,ci,s,co) ; input [0:3]a; input [0:3]b; input ci; 14

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

8'b11011101: begin s=4'b1011; co=1'b1;end 8'b11101110: begin s=4'b1101; co=1'b1;end 8'b11111111: begin s=4'b1111; co=1'b1;end endcase end end endmodule BIT 4 BINARY PARALLEL ADDER TEST BENCH `resetall `timescale 1ns/1ps module bit4plabh_tb_v; // Inputs reg [0:3] a; reg [0:3] b; reg ci; // Outputs wire [0:3] s; wire co; // Instantiate the Unit Under Test (UUT) bit4pladbh uut ( .a(a), .b(b), .ci(ci), .s(s), .co(co) ); initial begin #5 #5 #5 #5 #5 #5 #5 #5 #5 #5 #5

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:

4 BIT BINARY PARALLEL ADDER is designed in behavioral style and output is verified through a test bench.

19

10M11D5716

SIMULATION LAB

EXPERIMENT: 4

DECODERS

4.1---- 2 TO 4 LINE DECODER AIM: To design a 2x4 decoder and to write its verilog code in dataflow, behavioral models, verify the functionality and its output in the simulation report TOOLS USED: Xilinx 9.2i Hardware Tool. DESCRIPTION OF THE MODULE: A decoder is a combinational circuit that converts binary information from n input lines to a maximum of

unique output lines. The purpose of decoder is to generate

( 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

0

0

0 1 0

1

0

0

1 0 0

0

1

0

1 1 0

0

0

1

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:

CONCLUSION: 2 to 4 decoder has been designed using behavioral, dataflow models are verified using Test Bench.

23

10M11D5716

SIMULATION LAB

4.2-----3X8 LINE DECODER AIM: To design a 3*8 decoder and to write its verilog code in dataflow, behavioral models, verify the functionality and its out put in the simulation report TOOLS USED: Xilinx 9.2i Hardware Tool. DESCRIPTION OF THE MODULE: A Decoder is a multiple-input ,multiple –output logic circuits and converts the coded input into coded outputs ,the input and output codes are different. The input has fewer bits than the output code. In 3 to 8 decoder 3 inputs are decoded into 8 outputs. BLOCK DIAGRAM:

TRUTH TABLE:

a b c D0 D1 D2 D3 D4 D5 D6 D7 0 0 0 1

0

0

0

0

0

0

0

0 0 1 0

1

0

0

0

0

0

0

0 1 0 0

0

1

0

0

0

0

0

0 1 1 0

0

0

1

0

0

0

0

1 0 0 0

0

0

0

1

0

0

0

1 0 1 0

0

0

0

0

1

0

0

1 1 0 0

0

0

0

0

0

1

0

1 1 1 0

0

0

0

0

0

0

1

24

10M11D5716

SIMULATION LAB

Here a,b,c are the inputs and D0 to D7 are the outputs.

3TO8 LINE DECODER USING DATA FLOW MODELING STYLE `resetall `timescale 1ns/1ps module dec38data (a,b,c,dout); input a,b,c; output [0:7]dout; assign dout[0]=(~a)&(~b)&(~c); assign dout[1]=(~a)&(~b)&c; assign dout[2]=(~a)&b&(~c); assign dout[3]=(~a)&b&c; assign dout[4]=a&(~b)&(~c); assign dout[5]=a&(~b)&c; assign dout[6]=a&b&(~c); assign dout[7]=a&b&c; endmodule

3 TO 8 DECODER USING BEHAVIORAL MODELING STYLE `resetall `timescale 1ns/1ps module decoder38beh(a, b, c, y); input a; input b; input c; output [0:7] y; reg [0:7]y; //

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:

Xilinx 9.2i Hardware Tool.

DESCRIPTION OF THE MODULE: An encoder is a digital circuit that performs the inverse operation of the decoder. It has inputs and n outputs. BLOCK DIAGRAM:

29

10M11D5716

SIMULATION LAB

TRUTH TABLE:

din[0] din[0] din[0] din[0] a b 1

0

0

0

0 0

0

1

0

0

0 1

0

0

1

0

1 0

0

0

0

1

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

4'b0001:begin a=1'b1; b=1'b1; end endcase end endmodule

4TO2 LINE ENCODER USING DATAFLOW MODELING STYLE: `resetall `timescale 1ns/1ps module encoder42data(din,a,b) ; input [0:3]din; output a,b; assign a=(din[2])|(din[3]); assign b=(din[1])|(din[3]); endmodule

4TO 2 LINE ENCODER TEST BENCH `resetall `timescale 1ns/1ps module encoder42beh_tb_v; // Inputs reg [0:3] din; // Outputs wire a; wire b; // Instantiate the Unit Under Test (UUT) encoder42beh uut ( .din(din), .a(a), .b(b) ); initial 31

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:

Xilinx 9.2i Hardware Tool

DESCRIPTION OF THE MODULE: An encoder is a digital circuit that performs the inverse operation of the decoder. It has inputs and n outputs. BLOCK DIAGRAM:

33

10M11D5716

SIMULATION LAB

TRUTH TABLE:

din0 din1 din2 din3 din4 din5 din6 din7 a b c 1

0

0

0

0

0

0

0

0 0 0

0

1

0

0

0

0

0

0

0 0 1

0

0

1

0

0

0

0

0

0 1 0

0

0

0

1

0

0

0

0

0 1 1

0

0

0

0

1

0

0

0

1 0 0

0

0

0

0

0

1

0

0

1 0 1

0

0

0

0

0

0

1

0

1 1 0

0

0

0

0

0

0

0

1

1 1 1

Where din0 to din7 are inputs and a,b,c are outputs. VERILOG CODE: 8 TO 3 ENCODER USING DATAFLOW MODELING STYLE `resetall `timescale 1ns/1ps module encoder83df(din, a, b, c); input [0:7] din; output a; output b; output c; 34

10M11D5716

SIMULATION LAB

assign a=din[4] | din[5] | din[6] | din[7]; assign b=din[2] | din[3] | din[6] | din[7]; assign c=din[2] | din[4] | din[6] | din[7]; endmodule

8 TO 3 ENCODER USING BEHAVIORAL MODELING STYLE `resetall `timescale 1ns/1ps module encodr83bh (din,a,b,c); input [0:7]din; output a,b,c; reg a,b,c; always@(din) begin case(din) 8'b10000000:begin a=1'b0;b=1'b0,c=1'b0;end 8'b01000000:begin a=1'b0;b=1'b0;c=1'b1;end 8'b00100000:begin a=1'b0;b=1'b1;c=1'b0;end 8'b00010000:begin a=1'b0;b=1'b1;c=1'b1;end 8'b10001000:begin a=1'b1;b=1'b0,c=1'b0;end 8'b10000100:begin a=1'b1;b=1'b0,c=1'b1;end 8'b10000010:begin a=1'b1;b=1'b1,c=1'b0;end 8'b10000001:begin a=1'b1;b=1'b1,c=1'b1;end default

:begin a=1'bz;b=1'bz;c= 1'b1;end

endcase end endmodule

8 TO 3 LINE ENCODER TEST BENCH:

`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

0

din[0]

0

1

din[1]

1

0

din[2]

1

1

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

4:1 MUX USING BEHAVIORAL MODELING STYLE:

`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:

CONCLUSION: A 4:1 multiplexer is designed using behavioral, dataflow models are verified using test bench.

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:

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 8:1 mux has eight inputs ,3 selection lines and 1 output. BLOCK DIAGRAM:

TRUTH TABLE:

S0

S1

S2

Y

0

0

0

Y[0]

0

0

1

Y[1]

0

1

0

Y[2]

0

1

1

Y[3]

1

0

0

Y[4]

1

0

1

Y[5]

1

1

0

Y[6]

1

1

1

Y[7]

Where S0,S1,S2 are inputs and Y is output

VERILOG CODE: 43

10M11D5716

SIMULATION LAB

8:1 MUX USING DATA FLOW MODEL `resetall `timescale 1ns/1ps module mux81data1(s,din,y) ; input [0:2]s; input [0:7]din; output y; wire [0:7]t; assign t[0]=(~s[0])&(~s[1])&(~s[2]&i[0]); assign t[1]=(~s[0])&(~s[1])&(s[2]&i[1]); assign t[2]=(~s[0])&(s[1])&(~s[2]&i[2]); assign t[3]=(~s[0])&(s[1])&(s[2]&i[3]); assign t[4]=(s[0])&(~s[1])&(~s[2]&i[4]); assign t[5]=(s[0])&(~s[1])&(s[2]&i[5]); assign t[6]=(s[0])&(s[1])&(~s[2]&i[6]); assign t[7]=(s[0])&(s[1])&(s[2]&i[7]); assign y=t[0]|t[1]|t[2]|t[3]|t[4]|t[5]|t[6]|t[7]; endmodule

8:1 MUX USING BEHAVIORAL MODELING STYLE: `resetall `timescale 1ns/1ps module mux81bh(i,s,o) ; input [0:7]i; input [0:2]s; output o; wire [0:7]i; wire [0:2]s; wire [0:7]y; reg o; always@(s) 44

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:

CONCLUSION: A 8:1 multiplexer is designed using behavioral, dataflow models are verified using test bench.

EXPERIMENT: 7

DEMULTIPLEXER 47

10M11D5716

SIMULATION LAB

7.1. 1:4 DEMULTIPLEXER

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

0

0

A

0

0

0

0

1

0

A

0

0

1

0

0

0

A

0

1

1

0

0

0

A

VERILOG CODE FOR 1:4 DEMULTIPLEXER: 48

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;

// Instantiate the Unit Under Test (UUT) 49

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

7.2--- 1:8 DEMULTIPLEXER

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

A

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

TEST BENCH FOR 1:8 DEMULTIPLEXER: `resetall `timescale 1ns/1ps module demux18beh_tb_v; reg din; reg [0:2] s; // Outputs wire [0:7] y; // Instantiate the Unit Under Test (UUT) demux18beh uut ( .din(din), .s(s), .y(y) ); initial begin din=1; s=3'b000; #5 s=3'b001; #5 s=3'b010; #5 s=3'b011; #5 s=3'b100; #5 s=3'b101; #5 s=3'b110; #5 s=3'b111; end initial begin #80 $finish; end 54

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:

Xilinx 9.2i.Hardware Tool.

DESCRIPTION OF THE MODULE: Comparator is a circuit which compares two n-bit binary numbers and determines if they are equal or which one is larger if they are not equal.

BLOCK DIAGRAM:

56

10M11D5716

SIMULATION LAB

TRUTH TABLE:

a

b

altb aeqb agtb

0000 1111

1

0

0

0001 1110

1

0

0

0010 1101

1

0

0

0011 1100

1

0

0

0100 1011

1

0

0

0101 1010

1

0

0

0110 1001

1

0

0

0111 0111

0

1

0

1000 1000

0

1

0

1001 0110

0

0

1

1010 0101

0

0

1

1011 0100

0

0

1

1100 0011

0

0

1

1101 0010

0

0

1

1110 0001

0

0

1

1111 0000

0

0

1

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
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF