/*信号定义:
clk: 时钟信号,本例中其频率值为 1Hz;
decide: 电话局反馈回来的信号,代表话务种类,“01”表示市话,“10”表示
长话,“11”表示特话;
dispmoney: 用来显示卡内余额,其单位为角,这里假定能显示的最大数额为 50 元
(500 角);
disptime: 显示本次通话的时长;
write,read: 当 write 信号下降沿到来时写卡,当话卡插入,read 信号变高时读卡;
warn: 余额过少时的告警信号。本例中,当打市话时,余额少于 3 角,打长
话时,余额少于 6 角,即会产生告警信号;
cut: 当告警时间过长时自动切断通话信号。 */
module account(state,clk,card,decide,disptime,dispmoney,
write,read,warn,cut);
output write,read,warn,cut;
input state,clk,card;
input[2:1] decide;
output[10:0] dispmoney;
output[8:0] disptime;
reg[10:0] money;
reg[8:0] dtime;
reg warn,cut,write,t1m; //t1m 为分时钟
reg set,reset_ena;
integer num1,temp;
assign dispmoney=card?money:0;
assign disptime=dtime;
assign read=card?1:0;
always @(posedge clk)
begin
if (num1==59) begin num1<=0; t1m<=1; end
else begin
if(state) num1<=num1+1;
else num1<=0; t1m<=0;
end
end
always @(negedge clk) //该进程完成电话计费功能
begin
if(!set)
begin money<=11'h500; set<=1; end
if(card&state)
if(t1m)