名称:停车场计数器传感器检测verilog代码basys3开发板验证(代码在文末下载)
软件:VIVADO
语言:Verilog
代码功能:
停车场计数器设计
1、停车场有一个入口一次出口,每个口有一个传感器检测车辆进出。
2、两个传感器都未被遮挡时,传感器ab值为00。
3、传感器a被遮挡,传感器值ab为10。
4、传感器b被遮挡,传感器值ab为01。
5、传感器ab被遮挡,传感器值ab为11。
使用代码设计停车场计数器,用按键代替传感器,在开发板验证停车场计数器功能。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在Basys3开发板验证,开发板如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
停车场计数器仿真
要求:
1.程序文件
2.程序运行
3.程序仿真
程序接口
管脚约束
仿真
Testbench
整体仿真图
a表示车进入信号,enter为一个clk的进入信号,inc为计数增加信号,car_num为车辆数量
同时有车进出,enter和exit同时为高,
Inc和dec信号不为1,总数不增不减
b为汽车驶出信号,exit为一个clk的驶出信号,dec为1,总数减少1
为便于数码管显示,需要将car_num变为3个数码管信号,分别为百位,十位,个位
如下图hun,ten,one信号
数码管位选和段选信号
部分代码展示:
module park_station( input clk,//输入时钟 input a_key,//入口 input b_key,//出口 output reg [3:0] weixuan,//数码管位选 output reg [7:0] duanxuan//数码管段选 ); wire a;//消抖后信号 wire b;//消抖后信号 //消抖模块 key_debounce a_key_debounce( . clk(clk), . button_in(a_key),//输入 . button_jitter(a)//消抖后按键 ); //消抖模块 key_debounce b_key_debounce( . clk(clk), . button_in(b_key),//输入 . button_jitter(b)//消抖后按键 ); parameter idle_in = 3'd0;//空闲状态 parameter idle_out = 3'd5;//空闲状态 parameter car_in = 3'd1;//有车进入状态 parameter car_in_wait = 3'd2;//有车进入维持状态 parameter car_out = 3'd3;//有车离开状态 parameter car_out_wait = 3'd4;//有车离开维持状态 //parameter car_inout = 3'd5;//同时有车进入离开状态 reg [2:0] state_a='d0; reg [2:0] state_b='d0; //两段式状态机第一段,状态转换 always@(posedge clk) begin case(state_a) idle_in:if(a==1) state_a<=car_in;//有车进入 else state_a<=idle_in;//无车保持空闲状态 car_in: state_a<=car_in_wait;//有车进入维持状态 car_in_wait:if(a==1) state_a<=car_in_wait;//有车进入维持状态 else state_a<=idle_in;//车完全驶入 default:state_a<=idle_in; endcase case(state_b) idle_out:if(b==1) state_b<=car_out;//有车离开 else state_b<=idle_out;//无车保持空闲状态 car_out: state_b<=car_out_wait;//有车离开维持状态 car_out_wait:if(b==1) state_b<=car_out_wait;//有车离开维持状态 else state_b<=idle_out;//车完全离开 default:state_b<=idle_out; endcase end
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=292
867