📄 maincontrol.v
字号:
//MainControl.v 数字钟时钟发生模块 2006-11-3 version:1.0 作者:田世坤
//输入:
//
//
//输出:
module MainControl(ClkIn, Reset, KeyIn, State, ClkOut1Hz, ClkOutLow, ClkOutHigh, ClkOutMid,
D7, D6, D5, D4, D3, D2, D1, D0, DD7, DD6, DD5, DD4, DD3, DD2, DD1, DD0, SoundReport);
input ClkIn, Reset, ClkOut1Hz, ClkOutLow, ClkOutHigh, ClkOutMid;
input [7:0] KeyIn;
input [11:0] State;
output [3:0]D7, D6, D4, D3, D1, D0, DD7, DD6, DD5, DD4, DD3, DD2, DD1, DD0;
reg [3:0]D7, D6, D4, D3, D1, D0, DD7, DD6, DD5, DD4, DD3, DD2, DD1, DD0;
output [3:0]D5, D2;
output SoundReport;
reg SoundReport, jEn;
wire [3:0]D5, D2;
assign D5 = 4'ha;
assign D2 = 4'ha;
reg [3:0]j1, j0;
parameter STset7 = 12'b1110_10000000, STset6 = 12'b1110_01000000, STset4 = 12'b1110_00010000, STset3 = 12'b1110_00001000, STset1 = 12'b1110_00000010, STset0 = 12'b1110_00000001;
parameter SDset5 = 12'b1101_00100000, SDset4 = 12'b1101_00010000, SDset3 = 12'b1101_00001000, SDset2 = 12'b1101_00000100, SDset1 = 12'b1101_00000010, SDset0 = 12'b1101_00000001;
integer i1 = 1;
always @ (posedge ClkIn or negedge Reset)
begin
if(!Reset)
begin
D0 = 4'h0;
D1 = 4'h0;
//D2 = 4'ha;
D3 = 4'h0;
D4 = 4'h3;
//D5 = 4'ha;
D6 = 4'h2;
D7 = 4'h1;
DD0 = 4'h5;
DD1 = 4'h0;
DD2 = 4'h1;
DD3 = 4'h1;
DD4 = 4'h6;
DD5 = 4'h0;
DD6 = 4'h0;
DD7 = 4'h2;
jEn = 1'b0;
end
else
begin
i1 = i1 + 1;
///////////////////////时、分、秒//////////////////////////
if(i1 == 20000)
begin
i1 = 1;
D0 = D0 + 4'h1;
if(jEn == 1'b1)
j0 = j0 + 4'h1;
end
if(D0 > 4'h9)
begin
D0 = 4'h0;
D1 = D1 + 4'h1;
end
if(D1 > 4'h5)
begin
D1 = 4'h0;
D3 = D3 + 4'h1;
end
if(D3 > 4'h9)
begin
D3 = 4'h0;
D4 = D4 + 4'h1;
end
if(D4 > 4'h5)
begin
D4 = 4'h0;
D6 = D6 + 4'h1;
end
if(D6 > 4'h9)
begin
D6 = 4'h0;
D7 = D7 + 4'h1;
end
if({D7,D6} > 8'h23)
begin
D6 = 4'h0;
D7 = 4'h0;
DD0 = DD0 + 4'h1; //天数加1
end
///////////////////年、月、日/////////////////////////////
if(DD0 > 4'h9)
begin
DD0 = 4'h0;
DD1 = DD1 + 4'h1;
end
if(({DD3,DD2}==8'h02 && {DD1,DD0}>8'h28)||(({DD3,DD2}==8'h04||{DD3,DD2}==8'h06||{DD3,DD2}==8'h09||{DD3,DD2}==8'h11) && {DD1,DD0}>8'h30)||({DD1,DD0}>8'h31))
begin
DD0 = 4'h1;
DD1 = 4'h0;
DD2 = DD2 + 4'h1;
end
if(DD2 > 4'h9)
begin
DD2 = 4'h1;
DD3 = DD1 + 4'h1;
end
if({DD3,DD2}>8'h12)
begin
DD2 = 4'h1;
DD3 = 4'h0;
DD4 = DD4 + 4'h1;
end
if(DD4 > 4'h9)
begin
DD4 = 4'h0;
DD5 = DD5 + 4'h1;
end
if(DD5 > 4'h9)
begin
DD5 = 4'h0;
DD6 = DD6 + 4'h1;
end
if(DD6 > 4'h9)
begin
DD6 = 4'h0;
DD7 = DD7 + 4'h1;
end
if(DD7 > 4'ha)
begin
DD7 = 4'h0;
end
if(j0 > 4'h9)
begin
j0 = 4'h0;
j1 = j1 + 4'h1;
end
if({j1, j0} > 8'h23)
begin
{j1, j0} = 8'h00;
end
if(KeyIn == 8'b11011110)/////////////////////////随时报时处理///////////////////////////
begin
{j1, j0} = 8'h00;
jEn = 1'b1;
end
if({j1, j0} > {D7, D6})
begin
{j1, j0} = 8'h00;
jEn = 1'b0;
end
case(State)///////////////////////////////状态判断/////////////////////////////////////
STset7:
begin
if(KeyIn == 8'b01110111)
D7 = D7 + 4'h1;
end
STset6:
begin
if(KeyIn == 8'b01110111)
D6 = D6 + 4'h1;
end
STset4:
begin
if(KeyIn == 8'b01110111)
D4 = D4 + 4'h1;
end
STset3:
begin
if(KeyIn == 8'b01110111)
D3 = D3 + 4'h1;
end
STset1:
begin
if(KeyIn == 8'b01110111)
D1 = D1 + 4'h1;
end
STset0:
begin
if(KeyIn == 8'b01110111)
D0 = D0 + 4'h1;
end
SDset5:
begin
if(KeyIn == 8'b01110111)
DD5 = DD5 + 4'h1;
end
SDset4:
begin
if(KeyIn == 8'b01110111)
DD4 = DD4 + 4'h1;
end
SDset3:
begin
if(KeyIn == 8'b01110111)
DD3 = DD3 + 4'h1;
end
SDset2:
begin
if(KeyIn == 8'b01110111)
DD2 = DD2 + 4'h1;
end
SDset1:
begin
if(KeyIn == 8'b01110111)
DD1 = DD1 + 4'h1;
end
SDset0:
begin
if(KeyIn == 8'b01110111)
DD0 = DD0 + 4'h1;
end
default:
begin
end
endcase
end
end
always////////////////////报时控制部分//////////////////////
begin
if({D4,D3}==8'h59 && {D1, D0}<=8'h59 && {D1, D0}>=8'h56)
SoundReport = ClkOut1Hz & ClkOutMid;
else if({D4,D3, D1, D0}==16'h0000)
SoundReport = ClkOut1Hz & ClkOutHigh;
else if({D4,D3}==8'h00 && {D1, D0}>8'h02 && {D1, D0}<={D7, D6+4'h2} || {j1, j0}!=8'h00)
SoundReport = ClkOut1Hz & ClkOutLow;
else
SoundReport = 1'b0;
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -