Sei sulla pagina 1di 57

VLSI LAB RECORD

SEMESTER 2

1. LED BLINK

AIM
To design led blink using Xilinx and simulate it in a FPGA kit.

SOFTWARE USED
Xilinx

PROCEDURE
1. The verilog module source code and test bench for led blink circuit are written.
2. It is implemented in Xilinx and simulated in VLSI trainer kit.
3. The output was viewed and verified.

PROGRAM
module led(a,clk,b);
input a,clk;
output reg b;
always@(posedge clk)
if(a==1)
begin
b=1;
end
else
b=0;
endmodule

TEST BENCH
module led_test_v;
reg a;
Dept. of ECE, FISAT

VLSI LAB RECORD

SEMESTER 2

wire b;
led uut (
.a(a),
.b(b)
);
Initial
begin
a = 1'b0;
#100;
a=1'b1;
#100;
end
endmodule

RESULT
A Led blink circuit was designed and output was observed in both Xilinx and trainer kit.

Dept. of ECE, FISAT

VLSI LAB RECORD

SEMESTER 2

2. SEVEN SEGMENT DISPLAY

AIM
To design seven segment display using Xilinx and simulate it in a FPGA kit.

SOFTWARE USED
Xilinx

PROCEDURE
1. The verilog module source code for seven segment display is written.
2. It is implemented in Xilinx and simulated in VLSI trainer kit.
3. The output was viewed and verified.

PROGRAM
module sevenseg(clk,a,b,c);
input clk;
output reg [7:0]a,b,c;
always@(posedge clk)
begin
a=8'b01110111;
b=8'b00110000;
c=8'b01110111;
end
endmodule

RESULT
A Seven segment display was designed and output was observed in vlsi trainer kit.

Dept. of ECE, FISAT

VLSI LAB RECORD

SEMESTER 2

3. THERMOMETER DECODER

AIM
To design a thermometer decoder circuit using Xilinx and simulate it in a FPGA kit.

SOFTWARE USED
Xilinx

PROCEDURE
1. The verilog module source code for thermometer decoder circuit is written.
2. It is implemented in Xilinx and simulated in VLSI trainer kit.
3. The output was viewed and verified.

PROGRAM
module thermometerdecoder(a, clk, b );
input [1:0]a ;
input clk ;
output reg [3:0]b ;
always @(posedge clk)
begin
if (a==2'b11)
b=4'b1111;
else if(a==2'b10)
b=4'b0111;
else if(a==2'b01)
b=4'b0011;
else
b=4'b0001;
end
endmodule

Dept. of ECE, FISAT

VLSI LAB RECORD

SEMESTER 2

RESULT
A thermometer decoder circuit was designed and output was observed in vlsi trainer kit.

Dept. of ECE, FISAT

VLSI LAB RECORD

SEMESTER 2

4. DECODER

AIM
To design a decoder using Xilinx and simulate in FPGA kit.

SOFTWARE USED
Xilinx

PROCEDURE
1. The verilog module source code and test bench for decoder circuit are written.
2. It is implemented in Xilinx and simulated in VLSI trainer kit.
3. The output was viewed and verified.

PROGRAM
module decoder1(a,b,y0,y1,y2,y3);
input a,b;
output reg y0,y1,y2,y3;
always@(a,b)
begin
if(a==0&&b==0)
begin
y0=1;
y1=0;
y2=0;
y3=0;
end

if(a==0&&b==1)
begin
Dept. of ECE, FISAT

VLSI LAB RECORD

SEMESTER 2

y0=0;
y1=1;
y2=0;
y3=0;
end

if(a==1&&b==0)
begin
y0=0;
y1=0;
y2=1;
y3=0;
end

if(a==1&&b==1)
begin
y0=0;
y1=0;
y2=0;
y3=1;
end
end
endmodule

TEST BENCH
module decoder_test_v;

// Inputs
reg a;
reg b;
Dept. of ECE, FISAT

VLSI LAB RECORD

SEMESTER 2

// Outputs
wire y0;
wire y1;
wire y2;
wire y3;

// Instantiate the Unit Under Test (UUT)


decoder1 uut (
.a(a),
.b(b),
.y0(y0),
.y1(y1),
.y2(y2),
.y3(y3)
);

initial begin
a = 0;
b = 0;
#100;
a = 0;
b = 1;
#100;
a = 1;
b = 0;
#100;
a = 1;

Dept. of ECE, FISAT

VLSI LAB RECORD

SEMESTER 2

b = 1;
#100;
end
endmodule

RESULT
A decoder circuit was designed and output was observed in both Xilinx and trainer kit.

5. CLOCK DIVIDER
Dept. of ECE, FISAT

VLSI LAB RECORD

SEMESTER 2

AIM
To design a clock divider using Xilinx and simulate it in a FPGA kit.

SOFTWARE USED
Xilinx

PROCEDURE
1. The verilog module source code for clock divider circuit is written.
2. It is implemented in Xilinx and simulated in VLSI trainer kit.
3. The output was viewed and verified.

PROGRAM
module clkdivider(clk,out);
input clk;
reg [24:0]count=25'b0;
output reg [1:0]out;
always@(posedge clk)
begin
count =count+1;
out[0]=count[24];
out[1]=count[23];
end
endmodule

RESULT
A clock divider circuit was designed and output was observed in vlsi trainer kit.

6. COUNTER
Dept. of ECE, FISAT

10

VLSI LAB RECORD

SEMESTER 2

AIM
To design a counter using Xilinx.

SOFTWARE USED
Xilinx

PROCEDURE
1. The verilog module source code for counter circuit was generated using IP core
generator ,its top module and test bench were written.
2. It is implemented in Xilinx.
3. The output was viewed and verified.

IP CORE PROGRAM
`timescale 1 ns/1 ps

module counter2ip (
clk, q
);
input clk;
output [15 : 0] q;

// synopsys translate_off

wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carryxortop_rt_2 ;
wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[1].carrymux_rt_3 ;
wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[2].carrymux_rt_4 ;
wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[3].carrymux_rt_5 ;
wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[4].carrymux_rt_6 ;
Dept. of ECE, FISAT

11

VLSI LAB RECORD

SEMESTER 2

wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[5].carrymux_rt_7 ;
wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[6].carrymux_rt_8 ;
wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[7].carrymux_rt_9 ;
wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[8].carrymux_rt_10;
wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[9].carrymux_rt_11;
wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[10].carrymux_rt_12;
wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[11].carrymux_rt_13;
wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[12].carrymux_rt_14;
wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[13].carrymux_rt_15;
wire \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[14].carrymux_rt_16;
wire \BU2/N0 ;
wire \BU2/q_thresh1 ;
wire NLW_VCC_P_UNCONNECTED;
wire NLW_GND_G_UNCONNECTED;
wire [15 : 0] NlwRenamedSig_OI_q;
wire [0 : 0] \BU2/U0/the_addsub/no_pipelining.the_addsub/halfsum ;
wire [14 : 0] \BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple ;
wire [15 : 0] \BU2/U0/q_next ;
assign
q[15] = NlwRenamedSig_OI_q[15],
q[14] = NlwRenamedSig_OI_q[14],
q[13] = NlwRenamedSig_OI_q[13],
q[12] = NlwRenamedSig_OI_q[12],
q[11] = NlwRenamedSig_OI_q[11],
q[10] = NlwRenamedSig_OI_q[10],
q[9] = NlwRenamedSig_OI_q[9],
q[8] = NlwRenamedSig_OI_q[8],
q[7] = NlwRenamedSig_OI_q[7],

Dept. of ECE, FISAT

12

VLSI LAB RECORD

SEMESTER 2

q[6] = NlwRenamedSig_OI_q[6],
q[5] = NlwRenamedSig_OI_q[5],
q[4] = NlwRenamedSig_OI_q[4],
q[3] = NlwRenamedSig_OI_q[3],
q[2] = NlwRenamedSig_OI_q[2],
q[1] = NlwRenamedSig_OI_q[1],
q[0] = NlwRenamedSig_OI_q[0];
VCC VCC_0 (
.P(NLW_VCC_P_UNCONNECTED)
);
GND GND_1 (
.G(NLW_GND_G_UNCONNECTED)
);
INV \BU2/U0/the_addsub/no_pipelining.the_addsub/halfsum_not00001_INV_0 (
.I(NlwRenamedSig_OI_q[0]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/halfsum [0])
);
defparam \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carryxortop_rt .INIT = 4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carryxortop_rt (
.I0(NlwRenamedSig_OI_q[15]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carryxortop_rt_2 )
);
defparam \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[1].carrymux_rt
.INIT = 4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[1].carrymux_rt (
.I0(NlwRenamedSig_OI_q[1]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[1].carrymux_rt_3 )
);

Dept. of ECE, FISAT

13

VLSI LAB RECORD

SEMESTER 2

defparam \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[2].carrymux_rt
.INIT = 4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[2].carrymux_rt (
.I0(NlwRenamedSig_OI_q[2]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[2].carrymux_rt_4 )
);
defparam \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[3].carrymux_rt
.INIT = 4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[3].carrymux_rt (
.I0(NlwRenamedSig_OI_q[3]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[3].carrymux_rt_5 )
);
defparam \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[4].carrymux_rt
.INIT = 4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[4].carrymux_rt (
.I0(NlwRenamedSig_OI_q[4]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[4].carrymux_rt_6 )
);
defparam \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[5].carrymux_rt
.INIT = 4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[5].carrymux_rt (
.I0(NlwRenamedSig_OI_q[5]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[5].carrymux_rt_7 )
);
defparam \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[6].carrymux_rt
.INIT = 4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[6].carrymux_rt (
.I0(NlwRenamedSig_OI_q[6]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[6].carrymux_rt_8 )
);
Dept. of ECE, FISAT

14

VLSI LAB RECORD

SEMESTER 2

defparam \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[7].carrymux_rt
.INIT = 4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[7].carrymux_rt (
.I0(NlwRenamedSig_OI_q[7]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[7].carrymux_rt_9 )
);
defparam \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[8].carrymux_rt
.INIT = 4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[8].carrymux_rt (
.I0(NlwRenamedSig_OI_q[8]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[8].carrymux_rt_10 )
);
defparam \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[9].carrymux_rt
.INIT = 4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[9].carrymux_rt (
.I0(NlwRenamedSig_OI_q[9]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[9].carrymux_rt_11 )
);
defparam
\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[10].carrymux_rt .INIT =
4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[10].carrymux_rt (
.I0(NlwRenamedSig_OI_q[10]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[10].carrymux_rt_12 )
);
defparam
\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[11].carrymux_rt .INIT =
4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[11].carrymux_rt (
.I0(NlwRenamedSig_OI_q[11]),
Dept. of ECE, FISAT

15

VLSI LAB RECORD

SEMESTER 2

.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[11].carrymux_rt_13 )
);
defparam
\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[12].carrymux_rt .INIT =
4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[12].carrymux_rt (
.I0(NlwRenamedSig_OI_q[12]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[12].carrymux_rt_14 )
);
defparam
\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[13].carrymux_rt .INIT =
4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[13].carrymux_rt (
.I0(NlwRenamedSig_OI_q[13]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[13].carrymux_rt_15 )
);
defparam
\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[14].carrymux_rt .INIT =
4'h2;
LUT1 \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[14].carrymux_rt (
.I0(NlwRenamedSig_OI_q[14]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[14].carrymux_rt_16 )
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrymux0 (
.CI(\BU2/N0 ),
.DI(\BU2/q_thresh1 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/halfsum [0]),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [0])
Dept. of ECE, FISAT

16

VLSI LAB RECORD

SEMESTER 2

);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carryxor0 (
.CI(\BU2/N0 ),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/halfsum [0]),
.O(\BU2/U0/q_next [0])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carryxortop (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [14]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carryxortop_rt_2 ),
.O(\BU2/U0/q_next [15])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[1].carrymux (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [0]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[1].carrymux_rt_3 ),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [1])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[1].carryxor (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [0]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[1].carrymux_rt_3 ),
.O(\BU2/U0/q_next [1])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[2].carrymux (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [1]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[2].carrymux_rt_4 ),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [2])
);

Dept. of ECE, FISAT

17

VLSI LAB RECORD

SEMESTER 2

XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[2].carryxor (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [1]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[2].carrymux_rt_4 ),
.O(\BU2/U0/q_next [2])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[3].carrymux (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [2]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[3].carrymux_rt_5 ),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [3])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[3].carryxor (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [2]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[3].carrymux_rt_5 ),
.O(\BU2/U0/q_next [3])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[4].carrymux (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [3]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[4].carrymux_rt_6 ),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [4])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[4].carryxor (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [3]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[4].carrymux_rt_6 ),
.O(\BU2/U0/q_next [4])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[5].carrymux (

Dept. of ECE, FISAT

18

VLSI LAB RECORD

SEMESTER 2

.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [4]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[5].carrymux_rt_7 ),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [5])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[5].carryxor (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [4]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[5].carrymux_rt_7 ),
.O(\BU2/U0/q_next [5])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[6].carrymux (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [5]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[6].carrymux_rt_8 ),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [6])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[6].carryxor (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [5]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[6].carrymux_rt_8 ),
.O(\BU2/U0/q_next [6])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[7].carrymux (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [6]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[7].carrymux_rt_9 ),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [7])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[7].carryxor (

Dept. of ECE, FISAT

19

VLSI LAB RECORD

SEMESTER 2

.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [6]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[7].carrymux_rt_9 ),
.O(\BU2/U0/q_next [7])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[8].carrymux (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [7]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[8].carrymux_rt_10 ),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [8])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[8].carryxor (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [7]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[8].carrymux_rt_10 ),
.O(\BU2/U0/q_next [8])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[9].carrymux (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [8]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[9].carrymux_rt_11 ),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [9])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[9].carryxor (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [8]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[9].carrymux_rt_11 ),
.O(\BU2/U0/q_next [9])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[10].carrymux
(
Dept. of ECE, FISAT

20

VLSI LAB RECORD

SEMESTER 2

.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [9]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[10].carrymux_rt_12 ),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [10])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[10].carryxor (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [9]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[10].carrymux_rt_12
),
.O(\BU2/U0/q_next [10])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[11].carrymux (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [10]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[11].carrymux_rt_13 ),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [11])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[11].carryxor (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [10]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[11].carrymux_rt_13
),
.O(\BU2/U0/q_next [11])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[12].carrymux
(
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [11]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[12].carrymux_rt_14 ),
Dept. of ECE, FISAT

21

VLSI LAB RECORD

SEMESTER 2

.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [12])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[12].carryxor (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [11]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[12].carrymux_rt_14
),
.O(\BU2/U0/q_next [12])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[13].carrymux
(
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [12]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[13].carrymux_rt_15 ),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [13])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[13].carryxor (
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [12]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[13].carrymux_rt_15
),
.O(\BU2/U0/q_next [13])
);
MUXCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[14].carrymux
(
.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [13]),
.DI(\BU2/N0 ),
.S(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[14].carrymux_rt_16 ),
.O(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [14])
);
XORCY \BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[14].carryxor (
Dept. of ECE, FISAT

22

VLSI LAB RECORD

SEMESTER 2

.CI(\BU2/U0/the_addsub/no_pipelining.the_addsub/carry_simple [13]),
.LI(\BU2/U0/the_addsub/no_pipelining.the_addsub/i_simple_model.carrychaingen[14].carrymux_rt_16
),
.O(\BU2/U0/q_next [14])
);
defparam \BU2/U0/q_i_0 .INIT = 1'b0;
FDE \BU2/U0/q_i_0 (
.C(clk),
.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [0]),
.Q(NlwRenamedSig_OI_q[0])
);
defparam \BU2/U0/q_i_1 .INIT = 1'b0;
FDE \BU2/U0/q_i_1 (
.C(clk),
.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [1]),
.Q(NlwRenamedSig_OI_q[1])
);
defparam \BU2/U0/q_i_2 .INIT = 1'b0;
FDE \BU2/U0/q_i_2 (
.C(clk),
.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [2]),
.Q(NlwRenamedSig_OI_q[2])
);
defparam \BU2/U0/q_i_3 .INIT = 1'b0;
FDE \BU2/U0/q_i_3 (
.C(clk),
Dept. of ECE, FISAT

23

VLSI LAB RECORD

SEMESTER 2

.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [3]),
.Q(NlwRenamedSig_OI_q[3])
);
defparam \BU2/U0/q_i_4 .INIT = 1'b0;
FDE \BU2/U0/q_i_4 (
.C(clk),
.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [4]),
.Q(NlwRenamedSig_OI_q[4])
);
defparam \BU2/U0/q_i_5 .INIT = 1'b0;
FDE \BU2/U0/q_i_5 (
.C(clk),
.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [5]),
.Q(NlwRenamedSig_OI_q[5])
);
defparam \BU2/U0/q_i_6 .INIT = 1'b0;
FDE \BU2/U0/q_i_6 (
.C(clk),
.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [6]),
.Q(NlwRenamedSig_OI_q[6])
);
defparam \BU2/U0/q_i_7 .INIT = 1'b0;
FDE \BU2/U0/q_i_7 (
.C(clk),

Dept. of ECE, FISAT

24

VLSI LAB RECORD

SEMESTER 2

.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [7]),
.Q(NlwRenamedSig_OI_q[7])
);
defparam \BU2/U0/q_i_8 .INIT = 1'b0;
FDE \BU2/U0/q_i_8 (
.C(clk),
.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [8]),
.Q(NlwRenamedSig_OI_q[8])
);
defparam \BU2/U0/q_i_9 .INIT = 1'b0;
FDE \BU2/U0/q_i_9 (
.C(clk),
.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [9]),
.Q(NlwRenamedSig_OI_q[9])
);
defparam \BU2/U0/q_i_10 .INIT = 1'b0;
FDE \BU2/U0/q_i_10 (
.C(clk),
.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [10]),
.Q(NlwRenamedSig_OI_q[10])
);
defparam \BU2/U0/q_i_11 .INIT = 1'b0;
FDE \BU2/U0/q_i_11 (
.C(clk),

Dept. of ECE, FISAT

25

VLSI LAB RECORD

SEMESTER 2

.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [11]),
.Q(NlwRenamedSig_OI_q[11])
);
defparam \BU2/U0/q_i_12 .INIT = 1'b0;
FDE \BU2/U0/q_i_12 (
.C(clk),
.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [12]),
.Q(NlwRenamedSig_OI_q[12])
);
defparam \BU2/U0/q_i_13 .INIT = 1'b0;
FDE \BU2/U0/q_i_13 (
.C(clk),
.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [13]),
.Q(NlwRenamedSig_OI_q[13])
);
defparam \BU2/U0/q_i_14 .INIT = 1'b0;
FDE \BU2/U0/q_i_14 (
.C(clk),
.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [14]),
.Q(NlwRenamedSig_OI_q[14])
);
defparam \BU2/U0/q_i_15 .INIT = 1'b0;
FDE \BU2/U0/q_i_15 (
.C(clk),

Dept. of ECE, FISAT

26

VLSI LAB RECORD

SEMESTER 2

.CE(\BU2/q_thresh1 ),
.D(\BU2/U0/q_next [15]),
.Q(NlwRenamedSig_OI_q[15])
);
VCC \BU2/XST_VCC (
.P(\BU2/q_thresh1 )
);
GND \BU2/XST_GND (
.G(\BU2/N0 )
);

// synopsys translate_on

endmodule

// synopsys translate_off

`timescale 1 ps / 1 ps

module glbl ();

parameter ROC_WIDTH = 100000;


parameter TOC_WIDTH = 0;

wire GSR;
wire GTS;
wire PRLD;

Dept. of ECE, FISAT

27

VLSI LAB RECORD

SEMESTER 2

reg GSR_int;
reg GTS_int;
reg PRLD_int;

//-------- JTAG Globals -------------wire JTAG_TDO_GLBL;


wire JTAG_TCK_GLBL;
wire JTAG_TDI_GLBL;
wire JTAG_TMS_GLBL;
wire JTAG_TRST_GLBL;

reg JTAG_CAPTURE_GLBL;
reg JTAG_RESET_GLBL;
reg JTAG_SHIFT_GLBL;
reg JTAG_UPDATE_GLBL;

reg JTAG_SEL1_GLBL = 0;
reg JTAG_SEL2_GLBL = 0 ;
reg JTAG_SEL3_GLBL = 0;
reg JTAG_SEL4_GLBL = 0;

reg JTAG_USER_TDO1_GLBL = 1'bz;


reg JTAG_USER_TDO2_GLBL = 1'bz;
reg JTAG_USER_TDO3_GLBL = 1'bz;
reg JTAG_USER_TDO4_GLBL = 1'bz;

assign (weak1, weak0) GSR = GSR_int;


assign (weak1, weak0) GTS = GTS_int;

Dept. of ECE, FISAT

28

VLSI LAB RECORD

SEMESTER 2

assign (weak1, weak0) PRLD = PRLD_int;

initial begin
GSR_int = 1'b1;
PRLD_int = 1'b1;
#(ROC_WIDTH)
GSR_int = 1'b0;
PRLD_int = 1'b0;
end

initial begin
GTS_int = 1'b1;
#(TOC_WIDTH)
GTS_int = 1'b0;
end

endmodule

// synopsys translate_on

TOP MODULE
module counter2iptop(clk,q);
input clk;
output wire [15:0] q;
counter2ip uut(clk,q);
endmodule

TEST BENCH
module counter2ip_test_v;
// Inputs
Dept. of ECE, FISAT

29

VLSI LAB RECORD

SEMESTER 2

reg clk;
// Outputs
wire [15:0] q;
// Instantiate the Unit Under Test (UUT)
counter2iptop uut (
.clk(clk),
.q(q));
always #10 clk=~clk;
initial begin
// Initialize Inputs
clk = 0;
end
endmodule

OUTPUT
RESULT
A counter circuit was designed and output was observed in xilinx.

7. CLOCK MULTIPLIER

Dept. of ECE, FISAT

30

VLSI LAB RECORD

SEMESTER 2

AIM
To design a clock multiplier using Xilinx.

SOFTWARE USED
Xilinx

PROCEDURE
1. The verilog module source code for clock multiplier circuit was generated using IP core
generator ,its top module and test bench were written.
2. It is implemented in Xilinx.
3. The output was viewed and verified.

IP CORE PROGRAM
`timescale 1ns / 1ps

module clkm_ip(CLKIN_IN,
CLKFX_OUT,
CLKFX180_OUT,
CLKIN_IBUFG_OUT);

input CLKIN_IN;
output CLKFX_OUT;
output CLKFX180_OUT;
output CLKIN_IBUFG_OUT;

wire CLKFX_BUF;
wire CLKFX180_BUF;
wire CLKIN_IBUFG;
wire GND_BIT;
Dept. of ECE, FISAT

31

VLSI LAB RECORD

SEMESTER 2

assign GND_BIT = 0;
assign CLKIN_IBUFG_OUT = CLKIN_IBUFG;
BUFG CLKFX_BUFG_INST (.I(CLKFX_BUF),
.O(CLKFX_OUT));
BUFG CLKFX180_BUFG_INST (.I(CLKFX180_BUF),
.O(CLKFX180_OUT));
IBUFG CLKIN_IBUFG_INST (.I(CLKIN_IN),
.O(CLKIN_IBUFG));
DCM_SP DCM_SP_INST (.CLKFB(GND_BIT),
.CLKIN(CLKIN_IBUFG),
.DSSEN(GND_BIT),
.PSCLK(GND_BIT),
.PSEN(GND_BIT),
.PSINCDEC(GND_BIT),
.RST(GND_BIT),
.CLKDV(),
.CLKFX(CLKFX_BUF),
.CLKFX180(CLKFX180_BUF),
.CLK0(),
.CLK2X(),
.CLK2X180(),
.CLK90(),
.CLK180(),
.CLK270(),
.LOCKED(),
.PSDONE(),
.STATUS());

Dept. of ECE, FISAT

32

VLSI LAB RECORD

SEMESTER 2

defparam DCM_SP_INST.CLK_FEEDBACK = "NONE";


defparam DCM_SP_INST.CLKDV_DIVIDE = 2.0;
defparam DCM_SP_INST.CLKFX_DIVIDE = 4;
defparam DCM_SP_INST.CLKFX_MULTIPLY = 2;
defparam DCM_SP_INST.CLKIN_DIVIDE_BY_2 = "FALSE";
defparam DCM_SP_INST.CLKIN_PERIOD = 100.000;
defparam DCM_SP_INST.CLKOUT_PHASE_SHIFT = "NONE";
defparam DCM_SP_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";
defparam DCM_SP_INST.DFS_FREQUENCY_MODE = "LOW";
defparam DCM_SP_INST.DLL_FREQUENCY_MODE = "LOW";
defparam DCM_SP_INST.DUTY_CYCLE_CORRECTION = "TRUE";
defparam DCM_SP_INST.FACTORY_JF = 16'hC080;
defparam DCM_SP_INST.PHASE_SHIFT = 0;
defparam DCM_SP_INST.STARTUP_WAIT = "FALSE";
endmodule

TOP MODULE
module clkm_top(CLKIN_IN,
CLKFX_OUT,
CLKFX180_OUT,
CLKIN_IBUFG_OUT);
input CLKIN_IN;
output CLKFX_OUT;
output CLKFX180_OUT;
output CLKIN_IBUFG_OUT;

clkm_ip dut(CLKIN_IN,
CLKFX_OUT,
CLKFX180_OUT,
Dept. of ECE, FISAT

33

VLSI LAB RECORD

SEMESTER 2

CLKIN_IBUFG_OUT);
endmodule

TEST BENCH
module clkm_test_v;
// Inputs
reg CLKIN_IN;
// Outputs
wire CLKFX_OUT;
wire CLKFX180_OUT;
wire CLKIN_IBUFG_OUT;
// Instantiate the Unit Under Test (UUT)
clkm_top uut (
.CLKIN_IN(CLKIN_IN),
.CLKFX_OUT(CLKFX_OUT),
.CLKFX180_OUT(CLKFX180_OUT),
.CLKIN_IBUFG_OUT(CLKIN_IBUFG_OUT)
);
initial begin
// Initialize Inputs
CLKIN_IN = 0;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
end
always begin #50; CLKIN_IN=~CLKIN_IN; end
endmodule

BLACK BOX

Dept. of ECE, FISAT

34

VLSI LAB RECORD

SEMESTER 2

OUTPUT

RESULT
A clock multiplier circuit was designed and output was observed in xilinx.

8. CLOCK DIVIDER
Dept. of ECE, FISAT

35

VLSI LAB RECORD

SEMESTER 2

AIM
To design a clock multiplier using Xilinx.

SOFTWARE USED
Xilinx

PROCEDURE
1. The verilog module source code for clock divider circuit was generated using IP core
generator, its top module and test bench were written.
2. It is implemented in Xilinx.
3. The output was viewed and verified.

IP CORE PROGRAM
`timescale 1ns / 1ps

module clkdiv_ip(CLKIN_IN,
CLKFX_OUT,
CLKFX180_OUT,
CLKIN_IBUFG_OUT);

input CLKIN_IN;
output CLKFX_OUT;
output CLKFX180_OUT;
output CLKIN_IBUFG_OUT;

wire CLKFX_BUF;
wire CLKFX180_BUF;
wire CLKIN_IBUFG;
Dept. of ECE, FISAT

36

VLSI LAB RECORD

SEMESTER 2

wire GND_BIT;

assign GND_BIT = 0;
assign CLKIN_IBUFG_OUT = CLKIN_IBUFG;
BUFG CLKFX_BUFG_INST (.I(CLKFX_BUF),
.O(CLKFX_OUT));
BUFG CLKFX180_BUFG_INST (.I(CLKFX180_BUF),
.O(CLKFX180_OUT));
IBUFG CLKIN_IBUFG_INST (.I(CLKIN_IN),
.O(CLKIN_IBUFG));
DCM_SP DCM_SP_INST (.CLKFB(GND_BIT),
.CLKIN(CLKIN_IBUFG),
.DSSEN(GND_BIT),
.PSCLK(GND_BIT),
.PSEN(GND_BIT),
.PSINCDEC(GND_BIT),
.RST(GND_BIT),
.CLKDV(),
.CLKFX(CLKFX_BUF),
.CLKFX180(CLKFX180_BUF),
.CLK0(),
.CLK2X(),
.CLK2X180(),
.CLK90(),
.CLK180(),
.CLK270(),
.LOCKED(),
.PSDONE(),

Dept. of ECE, FISAT

37

VLSI LAB RECORD

SEMESTER 2

.STATUS());
defparam DCM_SP_INST.CLK_FEEDBACK = "NONE";
defparam DCM_SP_INST.CLKDV_DIVIDE = 2.0;
defparam DCM_SP_INST.CLKFX_DIVIDE = 4;
defparam DCM_SP_INST.CLKFX_MULTIPLY = 2;
defparam DCM_SP_INST.CLKIN_DIVIDE_BY_2 = "FALSE";
defparam DCM_SP_INST.CLKIN_PERIOD = 100.000;
defparam DCM_SP_INST.CLKOUT_PHASE_SHIFT = "NONE";
defparam DCM_SP_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";
defparam DCM_SP_INST.DFS_FREQUENCY_MODE = "LOW";
defparam DCM_SP_INST.DLL_FREQUENCY_MODE = "LOW";
defparam DCM_SP_INST.DUTY_CYCLE_CORRECTION = "TRUE";
defparam DCM_SP_INST.FACTORY_JF = 16'hC080;
defparam DCM_SP_INST.PHASE_SHIFT = 0;
defparam DCM_SP_INST.STARTUP_WAIT = "FALSE";
endmodule

TOP MODULE
module clkdiv_top(CLKIN_IN,
CLKFX_OUT,
CLKFX180_OUT,
CLKIN_IBUFG_OUT);
input CLKIN_IN;
output CLKFX_OUT;
output CLKFX180_OUT;
output CLKIN_IBUFG_OUT;

clkdiv_ip dut(CLKIN_IN,
CLKFX_OUT,
Dept. of ECE, FISAT

38

VLSI LAB RECORD

SEMESTER 2

CLKFX180_OUT,
CLKIN_IBUFG_OUT);
endmodule

TEST BENCH
module clkdiv_test_v;
// Inputs
reg CLKIN_IN;
// Outputs
wire CLKFX_OUT;
wire CLKFX180_OUT;
wire CLKIN_IBUFG_OUT;
// Instantiate the Unit Under Test (UUT)
clkm_top uut (
.CLKIN_IN(CLKIN_IN),
.CLKFX_OUT(CLKFX_OUT),
.CLKFX180_OUT(CLKFX180_OUT),
.CLKIN_IBUFG_OUT(CLKIN_IBUFG_OUT)
);
initial begin
// Initialize Inputs
CLKIN_IN = 0;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
end
always begin #50; CLKIN_IN=~CLKIN_IN; end
endmodule

BLACK BOX
Dept. of ECE, FISAT

39

VLSI LAB RECORD

SEMESTER 2

OUTPUT

RESULT
A clock divider circuit was designed and output was observed in xilinx.

9. FIFO
Dept. of ECE, FISAT

40

VLSI LAB RECORD

SEMESTER 2

AIM
To design FIFO using Xilinx.

SOFTWARE USED
Xilinx

PROCEDURE
1. The verilog module source code for FIFO circuit was generated using IP core
generator, its top module and test bench were written.
2. It is implemented in Xilinx.
3. The output was viewed and verified.

IP CORE PROGRAM
`timescale 1ns/1ps

module fifog(
clk,
din,
rd_en,
rst,
wr_en,
dout,
empty,
full);

input clk;
input [15 : 0] din;
input rd_en;
input rst;
Dept. of ECE, FISAT

41

VLSI LAB RECORD

SEMESTER 2

input wr_en;
output [15 : 0] dout;
output empty;
output full;

// synthesis translate_off

FIFO_GENERATOR_V3_3 #(
.C_COMMON_CLOCK(1),
.C_COUNT_TYPE(0),
.C_DATA_COUNT_WIDTH(10),
.C_DEFAULT_VALUE("BlankString"),
.C_DIN_WIDTH(16),
.C_DOUT_RST_VAL("0"),
.C_DOUT_WIDTH(16),
.C_ENABLE_RLOCS(0),
.C_FAMILY("spartan3"),
.C_HAS_ALMOST_EMPTY(0),
.C_HAS_ALMOST_FULL(0),
.C_HAS_BACKUP(0),
.C_HAS_DATA_COUNT(0),
.C_HAS_MEMINIT_FILE(0),
.C_HAS_OVERFLOW(0),
.C_HAS_RD_DATA_COUNT(0),
.C_HAS_RD_RST(0),
.C_HAS_RST(1),
.C_HAS_SRST(0),
.C_HAS_UNDERFLOW(0),

Dept. of ECE, FISAT

42

VLSI LAB RECORD

SEMESTER 2

.C_HAS_VALID(0),
.C_HAS_WR_ACK(0),
.C_HAS_WR_DATA_COUNT(0),
.C_HAS_WR_RST(0),
.C_IMPLEMENTATION_TYPE(0),
.C_INIT_WR_PNTR_VAL(0),
.C_MEMORY_TYPE(1),
.C_MIF_FILE_NAME("BlankString"),
.C_OPTIMIZATION_MODE(0),
.C_OVERFLOW_LOW(0),
.C_PRELOAD_LATENCY(1),
.C_PRELOAD_REGS(0),
.C_PRIM_FIFO_TYPE("1kx18"),
.C_PROG_EMPTY_THRESH_ASSERT_VAL(2),
.C_PROG_EMPTY_THRESH_NEGATE_VAL(3),
.C_PROG_EMPTY_TYPE(0),
.C_PROG_FULL_THRESH_ASSERT_VAL(1022),
.C_PROG_FULL_THRESH_NEGATE_VAL(1021),
.C_PROG_FULL_TYPE(0),
.C_RD_DATA_COUNT_WIDTH(10),
.C_RD_DEPTH(1024),
.C_RD_FREQ(100),
.C_RD_PNTR_WIDTH(10),
.C_UNDERFLOW_LOW(0),
.C_USE_ECC(0),
.C_USE_FIFO16_FLAGS(0),
.C_VALID_LOW(0),
.C_WR_ACK_LOW(0),

Dept. of ECE, FISAT

43

VLSI LAB RECORD

SEMESTER 2

.C_WR_DATA_COUNT_WIDTH(10),
.C_WR_DEPTH(1024),
.C_WR_FREQ(100),
.C_WR_PNTR_WIDTH(10),
.C_WR_RESPONSE_LATENCY(1))
inst (
.CLK(clk),
.DIN(din),
.RD_EN(rd_en),
.RST(rst),
.WR_EN(wr_en),
.DOUT(dout),
.EMPTY(empty),
.FULL(full),
.BACKUP(),
.BACKUP_MARKER(),
.PROG_EMPTY_THRESH(),
.PROG_EMPTY_THRESH_ASSERT(),
.PROG_EMPTY_THRESH_NEGATE(),
.PROG_FULL_THRESH(),
.PROG_FULL_THRESH_ASSERT(),
.PROG_FULL_THRESH_NEGATE(),
.RD_CLK(),
.RD_RST(),
.SRST(),
.WR_CLK(),
.WR_RST(),
.ALMOST_EMPTY(),

Dept. of ECE, FISAT

44

VLSI LAB RECORD

SEMESTER 2

.ALMOST_FULL(),
.DATA_COUNT(),
.OVERFLOW(),
.PROG_EMPTY(),
.PROG_FULL(),
.VALID(),
.RD_DATA_COUNT(),
.UNDERFLOW(),
.WR_ACK(),
.WR_DATA_COUNT(),
.SBITERR(),
.DBITERR());
// synthesis translate_on
// XST black box declaration
// box_type "black_box"
// synthesis attribute box_type of fifog is "black_box"
endmodule

TOP MODULE
module fifo_top(
clk,
din,
rd_en,
rst,
wr_en,
dout,
empty,
full);
Dept. of ECE, FISAT

45

VLSI LAB RECORD

SEMESTER 2

input clk;
input [15 : 0] din;
input rd_en;
input rst;
input wr_en;
output [15 : 0] dout;
output empty;
output full;
fifog m(clk,din,rd_en,rst,wr_en,dout,empty,full);
endmodule

TEST BENCH
module fifo_test_v;
// Inputs
reg clk;
reg [15:0] din;
reg rd_en;
reg rst;
reg wr_en;
// Outputs
wire [15:0] dout;
wire empty;
wire full;
// Instantiate the Unit Under Test (UUT)
fifo_top uut (
.clk(clk),
.din(din),
.rd_en(rd_en),
.rst(rst),
Dept. of ECE, FISAT

46

VLSI LAB RECORD

SEMESTER 2

.wr_en(wr_en),
.dout(dout),
.empty(empty),
.full(full)
);
initial begin
// Initialize Inputs
clk = 0;
din = 0;
rd_en = 0;
rst = 0;
wr_en = 0;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
wr_en =1;
din=1'b1;
#100;
din=3'b101;
#100;
din=5'b11111;
#100;
din=1'b0;
#100;
din=2'b10;
#100;
din=4'b1011;
#100;

Dept. of ECE, FISAT

47

VLSI LAB RECORD

SEMESTER 2

wr_en=0;
#150;
rd_en=1;
end
always begin
#50;
clk = ~clk;
end
endmodule

BLACK BOX

OUTPUT

Dept. of ECE, FISAT

48

VLSI LAB RECORD

SEMESTER 2

RESULT
A FIFO circuit was designed and output was observed in xilinx.

10. SRAM
Dept. of ECE, FISAT

49

VLSI LAB RECORD

SEMESTER 2

AIM
To design a SRAM using Xilinx.

SOFTWARE USED
Xilinx

PROCEDURE
1. The verilog module source code for SRAM circuit was generated using IP core
generator ,its top module and test bench were written.
2. It is implemented in Xilinx.
3. The output was viewed and verified.

IP CORE PROGRAM
`timescale 1ns/1ps
module sram_ip(addra, addrb, clka, clkb, dina, dinb, douta, doutb, wea, web);
input [3 : 0] addra;
input [3 : 0] addrb;
input clka;
input clkb;
input [15 : 0] dina;
input [15 : 0] dinb;
output [15 : 0] douta;
output [15 : 0] doutb;
input wea;
input web;
// synthesis translate_off
BLKMEMDP_V6_3 #(
.c_addra_width(4),
.c_addrb_width(4),
Dept. of ECE, FISAT

50

VLSI LAB RECORD

SEMESTER 2

.c_default_data("0"),
.c_depth_a(16),
.c_depth_b(16),
.c_enable_rlocs(0),
.c_has_default_data(1),
.c_has_dina(1),
.c_has_dinb(1),
.c_has_douta(1),
.c_has_doutb(1),
.c_has_ena(0),
.c_has_enb(0),
.c_has_limit_data_pitch(0),
.c_has_nda(0),
.c_has_ndb(0),
.c_has_rdya(0),
.c_has_rdyb(0),
.c_has_rfda(0),
.c_has_rfdb(0),
.c_has_sinita(0),
.c_has_sinitb(0),
.c_has_wea(1),
.c_has_web(1),
.c_limit_data_pitch(18),
.c_mem_init_file("mif_file_16_1"),
.c_pipe_stages_a(0),
.c_pipe_stages_b(0),
.c_reg_inputsa(0),
.c_reg_inputsb(0),

Dept. of ECE, FISAT

51

VLSI LAB RECORD

SEMESTER 2

.c_sim_collision_check("NONE"),
.c_sinita_value("0"),
.c_sinitb_value("0"),
.c_width_a(16),
.c_width_b(16),
.c_write_modea(0),
.c_write_modeb(0),
.c_ybottom_addr("0"),
.c_yclka_is_rising(1),
.c_yclkb_is_rising(1),
.c_yena_is_high(1),
.c_yenb_is_high(1),
.c_yhierarchy("hierarchy1"),
.c_ymake_bmm(0),
.c_yprimitive_type("16kx1"),
.c_ysinita_is_high(1),
.c_ysinitb_is_high(1),
.c_ytop_addr("1024"),
.c_yuse_single_primitive(0),
.c_ywea_is_high(1),
.c_yweb_is_high(1),
.c_yydisable_warnings(1))
inst (
.ADDRA(addra),
.ADDRB(addrb),
.CLKA(clka),
.CLKB(clkb),
.DINA(dina),

Dept. of ECE, FISAT

52

VLSI LAB RECORD

SEMESTER 2

.DINB(dinb),
.DOUTA(douta),
.DOUTB(doutb),
.WEA(wea),
.WEB(web),
.ENA(),
.ENB(),
.NDA(),
.NDB(),
.RFDA(),
.RFDB(),
.RDYA(),
.RDYB(),
.SINITA(),
.SINITB());
// synthesis translate_on
// XST black box declaration
// box_type "black_box"
// synthesis attribute box_type of sram_ip is "black_box"
Endmodule

TOP MODULE
module sram_top(addra, addrb, clka, clkb, dina, dinb, douta, doutb, wea, web);
input [3 : 0] addra;
input [3 : 0] addrb;
input clka;
input clkb;
input [15 : 0] dina;
input [15 : 0] dinb;
Dept. of ECE, FISAT

53

VLSI LAB RECORD

SEMESTER 2

output [15 : 0] douta;


output [15 : 0] doutb;
input wea;
input web;
sram_ip dut(addra, addrb, clka, clkb, dina, dinb, douta, doutb, wea, web);
endmodule

TEST BENCH
module sram_test_v;
// Inputs
reg [3:0] addra;
reg [3:0] addrb;
reg clka;
reg clkb;
reg [15:0] dina;
reg [15:0] dinb;
reg wea;
reg web;
// Outputs
wire [15:0] douta;
wire [15:0] doutb;
// Instantiate the Unit Under Test (UUT)
sram_top uut (
.addra(addra),
.addrb(addrb),
.clka(clka),
.clkb(clkb),
.dina(dina),
.dinb(dinb),
Dept. of ECE, FISAT

54

VLSI LAB RECORD

SEMESTER 2

.douta(douta),
.doutb(doutb),
.wea(wea),
.web(web)
);
initial begin
// Initialize Inputs
addra = 0;
addrb = 0;
clka = 0;
clkb = 0;
dina = 0;
dinb = 0;
wea = 0;
web = 0;
// Wait 100 ns for global reset to finish
#100;
wea=1;
#100;
addra=4'b1001;
dina = 5'b10101;
#100;
addra=4'b1010;
dina = 5'b11111;
#100;
wea = 0;
#100;
addra=4'b1001;

Dept. of ECE, FISAT

55

VLSI LAB RECORD

SEMESTER 2

#100;
addra=4'b1010;
end
always begin
#50
clka=~clka;
end
endmodule

BLACK BOX

OUTPUT
Dept. of ECE, FISAT

56

VLSI LAB RECORD

SEMESTER 2

RESULT
A SRAM circuit was designed and output was observed in xilinx.

Dept. of ECE, FISAT

57

Potrebbero piacerti anche