基于Verilog HDL的I2C总线功能的实现
,把sdao/sclo和sdai/scli作为两组信号。当需要向外部SDA信号线上输出信息时,sdao连到SDA信号线上;当需要从外部SDA信号线上读入信息时,置sdao成高阻态,sdai连到SDA信号线上。en_sdao信号作为这一过程的切换信号。在程序中定义了一些状态信号:NO_ACK、send_byte_over。其中,NO_ACK信号判断从器件是否对发送的信号给予了应答。send_byte_over信号判断字节是否传输完毕。这些信号可以传递给上一层设计模块,以控制程序的流程。为了使I2C总线能够有效地通讯,必须考虑信号的建立和保持时间,所以程序中设置了相应的延时部分。另外,在以clk为触发信号的过程模块中,定义send_byte_clk信号为时钟信号的两倍频信号,并加入字节发送模块使能信号start_send_byte控制模块工作,由于篇幅所限,略去该过程模块。
字节发送模块的仿真测试结果如图1所示。
根据I2C总线标准,利用Verilog HDL很容易实现字节接收模块?开始条件模块?停止条件模块这三个模块。图2是数据发送过程的仿真测试结果。从器件的7位地址为101011,向从器件发送的数据为00010111。aensclo和aensdao分别是sclo/scli和sdao/sdai的切换信号。
图3是数据接收过程的仿真测试结果。从器件的7位地址为0011001,从器件发送的数据为11111111。ensclo和ensdao分别是sclo/scli和sdao/sdai的切换信号。
将图2和图3所模拟的I2C总线时序与I2C总线协议中相关要求进行比较,满足I2C总线的时序要求。
对各个模块进行多层次处理,形成I2C总线模块。
以该I2C总线模块为基础,编写FPGA与AT24C01A(ATMEL公司生产的E2PROM)的通讯程序。然后把相关程序下载到EPF10K10LC84-3中,与AT24C01A进行实际通讯实验,效果良好。
- 基于SystemC 的系统验证研究和应用(08-10)
- SoC:IP是新的抽象(10-24)
- 从传统电路检查到先进可靠性验证的最佳实践(07-03)
- 基于Verilog语言的等精度频率计设计(08-14)
- Verilog串口通讯设计(06-06)
- Verilog HDL 设计模拟(06-06)