57.基于IIC协议的EEPROM驱动控制(4)

2024-08-30 05:04
文章标签 协议 驱动 控制 iic eeprom 57

本文主要是介绍57.基于IIC协议的EEPROM驱动控制(4),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(1)顶层代码:

module IIC_EEPROM(input   wire                clk         ,input   wire                reset_n     ,input   wire                key_r       ,input   wire                key_w       ,output  wire                IIC_SCL     ,inout   wire                IIC_SDA     );wire                    key_rd      ;
wire                    key_wr      ;
wire    [7:0]           fifo_rd_data;
wire                    IIC_start   ;
wire                    wr_en       ;
wire                    rd_en       ;
wire    [15:0]          byte_addr   ;
wire    [7:0]           wr_data     ;
wire                    IIC_clk     ;
wire                    IIC_end     ;
wire    [7:0]           rd_data     ;key_filter  key_w_filter(.clk                (   clk         ),.reset_n            (   reset_n     ),.key_in             (   key_w       ),.key_p_flag         (   key_wr      ),.key_r_flag         (               ),.key_state          (               )
);key_filter  key_r_filter(.clk                (   clk         ),.reset_n            (   reset_n     ),.key_in             (   key_r       ),.key_p_flag         (   key_rd      ),.key_r_flag         (               ),.key_state          (               )
);IIC_rw_data IIC_rw_data_inst(.clk                (clk            ),.reset_n            (reset_n        ),.key_rd             (key_rd         ),.key_wr             (key_wr         ),.IIC_clk            (IIC_clk        ),.IIC_end            (IIC_end        ),.rd_data            (rd_data        ),.fifo_rd_data       (fifo_rd_data   ),.IIC_start          (IIC_start      ),.wr_en              (wr_en          ),.rd_en              (rd_en          ),.byte_addr          (byte_addr      ),.wr_data            (wr_data        ));IIC_ctrl    IIC_ctrl_inst(.clk                (clk            ),.reset_n            (reset_n        ),.IIC_start          (IIC_start      ),.wr_en              (wr_en          ),.rd_en              (rd_en          ),.byte_addr          (byte_addr      ),.wr_data            (wr_data        ),.addr_num           (1'd1           ),.IIC_SCL            (IIC_SCL        ),.IIC_SDA            (IIC_SDA        ),.IIC_clk            (IIC_clk        ),.IIC_end            (IIC_end        ),.rd_data            (rd_data        ));endmodule

(2)顶层RTL视图:

(3)仿真代码:

`timescale 1ns / 1psmodule IIC_EEPROM_tb;reg         clk     ;
reg         reset_n ;
reg         key_r   ;
reg         key_w   ;wire        IIC_SCL ;
wire        IIC_SDA ;  initial clk = 1'd1;
always #10 clk = ~ clk;defparam IIC_EEPROM_inst.key_w_filter.CNT_MAX = 5;
defparam IIC_EEPROM_inst.key_r_filter.CNT_MAX = 5;
defparam IIC_EEPROM_inst.IIC_rw_data_inst.CNT_WAIT_MAX = 10_000;initial beginreset_n <= 1'd0;key_r   <= 1'd1;key_w   <= 1'd1;#21;reset_n <= 1'd1;#1000;key_r   <= 1'd1;key_w   <= 1'd0;#400;key_r   <= 1'd1;key_w   <= 1'd1;#200_000_000;key_r   <= 1'd0;key_w   <= 1'd1;#400;key_r   <= 1'd1;key_w   <= 1'd1;#400_000_000;$stop;
endIIC_EEPROM  IIC_EEPROM_inst(.clk            ( clk       ),.reset_n        ( reset_n   ),.key_r          ( key_r     ),.key_w          ( key_w     ),.IIC_SCL        (IIC_SCL    ),.IIC_SDA        (IIC_SDA    ));M24LC64     M24LC64_inst(.A0              (1'd1       ), .A1              (1'd1       ), .A2              (1'd0       ), .WP              (1'd0       ), .SDA             (IIC_SDA    ),    .SCL             (IIC_SCL    ),.RESET           (~reset_n   )
);endmodule

(4)仿真波形(官网提供的仿真模型不太理想,没有读取理想的数据):

(5)顶层加入ILA ip核进行在线逻辑分析:

这篇关于57.基于IIC协议的EEPROM驱动控制(4)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119870

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys