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

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API