顶层文件程序
顶层文件程序`timescale 1 ns/100 ps
module iic(data, addr, rst_l, clock, cs_l, ack_l, rd_wr_l, scl_pin, sda_pin);
//外围处理器接口
inout data;//处理器的数据总线
input addr;//处理器的地址总线
input rst_l;//异步复位信号
input clock;//外部系统时钟
input cs_l;//使能信号
input rd_wr_l;//命令信号,读/写
output ack_l;//反馈给处理器的响应信号
//iic接口
output scl_pin;//iic时钟信号
inout sda_pin;//iic数据信号
//内连线
//处理器接口线型
wire data;
wire addr;
wire rst_l;
wire clock;
wire cs_l;
wire rd_wr_l;
wire ack_l;
//iic接口线型
wire scl_pin;
wire sda_pin;
//寄存器输出线型
wire wrd_add;//iic地址
wire iic_go;//iic开始信号
//读寄存器输出线型
wire data_o;//输出给处理器的数据
//时钟模块输出线型
wire scl_tick;
//状态机线型
wire scl_cnt_en;//st_scl计数使能信号
wire iic_rdy;//读准备好信号
wire iic_act;//iic周期激活信号
wire iic_rdata;//iic读的数据
wire ack_err;//没有响应
wire sda;//iic data
wire scl;//iic clock
//模块例化
//接收模块寄存器
iic_wreg U1(.data(data),
.addr(addr),
.rst_l(rst_l),
.clock(clock),
.cs_l(cs_l),
.rd_wr_l(rd_wr_l),
.scl_cnt_en(scl_cnt_en),
.wrd_add(wrd_add),
.iic_go(iic_go),
.ack_l(ack_l));
//发送模块寄存器
iic_rreg U2(.wrd_add(wrd_add),
.iic_rdy(iic_rdy),
.iic_act(iic_act),
.ack_err(ack_err),
.iic_rdata(iic_rdata),
.addr(addr),
.data_o(data_o));
//iic时钟模块
iic_clk U3(.rst_l(rst_l),
.clock(clock),
.scl_cnt_en(scl_cnt_en),
.scl_tick(scl_tick));
//iic时序控制模块
iic_st U4(.rst_l(rst_l),
.clock(clock),
.scl_tick(scl_tick),
.iic_go(iic_go),
.wrd_add(wrd_add),
.sda_pin(sda_pin),
.sda(sda),
.scl(scl),
.scl_cnt_en(scl_cnt_en),
.iic_rdy(iic_rdy),
.iic_act(iic_act),
.iic_rdata(iic_rdata),
.ack_err(ack_err));
//iic输出缓冲模块
iic_tbuf U5(.data_o(data_o),
.data(data),
.cs_l(cs_l),
.rd_wr_l(rd_wr_l),
.sda(sda),
.scl(scl),
.scl_pin(scl_pin),
.sda_pin(sda_pin));
endmodule
页:
[1]