📄 main-ctrl.v
字号:
`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company: // Engineer: // // Create Date: 09:44:38 11/09/2008 // Design Name: // Module Name: main-ctrl // Project Name: // Target Devices: // Tool versions: // Description: //// Dependencies: //// Revision: // Revision 0.01 - File Created// Additional Comments: ////////////////////////////////////////////////////////////////////////////////////module main_ctrl(clk5hz,clk660hz,clk540hz, sw1, led1, alert_phone, alert_sound, power_ctrl,ring_out); input clk5hz,clk660hz,clk540hz; input sw1; output led1,alert_phone,alert_sound,power_ctrl,ring_out; reg led1,alert_phone,alert_sound,power_ctrl,ring_en; reg [7:0]timer; reg [3:0] state;parameter count15s=114; // 75 = 5HZ* 15Sparameter count2s=7; // 10= 5HZ*2Sparameter delay_15s =0;parameter delay_15s2 =1;parameter sw1_detect =2;parameter alert1 =3;parameter alert2 =4;parameter alert3 =5;parameter alert4 =6;parameter alert5 =7;parameter sound =8;parameter power_off =9;parameter alert_ring =10;
parameter sound1 =11;
parameter sound2 =12;
parameter sound3 =13; initial begin led1=0; alert_phone=0; power_ctrl=1; alert_sound=0; timer=0; state=delay_15s; ring_en=0; end assign ring_out= ring_en? clk5hz? clk660hz:clk540hz : 1'bz; always @(negedge clk5hz) begin timer=timer+1; case(state) delay_15s: if (timer==count15s) // wait pause key. if no pause key, go to alert. begin alert_phone=1; timer=0; led1=1; state=alert1; end else if(sw1==1) // have pause key, go to "wait pause key 2S" begin state=sw1_detect; timer=0; end else begin led1=0; alert_phone=0; power_ctrl=1; alert_sound=0; ring_en=0; end sw1_detect:begin if(sw1==1 && timer==count2s) // wait pause key 2S begin state=power_off; end else if(sw1==0) state=delay_15s; end alert1: if (timer==14) // delay about 2S, use for single key calling out. begin timer=0; alert_phone=0; state=alert2; end alert2: if (timer==2) begin timer=0; alert_phone=1; state=alert3; end alert3: if (timer==3) begin timer=0; alert_phone=0; state=alert4; end alert4: if (timer==2) begin timer=0; alert_phone=1; state=alert5; end alert5: if (timer==3) begin timer=0; alert_phone=0; state=delay_15s2; end delay_15s2: if(timer==count15s) // delay 15S, wait for calling out. begin timer=0; ring_en=1; state=alert_ring; end else if(sw1==1) begin state=sw1_detect; timer=0; end alert_ring: if(timer==8'b11111111) // delay 25S, wait for door_ring out. begin timer=0; ring_en=0; alert_sound=1; state=sound; end else if(timer[4:0]==5'b00111) ring_en=0; else if(timer[4:0]==5'b01001) ring_en=1; else if(timer[4:0]==5'b10000) ring_en=0; else if(timer[4:0]==5'b00000) ring_en=1; else if(sw1==1) begin state=sw1_detect; timer=0; end sound: if(timer==8'b00011001) // delay 3.5S, wait for dog sound. begin timer=0; alert_sound=0; state=sound1; end
sound1: if(timer==8'b00000010) // delay 2 clock. begin timer=0; alert_sound=1; state=sound2; end
sound2: if(timer==8'b00011001) // delay 3.5S, wait for dog sound. begin timer=0; alert_sound=0; state=power_off; end
power_off: begin power_ctrl=0; // power off. led1=1; ring_en=0; alert_phone=0; state=power_off; // wait for power off. end default: state=delay_15s; endcase end endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -