100% found this document useful (1 vote)
206 views

Verilog Code For Comb. Circuits

The document describes an experiment involving the design and implementation of combinational logic circuits using Verilog. It involves modeling basic logic gates like AND, OR, XOR etc. using different approaches. More complex circuits like half adder, full adder, decoder, encoder are also modeled. Functional verification of the circuits is done through simulation using test benches. The designs are synthesized on a Cyclone II FPGA for implementation.
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
206 views

Verilog Code For Comb. Circuits

The document describes an experiment involving the design and implementation of combinational logic circuits using Verilog. It involves modeling basic logic gates like AND, OR, XOR etc. using different approaches. More complex circuits like half adder, full adder, decoder, encoder are also modeled. Functional verification of the circuits is done through simulation using test benches. The designs are synthesized on a Cyclone II FPGA for implementation.
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 33

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

Exp.No.1 Design and Implementation of Combinational Circuits


Aim: To design and implement the following combinational circuit. a. Basic Gates Using Dataflow, Structural, Behavioral Modeling b. Half-Adder and Full-Adder using structural and dataflow Modeling c. Half-Subtractor and Full-Subtractor using dataflow and structural modeling. d. Decoder and Encoder using structural and dataflow modeling. e. f. Code Convertor & parity generators using structural and dataflow modeling Multiplexer and De-multiplexer using structural, dataflow and behavioral modeling

Software Details: For design Functional Simulation: ModelSim For design Synthesis: Quartus II For design Implementation: Quartus II Hardware Details: Family: Cyclone II Device: EP2C Package: FBGA Pin count: 484

a. Basic Gates Using Dataflow, Structural, Behavioral Modeling


RTL Code for AND gate: Data Flow Modeling module and_gate(a,b,y); input a,b; output y; wire y; assign y=a & b; endmodule Structural Modeling: module and_gate (a,b,y); input a,b;
FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

output y; wire y; and(y,a,b); endmodule Behavioral Modeling: module and_gate(a,b,y); input a,b; output y; reg y; always @(a,b) y=a&b; endmodule Test Bench for AND gate module and_gate_tst(); reg a,b; wire y; and_gate m1(a,b,y); initial begin a=1'b0; b=1'b0; #100; a=1'b0; b=1'b1; #100; a=1'b1; b=1'b0; #100; a=1'b1; b=1'b1; #100; $stop; end endmodule

Functional Simulation of AND gate:

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

Inference: From the above analysis for AND gate functional verification is performed

RTL Code for OR gate: Data Flow Modeling module or_gate (a,b,y); input a,b; output y; wire y; assign y= a | b; endmodule Structural Modeling: module or_gate(a,b,y); input a,b; output y; wire y; or(y,a,b); endmodule Behavioral Modeling: module or_gate(a,b,y); input a,b; output y; reg y; always @(a,b) y=a | b; endmodule

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

Test Bench for OR gate module or_gate_tst(); reg a,b; wire y; or_gate a1(a,b,y); initial begin a=1'b0; b=1'b0; #100; a=1'b0; b=1'b1; #100; a=1'b1; b=1'b0; #100; a=1'b1; b=1'b1; #100; $stop; end endmodule

Functional Simulation of OR gate:

Inference:

From the above analysis for OR gate functional verification is performed.

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

RTL Code for XOR gate: Data Flow Modeling module xorgate(a,b,y); input a,b; output y; wire y; assign y= a ^ b; endmodule Structural Modeling:
module xorgate(a,b,y); input a,b; output y; wire y; xor(y,a,b); endmodule

Behavioral Modeling: module xorgate(a,b,y); input a,b; output y; reg y; always @(a,b) y=a ^ b; endmodule
Test Bench for XOR gate module xorgate_tst(); reg a,b; wire y; xorgate a1(a,b,y);

initial begin a=1'b0; b=1'b0; #100; a=1'b0; b=1'b1; #100; a=1'b1; b=1'b0; #100; a=1'b1;
FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

b=1'b1; #100 $stop; end endmodule

Functional Simulation of XOR gate:

Inference:

From the above analysis for XOR gate functional verification is performed

RTL Code for NAND gate: Data Flow Modeling module nandgate(a,b,y); input a,b; output y; wire y; assign y=~(a&b); endmodule Structural Modeling:
module nandgate(a,b,y); input a,b; output y; wire y; nand(y,a,b); endmodule

Behavioral Modeling: module nandgate(a,b,y); input a,b; output y;

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

reg y; always @(a,b) y=~(a&b); endmodule Test Bench for NAND gate module nandtest(); reg a,b; wire y; nandgate a1(a,b,y); initial begin a=1'b0; b=1'b0; #100; a=1'b0; b=1'b1; #100; a=1'b1; b=1'b0; #100; a=1'b1; b=1'b1; #100 $stop; end endmodule

Functional Simulation of NAND gate:

Inference:

From the above analysis for NAND gate functional verification is performed

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

RTL Code for NOR gate:

Data Flow Modeling: module norgate(a,b,y); input a,b; output y; wire y; assign y= ~(a|b); endmodule Structural Modeling:
module norgate(a,b,y); input a,b; output y; wire y; nor(y,a,b); endmodule

Behavioral Modeling: module norgate(a,b,y); input a,b; output y; reg y; always @(a,b) y=~(a|b); endmodule Test Bench for NOR gate module nortest(); reg a,b; wire y; norgate a1(a,b,y); initial begin a=1'b0; b=1'b0; #100; a=1'b0; b=1'b1; #100; a=1'b1;b=1'b0; #100; a=1'b1; b=1'b1;

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

#100 $stop; end endmodule

Functional Simulation of NOR gate:

Inference:

From the above analysis for NOR gate functional verification is performed

RTL Code for XNOR gate: Data Flow Modeling module xnorgate(a,b,y); input a,b; output y; wire y; assign y= ~(a^b); endmodule Structural Modeling: module xnorgate(a,b,y); input a,b; output y; wire y; xnor(y,a,b);
FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

Behavioral Modeling: module xnorgate(a,b,y); input a,b; output y; reg y; always @(a,b) y=~(a^b); endmodule Test Bench for XNOR gate module xnortest(); reg a,b; wire y; xnorgate a1(a,b,y); initial begin a=1'b0;b=1'b0; #100;a=1'b0;b=1'b1; #100;a=1'b1; b=1'b0; #100;a=1'b1;b=1'b1; #100 $stop; end endmodule

Functional Simulation of XNOR gate:

Inference:

From the above analysis for XNOR gate functional verification is performed

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

b. Half-Adder and Full-Adder using structural and Dataflow Modeling


RTL Code for Half Adder : Structural modeling:
module halfadder(a,b,s,c); input a,b; output s,c; wire s,c; xor (s,a,b); and (c,a,b); endmodule Dataflow modeling: module halfadder(a,b,s,c); input a,b; output s,c; assign s= a^b; assign c=a&b; endmodule

Test Bench for Half Adder : module halfadder_test(); reg a,b; wire s,c; halfadder a1(a,b,s,c); initial begin a=1'b0;b=1'b0; #100; a=1'b0;b=1'b1; #100;a=1'b1;b=1'b0; #100;a=1'b1;b=1'b1; #100 $stop;
FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

end endmodule

Functional Simulation of Half Adder:

Inference:

From the above analysis for Half adder functional verification is performed

RTL Code for Full Adder: dataflow Modeling: module fuladder (a,b,c,s,cin); input a,b,c; output s,cin; wire w1,w2,w3,s,cin; assign s= a ^ b ^ c; assign w1= a & b; assign w2= b & c; assign w3= c & a; assign cin= w1 | w2 | w3; endmodule structural modeling: module fuladder (a,b,c,s,cin); input a,b,c; output s,cin; wire w1,w2,w3,s,cin;
FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

xor(w1,a,b); xor(s,w1,c); and(w2,w1,c); and(w3,a,b); or(c,w2,w3); endmodule Test Bench for Full Adder : module fuladder_tst(); reg a,b,c; wire w1,w2,w3; wire s,cin; fuladder a1(a,b,c,s,cin); initial begin a=1'b0;b=1'b0;c=1'b0; #100; a=1'b0;b=1'b0;c=1'b1; #100; a=1'b0;b=1'b1;c=1'b0; #100; a=1'b0;b=1'b1;c=1'b1; #100; a=1'b1;b=1'b0;c=1'b0; #100; a=1'b1;b=1'b0;c=1'b1; #100; a=1'b1;b=1'b1;c=1'b0; #100; a=1'b1;b=1'b1;c=1'b1; #100 $stop; end endmodule

Functional Simulation of Full Adder:

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

Inference:

From the above analysis for full adder functional verification is performed

c. Half-Subtractor and Full-Subtractor using Structural and dataflow modeling


RTL Code for Half Subtractor: Dataflow Modeling: module halfsub(a,b,d,bo); input a,b; output d,bo; wire d,bo; assign d=a^b; assign bo=(~a)&b; endmodule Structural Modeling: module halfsub(a,b,d,bo); input a,b; output d,bo; wire w1,d,bo; xor(d,a,b); not(w1,a);

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

and(bo,w1,b); endmodule Test Bench for Half Subtractor: module halfsub_test(); reg a,b; wire d,bo; halfsub m1(a,b,d,b0); initial begin
a=1'b0; b=1'b0; #100; a=1'b0;b=1'b1; #100; a=1'b1;b=1'b0; #100; a=1'b1;b=1'b1; #100 $stop; end endmodule

Functional Simulation of Half subtractor:

Inference:

From the above analysis for Half subtractor functional verification is performed

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

RTL Code for Full Subtractor : Dataflow Modeling: module fullsub (a,b,c,d,ca); input a,b,c; output d,ca; wire w1,w2,w3,d,ca; assign d= a ^ b ^ c; assign w1= ~a & b; assign w2= b & c; assign w3= c & ~a; assign ca= w1 | w2 | w3; endmodule Structural Modeling: module fullsub (a,b,c,d,ca); input a,b,c; output d,ca; wire w1,w2,w3,w4,w5,d,ca; xor(w5,a,b); xor(d,w5,c); not(w4,a); and(w1,w4,b); and(w2,b,c); and(w3,c,w4); or(ca,w1,w2,w3); endmodule Test Bench for Full Subtractor: module fullsub_tst(); reg a,b,c; wire w1,w2,w3; wire d,ca; fullsub a1(a,b,c,d,ca); initial begin a=1'b0;b=1'b0;c=1'b0; #100; a=1'b0;b=1'b0;c=1'b1; #100; a=1'b0;b=1'b1;c=1'b0; #100; a=1'b0;b=1'b1;c=1'b1; #100; a=1'b1;b=1'b0;c=1'b0;

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

#100; a=1'b1;b=1'b0;c=1'b1; #100; a=1'b1;b=1'b1;c=1'b0; #100; a=1'b1;b=1'b1;c=1'b1; #100 $stop; end endmodule

Functional Simulation of Full subtractor:

Inference:

From the above analysis for Full subtractor functional verification is performed

d. Decoder and Encoder using structural and dataflow modeling.

RTL Code for DECODER : Structural: module decoder2to4(a,b,en); input [1:0]a; input en; output [3:0]b; wire w1,w2; wire [3:0]b;
FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

not(w1,a[0]); not(w2,a[1]); and(b[0],w1,w2); and(b[1],w2,a[0]); and(b[2],a[1],w1); and(b[3],a[0],a[1]); endmodule Dtaflow: module decoder2to4(a,b,en); input [1:0]a; input en; output [3:0]b; wire w1,w2; wire [3:0]b; assign b[0]=w1&w2; assign b[1]=a[0]&w2; assign b[2]=a[1]&w1; assign b[3]=a[1]&a[0]; endmodule

Test Bench for DECODER: module decoder2to4_test(); reg [1:0]a; wire[3:0]b; reg en; decoder2to4 d1(a,b,en); initial begin en=1'b0;a[0]=1'b0;a[1]=1'b0; #100 en=1'b1;a[0]=1'b0;a[1]=1'b0; #100 en=1'b1;a[0]=1'b1;a[1]=1'b0; #100 en=1'b1;a[0]=1'b0;a[1]=1'b1; #100 en=1'b1;a[0]=1'b1;a[1]=1'b1; #100 $stop; end endmodule

Functional Simulation of Decoder:

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

Inference:

From the above analysis for 2 to 4 decoder functional verification is performed

RTL Code for ENCODER :


Structural modeling: module encoder(i,d);

input [7:0]i; output [2:0]d; wire [2:0]d; or(d[0],i[1],i[3],i[5],i[7]); or(d[1],i[2],i[3],i[6],i[7]); or(d[2],i[4],i[5],i[6],i[7]); endmodule

Dataflow modeling : module encoder(i,d); input [7:0]i; output [2:0]d; wire [2:0]d; assign d[0]=(i[1]|i[3]|i[5]|i[7]); assign d[1]=(i[2]|i[3]|i[6]|i[7]); assign d[2]=(i[4]|i[5]|i[6]|i[7]); endmodule

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

Test Bench for ENCODER: module encoder_test(); reg [7:0]i; wire [2:0]d; encoder e1(i,d); initial begin i=8'b00000001; #100 i=8'b00000010; #100 i=8'b00000100; #100 i=8'b00001000; #100 i=8'b00010000; #100 i=8'b00100000; #100 i=8'b01000000; #100 i=8'b10000000; #100 $stop; end endmodule

Functional Simulation of Encoder:

Inference:

From the above analysis for 8 to 3 encoder functional verification is performed FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

e. Code Convertor & parity generators using structural and dataflow modeling

RTL Code binary to gray converter : Dataflow modeling: module binatogray(g0,g1,g2,g3,b0,b1,b2,b3); input b0,b1,b2,b3; output g0,g1,g2,g3; wire g0,g1,g2,g3; assign g3=b3; assign g2=b3^b2; assign g1=b2^b1; assign g0=b1^b0; endmodule Structural modeling: module binatogray(g0,g1,g2,g3,b0,b1,b2,b3); input b0,b1,b2,b3; output g0,g1,g2,g3; wire g0,g1,g2,g3; buf(g3,b3); xor(g2,b3,b2); xor(g1,b2,b1); xor(g0,b1,b0); endmodule Test Bench for binary to gray converter module binatogray_tst() reg b0,b1,b2,b3;

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

wire g0,g1,g2,g3; binatogray e1(g0,g1,g2,g3,b0,b1,b2,b3); initial begin b3=1'b0; b2=1'b0; b1=1'b0;b0=1'b0; #100; b3=1'b0; b2=1'b0; b1=1'b0;b0=1'b1; #100; b3=1'b0; b2=1'b0; b1=1'b1;b0=1'b0; #100; b3=1'b0; b2=1'b0; b1=1'b1;b0=1'b1; #100; b3=1'b0; b2=1'b1; b1=1'b0;b0=1'b0; #100; b3=1'b0; b2=1'b1; b1=1'b0;b0=1'b1; #100; b3=1'b0; b2=1'b1; b1=1'b1;b0=1'b0; #100; b3=1'b0; b2=1'b1; b1=1'b1;b0=1'b1; #100; b3=1'b1; b2=1'b0; b1=1'b0;b0=1'b0;

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

#100; b3=1'b1; b2=1'b0; b1=1'b0;b0=1'b1; #100; b3=1'b1; b2=1'b0; b1=1'b1;b0=1'b0; #100; b3=1'b1; b2=1'b0; b1=1'b1;b0=1'b1; #100; b3=1'b1; b2=1'b1; b1=1'b0;b0=1'b0; #100; b3=1'b1; b2=1'b1; b1=1'b0;b0=1'b1; #100; b3=1'b1; b2=1'b1; b1=1'b1;b0=1'b0; #100; b3=1'b1; b2=1'b1; b1=1'b1;b0=1'b1; #100; end endmodule Functional simulation of binary to grey converter:

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

Inference:
performed

From the above analysis for 4 bit binary to gray code converter functional verification is

RTL code parity generator : Structural modeling: module parigen(x,y,z,p); input x,y,z; output p; wire p,w1,w2; xor(w1,x,y); xor(w2,w1,z); not (p,w2); endmodule Dataflow modeling: module pgen(x,y,z,p); input x,y,z; output p; wire p,w1,w2; assign w1=x^y; assign w2=w1^z;
FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

assign p=~w2; endmodule Test Bench of parity generator : module parigen_test(); reg x,y,z; wire p; parigen p1(x,y,z,p); initial begin x=1'b0;y=1'b0;z=1'b0; #100 x=1'b0;y=1'b0;z=1'b1; #100 x=1'b0;y=1'b1;z=1'b0; #100 x=1'b0;y=1'b1;z=1'b1; #100 x=1'b1;y=1'b0;z=1'b0; #100 x=1'b1;y=1'b0;z=1'b1; #100 x=1'b1;y=1'b1;z=1'b0; #100 x=1'b1;y=1'b1;z=1'b1; #100 $stop; end endmodule Functional simulation:

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

Inference:

From the above analysis for odd parity generator functional verification is performed

f. Multiplexer and De-multiplexer using structural, dataflow and behavioral modeling

RTL code for Multiplexer : Structural modeling: module mux4to1(in,se,y); input[3:0]in; input [1:0]se; output y; wire y,w1,w2,w3,w4,w5,w6; not (w1,se[0]); not (w2,se[1]); and(w3,in[0],w1,w2); and(w4,in[1],se[0],w2); and(w5,in[2],w1,se[1]);

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

and(w6,in[3],se[0],se[1]); or (y,w3,w4,w5,w6); endmodule Dataflowmodelling: module mux4to1(in,se,y); input[3:0]in; input [1:0]se; output y; wire y,w1,w2,w3,w4; assign w1=(in[0]&(~se[0])&(~se[1])); assign w2=(in[1]&(~se[0])&(se[1])); assign w3=(in[2]&(se[0])&(~se[1])); assign w4=(in[3]&(se[0])&(se[1])); assign y=(w1|w2|w3|w4); endmodule Behavioral modeling: module mux4to1(in,se,y); input[3:0]in; input [1:0]se; output y; reg y; always@(se or y) begin if(se==2'b00) y=in[0]; else if(se==2'b01) y=in[1]; else if(se==2'b10)

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

y=in[2]; else if(se==2'b11) y=in[3]; end endmodule Test bench Code for 4:1 Multiplexer: module mux4to1_tst(); reg [3:0]in; reg [1:0]se; wire y; mux4to1 g1(in,se,y); initial begin in=4'b0000;se=2'b00; #100; in=4'b1111; se=2'b01; #100; in=4'b0101; se=2'b10; #100 in=4'b1111;se=2'b11; #100

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

$stop; end endmodule

Functional Simulation of Multiplexer:

Inference:

From the above analysis for 4 to 1 multiplexer functional verification is performed

RTL Code for 1:4 Demultiplexer : structural modeling: module demux(i,s,y); input i; input [1:0]s; output [3:0]y; wire w1,w0; not(w0,s[0]); not(w1,s[1]);

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

and(y[0],i,w1,w0); and(y[1],i,w1,s[0]); and(y[2],i,s[1],w0); and(y[3],i,s[1],s[0]); endmodule Dataflow modeling: module demux(i,s,y); input i; input [1:0]s; output [3:0]y; wire w1,w0; assign w0=~s[0]; assign w1=~s[1]; assign y[0]=i&w1&w0; assigny[1]=i&w1&s[0]; assigny[2]=i&w0&s[1]; assigny[3]=i&s[1]&s[0]; endmodule Behavioral modeling: module demux(i,s,y); input i;

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

input [1:0]s; output [3:0]y; reg[3:0]y; always@(s or y) begin if(s==2'b00) begin y[0]=i;y[1]=1'b0;y[2]=1'b0;y[3]=1'b0; end else if(s==2'b01) begin y[0]=1'b0;y[1]=i;y[2]=1'b0;y[3]=1'b0; end else if(s==2'b10) begin y[0]=1'b0;y[1]=1'b0;y[2]=i;y[3]=1'b0; end else if(s==2'b11) begin y[0]=1'b0;y[1]=1'b0;y[2]=1'b0;y[3]=i; end end endmodule Test Bench for 1:4 Demultiplexer: module demux_tst(); reg i; reg [1:0]s; wire [3:0]y; demux r1(i,s,y);

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

initial begin s=2'b00;i=1'b1; #100 s=2'b01;i=1'b1; #100 s=2'b10;i=1'b1; #100 s=2'b11;i=1'b1; #100 $stop; end endmodule

Functional Simulation of De-multiplexer:

FPGA Lab

Experiment:1

date:12/08/2013

Reg.No : 13MVD0096

Inference:

From the above analysis for 1 to 4 demultiplexer functional verification is performed

FPGA Lab

You might also like