Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
input clk;
input reset;
output [4:0] p1;
output [4:0] p2;
output [4:0] p3;
output [4:0] p4;
output [3:0] pt;
output [2:0] dir;
reg [4:0] p1;
reg [4:0] p2;
reg [4:0] p3;
reg [4:0] p4;
reg [3:0] pt;
reg [31:0] sig;
reg [2:0] dir;
always @ (posedge clk or negedge reset)
begin
if (reset == 1'b0) begin
dir <= 3'b111;
p1 <= 5'b00100;
p2 <= 5'b00100;
p3 <= 5'b00100;
p4 <= 5'b00100;
pt <= 4'b1111;
sig <= 8'h00000000;
end
else begin
dir <= 3'b111;
sig <= sig + 1;
case (sig[29:24])
6'b000000 : begin
p1 <= 5'b10011;// d5,d4,d3,d2,d1
(Green)
p2 <= 5'b00100;
p3 <= 5'b00100;
p4 <= 5'b00100;
pt <= 4'b1111;
end
6'b000100 : begin
p1 <= 5'b01000;
//Yellow
p2 <= 5'b00100;
p3 <= 5'b00100;
p4 <= 5'b00100;
pt <= 4'b1111;
end
6'b001000 : begin
p1 <= 5'b00100;
// d10,d9,d8,d7,d6
p2 <= 5'b10011;
//Green
p3 <= 5'b00100;
p4 <= 5'b00100;
pt <= 4'b1111;
end
6'b001100 : begin
p1 <= 5'b00100;
p2 <= 5'b01000;
//Yellow
p3 <= 5'b00100;
p4 <= 5'b00100;
pt <= 4'b1111;
end
6'b010000 : begin
p1 <= 5'b00100;
p2 <= 5'b00100;
p3 <= 5'b10011;
p4 <= 5'b00100;
pt <= 4'b1111;
end
6'b010100 : begin
p1 <= 5'b00100;
p2 <= 5'b00100;
p3 <= 5'b01000;
p4 <= 5'b00100;
pt <= 4'b1111;
end
6'b011000 : begin
p1 <= 5'b00100;
p2 <= 5'b00100;
p3 <= 5'b00100;
p4 <= 5'b10011;
pt <= 4'b1111;
end
6'b011100 : begin
p1 <= 5'b00100;
p2 <= 5'b00100;
p3 <= 5'b00100;
p4 <= 5'b01000;
pt <= 4'b1111;
end
6'b100000 : begin
p1 <= 5'b00100;
p2 <= 5'b00100;
p3 <= 5'b00100;
p4 <= 5'b00100;
pt <= 4'b0000;
end
6'b100100 : sig <= 8'h00000000;
default : begin
// d15,d14,d13,d12,d11
//Green
//yellow
// d20,d19,d18,d17,d16
//Green
//Yellow
// dl1,dl2,dl3,dl4,dl5,dl6,dl7,dl8
//Pedestrain
end
endcase
end
end
endmodule
end
6'b010000 : begin
p1 <= 5'b00100; // 15,d14,d13,d12,d11
p2 <= 5'b00100;
p3 <= 5'b10011; //Green
p4 <= 5'b00100;
pt <= 4'b1111;
end
6'b010100 : begin
p1 <= 5'b00100;
p2 <= 5'b00100;
p3 <= 5'b01000; //yellow
p4 <= 5'b00100;
pt <= 4'b1111;
end
6'b011000 : begin
p1 <= 5'b00100;//d20,d19,d18,d17,d16
p2 <= 5'b00100;
p3 <= 5'b00100;
p4 <= 5'b10011; //Green
pt <= 4'b1111;
end
6'b011100 : begin
p1 <= 5'b00100;
p2 <= 5'b00100;
p3 <= 5'b00100;
p4 <= 5'b01000; //Yellow
pt <= 4'b1111;
end
6'b100000 : begin
p1 <= 5'b00100;
//dl1,dl2,dl3,dl4,dl5,dl6,dl7,dl8
p2 <= 5'b00100;
p3 <= 5'b00100;
p4 <= 5'b00100;
pt <= 4'b0000; //Pedestrain
end
6'b100100 : sig <= 8'h00000000;
default : begin
end
endcase
end
end
endmodule
Full adder
module fa(a,b,cin, sum,cout);
input a,b,cin;
output sum,cout;
assign sum= a^b^cin;
assign cout=(a&b)|(b&cin)|(cin&a);
endmodule
Multiplexer
module multi(a,b,c,d,s0,s1, out);
input a,b,c,d,s0,s1;
output out;
assign
out=(a&(~s0&~s1))|(b&(~s0&s1))|(c&(s0&~s1))|(d&(s0&s1));
endmodule
Encoder
module enc(d1,d2,d3,d4, a,b);
input d1,d2,d3,d4;
output a,b;
assign a=(d3|d4);
assign b=(d2|d4);
endmodule
D-Flip Flop
module Dfflop(d,clk, q,qn);
input d,clk;
output q,qn;
reg q=1'b0;
always @ (posedge clk)
q=d;
assign qn=~q;
endmodule
JK-Flip Flop
module jk(J,K,clk, q,qn);
input J,K,clk;
output q,qn;
reg q=1'b0;
always @ (posedge clk)
q=(J*(~qn))+(~K*qn);
assign qn=~q;
endmodule
SR-Flip Flop
module srrrrr(S,R,clk, q,qn);
input S,R,clk;
output q,qn;
reg q=1'b0;
always @ (posedge clk)
q=S+((~R)*qn);
assign qn=~q;
endmodule
T-Flip Flop
module tf(t,clk, q,qn);
input t,clk;
output q,qn;
reg q=1'b0;
always @ (posedge clk)
q=t^q;
assign qn=~q;
endmodule
2:r=a*b;
7:r=a^b;
3:r=0;
endcase
4:r=a&b;
end