題解 | #游戲機(jī)計(jì)費(fèi)程序#
簡(jiǎn)析
輸入:money[9:0], set, boost
輸出:remain, yellow, red
工作模式
set==1
時(shí),進(jìn)行投幣,money
會(huì)添加到余額remain
上。boost==0
是普通模式,每個(gè)時(shí)鐘周期消耗1元;boost==0
是暢玩模式,每個(gè)時(shí)鐘周期消耗2元。當(dāng)余額不足時(shí)停止計(jì)費(fèi)(余額小于對(duì)應(yīng)模式的要求)。
always@(posedge clk or negedge rst_n) begin
if(~rst_n)
remain <= 0;
else if(boost)
remain <= set ? remain+money:
remain<2? remain:
remain-2;
else
remain <= set ? remain+money:
remain<1? remain:
remain-1;
end
指示燈
黃燈yellow
在余額小于10元時(shí)亮起,余額歸零時(shí)滅掉;紅燈red
在余額不足時(shí)亮起。
always@(posedge clk or negedge rst_n) begin
if(~rst_n) begin
yellow <= 0;
red <= 0;
end
else begin
yellow <= remain<10&&remain;
red <= boost? remain<2: remain<1;
end
end
代碼
`timescale 1ns/1ns
module game_count
(
input rst_n, //異位復(fù)位信號(hào),低電平有效
input clk, //時(shí)鐘信號(hào)
input [9:0]money,
input set,
input boost,
output reg[9:0]remain,
output reg yellow,
output reg red
);
always@(posedge clk or negedge rst_n) begin
if(~rst_n) begin
yellow <= 0;
red <= 0;
end
else begin
yellow <= remain<10&&remain;
red <= boost? remain<2: remain<1;
end
end
always@(posedge clk or negedge rst_n) begin
if(~rst_n)
remain <= 0;
else if(boost)
remain <= set ? remain+money:
remain<2? remain:
remain-2;
else
remain <= set ? remain+money:
remain<1? remain:
remain-1;
end
endmodule
Verilog篇題解 文章被收錄于專欄
本人對(duì)??途W(wǎng)verilog篇題目一些理解