文章目录一.原理二.设计三.代码注本文续前文https://blog.csdn.net/weixin_67803687/article/details/132305311?spm1001.2014.3001.5502后一.原理基本原理和静态显示一致这里加入帧变换的概念如图所示第一帧为红色框显示第一个8 * 8的图像然后向右平移显示绿色框内的第二个8 * 8的图像…到最后显示紫色框内最后一个8 * 8的图像。可以设置帧与帧之间延时500ms在视觉上就得到了滚动的状态二.设计1.在静态基础上加入帧计数器2.加入一个状态在此状态计数500ms跳转到显示下一帧3.rom核中地址值的考量横坐标帧数取余32纵坐标乘324.rom核的数据深度需要调整不然会溢出影响最后显示三.代码ws2812_drive.v不做修改只修改ws2812_ctrl.v/**************************************功能介绍*********************************** Date : 2023年8月14日14:24:59 Author : Alegg xy. Version : 1.0 Description: 动态显示 *********************************************************************************/ //---------模块及端口声名------------------------------------------------------ module ws2812_ctrl3( input clk , input rst_n , input ready , output [23:0] pix_data, output pix_data_vld ); //---------参数定义--------------------------------------------------------- localparam IDLE d0, DATA d1, DONE d2, WAIT d3; parameter MAX_500ms 25d25_000_000; parameter MAX_shifting 6d32; //---------内部信号定义----------------------------------------------------- reg [2:0] cstate ;//现态 reg [2:0] nstate ;//次态 reg [5:0] cnt_x ; wire add_cnt_x ; wire end_cnt_x ; reg [5:0] cnt_y ; wire add_cnt_y ; wire end_cnt_y ; reg [24:0] cnt_500ms ; wire add_cnt_500ms ; wire end_cnt_500ms ; reg [5:0] cnt_shift ; wire add_cnt_shift ; wire end_cnt_shift ; //计偏移量 always (posedge clk or negedge rst_n)begin if(!rst_n)begin cnt_shift d0; end else if(add_cnt_shift)begin if(end_cnt_shift)begin cnt_shift d0; end else begin cnt_shift cnt_shift 1d1; end end end assign add_cnt_shift cstate DONE; assign end_cnt_shift add_cnt_shift cnt_shift MAX_shifting - 1d1; //500ms计数器 always (posedge clk or negedge rst_n)begin if(!rst_n)begin cnt_500ms d0; end else if(add_cnt_500ms)begin if(end_cnt_500ms)begin cnt_500ms d0; end else begin cnt_500ms cnt_500ms 1d1; end end end assign add_cnt_500ms cstate WAIT; assign end_cnt_500ms add_cnt_500ms cnt_500ms MAX_500ms - 1d1; //rom wire rom_rd_data_vld; wire rom_rd_req; reg rom_rd_req_r1;//打一拍 reg rom_rd_req_r2;//打两拍 //横坐标计数器 always (posedge clk or negedge rst_n)begin if(!rst_n)begin cnt_x d0; end else if(add_cnt_x)begin if(end_cnt_x)begin cnt_x d0; end else begin cnt_x cnt_x 1d1; end end end assign add_cnt_x cstate DATA; assign end_cnt_x add_cnt_x cnt_x 7; //纵坐标计数器 always (posedge clk or negedge rst_n)begin if(!rst_n)begin cnt_y d0; end else if(add_cnt_y)begin if(end_cnt_y)begin cnt_y d0; end else begin cnt_y cnt_y 1d1; end end end assign add_cnt_y end_cnt_x; assign end_cnt_y add_cnt_y cnt_y 7; //第一段时序逻辑描述状态转移 always (posedge clk or negedge rst_n)begin if(!rst_n)begin cstate IDLE; end else begin cstate nstate; end end //第二段组合逻辑描述状态转移规律和状态转移条件 always (*) begin case(cstate) IDLE:begin if (ready) begin nstate DATA; end else begin nstate cstate; end end DATA:begin if (end_cnt_y) begin nstate DONE; end else begin nstate cstate; end end DONE:begin if (1) begin nstate WAIT; end else begin nstate cstate; end end WAIT :begin if (end_cnt_500ms) begin nstate IDLE; end else begin nstate cstate; end end default : nstate IDLE; endcase end //rom例化 rom1 rom1_inst ( .aclr ( ~rst_n ), .address ( (cnt_x cnt_shift) % 32 cnt_y * 32), .clock ( clk ), .rden ( rom_rd_req ), .q ( pix_data ) ); //打两拍 always (posedge clk or negedge rst_n) begin if (!rst_n) begin rom_rd_req_r1 d0; rom_rd_req_r2 d0; end else begin rom_rd_req_r1 rom_rd_req; rom_rd_req_r2 rom_rd_req_r1; end end assign rom_rd_req cstate DATA; assign rom_rd_data_vld rom_rd_req_r2; assign pix_data_vld rom_rd_data_vld; endmodule本项目完整代码详见https://download.csdn.net/download/weixin_67803687/88219021?spm1001.2014.3001.5501
企业数字化 ERP 产品动态
相关推荐
MIPI协议介绍 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/10/31 23:55:00
serdes基本概念扫盲 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/10/31 23:54:00
临时文件自动化管理:原理、实践与优化策略 1. 临时文件管理的痛点与自动化需求临时文件就像城市中的流动摊贩,虽然为系统运行提供了便利,但缺乏管理就会造成混乱。我在运维工作中见过太多因为临时文件堆积导致的磁盘爆满案例——某次生产环境报警,追查发现是某个服务三年未清理的日志缓… · 2026/11/2 14:26:37
hindsight复盘工具:把后见之明变成先见之明 "项目上线前我在评审会上拍着胸脯说这个排期没问题,上线后两周运维凌晨两点打电话说日志在疯狂刷异常。那一刻我脑子里冒出来的念头很奇怪:不是赶紧修复,而是想穿越回去把一个月前的自己揪出来问一句,你当时凭什么这么自信&a… · 2026/11/2 14:26:37
CactiEZ 10.1 多厂商交换机监控模板导入与出图排障 简介:面向使用 CactiEZ 10.1 搭建网络监控平台的运维人员,这份模板合集聚焦华为、中兴、H3C 等交换机及常见网络设备的主机监控配置,可减少逐项编写数据查询与图形模板的重复工作,适合机房、校园网和企业内网中需要快速上线监控项… · 2026/11/2 14:26:37
螺旋矩阵算法解析与边界处理技巧 1. 螺旋矩阵问题解析螺旋矩阵是算法面试中的经典题型,要求按照顺时针方向从外向内螺旋遍历二维矩阵的所有元素。这个问题看似简单,但边界条件的处理往往让初学者头疼。我第一次遇到这个问题时,花了整整两小时调试各种越界情况。这个问题的核心… · 2026/11/2 14:26:36
电商自动化监控系统架构设计与实践 1. 电商自动化监控处理系统概述电商自动化监控处理系统是当前电商行业数字化转型的核心基础设施之一。这套系统通过自动化技术实现对电商平台全链路业务数据的实时监控、异常预警和智能处理,有效解决了传统人工监控模式下响应滞后、漏检率高、处理效率低等行业痛点。… · 2026/11/2 14:25:36
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18
雷达信号调制技术解析:从LFM到伪线性调频原理与应用 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 1:01:15
基于MAX14431与TM4C123的工业SPI隔离电路设计全攻略 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 1:01:15
PLFM_RADAR:相位线性调频雷达信号处理框架 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 1:01:15
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18