CS429 Lab4
CS429 Lab4
VERILOG CODE :
primitive mux_udp(out,sel0,sel1,a,b,c,d);
input sel0,sel1,a,b,c,d;
output out;
table
//s0 s1 a b c d : out
0 0 0 ? ? ? : 0;
0 0 1 ? ? ? : 1;
0 1 ? 0 ? ? : 0;
0 1 ? 1 ? ? : 1;
1 0 ? ? 0 ? : 0;
1 0 ? ? 1 ? : 1;
1 1 ? ? ? 0 : 0;
1 1 ? ? ? 1 : 1;
? x ? ? ? ? : x;
x ? ? ? ? ? : x;
endtable
endprimitive
module lab4_q1_udp(out,sel0,sel1,a,b,c,d);
input sel0,sel1,a,b,c,d;
output out;
mux_udp obj(out,sel0,sel1,a,b,c,d);
endmodule
TESTBENCH :
`include "lab4_q1.v"
module mux_udp_tb();
reg sel0,sel1,a,b,c,d;
wire out;
lab4_q1_udp
obj(.out(out),.sel0(sel0),.sel1(sel1),.a(a),.b(b),.c(c),.d(d));
initial begin
$dumpfile("lab4_q1.vcd");
$dumpvars(0,mux_udp_tb);
end
initial
begin
#10 $finish;
end
endmodule
GTKWAVE :
USING BEHAVIORAL MODEL :
VERILOG CODE :
module ALU_Beh_dataflow (
input [3:0] A,
input [3:0] B,
);
case (ALU_OP)
3'b000: out = A + B;
3'b001: out = A - B;
3'b100: out =(A < B) ? 4'b1 : 4'b0; 3'b101: out = (A == B) ? 4'b1 : 4'b0;
endcase
end
endmodule
TESTBENCH CODE :
module ALU_behavioral_tb();
reg[3:0]A,B;
reg[2:0]ALU_OP;
wire[3:0]out;
ALU_Beh_dataflow a1(A,B,ALU_OP,out);
initial
begin
$dumpfile("ALU_dataflow_beh.vcd");
$dumpvars(0,ALU_behavioral_tb);
ALU_OP=3'b000;A=4'b1010;B=4'b0101;
#10;
ALU_OP=3'b001;A=4'b1010;B=4'b0101;
#10;
ALU_OP=3'b010;A=4'b1010;B=4'b0101;
#10;
ALU_OP=3'b011;A=4'b1010;B=4'b0101;
#10;
ALU_OP=3'b100;A=4'b1010;B=4'b0101;
#10;
ALU_OP=3'b101;A=4'b1010;B=4'b0101;
#10;
ALU_OP=3'b110;A=4'b1010;B=4'b0101;
#10;
ALU_OP=3'b111;A=4'b1010;B=4'b0101;
#10;
end
initial begin
endmodule
OUTPUT :
GTKWAVE :
USING RTL MODEL :
VERILOG CODE :
module ALU_4bit_dataflow (
input [3:0] A,
input [3:0] B,
);
(ALU_OP == 3'b001) ? A - B :
Default operation
endmodule
TESTBENCH :
module lab4_q2a_tb();
reg[3:0]A,B;
reg[2:0]ALU_OP;
wire[3:0]out;
ALU_4bit_dataflow a1(A,B,ALU_OP,out);
initial
begin
$dumpfile("ALU_RTL_dataflow.vcd");
$dumpvars(0,lab4_q2a_tb);
ALU_OP=3'b000;A=4'b1100;B=4'b0011;
#10;
ALU_OP=3'b001;A=4'b1100;B=4'b0011;
#10;
ALU_OP=3'b010;A=4'b1100;B=4'b0011;
#10;
ALU_OP=3'b011;A=4'b1100;B=4'b0010;
#10;
ALU_OP=3'b100;A=4'b0110;B=4'b0011;
#10;
ALU_OP=3'b101;A=4'b1010;B=4'b1010;
#10;
ALU_OP=3'b110;A=4'b1010;B=4'b0010;
#10;
ALU_OP=3'b111;A=4'b1010;B=4'b0010;
#10;
end
initial begin
endmodule
OUTPUT :
GTKWAVE :
VERILOG CODE :
module FullAdder(
input a,
input b,
input c,
output sum,
output carry
);
assign sum = a ^ b ^ c;
endmodule
module RippleCarryAdder(
input [3:0] a,
input [3:0] b,
output carry
);
endmodule
TESTBENCH CODE :
module RippleCarryAdder_tb;
reg [3:0] a, b;
wire carry;
initial
begin
$dumpfile("RippleCarryAdder_q3.vcd");
$dumpvars(0, RippleCarryAdder_tb);
#0 a = 4'b0001; b = 4'b0010;
#10 $finish;
end
initial
begin
end
endmodule
OUTPUT :
GTKWAVE :
VERILOG CODE :
assign sum = a ^ b ^ c;
endmodule
sum,output carry);
.carry(c1));
.carry(carry));
endmodule
wire rca_carry;
RippleCarryAdder RCA(
.a(a),
.b(b),
.sum(rca_sum),
.carry(rca_carry)
);
endmodule
TESTBENCH :
module BCDAdder_tb;
reg [3:0] a, b;
initial
begin
$dumpfile("BCDAdder.vcd");
$dumpvars(0,BCDAdder_tb);
#0 a = 4'b0001; b = 4'b0010;
#10 $finish;
end
initial
begin
end
endmodule
OUTPUT :
GTKWAVE :