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

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b