⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 phone control.v

📁 利用电话远程系统
💻 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 + -