ZYNQ-PL学习实践(二)按键和定时器控制LED闪烁灯

ZYNQ-PL学习实践(二)按键和定时器控制LED闪烁灯)

  • [1 创建工程](#1 创建工程)
  • [2 verilog 代码](#2 verilog 代码)
  • [3 约束](#3 约束)
  • [4 综合](#4 综合)
  • [5 生成bit](#5 生成bit)
  • 总结

1 创建工程

2 verilog 代码

添加key_led.v 文件,

c 复制代码
module key_led(
    input               sys_clk , //系统时钟50MHz
    input               rst_n ,   //系统复位

    input        [1:0]  key ,    //两个按键输入
    output  reg  [1:0]  led     //;两个led 输出
);

//寄存器定义
reg [24:0] cnt;                 //25位寄存器
reg        led_ctrl;            //500ms定时器溢出切换标志

//定时器
always @ (posedge sys_clk or negedge rst_n) begin
    if(!rst_n)
        cnt <= 25'd0;             //定时器清零
    else if(cnt < 25'd2500_0000)  //定时未满500ms
        cnt <= cnt + 1'b1;
    else
        cnt <= 25'd0;            //定时满500ms
end

//每隔500ms就更改LED溢出切换标志
always @ (posedge sys_clk or negedge rst_n) begin
    if(!rst_n)
        led_ctrl <= 1'b0;
    else if(cnt == 25'd2500_0000)
        led_ctrl <= ~led_ctrl;
end

//以定时器状态和按键状态,控制两个LED的亮灭
always @ (posedge sys_clk or negedge rst_n) begin
    if(!rst_n)
        led <= 2'b11;
    else case(key)
        2'b10 :  //如果按键0按下、按键1未按下,则两个LED交替闪烁
            if(led_ctrl == 1'b0)
                led <= 2'b01;
            else
                led <= 2'b10;
        2'b01 :  //如果按键0未按下、按键1按下,则两个LED同时亮灭交替
            if(led_ctrl == 1'b0)
                led <= 2'b11;
            else
                led <= 2'b00;
        2'b11 :  //如果两个按键都未按下,则两个LED都保持点亮
                led <= 2'b11;
        default: ;
    endcase
end

endmodule

3 约束

bash 复制代码
set_property -dict {PACKAGE_PIN Y9 IOSTANDARD LVCMOS33} [get_ports sys_clk]
set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports sys_clk]
set_property -dict {PACKAGE_PIN J15 IOSTANDARD LVCMOS33} [get_ports sys_rst_n]
set_property -dict {PACKAGE_PIN J21 IOSTANDARD LVCMOS33} [get_ports {key[0]}]
set_property -dict {PACKAGE_PIN L20 IOSTANDARD LVCMOS33} [get_ports key[0]]
set_property -dict {PACKAGE_PIN J20 IOSTANDARD LVCMOS33} [get_ports {key[1]}]
set_property -dict {PACKAGE_PIN A19 IOSTANDARD LVCMOS33} [get_ports {led[0]}]
set_property -dict {PACKAGE_PIN A18 IOSTANDARD LVCMOS33} [get_ports {led[1]}]

set_property IOSTANDARD LVCMOS33 [get_ports rst_n]
set_property PACKAGE_PIN A17 [get_ports rst_n]

4 综合

5 生成bit

生成bit路径

总结

本节介绍使用Vivado软件开发fpga 按键和定时器共同控制LED显示状态。

感谢阅读,祝君成功!

-by aiziyou

相关推荐
FPGA之旅8 小时前
FPGA从零到一实现FOC(一)之PWM模块设计
fpga开发·dubbo
XMAIPC_Robot9 小时前
基于ARM+FPGA的光栅尺精密位移加速度测试解决方案
arm开发·人工智能·fpga开发·自动化·边缘计算
cycf9 小时前
状态机的设计
fpga开发
szxinmai主板定制专家12 小时前
【精密测量】基于ARM+FPGA的多路光栅信号采集方案
服务器·arm开发·人工智能·嵌入式硬件·fpga开发
千宇宙航19 小时前
闲庭信步使用SV搭建图像测试平台:第三十二课——系列结篇语
fpga开发
千宇宙航1 天前
闲庭信步使用SV搭建图像测试平台:第三十一课——基于神经网络的手写数字识别
图像处理·人工智能·深度学习·神经网络·计算机视觉·fpga开发
小眼睛FPGA1 天前
【RK3568+PG2L50H开发板实验例程】FPGA部分/紫光同创 IP core 的使用及添加
科技·嵌入式硬件·ai·fpga开发·gpu算力
forgeda2 天前
如何将FPGA设计验证效率提升1000倍以上(2)
fpga开发·前沿技术·在线调试·硬件断点·时钟断点·事件断点
9527华安2 天前
FPGA实现40G网卡NIC,基于PCIE4C+40G/50G Ethernet subsystem架构,提供工程源码和技术支持
fpga开发·架构·网卡·ethernet·nic·40g·pcie4c
search72 天前
写Verilog 的环境:逻辑综合、逻辑仿真
fpga开发