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

FPGA:频闪灯设计

1、需求

若在FPGA上实现LED灯一秒闪烁一次,先进行计算,1秒闪烁一次,即周期为1秒,开发板XC7A35TFFG-2的基本时钟输入由板载 50MHz 有源晶振提供,即频率为f = 50MHz
则一个周期为 T = 1 f = 1 50 M H z = 20 n s T=\frac{1}{f} = \frac{1}{50MHz}=20ns T=f1=50MHz1=20ns
将一秒钟一分为二,即前0.5秒灯灭,后0.5秒灯亮。即亮和灭的周期数为
0.5 × 1 0 9 ÷ 20 = 25000000 T 0.5\times 10^9 \div20=25000000T 0.5×109÷20=25000000T。假设时钟从0开始,设置一个计数器,如果我们想设计 n n n个时钟周期长度的计数器,一般计数到 n − 1 n-1 n1即可。
例如设置一个计数为 4 4 4个时钟周期的计数器,时钟从 1 1 1开始,则计数器到 3 3 3即可,执行顺序如下 0 − 1 − 2 − 3 − 1 0-1-2-3-1 01231.

2、设计定义

该实验有两个输入(复位信号和时钟信号),一个输出(led灯亮灭情况),复位信号低电平有效,时钟是上升沿触发。当复位信号来临时,led灯灭,计数器归0,当计数到24999999时,led灯翻转(即状态和原来相反),计数器归0。

3、编写代码

(1)创建工程,命名为led_flash_test,编写设计文件,其对应的verilog代码如下:

// 让led灯每秒闪烁一次  时序电路设计
module led_flash_test(clk,reset_n,led  //信号声明
);
input clk;
input reset_n;
output reg led;  // 在always模块赋值的语句,设为reg型
reg [24:0] counter; // 时钟计数单元
always @(posedge clk or negedge reset_n)
if (!reset_n)counter<=1'd0;
else if(counter == 24999999)counter<=1'd0;
elsecounter<=counter+1'd1;
always @(posedge clk or negedge reset_n)
if(!reset_n)led <= 0;
else if(counter == 24999999)led <= !led;
endmodule

编写测试文件,命名为led_flash_test_tb,其对应的verilog代码如下:

`timescale 1ns/1ps
module led_flash_test_tb();
reg clk;
reg reset_n;
wire led;
led_flash_test led_flash_test_inst0(.clk(clk),.reset_n(reset_n),.led(led)
);
initial clk=1;
always #10 clk = !clk;  # 每10ns翻转一次
initial beginreset_n=0;#201;   # 避免和时钟上升沿重合reset_n=1;#1000000000;
end
endmodule

4、仿真&板级调试

点击run simulation,即可查看仿真结果,如下所示
在这里插入图片描述
接下来进行引脚分配,根据开发手册提供的引脚分配表,
在这里插入图片描述
将Y18分配给clk,M22(led0)分配给led,F15(按键S0)分配给reset_n,按下表示低电平,进行复位。具体设置如下:
在这里插入图片描述
生成比特流文件并写入开发板,效果如下:
一秒闪烁一次
在这里插入图片描述
在这里插入图片描述

按下复位按钮,灯灭。
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大厂面试-基本功
  • 【LLM】-05-提示工程-部署Langchain-Chat
  • 如何理解React State不可变性的原则
  • 计算机网络发展历史
  • matlab永磁同步电机反馈试验装置的设计和永磁同步电机仿真
  • 【测开能力提升-fastapi框架】fastapi能力提升 - 中间件与CORS
  • TDengine 3.3.2.0 发布:新增 UDT 及 Oracle、SQL Server 数据接入
  • 在 Ubuntu 22.04/20.04 安装 CVAT 和 SAM 指南
  • Mysql sql技巧与优化
  • Linux环境下MongoDB安装与主从集群,高可用集群配置教程
  • Training for Stable Diffusion
  • SQL labs靶场-SQL注入入门
  • Linux openEuler_24.03部署MySQL_8.4.0 LTS安装实测验证安装以及测试连接全过程实操手册
  • 向量化操作
  • ELK企业级日志分析
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [case10]使用RSQL实现端到端的动态查询
  • [译]如何构建服务器端web组件,为何要构建?
  • bootstrap创建登录注册页面
  • Docker入门(二) - Dockerfile
  • ES6语法详解(一)
  • input实现文字超出省略号功能
  • Java 网络编程(2):UDP 的使用
  • Javascript弹出层-初探
  • jdbc就是这么简单
  • Laravel Telescope:优雅的应用调试工具
  • Rancher如何对接Ceph-RBD块存储
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Vue.js源码(2):初探List Rendering
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vue2.0 实现互斥
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 读懂package.json -- 依赖管理
  • 给新手的新浪微博 SDK 集成教程【一】
  • 记录:CentOS7.2配置LNMP环境记录
  • 解析 Webpack中import、require、按需加载的执行过程
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 详解NodeJs流之一
  • 说说我为什么看好Spring Cloud Alibaba
  • ​2021半年盘点,不想你错过的重磅新书
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​渐进式Web应用PWA的未来
  • #100天计划# 2013年9月29日
  • #70结构体案例1(导师,学生,成绩)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (python)数据结构---字典
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (汇总)os模块以及shutil模块对文件的操作
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)ABI是什么