📄 acount.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 + -