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

📄 acount.v

📁 卡式计费电话电路,用verilogHDL编写,主要完成模拟真实电话的功能
💻 V
字号:
`timescale 1s/100ms
module account;
reg clk,card,state;
reg [1:0] decide;
reg  set;
wire [7:0] disptime;
wire [7:0] dispmoney;
wire write,read,warn,cut,t1m;

  wire[31:0] num10,temp1;
  wire[7:0] money;
  wire	  reset_ena;
 
 account2 aa(clk,card,state,decide,set,disptime,dispmoney,write,read,warn,cut,t1m,
		num10,temp1,money,reset_ena);
 
initial begin
        clk=0;card=0;state=0;decide=0;set=0;
        end
always #1 clk=~clk;
initial begin
	 #2 set=1;
	 #2 set=0;
         #4 card=1;
         #1 decide=2;
         #1 state=1;
         
         end
initial $monitor($time,,,"clk=%d,set=%d",clk,set);
endmodule

//--------???????----------
// ?????????disptime???59???????dispmoney?????5?*/
//????
//clk:			????????1Hz
//card:			???????????
//state:		????????????
//decide:		???????????????????01???????10???????11??????
		    	
//disptime:		??????????????????????????????59???
//dispmoney:	??????????????????????????5???50??
//write,read:	?write?????????????????read???????
//warn:			?????????????????????3???????????6???????????
//cut:			????????>15s???????????

//+num1?temp?????
module account2(clk,card,state,decide,set,disptime,dispmoney,write,read,warn,cut,t1m,
		num10,temp1,money,reset_ena);
  input clk,card,state;
  input[1:0] decide;
  
  input set;

  output[7:0] disptime;
  output[7:0] dispmoney;
  output write,read,warn,cut,t1m;

  output[31:0] num10,temp1;
  output[7:0] money;
  output	  reset_ena;

  reg write,warn,cut;
  reg[7:0] money;          // ?????????????????t1m??????
  reg[7:0] dtime;          // ?????????????t1m??????
  reg t1m;                 // ?????????,?????
  //reg set,reset_ena;       // set??0???money???reset_ena??0????cut??
  reg reset_ena;
  integer num1,temp;       // num1??????????temp?????????

  assign num10=num1;
  assign temp1=temp;  

  assign dispmoney = card? money:0;//??????????????????????????
  assign disptime = dtime;
  assign read = card? 1:0;         //?????????????????????????????"0"?
  // ----- 1.?????
  always @(posedge clk)
    begin
      if(num1==59) begin num1<=0; t1m<=1; end  // ???59s??num1???t1m=1
      else 
        begin
          if(state) num1<=num1+1;             // ???????num1???1??
          else num1<=0;
          t1m<=0; 
        end
    end

  //----- 2.???always???????????????
  always @(negedge clk)
    begin
	   if (set)
	   begin
		 money<=12'd50;
	   end	
	
       if(card && state)  // ???????????                                     
        if(t1m)              // ??????1????t1m??????????
          case (decide)
          2'b01:begin          //?1??????? 
         	       if(money<3)       //? ?????<3?????                      
          	         begin warn<=1;write<=0;reset_ena<=1;end 
          	       else              
                     begin           //? ?????>3????????          
          	           if(money[3:0]<4'b0011)       // ?????<3?
          	             begin
          	               money[3:0]<=money[3:0]+4'hd; // ?3????7????
          	               money[7:4]<=money[7:4]-1; // ???1
          	             end
          	           else money[3:0]<=money[3:0]-3;
			           write<=1;    //? ????
          	                        //? ???????
          	           if(dtime[3:0]==9)
          	             begin
          	               dtime[3:0]<=0;
          	               if(dtime[7:4]==5)      // ?????59??
          	                 dtime[7:4]<=0;
          	               else dtime[7:4]<=dtime[7:4]+1;
          	             end
          	           else
          	             begin dtime[3:0]<=dtime[3:0]+1;warn<=0;reset_ena<=0;end
          	         end
          	     end      
	      2'b10:begin     //?2???????
	 	           if(money<6)   //? ?????<6?????
	 	             begin warn<=1;write<=0;reset_ena<=1;end 
	 	           else 
                     begin       //? ?????>6????????
	 	 	           if(money[3:0]<6)         // ?????<6?
	 	   	             begin
	 	   	               money[3:0]<=money[3:0]+4'ha;// ?6????4????
	 	   	               money[7:4]<=money[7:4]-1;
	 	   	             end
	 	  	           else money[3:0]<=money[3:0]-6;
	 	                        //? ???????
	 		           if(dtime[3:0]==9)
	 	  	             begin
	 	 	               dtime[3:0]<=0;
	 	   	               if(dtime[7:4]==5)
	 	     		         begin dtime[7:4]<=0;end
	 	    	           else dtime[7:4]<=dtime[7:4]+1;
	 	   	             end
	 	 	           else dtime[3:0]<=dtime[3:0]+1;	 	             
	 	   	           write<=1;reset_ena<=0;warn<=0; //???
	 	   	         end
	 	         end   
	      endcase
	    else write<=0;         // ?t1m=0?????
      else                     // ?????????????????????
        begin dtime<=0;warn<=0;write<=0;reset_ena<=0;end	 	   
    end

  //----- 3.???always??????????????
  always @(posedge clk)
    begin
      if(warn) temp<=temp+1;           // ????????temp???1??
      else temp<=0;                    // ??temp??
      if(temp==15)                     // ???15s
        begin cut<=1;temp<=0;end       // ?????
      if(!card||!reset_ena)            // ?????????cut??
        begin cut<=0;temp<=0;end
    end
endmodule	 
                
     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -