Verilog HDL lab Manual-22 Scheme
Verilog HDL lab Manual-22 Scheme
MANGALORE
LAB MANUAL
EXPERIMENTS
TRUTH TABLE:
TRUTH TABLE:
a b sum carry
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
2.b) Write a verilog program to design function of full adder
module fulladder(a,b,c,sum,carry);
input a,b,c;
output sum,carry;
assign sum=a^b^c;
assign carry=(a&b)|(b&c)|(c&a);
endmodule
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
TRUTH TABLE:
a b diff borrow
0 0 0 0
0 1 1 1
1 0 1 0
1 1 0 0
2.d) write a verilog program to design function of full subtractor
module fullsub(a,b,c,diff,borrow);
input a,b,c;
output diff,borrow;
assign diff=a^b^c;
assign borrow=((~a)&b)|((~a)&c)|(b&c);
endmodule
TRUTH TABLE:
a b c diff borrow
0 0 0 0 0
0 0 1 1 1
0 1 0 1 1
0 1 1 0 1
1 0 0 1 0
1 0 1 0 0
1 1 0 0 0
1 1 1 1 1
3. Write a verilog program to design 4 bit ALU
module alu(a,b,op,y1,y2);
input [3:0] a,b;
input [2:0] op;
output [3:0] y1;
output [7:0] y2;
reg [3:0] y1;
reg [7:0] y2;
always @(a or b or op)
begin
case (op)
4'd0: y1=a+b;
4'd1: y1=a-b;
4'd2: y1=~a;
4'd3: y1=a&b;
4'd4: y1=a|b;
4'd5: y1=~(a&b);
4'd6: y1=~(a|b);
4'd7: y2= a*b;
endcase
end
endmodule
TRUTH TABLE:
op(2) op(1) op(0) y1 y2
0 0 0 a+b -
0 0 1 a-b -
0 1 0 ~a -
0 1 1 a&b -
1 0 0 a|b -
1 0 1 ~(a&b) -
1 1 0 ~(a|b) -
1 1 1 a*b
4. i) Write verilog code for 4 bit binary to gray converter
module binarytogrey(b,g)
Input [3:0]b;
Output [3:0]g;
Reg [3:0]g;
always@(b,g)
Begin
g[3]=b[3];
g[2]=b[3]^b[2];
g[1]=b[2]^b[1];
g[0]=b[1]^b[0];
end
endmodule
TRUTH TABLE:
BINARY INPUT GRAY INPUT
b(3) b(2) b(1) b(0) g(3) g(2) g(1) g(0)
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1
0 0 1 0 0 0 1 1
0 0 1 1 0 0 1 0
0 1 0 0 0 1 1 0
0 1 0 1 0 1 1 1
0 1 1 0 0 1 0 1
0 1 1 1 0 1 0 0
1 0 0 0 1 1 0 0
1 0 0 1 1 1 0 1
1 0 1 0 1 1 1 1
1 0 1 1 1 1 1 0
1 1 0 0 1 0 1 0
1 1 0 1 1 0 1 1
1 1 1 0 1 0 0 1
1 1 1 1 1 0 0 0
ii) Write verilog code for 4 bit gray to binary converter
module graytbinary(g,b);
input [3:0]g;
output [3:0]b;
reg [3:0]b;
always@(g)
begin
b[3]=g[3];
b[2]=g[3]^g[2];
b[1]=g[3]^g[2]^g[1];
b[0]=g[3]^g[2]^g[1]^g[0];
end
endmodule
TRUTH TABLE:
GRAY INPUTS BINARY OUTPUTS
g(3) g(2) g(1) g(0) b(3) b(2) b(1) b(0)
0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 1
0 0 1 1 0 0 1 0
0 0 1 0 0 0 1 1
0 1 1 0 0 1 0 0
0 1 1 1 0 1 0 1
0 1 0 1 0 1 1 0
0 1 0 0 0 1 1 1
1 0 0 0 1 0 0 0
1 0 0 1 1 0 0 1
1 0 1 1 1 0 1 0
1 0 1 0 1 0 1 1
1 1 1 0 1 1 0 0
1 1 1 1 1 1 0 1
1 1 0 1 1 1 1 0
1 1 0 0 1 1 1 1
5.i) Write verilog code for 8 to 3 encoder
TRUTH TABLE:
e din(7) din(6) din(5) din(4) din(3) din(2) din(1) din(0) dout(2) dout(1) dout(0)
1 X X X X X X X X 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0 0 1
0 0 0 0 0 0 1 0 0 0 1 0
0 0 0 0 0 1 0 0 0 0 1 1
0 0 0 0 1 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0 0 1 0 1
0 0 1 0 0 0 0 0 0 1 1 0
0 1 0 0 0 0 0 0 0 1 1 1
5 ii) Write verilog code for 8 to 3 encoder with priority
module prienco1(e,din,dout);
input[7:0]din;
input e;
output[2:0]dout;
reg[2:0]dout;
always@(din,e)
begin
if (e= =1)
dout=3'b000;
else if (din[0]==1)dout=3'b000;
else if(din[1]==1)dout=3'b001;
else if(din[2]==1)dout=3'b010;
else if(din[3]==1)dout=3'b011;
else if(din[4]==1)dout=3'b100;
else if(din[5]==1)dout=3'b101;
else if(din[6]==1)dout=3'b110;
else if(din[7]==1)dout=3'b111;
else
dout=3'b000;
end
endmodule
TRUTH TABLE:
e din(7) din(6) din(5) din(4) din(3) din(2) din(1) din(0) dout(2) dout(1) dout(0)
1 X X X X X X X X 0 0 0
0 1 X X X X X X X 1 1 1
0 X 1 X X X X X X 1 1 0
0 X X 1 X X X X X 1 0 1
0 X X X 1 X X X X 1 0 0
0 X X X X 1 X X X 0 1 1
0 X X X X X 1 X X 0 1 0
0 X X X X X X 1 X 0 0 1
0 X X X X X X X 1 0 0 0
5 iii) Write verilog code for 8 to 1 multiplexer
TRUTH TABLE:
e sel(2) sel(1) sel(0) din(7) din(6) din(5) din(4) din(3) din(2) din(1) din(0) dout
0 0 0 0 X X X X X X X X din(0)
0 0 0 1 X X X X X X X X din(1)
0 0 1 0 X X X X X X X X din(2)
0 0 1 1 X X X X X X X X din(3)
0 1 0 0 X X X X X X X X din(4)
0 1 0 1 X X X X X X X X din(5)
0 1 1 0 X X X X X X X X din(6)
0 1 1 1 X X X X X X X X din(7)
1 X X X X X X X X X X X 0
6 i) Write a verilog program to design 1:4 demux
module demux14(din,sel,dout);
input din;
input [1:0] sel;
output [3:0] dout;
reg [3:0] dout;
always @(din,sel)
begin
dout=4’b0000;
case(sel)
2'b00: dout[0]=din;
2'b01: dout[1]=din;
2'b10: dout[2]=din;
default: dout[3]=din;
endcase
end
endmodule
TRUTH TABLE:
sel(0) sel(1) Din dout(0) dout(1) dout(2) dout(3)
0 0 1 din X X X
0 1 1 X din X X
1 0 1 X X din X
1 1 1 X X X din
6 ii)Write verilog code for 2 to 4 decoder
module decoder(din, en,dout);
input[1:0]din;
input en;
output[3:0]dout;
reg[3:0]dout;
always@(en or din)
begin
if(en= =1)
dout=4'b0001;
else
case(din)
2'b00:dout =4'b0001;
2'b01:dout= 4'b0010;
2'b10:dout= 4'b0100;
2'b11:dout= 4'b1000;
default :dout=4'b0000;
endcase
end
endmodule
TRUTH TABLE:
en din(1) din(0) dout(3) dout(2) dout(1) dout(0)
1 X X 0 0 0 0
0 0 0 0 0 0 1
0 0 1 0 0 1 0
0 1 0 0 1 0 0
0 1 1 1 0 0 0
6 iii)Write verilog module for 2-bit comparator
module comparator(a,b,alb,agb,aeb);
input [1:0]a,b;
output alb,agb,aeb;
reg alb,agb,aeb;
always@(a,b)
begin
if(a > b)
agb=1;
else
agb=0;
if(a==a)
aeb=1;
else
aeb=0;
if (a<b)
alb=1;
else
alb=0;
end
endmodule
TRUTH TABLE:
a(1) a(0) b(1) b(0) agb aeb alb
1 1 0 1 1 0 0
1 1 1 1 0 1 0
0 0 1 1 0 0 1
7 i)Write a verilog code for D flip-flop
module sync_dff(d,clk,reset,q);
input d,clk,reset;
output q;
reg q;
initial
q=1'b1;
always@(posedge clk)
if(~reset)
q=1'b0;
else
q=d;
endmodule
TRUTH TABLE:
clk reset d q
0 x 0
1 0 0
1 1 1
TRUTH TABLE:
clk t q
0 q
1 not q
7 iii) Write a verilog code for JK flip-flop
module jkff(clk,reset,jk,q);
input clk,reset;
input [1:0]jk;
output q;
reg q;
initial
q=1'b0;
always@(posedge clk)
begin
if(reset)
q=0;
else
case(jk)
2'b00:q=q;
2'b01:q=0;
2'b10:q=1;
2'b11:q=~q;
endcase
end
endmodule
TRUTH TABLE:
Clk reset jk(1) jk(0) Q
0 0 0 Q
0 0 1 0
0 1 0 1
0 1 1 not Q
1 x x 0
7 iv) Write a verilog code for SR flip-flop
module sr1(sr,q,qnot,clk);
input [1:0] sr;
input clk;
output q,qnot;
reg q,qnot;
initial
begin
q=0;
qnot=1;
end
always@(posedge clk)
begin
case (sr)
2'b00: q=q;
2'b01: q=0;
2'b10: q=1;
2'b11: q=1'bz;
endcase
qnot=~q;
end
endmodule
TRUTH TABLE:
clk sr(1) sr(0) q qnot
0 0 Q not Q
0 1 0 1
1 0 1 0
1 1 Z Z
8 i) Write a verilog code for 4-bit binary counter with synchronous reset
module syncrst(clk, reset, count);
input clk;
input reset;
output [3:0] count;
reg [3:0]count;
initial
count=4'b1010;
always@(posedge clk)
begin
if (reset==1)
count=4'b0000;
else
count=count+1;
end
endmodule
TRUTH TABLE:
clk reset Count(3) Count(2) Count(1) Count(0)
1 0 0 0 0
0 0 0 0 1
0 0 0 1 0
0 0 0 1 1
0 0 1 0 0
0 0 1 0 1
0 0 1 1 0
0 0 1 1 1
0 1 0 0 0
0 1 0 0 1
0 1 0 1 0
0 1 0 1 1
0 1 1 0 0
0 1 1 0 1
0 1 1 1 0
0 1 1 1 1
8 ii) Write a verilog code for BCD counter
module bcdverilog(clk, reset, count);
input clk;
input reset;
output [3:0] count;
reg [3:0] count;
initial
begin
count=4'b1001;
end
always @(posedge clk)
begin
if(reset==1)
count=4'b0000;
else if (count==4'b1001)
count=4'b0000;
else
count=count+1;
end
endmodule
TRUTH TABLE:
clk reset Count(3) Count(2) Count(1) Count(0)
X 1 0 0 0 0
0 0 0 0 1
0 0 0 1 0
0 0 0 1 1
0 0 1 0 0
0 0 1 0 1
0 0 1 1 0
0 0 1 1 1
0 1 0 0 0
0 1 0 0 1
0 0 0 0 0