Lab6 DP
Lab6 DP
18 September 2024
Digital Programming Lab
Anuj Pasaya
Roll No - 202101509
Task 1:
`timescale 1ns / 1ps
module AC_Controller (input [7:0] temperature, output reg fan_speed );
always @(*) begin
if (temperature >= 8'd20 && temperature <= 8'd30) begin
fan_speed = 0;
end
else if (temperature > 8'd30 && temperature <= 8'd40) begin
fan_speed = 0;
end
else if (temperature > 8'd40 && temperature <= 8'd50) begin
fan_speed = 1;
end
else if (temperature > 8'd50) begin
fan_speed = 1;
end
else begin
fan_speed = 0;
end
end
endmodule
Output Waveform:
Task 2:
`timescale 1ns / 1ps
module SecAccCntrl ( input wire [1:0] access_code, input wire EN, output reg [3:0] door_unlock);
endmodule
Output Waveform:
Task 3:
`timescale 1ns / 1ps
wire [7:0] Y;
Decoder3to8 decoder(.A(A), .B(B), .C(C), .Y(Y));
endmodule
Output Waveform:
Task 4:
`timescale 1ns / 1ps
endmodule
Output Waveform:
Task 6(Behavioral):
`timescale 1ns / 1ps
module Demux1to16_behavioral ( input wire [3:0] sel, input wire in, output reg [15:0] out);
always @(*) begin
out = 16'b0;
case (sel)
4'b0000: out[0] = in;
4'b0001: out[1] = in;
4'b0010: out[2] = in;
4'b0011: out[3] = in;
4'b0100: out[4] = in;
4'b0101: out[5] = in;
4'b0110: out[6] = in;
4'b0111: out[7] = in;
4'b1000: out[8] = in;
4'b1001: out[9] = in;
4'b1010: out[10] = in;
4'b1011: out[11] = in;
4'b1100: out[12] = in;
4'b1101: out[13] = in;
4'b1110: out[14] = in;
4'b1111: out[15] = in;
default: out = 16'b0;
endcase
end
endmodule
Task 6(RTL/Dataflow):
`timescale 1ns / 1ps
module Demux1to16_RTL ( input wire [3:0] sel, input wire in, output wire [15:0] out);
assign out = (sel == 4'b0000) ? 16'b0000000000000001 & {16{in}} :
(sel == 4'b0001) ? 16'b0000000000000010 & {16{in}} :
(sel == 4'b0010) ? 16'b0000000000000100 & {16{in}} :
(sel == 4'b0011) ? 16'b0000000000001000 & {16{in}} :
(sel == 4'b0100) ? 16'b0000000000010000 & {16{in}} :
(sel == 4'b0101) ? 16'b0000000000100000 & {16{in}} :
(sel == 4'b0110) ? 16'b0000000001000000 & {16{in}} :
(sel == 4'b0111) ? 16'b0000000010000000 & {16{in}} :
(sel == 4'b1000) ? 16'b0000000100000000 & {16{in}} :
(sel == 4'b1001) ? 16'b0000001000000000 & {16{in}} :
(sel == 4'b1010) ? 16'b0000010000000000 & {16{in}} :
(sel == 4'b1011) ? 16'b0000100000000000 & {16{in}} :
(sel == 4'b1100) ? 16'b0001000000000000 & {16{in}} :
(sel == 4'b1101) ? 16'b0010000000000000 & {16{in}} :
(sel == 4'b1110) ? 16'b0100000000000000 & {16{in}} :
(sel == 4'b1111) ? 16'b1000000000000000 & {16{in}} : 16'b0;
endmodule
Task 6(STRUCTURAL):
`timescale 1ns / 1ps
module Demux1to16_structural(input wire [3:0] sel, input wire in, output wire [15:0] out);
wire [15:0] y;
assign out = y;
endmodule
Output Waveform: