📄 phone control.v
字号:
////////////////////////////////////////////////////////////// phone control.v// // created 2008.10.07// Author : dreamstar at VLSI & Integrated System Lab Of BJUT.///////////////////////////////////////////////////////////`timescale 1ns/10ps module phone_control(clk,rst,enable,dtmf_high,dtmf_low,dtmf_data,playl, tele_on,isd_addr,led1,led2,clr,dtmf_clr, tstate,pass_counter,wrong_time,dtmf_con); output [2:0] tstate; //STATE REGISTER; output [2:0] pass_counter; //PASSWORD COUNTER; output [1:0] wrong_time; //PASSWORD WRONG INPUT TIMES; output [3:0] dtmf_con; //control number input clk; input enable; //ring_c enable input rst; input dtmf_high; //DTMF CODING COMPLETE INDICATION; input dtmf_low; input [3:0] dtmf_data; //DTMF CODING DATA; output clr; //ring_c clear; output dtmf_clr; //dtmf clear; output playl; //ISE1420 PLAY CONTROL; output tele_on; //telephone open; output [7:0] isd_addr; //ISD ADDRESS; output led1; output led2; reg clr; reg dtmf_clr; reg playl; reg tele_on; reg [7:0] isd_addr; reg led1; reg led2; reg [2:0] tstate; //STATE REGISTER; reg [2:0] ring_counter; //RING COUNTER; reg [3:0] dtmf [3:0]; //DTMF PASSWORD MEMORY; reg [2:0] pass_counter; //PASSWORD COUNTER; reg [1:0] wrong_time; //PASSWORD WRONG INPUT TIMES; reg [3:0] dtmf_con; //control number reg sel; parameter idle =3'b000; parameter phone_on =3'b001; parameter password_check =3'b010; parameter password_wrong1 =3'b011; parameter password_wrong2 =3'b100; parameter phone_off =3'b101; parameter receive_control =3'b110; parameter password1=4'b0001; parameter password2=4'b0010; parameter password3=4'b0011; parameter password4=4'b0100; always@(posedge clk or negedge rst) begin if(rst==0) begin tstate <= idle; tele_on <= 1'b0; playl <= 1'b1; isd_addr <= 8'b00000000; clr <= 1'b1; dtmf[0] <= 4'b0000; dtmf[1] <= 4'b0000; dtmf[2] <= 4'b0000; dtmf[3] <= 4'b0000; pass_counter <= 3'b000; wrong_time <= 2'b00; led1 <= 1'b1; led2 <= 1'b1; dtmf_clr <= 1'b1; end else begin case(tstate) idle: begin if (enable==1'b1) begin tele_on <= 1'b1; tstate <= phone_on; isd_addr <= 8'b00000001; playl <= 1'b0; clr <= 1'b0; end else tstate <=idle; end phone_on: begin if (dtmf_high==1'b1) begin dtmf[pass_counter] <= dtmf_data; pass_counter <= pass_counter+1; playl <= 1'b1; dtmf_clr <= 1'b0; end else if (dtmf_low==1'b1) dtmf_clr <= 1'b1; else if (pass_counter==3'b100) begin tstate <= password_check; pass_counter <=3'b000; end else tstate <= phone_on; end password_check: begin if(dtmf[0]==password1 & dtmf[1]==password2 & dtmf[2]==password3 & dtmf[3]==password4) begin tstate <= receive_control; wrong_time <= 2'b00; isd_addr <= 8'b00000100; playl <= 1'b0; clr <= 1'b1; end else if (wrong_time==2'b00) begin tstate <= password_wrong1; wrong_time <= wrong_time+1; isd_addr <= 8'b00000010; playl <= 1'b0; end else if (wrong_time==2'b01) begin tstate <= password_wrong2; wrong_time <= wrong_time+1; isd_addr <= 8'b00000010; playl <= 1'b0; end else begin tstate <= phone_off; wrong_time <= 2'b00; isd_addr <= 8'b00000011; playl <= 1'b0; end end password_wrong1: begin if (dtmf_high==1'b1) begin dtmf[pass_counter] <= dtmf_data; pass_counter <= pass_counter+1; playl <= 1'b1; dtmf_clr <= 1'b0; end else if (dtmf_low==1'b1) dtmf_clr <= 1'b1; else if (pass_counter==3'b100) begin tstate <= password_check; pass_counter <= 3'b000; end else tstate<=password_wrong1; end password_wrong2: begin if (dtmf_high==1'b1) begin dtmf[pass_counter] <= dtmf_data; pass_counter <= pass_counter+1; playl <= 1'b1; dtmf_clr <= 1'b0; end else if (dtmf_low==1'b1) dtmf_clr <= 1'b1; else if (pass_counter==3'b100) begin tstate <= password_check; pass_counter <= 3'b000; end else tstate <= password_wrong2; end phone_off: begin // if (dtmf_high==1'b1) // begin // playl <= 1'b1; // tele_on <= 1'b0; // end // else tele_on <= 1'b0; tstate <= idle; end receive_control: begin if (dtmf_high==1) begin dtmf_con <= dtmf_data; dtmf_clr <= 1'b0; end else if(dtmf_low==1'b1) dtmf_clr <= 1'b1; else if (dtmf_con==4'b0001) begin led1 <= 1'b0; tstate <= idle; end else if (dtmf_con==4'b0010) begin led2 <= 1'b0; tstate <= idle; end else tstate <= receive_control; end default: tstate <= idle; endcase end end endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -