当前位置: 首页 > article >正文

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

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

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

1 创建工程

在这里插入图片描述

2 verilog 代码

添加key_led.v 文件,

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 约束

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


http://www.kler.cn/a/573626.html

相关文章:

  • MDM 如何彻底改变医疗设备的远程管理
  • MacOS 10.15上使用Docker遇到的几个问题
  • js操作字符串的常用方法
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例4: 自定义插槽
  • vulnhub靶场之【digitalworld.local系列】的mercy靶机
  • 有关Java中的集合(1):List<T>和Set<T>
  • 一文学会Spring
  • WEB12~13
  • 54 异常的学习总结
  • TypeScript系列04-泛型编程
  • CRC算法(C语言)
  • DApp开发从入门到精通:以太坊/Solana公链生态实战解析
  • 【长安大学】苹果手机/平板自动连接认证CHD-WIFI脚本(快捷指令)
  • Scala 中的数据类型
  • Docker--Docker 镜像制作
  • HTML第三节
  • AI-Deepseek + PPT
  • RAG检索增强生成(Retrieval-Augmented Generation)介绍(双模态架构:检索子系统、生成子系统)实现知识获取与内容生成的协同
  • C#使用SFTP批量上传和下载一个目录下的所有文件
  • Linux下启动redis