基于ZYNQ 7z010开发板 oled点亮的实现

dc拉高的时候就是发送128字节数据的时候 发送指令dc拉低
模式是00
sck先置低再置高
复位是与开发板上的按键一样都是低有效
25位字节指令 加 3字节的 页地址加起始结束 b0,00,10,
在这里插入图片描述

`timescale 1ns / 1ps
module top0(input      wire    clk  ,input      wire    rst_n,// output     wire    cs   ,output     wire    rst  ,output     wire    sck  ,output     wire    dc   ,output     wire    mosi );
wire   [7:0]  data ;
wire          valid;
wire          busy ;
wire          ena  ;
wire   [7:0]  douta;wire   [7:0]  dout ;
wire          vlid ;
// wire          cs   ;
wire   [9:0]  addra;reg    [9:0] cunt  ;
reg    [9:0] cunt_b;
reg    [6:0] cunt_r;
reg    [7:0] cunt_t;assign rst=rst_n;
assign valid=(busy==0&&cunt==10)?1'b1:1'b0;
assign ena  =1'b1;
// assign cs   =1'b1;
assign dc =(cunt_b<28)?1'b0:1'b1;assign addra=cunt_b+1;
assign data=(cunt_b==25)?cunt_t:douta;
always @(posedge clk ) beginif(busy==0)cunt<=cunt+1;elsecunt<=0;
end
always @(posedge clk  or negedge rst_n) beginif(!rst_n)cunt_b<=1'b0;else beginif(cunt_b==157)  ///***必须多记一位cunt_b<=25;else if(cunt==1)cunt_b<=cunt_b+1;elsecunt_b<=cunt_b;end
end
//页地址更换
always @(posedge clk ) beginif(!rst_n)cunt_r<=0;else if(cunt_r==3&&cunt_b==157)///***cunt_r<=0;else if(cunt_b==157)///***cunt_r<=cunt_r+1;elsecunt_r<=cunt_r;
end
//
always @(posedge clk ) beginif(!rst_n)cunt_t<=8'hb0;else case (cunt_r)0:cunt_t<=8'hb0;1:cunt_t<=8'hb1;2:cunt_t<=8'hb2;3:cunt_t<=8'hb3;default: ;endcase
endspi_rom#(.  SIZE (8)      
)u_sp(/*input      wire                */. clk  (clk  ),/*input      wire                */. rst_n(rst_n),/*input      wire      [SIZE-1:0]*/. data (data ),/*input      wire                */. valid(valid),/*output     reg                 */. sck  (sck  ),. busy (busy ),/*output     reg                 */. mosi (mosi ));
blk_mem_gen_0 your_instance_name (.clka(clk),    // input wire clka.addra(addra),  // input wire [9 : 0] addra.douta(douta)  // output wire [7 : 0] douta
);
spi_rx#(. SIZE  (8) 
)u_rx(/* input                       */ .clk  (clk  ) ,/* input                       */ .rst_n(rst_n) ,/* input                       */ .miso (mosi ) ,/* input                       */ .sck  (sck  ) ,/* input                       */ .cs   (cs   ) ,/* output     reg    [SIZE-1:0]*/ .data (dout ) ,/* output                      */ .vlid (vlid ) );
endmodule
`timescale 1ns / 1psmodule spi_rom#(parameter SIZE =  8     
)(input      wire                  clk  ,input      wire                  rst_n,input      wire      [SIZE-1:0]  data ,input      wire                  valid,output     reg                   sck  ,output     wire                  busy ,output     reg                   mosi );
parameter CUNT_MAX = 100   ;
parameter BUSY     = 2'b10 ;
parameter IDEL     = 2'b01 ;reg             fin      ;
reg  [1:0]      state    ;
reg  [10:0]     cunt     ;
reg  [10:0]     cunt_b   ;
reg  [SIZE-1:0] data_r   ; 
assign busy=(state==BUSY)?1'b1:1'b0;
//状态
always @(posedge clk or negedge rst_n) beginif(!rst_n)state<=IDEL;else case (state)IDEL:beginif(valid==1)state<=BUSY;elsestate<=state;endBUSY:beginif(fin==1)state<=IDEL;elsestate<=state;enddefault: ;endcase
end
//计数器
always @(posedge clk) beginif(state==IDEL)cunt<=11'd0;else beginif(cunt==CUNT_MAX-1)cunt<=11'd0;elsecunt<=cunt+1'b1;end
end
//cunt_b
always @(posedge clk ) beginif(state==IDEL)cunt_b<=11'd0;else beginif(cunt==CUNT_MAX-1)cunt_b<=cunt_b+1;elsecunt_b<=cunt_b;end    
end
//fin结束信号
always @(posedge clk ) beginif((cunt_b==SIZE-1)&&(cunt==CUNT_MAX-1))fin<=1'b1;elsefin<=1'b0;
end
//数据的缓存
always @(posedge clk ) beginif(state==IDEL&&valid==1)data_r<=data;else if(state==BUSY&&cunt==CUNT_MAX-2)data_r<=(data_r<<1);elsedata_r<=data_r;
end
//sck的产生
always @(posedge clk ) beginif(state==IDEL)sck<=1'b0;else beginif(cunt_b==SIZE)  //防止sck出现末尾的毛刺sck<=1'b0;else if(cunt<50)sck<=1'b0;elsesck<=1'b1;end
end
//tx的输出
always @(posedge clk ) beginif(state==IDEL)mosi<=1'b0;else beginif(cunt==0)mosi<=data_r[SIZE-1];elsemosi<=mosi;end
end
endmodule

rx方便仿真

`timescale 1ns / 1psmodule spi_rx#(parameter SIZE  =  8 
)(input                         clk   ,input                         rst_n ,input                         miso  ,input                         sck   ,input                         cs    ,output     reg    [SIZE-1:0]  data  ,output                        vlid  );
reg  [8:0]   cunt_b;
reg  [1:0]   rx_t  ;assign vlid=(cunt_b==SIZE)?1'b1:1'b0;always @(posedge clk ) beginif(!rst_n)rx_t<=2'b00;else rx_t<={rx_t[0],sck};
end
//对下降沿计数
always @(posedge clk ) beginif(!rst_n)cunt_b<=0;else if(cs==0)begin if(vlid==1)cunt_b<=0;else if(rx_t==2'b10)cunt_b<=cunt_b+1'b1;elsecunt_b<=cunt_b;endelsecunt_b<=0;
end
//data
always @(posedge clk ) beginif(cs==0&&rx_t==2'b10)data[0]<=miso;else if(cs==0&&rx_t==2'b01)data<=(data<<1);elsedata<=data;
endendmodule

coe文件
一共4个页地址8’hb0 - 8’hhb3

memory_initialization_radix=16;  // 指定数据的基数,10 表示十进制
memory_initialization_vector=00,ae,20,10,00,b0,81,ff,a1,a6,a8,1f,c8,d3,00,d5,80,d9,1f,da,02,db,20,8d,14,af, 
b0,00,10,00,00,00,00,00,00,00,00,00,00,46,49,49,49,31,00,00,00,00,00,7F,04,08,10,7F,00,00,00,00,00,63,14,08,14,63,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00, 00, 00;

在这里插入图片描述
在这里插入图片描述
上板效果
在这里插入图片描述

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

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

相关文章

被裁20240927 --- YOLO 算法

背景 在云端部署ViSP&#xff0c;ViSP实现视觉伺服、yolo实现视觉跟踪。 开源的2d视觉跟踪算法有哪些&#xff1f; 开源的2D视觉跟踪算法有很多呢&#xff0c;这里给你推荐一些比较知名和常用的吧。 ByteTrackV2&#xff1a;这是一个通用2D跟踪算法&#xff0c;提出了分层的…

360极速浏览器不支持看PDF

360安全浏览器采用的是基于IE内核和Chrome内核的双核浏览器。360极速浏览器是源自Chromium开源项目的浏览器&#xff0c;不但完美融合了IE内核引擎&#xff0c;而且实现了双核引擎的无缝切换。因此在速度上&#xff0c;360极速浏览器的极速体验感更佳。 展示自己的时候要在有优…

基于SpringBoot和PostGIS的全球城市信息管理实践

目录 前言 一、业务需求介绍 1、功能思维导图 二、业务系统后台实现 1、Model层实现 2、业务层的实现 3、控制层的实现 三、前端管理业务的实现 1、全球城市列表的实现 2、详情页面实现 3、实际城市定位 四、总结 前言 在全球化和信息化时代背景下&#xff0c;城市作…

k8s的ConfigMap是什么, 为什么设计ConfigMap, 如何使用ConfigMap

ConfigMap简介, 为什么设计ConfigMap 在k8s中, ConfigMap是一种API对象, 用于将非机密的配置数据存储到键值对中。 Configmap作用是, 把配置数据从应用代码中分隔开, 让镜像和配置文件解耦&#xff0c;实现了镜像的可移植性。 举例&#xff1a; 我有一个Squid(正向代理)的Pod…

《饕餮记》精彩片段(一)

也是无意中看到鲛人脍单元集片段&#xff0c;才去看了这个剧 整体略架空和部分逻辑不是很连贯和完美 精彩点不在于整体和走向和故事线 也不在于大牌明星撑场&#xff0c;因为全场只有安悦溪一个脸熟明星撑场子 而在于每个单元间离奇小故事 和华胥引差不多&#xff0c;属于逻…

如何在 ASP.NET Core 3.1 应用程序中使用 Log4Net

介绍 日志记录是应用程序的核心。它对于调试和故障排除以及应用程序的流畅性非常重要。 借助日志记录&#xff0c;我们可以对本地系统进行端到端的可视性&#xff0c;而对于基于云的系统&#xff0c;我们只能提供一小部分可视性。您可以将日志写入磁盘或数据库中的文件&#xf…

计算机毕业设计PySpark+PyFlink+Hive地震预测系统 地震数据分析可视化 地震爬虫 大数据毕业设计 Hadoop 机器学习 深度学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

基于注意力的几何感知的深度学习对接模型 GAABind - 评测

GAABind 作者是苏州大学的生物基础与医学院, 期刊是 Briefings in Bioinformatics, 2024, 25(1), 1–14。GAABind 是一个基于注意力的几何感知蛋白-小分子结合模式与亲和力预测模型,可以捕捉小分子和蛋白的几何、拓扑结构特征以及相互作用。使用 PDBBind2020 和 CASF2016 作…

前缀和与差分算法详解

定义 前缀和是一种数据预处理技术&#xff0c;它指的是从数组的第一个元素开始&#xff0c;到当前元素为止的所有元素的和。这种技术可以快速计算任意区间内元素的和&#xff0c;而不需要每次都从头开始累加。 差分则是前缀和的逆运算&#xff0c;它主要用于处理对数组某个区…

远程桌面防护的几种方式及优缺点分析

远程桌面登录是管理服务器最主要的方式&#xff0c;于是很多不法分子打起了远程桌面的歪心思。他们采用暴力破解或撞库的方式破解系统密码&#xff0c;悄悄潜入服务器而管理员不自知。 同时远程桌面服务中的远程代码执行漏洞也严重威胁着服务器的安全&#xff0c;攻击者可以利…

Python高性能web框架-FastApi教程:(2)路径操作装饰器方法

路径操作装饰器方法 1. fastapi支持的各种请求方式 app.get() app.post() app.put() app.patch() app.delete() app.options() app.head() app.trace()2. 定义不同请求方式的路由 # 定义GET请求的路由 app.get(/get) def get_test():return {method: get方法} app.get(/get)…

Mysql体系架构剖析——岁月云实战笔记

1 体系架构 理论内容阅读了mysql体系架构剖析&#xff0c;其他的根据岁月云的实战进行记录。 1.1 连接层 mysql最上层为连接服务&#xff0c;引入线程池&#xff0c;允许多台客户端连接&#xff0c;主要工作&#xff1a;连接处理、授权认证、安全防护、管理连接等。 连接处理&a…

【Pandas】pandas infer_freq

Pandas2.2 General Top-level dealing with datetimelike data 方法描述to_datetime(arg[, errors, dayfirst, …])用于将对象数据&#xff08;如字符串&#xff09;转换为日期时间类型to_timedelta(arg[, unit, errors])用于将对象数据&#xff08;如字符串&#xff09;转换…

FPGA 16 ,Verilog中的位宽:深入理解与应用

目录 前言 一. 位宽的基本概念 二. 位宽的定义方法 1. 使用向量变量定义位宽 ① 向量类型及位宽指定 ② 位宽范围及位索引含义 ③ 存储数据与字节数据 2. 使用常量参数定义位宽 3. 使用宏定义位宽 4. 使用[:][-:]操作符定义位宽 1. 详细解释 : 操作符 -: 操作符 …

在数字孪生开发领域threejs现在的最新版本已经更新到多少了?

在数字孪生开发领域three.js现在的最新版本已经更新到多少了&#xff1f; 在数字孪生开发领域&#xff0c;three.js作为一款强大的JavaScript 3D库&#xff0c;广泛应用于Web3D可视化、智慧城市、智慧园区、数字孪生等多个领域。随着技术的不断进步和需求的日益增长&#xff0…

给新ubuntu电脑配置远程控制环境和c++版本的opencv环境

目录 改用户密码安装ssh sever安装net-tools配置vscode安装vim配置C opencv1. 安装g, cmake, make2.安装opencv依赖库3.下载opencv源文件&#xff08;1&#xff09;方法一&#xff1a;官网下载&#xff08;2&#xff09;方法二&#xff1a;GitHub下载方式&#xff1a; 4. Cmake…

数字证书管理工具 openssl keytool

OPENSSL 命令 openssl command [ command_opts ] [ command_args ] 常用command: version 用于查看版本信息 enc 用于加解密 ciphers 列出加密套件 genrsa 用于生成私钥 -des|-des3|-idea&#xff1a;用来加密私钥文件的三种对称加密算法。 rsa …

静态路由、RIP、OSPF、BGP的区别

静态路由&#xff1a;是管理员手动将路由写入到路由器中&#xff0c;配置简单开销小&#xff0c;但不能适应网络变化&#xff0c;只用于小型的网络 RIP&#xff0c;路由信息协议&#xff0c;属于距离矢量路由协议的一种&#xff0c;根据跳数来判断最优路由&#xff0c;如果跳数…

Yet another PFC(新样式 PFC)

PFC 在依靠简单廉价兼容性而成功的以太网上弄巧成拙&#xff0c;但有 101 种优化它的方法&#xff0c;但代价是交换机越来越复杂。以太网的基因是简单廉价&#xff0c;这体现在以太帧的结构上&#xff0c;以太帧结构决定了交换机的能力上限&#xff0c;这是核心。核心认知不够&…

【鸿睿创智开发板试用】移植OpenCV 4到OpenHarmony 4.1

目录 目录 引言 编译系统镜像 (1) 下载代码后解压SDK (2) 下载docker镜像   (3) 编译OH 编译OpenCV 下载OpenCV源代码 构建编译配置文件 执行编译命令 安装库和头文件 测试 结语 引言 最近有个需求是在基于RK3568的OpenHarmony 4.1系统中使用OpenCV&#xff0c…