名稱:Quartus地鐵自動售票機verilog代碼青創(chuàng)QC-FPGA開發(fā)板
軟件:Quartus
語言:Verilog
代碼功能:
地鐵自動售票機
1.一共20站,1~5站2元;6~10站3元,11~15站5元,16~20站7元。
2.投錢可以投1元,5元,10元,20元。
3.若投入錢幣大于票價,顯示購買成功并找零。
4.若投幣低于票價可以退還錢幣,不出票。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
本代碼已在青創(chuàng)QC-FPGA開發(fā)板驗證,青創(chuàng)QC-FPGA開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
演示視頻:
設(shè)計文檔:
1.工程文件
2.程序文件
3.程序編譯
4.RTL圖
5.仿真圖
1. 整體仿真圖
2. 二進制轉(zhuǎn)BCD模塊仿真圖
3. 按鍵下降沿檢測模塊
4. 數(shù)碼管顯示模塊
5. 地鐵售票控制模塊仿真
上圖中,station_p按了3次,表示選擇了3站(data_1=3),所以票價是2(data_2=2)元,按下confirm_p鍵后,開始投幣,1,5,10,20分別投幣一次,共投幣36元(data_1=36),再按下confirm_p鍵后,開始找零,同時buy_succeed變?yōu)?a class="article-link" target="_blank" href="/tag/%E9%AB%98%E7%94%B5%E5%B9%B3/">高電平表示購票成功,找零34元(data_2=34),再按下confirm_p鍵后表示取票成功。
部分代碼展示:
module?subway( input?clk_48M, input?resetin, input?confirm_key_n, input?station_key_n, output?[1:0]row_keys, input[1:0]line_keys, output?buy_succeed, output?[7:0]data, output?[3:0]com ); wire?coin_1_p; wire?coin_5_p; wire?coin_10_p; wire?coin_20_p; wire?clk_1KHz; wire?[7:0]?data_1; wire?[7:0]?data_2; wire?confirm_p; wire?station_p; key_jitter?key_jitter_1( .?clkin(clk_1KHz),???? .?key_in(confirm_key_n), .?key_negedge(confirm_p) ); key_jitter?key_jitter_2( .?clkin(clk_1KHz),???? .?key_in(station_key_n), .?key_negedge(station_p) ); matrix_key?i_matrix_key ( .clkin(clk_48M), .resetin(resetin), .row_keys(row_keys), .line_keys(line_keys), .clk_1KHz(clk_1KHz), .coin_1(coin_1_p), .coin_5(coin_5_p), .coin_10(coin_10_p), .coin_20(coin_20_p) ); subway_ctrl?i_subway_ctrl( .?clk(clk_1KHz), .?reset_n(resetin), .?confirm_p(confirm_p), .?station_p(station_p), .?coin_1_p(coin_1_p), .?coin_5_p(coin_5_p), .?coin_10_p(coin_10_p), .?coin_20_p(coin_20_p), .?buy_succeed(buy_succeed), .?data_1(data_1), .?data_2(data_2) ); wire?[3:0]data_1_ten; wire?[3:0]data_1_one; wire?[3:0]data_2_ten; wire?[3:0]data_2_one; wire?[7:0]data_1_BCD;? wire?[7:0]data_2_BCD;? b_to_bcd?i1_b_to_bcd ( .clk(clk_48M), .rst_n(resetin), .binary(data_1), .state_en(1'b1), .BCD(data_1_BCD) ???); b_to_bcd?i2_b_to_bcd ( .clk(clk_48M), .rst_n(resetin), .binary(data_2), .state_en(1'b1), .BCD(data_2_BCD) ???); assign?data_1_ten=data_1_BCD[7:4]; assign?data_1_one=data_1_BCD[3:0]; assign?data_2_ten=data_2_BCD[7:4]; assign?data_2_one=data_2_BCD[3:0]; led_sm?i_led_sm ( .clkin(clk_48M), .resetin(resetin), .data_1_in(data_1_one), .data_10_in(data_1_ten), .data_100_in(data_2_one), .data_1000_in(data_2_ten), .data(data), .com(com) ); endmodule
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=381