【FPGA项目】第1个项目,来点个灯吧~

news2024/11/17 3:27:49

前言

你会FPGA吗?我会点灯!

一、概述

        作为一名点灯高手,今天就来实际操练一下。

如何点亮?

        开发板上带有8个LED灯,我们只需要控制它对应的管脚电平输入即可。

 1:灭;0:亮。

 如何实现流水灯?

        通过 FPGA 内部的定时器,循环点亮每个 LED,达到流水灯的效果。如下图 所示,8 个 LED 指示灯,我们依次给它们赋值,每次只有一个 LED 点亮, 每次点亮某个 LED 的时间一定(固定延时)。8个 LED 依次被点亮一次,如此循环便能达到流水灯的效果。

二、代码

module flow_led(
			input 			i_sys_clk,	//外部输入50MHz时钟信号
			input 			i_rst_n,	//外部输入复位信号,低电平有效
			output	[7:0] 	o_led		//8个LED指示灯接口,1--灭;0--亮
		);		

`define SIM	//仿真时使用		
		
`ifdef SIM	
	parameter MAX_CNT = 24'd10;
`else 
	parameter MAX_CNT = 24'd9_999_999;
`endif
	
//-------------------------------------
reg[23:0] cnt;		//24位计数器
reg[7:0]  led;															

	//cnt计数器进行循环计数,一个计数周期的时间为 10000000*20ns = 200ms
always @ (posedge i_sys_clk or negedge i_rst_n)									
	if(!i_rst_n) cnt <= 24'd0;											
	else if(cnt < MAX_CNT) cnt <= cnt+1'b1;	
	else cnt <= 24'd0;

//-------------------------------------

	//计数器cnt计数到最大值时,切换点亮的指示灯
always @ (posedge i_sys_clk or negedge i_rst_n) 
	if(!i_rst_n) led <= 8'b1111_1110;	//默认只点亮一个指示灯D2
	else if(cnt == MAX_CNT) led <= {led[6:0],led[7]};	//200ms为一个计数周期,执行一次循环移位操作

assign  o_led = led;		
	

endmodule

2.1代码说明

`define SIM

`ifdef SIM

parameter MAX_CNT = 24'd10;

`else

parameter MAX_CNT = 24'd9_999_999;

`endif

        表示如果代码中定义了 SIM,则执行 MAX_CNT = 24'd10 的赋值;否者执行 MAX_CNT = 24'd9_999_999 的赋值。那么我们使用这个定义,仿真和板级两种情况下 MAX_CNT 的取值不同,仿真时希望快速看到结果,那么计数值小一些,我们看到功能实现即可;而板 级情况下,流水灯的速度不能太快(太快就看不到流水灯的效果了),必须至少有几百毫秒 的延时才能够看清流水灯的效果。因此,在做仿真时,需要有“`define SIM”这个语句,而在实际板级编译时,则必须注释该语句。

三、仿真

`timescale 1ns / 1ps

`timescale 1ns/1ps
module flow_led_tb();
	
reg sys_clk_i;	
reg ext_rst_n;	
wire[7:0] led;	
	
flow_led		u_flow_led(
			.i_sys_clk(sys_clk_i),	
			.i_rst_n(ext_rst_n),	
			.o_led(led)		
		);			
	
initial begin
	sys_clk_i = 0;
	ext_rst_n = 0;	//复位中
	#1000;
	@(posedge sys_clk_i); #2;
	ext_rst_n = 1;	//复位结束,正常工作
	#5000;
	$finish;
end	
	
always #10 sys_clk_i = ~sys_clk_i;	//50MHz时钟产生
	
endmodule

        为了便于查看,我们先选中 led[7:0]这个信号,然后在 Value 这一列中右键单击,如下图所示,弹出菜单中点击 Radix --> Binary,表示以 2 进制方式显示。

        led 信号以 2 进制显示,我们可以更直观的看到 8 位数据中有 1 位是 0,且不断的向左移动,到最高位后又回到最低位。

四、上板子

生成bit/mcs文件的流程就不啰嗦了,这里简单看下约束文件

set_property IOSTANDARD LVTTL [get_ports sys_clk_i]

set_property PACKAGE_PIN N11 [get_ports sys_clk_i]



set_property IOSTANDARD LVTTL [get_ports ext_rst_n]

set_property PACKAGE_PIN T2 [get_ports ext_rst_n]



set_property IOSTANDARD LVTTL [get_ports {led[0]}]

set_property PACKAGE_PIN M1 [get_ports {led[0]}]

set_property IOSTANDARD LVTTL [get_ports {led[1]}]

set_property PACKAGE_PIN N1 [get_ports {led[1]}]

set_property IOSTANDARD LVTTL [get_ports {led[2]}]

set_property PACKAGE_PIN P1 [get_ports {led[2]}]

set_property IOSTANDARD LVTTL [get_ports {led[3]}]

set_property PACKAGE_PIN R2 [get_ports {led[3]}]

set_property IOSTANDARD LVTTL [get_ports {led[4]}]

set_property PACKAGE_PIN T3 [get_ports {led[4]}]

set_property IOSTANDARD LVTTL [get_ports {led[5]}]

set_property PACKAGE_PIN R5 [get_ports {led[5]}]

set_property IOSTANDARD LVTTL [get_ports {led[6]}]

set_property PACKAGE_PIN R6 [get_ports {led[6]}]

set_property IOSTANDARD LVTTL [get_ports {led[7]}]

set_property PACKAGE_PIN T7 [get_ports {led[7]}]





set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]

set_property BITSTREAM.CONFIG.SPI_FALL_EDGE YES [current_design]

上板效果:

略。

后期图像采集和以太网通信等等项目再上板子。

后记

        其他常见的什么加法器、按键消抖、FIFP IP创建等等凑字数的东西,这个系列就不写了,专栏文章如同《FPGA接口篇》一样,实用为主。

        下个项目,开始虚拟项目教学,一般作为公司的入职培训

        咱们下期见~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/962856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大语言模型之七- Llama-2单GPU(T4 16G)微调(Fine-tune)

模型预训练colab脚本在github主页面。详见Finetuning_LLama_2_0_on_Colab_with_1_GPU.ipynb 在上一篇博客提到两种改进预训练模型性能的方法Retrieval-Augmented Generation (RAG) 或者 finetuning。本篇博客过一下模型微调。 微调&#xff1a;这是采用预训练的LLM并在较小的…

ESP8266+继电器+MQTT+VUE 实现远程开关灯

超详细教程 – ESP8266继电器MQTTVUE 实现远程开关灯 超详细教程 – ESP8266继电器MQTTVUE 实现远程开关灯 接线图 NC&#xff08;通常闭合&#xff09;与COM&#xff08;公共&#xff09;、NO&#xff08;通常开放&#xff09;与COM 是继电器引脚的不同配置&#xff0c;用于不…

JAVA实现SAP接口

JAVA实现SAP接口 环境spring-bootmaven 1.maven依赖 <dependency><groupId>com.github.virtualcry</groupId><artifactId>sapjco-spring-boot-starter</artifactId><version>3.1.4</version></dependency>2.配置文件 applic…

AI+认知行为疗法,治愈心灵的良药丨青源Workshop「AI+心理干预」观点集锦

当前&#xff0c;抑郁症、焦虑症等心理障碍成为社会关注的焦点&#xff0c;如何有效地缓解和治疗这些心理问题成为一个重要的研究方向。在这样的背景下&#xff0c;如何利用AI等先进技术手段来辅助心理疾病的治疗备受关注。例如&#xff0c;通过语音、脑部MRI辅助诊断器质性抑郁…

C++ 学习之 构造函数 和 析构函数

前言 总的来说&#xff0c;构造函数负责对象的初始化&#xff0c;而析构函数负责对象的清理和资源释放。它们是C面向对象编程中非常重要的概念&#xff0c;用于管理对象的生命周期&#xff0c;确保对象在创建和销毁时都能够正确地进行初始化和清理。 正文 看代码 class perso…

CRM如何提高销售效率?三个功能实现销售自动化

销售效率对企业的盈利能力有着至关重要的联系。提高销售效率&#xff0c;就是要提高销售人员的工作效率和销售转化率。那么&#xff0c;企业如何提高销售效率呢&#xff1f;CRM销售自动化功能可以帮助企业实现这一目标。 一、线索管理 线索是指有潜在购买意向的客户&#xff…

多目标应用:基于多目标人工蜂鸟算法(MOAHA)的微电网多目标优化调度MATLAB

一、微网系统运行优化模型 参考文献&#xff1a; [1]李兴莘,张靖,何宇,等.基于改进粒子群算法的微电网多目标优化调度[J].电力科学与工程, 2021, 37(3):7 二、多目标人工蜂鸟算法MOAHA 多目标人工蜂鸟算法&#xff08;multi-objective artificial hummingbird algorithm&…

微服务-gateway鉴权

文章目录 一、前言二、gateway鉴权1、依赖配置2、编写代码3、GlobalFilter详解3.1、GlobalFilter简介3.2、GlobalFilter自定义执行顺序3.2.1、实现Order接口实现自定义执行顺序 一、前言 网关是介于客户端和服务器端之间的中间层&#xff0c;所有的外部请求都会先经过 网关这一…

Solidity 小白教程:6. 引用类型, array, struct

Solidity 小白教程&#xff1a;6. 引用类型, array, struct 这一讲&#xff0c;我们将介绍solidity中的两个重要变量类型&#xff1a;数组&#xff08;array&#xff09;和结构体&#xff08;struct&#xff09;。 数组 array 数组&#xff08;Array&#xff09;是solidity常…

【原创】H3C交换机STP协议测试

网络拓扑图 交换机信息 交换机1信息&#xff1a; <H3C>dis stp -------[CIST Global Info][Mode MSTP]-------Bridge ID : 32768.06fd-8165-0100Bridge times : Hello 2s MaxAge 20s FwdDelay 15s MaxHops 20Root ID/ERPC : 0.08c0-212c-0ff0,…

[NSSCTF Round #15NSSCTF 2nd]——Web、Misc、Crypto方向 详细Writeup

前言 虽然师傅们已经尽力了&#xff0c;但是没拿到前十有点可惜&#xff0c;题很好吃&#xff0c;明年再来&#xff08;&#xff09; 关于wp&#xff1a; 因为我没有学过misc&#xff0c;但是比赛的时候还是运气好出了三道&#xff0c;所以wp就只把做题步骤给出&#xff0c;也…

vue从零开始学习

npm install慢解决方法&#xff1a;删掉nodel_modules。 5.0.3&#xff1a;表示安装指定的5.0.3版本 ~5.0.3&#xff1a;表示安装5.0X中最新的版本 ^5.0.3: 表示安装5.x.x中最新的版本。 yarn的优点&#xff1a; 1.速度快&#xff0c;可以并行安装 2.安装版本统一 项目搭建&…

【Linux】线程安全-生产者消费者模型

文章目录 生产者消费者模型123规则应用场景优点忙闲不均生产者和消费者解耦支持高并发 代码模拟 生产者消费者模型 123规则 1个线程安全的队列&#xff1a;只要保证先进先出特性的数据结构都可以称为队列 这个队列要保证互斥&#xff08;就是保证当前只有一个线程对队列进行操…

[HNCTF 2022] web 刷题记录

文章目录 [HNCTF 2022 Week1]easy_html[HNCTF 2022 Week1]easy_upload[HNCTF 2022 Week1]Interesting_http[HNCTF 2022 WEEK2]ez_SSTI[HNCTF 2022 WEEK2]ez_ssrf [HNCTF 2022 Week1]easy_html 打开题目提示cookie有线索 访问一下url 发现要求我们输入手机号&#xff0c;可是只…

工控上位机程序为什么只能用C语言?

工控上位机程序并不只能用C#开发&#xff0c;实际上在工业自动化领域中&#xff0c;常见的上位机开发语言包括但不限于以下几种&#xff1a;C#: C#是一种常用的编程语言&#xff0c;在工控领域中被广泛使用。它具有良好的面向对象特性和丰富的类库支持&#xff0c;可以实现高性…

Oracle数据库安装,在自己的windows电脑上面。

第一步&#xff1a;找到数据库和数据库图形用户界面安装包。 直接用迅雷下载&#xff1a;数据库分为服务器端和客户端。 服务器端 操作系统&#xff1a;Windows Server 2008 企业版64位 Oracle软件:Oracle 11g 64位 客户端 操作系统&#xff1a;Windows7 64位 图形界面工…

ClickHouse进阶(五):副本与分片-1-副本与分片

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客 &#x1f4cc;订阅…

【人工智能】—_神经网络、M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义、总代价

M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义 文章目录 M-P_神经元模型、激活函数、神经网络结构、学习网络参数、代价定义 M-P 神经元模型激活函数(Activation function)神经网络结构举例训练神经网络学习网络参数代价定义均方误差交叉熵&#xff08;Cros…

分布式 - 服务器Nginx:基础系列之Nginx简介 | 下载安装 | 启动和停止服务

文章目录 01. Nginx 简介02. 正向代理和反向代理03. Nginx 和 Apache、Tomcat 之间的不同点04. Nginx 的优点05. Nginx 常用的功能特性06. Nginx 下载07. Nginx 安装1. 源码安装前的环境准备2. Nginx 源码简单安装方式3. Nginx yum 安装方式4. Nginx 源码复杂安装方式 08. Ngin…

一阴一阳之谓道,乃自然规律也!

阴阳&#xff0c;在我们国家&#xff0c;是一切传统文化的基础。作为一个有着五千年文化的国家&#xff0c;作为世界上仅存的四大文明古国&#xff0c;峰民觉得&#xff0c;我们的传统文化&#xff0c;不能被当成迷信&#xff0c;慢慢的没落。 有时&#xff0c;不得不承认&…