使用软件: Vivado
开发板: EGO1采用Xilinx Artix-7系列XC7A35T-1CSG324C FPGA
实现功能
16个拨码开关,每两个控制一个数码管的数值变化
开发板配置
七段数码管
数码管为共阴极数码管,即公共极输入低电平。共阴极由三极管驱动,FPGA需要提供正向信号。同时段选端连接高电平,数码管上的对应位置才可以被点亮。因此,FPGA 输出有效的片选信号和段选信号都应该是高电平。
管脚约束
A0~DP0控制DN0_K1 — DN0_K4的数码管的段选
A1~DP1控制DN1_K1—DN1_K4的数码管的段选
代码
verilog代码
module v_smg_1(
input clk,
input rst,
input[15:0] sw, //开关
output[7:0] seg,//段选,高有效
output[7:0] seg1,
output[7:0] an //位选,低有效
);
reg[18:0] divclk_cnt = 0;//分频计数器
reg divclk = 0;//分频后的时钟
reg[7:0] seg=0;//段码
reg[7:0] seg1=0;
reg[7:0] an=8'b00000001;//位码
reg[3:0] disp_dat=0;//要显示的数据
reg[2:0] disp_bit=0;//要显示的位
parameter maxcnt = 50000;// 周期:50000*2/100M
always@(posedge clk)
begin
if(divclk_cnt==maxcnt)
begin
divclk=~divclk;
divclk_cnt=0;
end
else
begin
divclk_cnt=divclk_cnt+1'b1;
end
end
always@(posedge divclk) begin
if(disp_bit >= 7)
disp_bit=0;
else
disp_bit=disp_bit+1'b1;
case (disp_bit)
3'b000 :
begin
disp_dat=sw[1:0];
an=8'b00000001;//显示第一个数码管,高电平有效
end
3'b001 :
begin
disp_dat=sw[3:2];
an=8'b00000010;//显示第二个数码管,低电平有效
end
3'b010 :
begin
disp_dat=sw[5:4];
an=8'b00000100;//显示第三个数码管,低电平有效
end
3'b011 :
begin
disp_dat=sw[7:6