Académique Documents
Professionnel Documents
Culture Documents
0;
end
PrepareToTransfer:
if (count <delay10) //complete 1
00%
begin
count <= count +
1;
state <= Prepare
ToTransfer;
light = 6'b00010
0;
delay <= delay +
1;
end
else
begin
state <= Complet
e;
count = 0;
light = 6'b00100
0;
end
Complete:
if (isTransfer) //allow to trans
fer
begin
state <= newTank
;
light = 6'b01000
0;
//delay = 0;
end
else //not transfer then flush
begin
state <= Flush;
light = 6'b10000
0;
//delay = 0;
end
newTank:
if (count < delay50) //time for
transfer to new tank
begin
count <= count +
1;
state <= newTank
;
light = 6'b01000
0;
delay <= delay +
1;
end
else
begin
count = 0;
state <= Ferment
ing;
light = 6'b00000
1;
delay = 0;
end
Flush:
if (count < delay150) //time for
flush
if (isTransfer)
begin
count =
0;
state <=
Fermenting;
light =
6'b000001;
//delay
= 0;
end
else
begin
delay <= delay +
1;
count <= count +
1;
state <= Flush;
light = 6'b10000
0;
end
else
begin
count = 0;
state <= Ferment
ing;
light = 6'b00000
1;
delay = 0;
end
default
begin
state = Fermenting;
end
endcase
endmodule
module whisky_run(isTransfer, reset,CLOCK_50, light,HEX0, HEX1,HEX2);
input wire isTransfer, reset, CLOCK_50;
output wire [5:0] light;
output wire [0:6] HEX0,HEX1,HEX2;
wire [9:0] delay;
wire clkout;
clkdiv clkdiv(CLOCK_50, reset, clkout);
whisky whisky(isTransfer, reset,clkout, light,delay);
leg7seg led7seg(delay, HEX0,HEX1,HEX2);
endmodule
module leg7seg ( count, HEX0, HEX1,HEX2);
input [9:0]
count;
output reg
[0:6] HEX0,HEX1,HEX2;
reg
[3:0] a2, a1, a0;
always @(*)
begin
a0 <= count %10;
a1 <= (count / 10) %10;
a2 <= count / 100;
end
always @(a0) begin //control HEX0
case (a0)
4'b0000:
HEX0 = 7'b0000001;
4'b0001:
HEX0 = 7'b1001111;
4'b0010:
HEX0 = 7'b0010010;
4'b0011:
HEX0 = 7'b0000110;
4'b0100:
HEX0 = 7'b1001100;
4'b0101:
4'b0110:
4'b0111:
4'b1000:
4'b1001:
default:
HEX0
HEX0
HEX0
HEX0
HEX0
HEX0
=
=
=
=
=
=
7'b0100100;
7'b0100000;
7'b0001111;
7'b0000000;
7'b0000100;
7'b1111111;
//
//
//
//
//
0
1
2
3
4
//
//
//
//
//
5
6
7
8
9
//
//
//
//
//
0
1
2
3
4
//
//
//
//
//
5
6
7
8
9
//
//
//
//
//
0
1
2
3
4
//
//
//
//
//
5
6
7
8
9
endcase
end
always @(a1) begin //control led HEX 1
case (a1)
4'b0000:
HEX1 = 7'b0000001;
4'b0001:
HEX1 = 7'b1001111;
4'b0010:
HEX1 = 7'b0010010;
4'b0011:
HEX1 = 7'b0000110;
4'b0100:
HEX1 = 7'b1001100;
4'b0101:
4'b0110:
4'b0111:
4'b1000:
4'b1001:
default:
HEX1
HEX1
HEX1
HEX1
HEX1
HEX1
=
=
=
=
=
=
7'b0100100;
7'b0100000;
7'b0001111;
7'b0000000;
7'b0000100;
7'b1111111;
endcase
end
always @(a2) begin //control HEX2
case (a2)
4'b0000:
HEX2 = 7'b0000001;
4'b0001:
HEX2 = 7'b1001111;
4'b0010:
HEX2 = 7'b0010010;
4'b0011:
HEX2 = 7'b0000110;
4'b0100:
HEX2 = 7'b1001100;
4'b0101:
4'b0110:
4'b0111:
4'b1000:
4'b1001:
default:
endcase
HEX2
HEX2
HEX2
HEX2
HEX2
HEX2
=
=
=
=
=
=
7'b0100100;
7'b0100000;
7'b0001111;
7'b0000000;
7'b0000100;
7'b1111111;
end
endmodule
module clkdiv ( clk , clr , clk_b );
input wire clk, clr;
output wire clk_b;
reg [31:0] div;
always @(posedge clk or posedge clr)
begin
if(clr == 1)
div <= 0;
else
div <= div + 1;
end
assign clk_b = div[21];
endmodule