Quartus地铁自动售票机verilog代码青创QC-FPGA开发板

名称:Quartus地铁自动售票机verilog代码青创QC-FPGA开发板(文末获取)

软件:Quartus

语言:Verilog

代码功能:

地铁自动售票机

1.一共20站,1~5站2元;6~10站3元,11~15站5元,16~20站7元。

2.投钱可以投1元,5元,10元,20元

3.若投入钱币大于票价,显示购买成功并找零

4.若投币低于票价可以退还钱币,不出票

本代码已在青创QC-FPGA开发板验证,青创QC-FPGA开发板如下,其他开发板可以修改管脚适配:

青创QC-FPGA开发板.png

设计及仿真文档.doc

1.工程文件

2.程序文件

3.程序编译

4.RTL图

5.仿真图

1. 整体仿真图

2. 二进制转BCD模块仿真图

3. 按键下降沿检测模块

4. 数码管显示模块

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变为高电平表示购票成功,找零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

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值