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 / 1ps

module 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 begin
    reset_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;
end
    
IIC_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核进行在线逻辑分析:

相关推荐
ZPC82107 天前
docker 镜像备份
人工智能·算法·fpga开发·机器人
ZPC82107 天前
docker 使用GUI ROS2
人工智能·算法·fpga开发·机器人
tiantianuser7 天前
RDMA设计53:构建RoCE v2 高速数据传输系统板级测试平台2
fpga开发·rdma·高速传输·cmac·roce v2
博览鸿蒙7 天前
FPGA 和 IC,哪个前景更好?怎么选?
fpga开发
FPGA_小田老师7 天前
xilinx原语:ISERDESE2原语详解(串并转换器)
fpga开发·iserdese2·原语·串并转换
tiantianuser7 天前
RDMA设计50: 如何验证网络嗅探功能?
网络·fpga开发·rdma·高速传输·cmac·roce v2
Lzy金壳bing7 天前
基于Vivado平台对Xilinx-7K325t FPGA芯片进行程序在线更新升级
fpga开发·vivado·xilinx
unicrom_深圳市由你创科技7 天前
医疗设备专用图像处理板卡定制
图像处理·人工智能·fpga开发
tiantianuser7 天前
RDMA设计52:构建RoCE v2 高速数据传输系统板级测试平台
fpga开发·rdma·高速传输·cmac·roce v2
luoganttcc8 天前
Taalas 将人工智能模型蚀刻到晶体管上,以提升推理能力
人工智能·fpga开发