请选择 进入手机版 | 继续访问电脑版

集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1259|回复: 2

时序控制模块

[复制链接]
小舍YZ 发表于 2017-9-21 16:33:14 | 显示全部楼层 |阅读模式
时序控制模块

时序控制模块是接口的核心部分,它控制着整个系统的工作过程、数据传输,及通过控制SCL和SDA信号线来触发开始和停止信号,该模块包含一个状态机,用于控制系统工作的时序,同时当主机要把数据写入IIC总线上的器件时,因为数据寄存器的位宽是8bit,而IIC总线上的数据位宽是1bit,所以必须经过并串转换。即该模块具有如下功能:
1、控制IIC总线的周期;
2、对输入数据进行并/串转换;
3、对总线上的数据进行转换;
4、触发IIC的时钟信号;
5、触发IIC的数据信号;
6、触发IIC总线的状态信号。

采用FPGA模拟IIC总线,由IIC总线规则可以看出,IIC在传输过程中有5个固定的状态,空闲、开始、响应、接收/发送、停止。传输的过程也就是状态间进行变换的过程,因此很自然联想到在编程时使用状态机的方法。同时状态间转换要受到来自微控制器的信号的控制,因此需要采用Mealy型状态机。并串转换器,在这个模块里,通过8 bit计数器来实现。
为了对运行状态进行更一步的细分,在本设计中定义了15个状态,下面把各个状态的定义如下解释:
idle                      IIC总线空闲
en_clk                    时钟启动
start1,start2,stop1     开始和停止
dev_add1,dev_add2        传输器件地址
ack1,ack2,ack3,ack4    发送响应
w_add                     字地址
wait1                     等待
dis_clk1                  暂停
data                      传输数据

当系统复位时,初始化状态为idle,当复位无效,地址信号为00时,指向字地址寄存器,这时产生一个启动状态机的信号,状态机由空闲状态进入开始状态,当分频器过来的脉冲信号从低向高跳变时,传输开始,同时位计数器也开始启动读总线的动作一定要读完一个字节才结束。那么先传输的是7位器件地址,并产生一个响应位,然后传输8位字地址和数据,如果有中断进入等待或暂停状态,需要重新状态机启动。控制器根据所处状态读写总线器件。主机要读取总线器件上的数据也必须通过状态机来实现,当状态机处于数据状态时,如果这时8位计数器的值为5,那么读出数据的第5位就是当时SDA上的逻辑值。以此类推,其它的同样。 其状态机程序见附录。
简单的流程图如图4.9所示。

图4.9  状态机工作流程图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-9-21 16:34:02 | 显示全部楼层
其生成的RTL级描述图比较庞大,因此就不贴出了。用Quartus II软件生成一个电路模块图如图4.10。

图4.10   时序控制模块图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
zxopenljx 发表于 2019-11-9 16:08:08 | 显示全部楼层
时序控制模块
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-4-19 10:29 , Processed in 0.074320 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表