北邮22级信通院数电:Verilog-FPGA(12)第十二周实验(2)彩虹呼吸灯(bug已解决 更新至3.0)

news2025/6/8 18:27:31

北邮22信通一枚~

跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章

持续关注作者 迎接数电实验学习~

获取更多文章,请访问专栏:

北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客

目录

一.代码部分

1.1一些更新和讲解

1.2改正后的代码

 二.管脚分配

三.实验效果


一.代码部分

1.1一些更新和讲解

12.03更新:

pwm……很抽象 原先版本的代码运行之后应该是亮白灯()我班大佬帮改了一下之后目前如下这个样子,,,,

逻辑都一样就是写法不同,,,不知道为啥就好使了,,,

还有佬能给解释一下不,,,

然后:借鉴的时候别忘了把我前面的注释删下去()

12.03更新2:

感谢评论区各位uu!!

明白原先是怎么错的了 例化的时候函数参数调用顺序错了

原先那么写也是可以的,,例化的时候调一下函数参数顺序就可以了

//完了C++知识是忘光了()

//12.03更新:我班大佬帮改出来了::
//原先的这段不行 但不知道为啥不行(
//借鉴的时候别忘了把这段删下去(
/*
module pwm
(
	input [7:0] duty,
	input clk,
	output reg out
);
	reg [7:0] buffer;
	always @ (posedge clk)
		begin 
			buffer <= buffer + 1;
			if(buffer < duty)
				begin out <= 0;end
			else
				begin out <= 1;end
		end
endmodule
*/
/*
12.03更新2:
原pwm模块书写没有问题,例化的时候函数参数调用顺序出了问题
例化时应改为:pwm pwm_red(red,clk,red_buffer);
*/
// 模块定义: pwm
// 该模块实现一个简单的脉宽调制(PWM)发生器。
module pwm(out,duty,clk);
	input [7:0] duty;   // 输入,表示占空比,范围从0到255
	input clk;         // 输入,时钟信号用于同步
	output reg out;     // 输出信号,表示PWM波形
	reg [7:0] buffer;      // 8位寄存器,用于存储当前计数值

	always @ (posedge clk)
		begin 
			buffer <= buffer + 1;// 在每个时钟上升沿递增缓冲区值
			if (buffer < duty)// 将缓冲区值与占空比进行比较:如果缓冲区小于占空比,则将输出设置为0;否则,设置为1。
				begin
					out <= 0;
				end
			else
				begin
					out <= 1;
				end
		end
endmodule	

module rainbow_breathing_light
	(clk,red,green,blue);
	input clk;
	output red,green,blue;

	reg [15:0] wheel_position;
	reg [7:0] wheel_position_buffer;
	reg [7:0] red_buffer,green_buffer,blue_buffer;
	reg [31:0] divide_buffer;
	
	wire clk;
	reg divide_clk;
	
	pwm pwm_red(red,red_buffer,clk);
	pwm pwm_green(green,green_buffer,clk);
	pwm pwm_blue(blue,blue_buffer,clk);
	
	always @ (posedge clk)
		begin 
			if(divide_buffer < 50000)
				begin divide_buffer <= divide_buffer + 1;end
			else
				begin 
					divide_clk <= ~divide_clk;
					divide_buffer <= 0;
				end
		end
	always @ (posedge divide_clk)
		begin 
			if(wheel_position < 765)
				wheel_position <= wheel_position + 1;
			else
				wheel_position <= 0;
			if(wheel_position < 255)
				begin 
					red_buffer <= 255 - wheel_position;
					green_buffer <= 0;
					blue_buffer <= wheel_position;
				end
			else if(wheel_position < 510)
				begin 
					red_buffer <= 0;
					green_buffer <= wheel_position - 255;
					blue_buffer <= 255 - (wheel_position - 255);
				end
			else
				begin
					red_buffer <= wheel_position - 510;
					green_buffer <= 255 - (wheel_position - 510);
					blue_buffer <= 0;
				end
		end
endmodule

1.2改正后的代码

将模块定义(类比C++函数接口定义)中的形参顺序改动:

rainbow_breathing_light.v

// 模块定义: pwm
// 该模块实现一个简单的脉宽调制(PWM)发生器。
module pwm(out,duty,clk);
	input [7:0] duty;   // 输入,表示占空比,范围从0到255
	input clk;         // 输入,时钟信号用于同步
	output reg out;     // 输出信号,表示PWM波形
	reg [7:0] buffer;      // 8位寄存器,用于存储当前计数值

	always @ (posedge clk)
		begin 
			buffer <= buffer + 1;// 在每个时钟上升沿递增缓冲区值
			if (buffer < duty)// 将缓冲区值与占空比进行比较:如果缓冲区小于占空比,则将输出设置为0;否则,设置为1。
				begin
					out <= 0;
				end
			else
				begin
					out <= 1;
				end
		end
endmodule	

module rainbow_breathing_light
	(clk,red,green,blue);
	input clk;
	output red,green,blue;

	reg [15:0] wheel_position;
	reg [7:0] wheel_position_buffer;
	reg [7:0] red_buffer,green_buffer,blue_buffer;
	reg [31:0] divide_buffer;
	
	wire clk;
	reg divide_clk;
	
	pwm pwm_red(red,red_buffer,clk);
	pwm pwm_green(green,green_buffer,clk);
	pwm pwm_blue(blue,blue_buffer,clk);
	
	always @ (posedge clk)
		begin 
			if(divide_buffer < 50000)
				begin divide_buffer <= divide_buffer + 1;end
			else
				begin 
					divide_clk <= ~divide_clk;
					divide_buffer <= 0;
				end
		end
	always @ (posedge divide_clk)
		begin 
			if(wheel_position < 765)
				wheel_position <= wheel_position + 1;
			else
				wheel_position <= 0;
			if(wheel_position < 255)
				begin 
					red_buffer <= 255 - wheel_position;
					green_buffer <= 0;
					blue_buffer <= wheel_position;
				end
			else if(wheel_position < 510)
				begin 
					red_buffer <= 0;
					green_buffer <= wheel_position - 255;
					blue_buffer <= 255 - (wheel_position - 255);
				end
			else
				begin
					red_buffer <= wheel_position - 510;
					green_buffer <= 255 - (wheel_position - 510);
					blue_buffer <= 0;
				end
		end
endmodule

 二.管脚分配

三.实验效果

彩虹呼吸灯。 

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

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

相关文章

构建高质量重构数据集, 提升坏味道智能检测有效性的必经之路

基于AI技术实现架构坏味道检测与重构建议是当前业界比较流行的做法&#xff0c;但此做法往往存在一个通病&#xff0c;即训练数据集的质量问题&#xff0c;如何构建大规模、高质量的训练数据成为制约算法有效性的关键挑战。针对这项挑战&#xff0c;我们以Feature envy架构坏味…

鸿蒙Watch 页面跳转

新建页面 config.json 回自动注册 添加跳转 <button type"capsule" onclick"toStatusMonitor">状态检测</button>写跳转方法 import router from system.router;export default {data: {},onInit() {},onShow() {},toStatusMonitor() {rou…

SpringBoot 配置文件使用@ @取值

目录 一、背景 二、遇到的问题 三、解决办法 一、背景 &#xff08;1&#xff09;我在项目中引入了如下依赖&#xff0c;目的是开启SpringBoot为我们提供的监控(Actuator)功能。 <!-- 引入SpringBoot 监控功能 --> <dependency><groupId>org.springframew…

统信UOS_麒麟KYLINOS上安装特定版本python

原文链接&#xff1a;统信UOS/麒麟KYLINOS上安装python特定版本 hello&#xff0c;大家好啊&#xff01;Python作为一种广泛使用的编程语言&#xff0c;其版本多样性给开发者带来了既便利又挑战的情况。不同的项目可能需要不同版本的Python&#xff0c;而在统信UOS/麒麟KYLINOS…

基于SUMO和强化学习的交通优化

本文旨在解释强化学习方法如何通过 TraCl 与 SUMO 配合使用&#xff0c;以及这如何有利于城市交通管理和自动驾驶车辆的路径优化。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REV…

yolov8添加cbam注意力机制

(如果添加的是CBAM&#xff0c;已存在&#xff0c;忽略步骤 1 2 3) 步骤1.创建注意力机制-类 ultralytics/nn/modules/conv.py 步骤2.添加到conv.py文件的头文件里 ultralytics/nn/modules/conv.py 步骤3.添加到 init.py文件的头文件里 ultralytics/nn/modules/init.py…

云计算在数字营销中的作用是什么?

营销策略和云计算是一个为企业提供多种优势的系统。它使他们能够取得更大的成功&#xff0c;同时提高产量。这样做的原因是&#xff0c;可以从任何位置远程使用云集成工具和应用程序。基本上&#xff0c;该系统增强了存储设备和传播。同时&#xff0c;它减轻了公司 IT 网络的压…

c语言,自定义类型:联合体和枚举

联合体&#xff1a; 1.联合体类型的声明 当我们需要在程序中存储不同类型的数据&#xff0c;但又不想占用过多的内存空间时&#xff0c;联合体类型就可以派上用场。联合体类型的声明可以通过以下方式完成&#xff1a; 在C语言中&#xff0c;我们可以使用union关键字来声明联…

动态代理IP和静态代理IP有什么区别,适用场景是什么?

互联网行业的从业者经常会用到一种工具&#xff0c;那就是代理IP工具。动态代理IP和静态代理IP是两种常见的代理IP技术&#xff0c;它们在网络通信中起到了重要的作用&#xff0c;比如大数据行业的从业者会经常需要用到动态代理IP&#xff0c;跨境行业的从业者会经常用到静态代…

NowCoder | KY11 二叉树遍历

NowCoder | KY11 二叉树遍历 OJ链接 简单来说就是构建这个二叉树定义结构体通过递归方式根据输入的字符串构建二叉树。对于输入字符串中的每个字符&#xff0c;如果是 ‘#’ 表示空节点&#xff0c;否则创建一个新节点&#xff0c;并递归地构建左右子树。 #include <limit…

leetcode 255.用队列实现栈

255.用队列实现栈 不出意外大概率这几天都会更新 leetcode&#xff0c;如果没有做新的题&#xff0c;大概就会把 leetcode 之前写过的题整理&#xff08;单链表的题目居多一点&#xff09;出来写成博客 今天讲的题蛮容易出错的&#xff08;注意传参啊&#xff0c;最好把队列的…

两道题浅析PHP反序列化逃逸

两道题浅析PHP反序列化逃逸 一、介绍 反序列化逃逸的出现是因为php反序列化函数在进行反序列化操作时&#xff0c;并不会审核字符串中的内容&#xff0c;所以我们可以操纵属性值&#xff0c;使得反序列化提前结束。 反序列化逃逸题一般都是存在一个filter函数&#xff0c;这个…

Pytest接口自动化测试框架搭建模板

auto_api_test 开发环境: Pycharm 开发语言&版本: python3.7.8 测试框架: Pytest、测试报告: Allure 项目源码Git地址 项目目录结构 api – 模仿PO模式, 抽象出页面类, 页面类内包含页面所包含所有接口, 并封装成方法可供其他模块直接调用config – 配置文件目录data…

2023五岳杯量子计算挑战赛A题B题C题思路+模型+代码+论文

赛题思路&#xff1a;12月6日晚开赛后第一时间更新&#xff0c;获取见文末名片 “五岳杯”量子计算挑战赛&#xff0c;是国内专业的量子计算大赛&#xff0c;也是玻色量子首次联合移动云、南方科技大学共同发起的一场“企校联名”的国际竞赛&#xff0c;旨在深度融合“量子计算…

鸿蒙原生应用/元服务开发-新版本端云一体化模板体验反馈

一、前言 云端一体化模板是基于Serverless服务构建的一套模板&#xff0c;提供了应用生态常见场景需求的代码实现&#xff0c;开发者可将所需能力快速部署和集成到自己的应用中。 二、准备 体验最新的远端一体化模板&#xff0c;需要将云模板替换掉。为此&#xff0c;我们需要做…

解决使用Flipper无法连接到苹果模拟器,却能连接到安卓

而且这些都是显示正常 可是打开Virtual device一看ios一直在加载中 然后我打开日志看了下&#xff0c;然后各种找配置&#xff0c;项目里边配置改了又改&#xff0c;最后发现是缺少了个插件 //1、 检查 idb 和 idb_companion 是否已经安装 brew tap facebook/fb brew install …

一文彻底搞懂机器学习中的归一化与反归一化问题

1、什么是归一化和反归一化 话不多说&#xff0c;先上一段代码&#xff0c;自己体会&#xff1a; import numpy as np from sklearn.preprocessing import MinMaxScaler #导入库data np.random.randint(0,5,size5) #随机生成长度为5的数据 data np.array(data).reshape((len…

Java多线程详解(上)——2023/11/23

Process&#xff08;进程&#xff09;与Thread&#xff08;线程&#xff09; 说起进程&#xff0c;就不得不说下程序。程序是指令和数据的有序集合&#xff0c;其本身没有任何运行的含义&#xff0c;是一个静态的概念。而进程则是执行程序的一次执行过程&#xff0c;它是一个动…

完善根文件系统

一. 简介 本文完善之前创建的根文件系统。 上一篇文章通过 设置 bootargs参数&#xff0c;使开发板通过 nfs服务从 ubuntu系统加载根文件系统。文章地址如下&#xff1a; 根文件系统初步测试-CSDN博客 二. 完善根文件系统 上一篇文章通过 设置 bootargs参数&#xff0c;使…

3D Gaussian Splatting的使用

3D Gaussian Splatting的使用 1 下载与安装2 准备场景样本2.1 准备场景照片2.1.1 采集图片2.1.2 生成相机位姿 3 训练4 展示 1 下载与安装 今年SIGGRAPH最佳论文&#xff0c;学习了一下&#xff0c;果然厉害&#xff0c;具体论文原理就不说了&#xff0c;一搜都有&#xff0c;…