采用VHDL-93语言和可编程芯片实现IIC总线接口的芯片功能设计

iic总线是philips公司开发的一种简单、双向、二线制、同步串行总线。它只需两根线(串行时钟线和串行数据线)即可在连接于总线上的器件之间传送信息。该总线是高性能串行总线,具备多主机系统所需要的裁决和高低速设备同步等功能,应用极为广泛。
目前市场上虽然有专用iic总线接口芯片,但是地址可选范围小、性能指标固定、功能单一、使用不方便。根据iic总线的电气特性及其通讯协议,采用altera公司的flex10k系列isp器件epf10k10lc84-3可以方便地实现iic总线的通讯接口,且具有高速、易调试、可以灵活地实现地在线配置等优点,同时大大地减少了系统的开发周期。
1、iic总线的数据传输规范
iic总线主从机之间的一次数据传送称为一帧,由启动信号、地址码、若干数据字节、应答位以及停止信号等组成。通讯启动时,主动发送一个启动信号(当scl线上是高电平时,sda线上产生一个下降沿)、从机的地址码(8位)和读写信号;通讯停止时,主机发送一个停止信号(当scl线上是高电平时,sda线上产生一个上升沿)。在数据传送过程中,当scl线上是高电平时,必须保证sda线上的数据稳定;传送一个字节的数据,必须由接收机发一个应答信号。总线的传输码速率为100kbps(标准)~400kbps(高速)。采用+5v电源供电时,输入电平规定为:vilmax=1.5v,vihmin=3v;采用宽电源电压时,电平规定为:vilmax=1.5vdd,vihmin=3vdd。
iic总线的通讯过程如图1所示。
2、isp的逻辑实现
基于iic总线的数据传输规范,为完成iic总线的数据发送与接收,采用isp器件实现通讯接口的逻辑功能框图如图2所示。通过频选、控制、可控时钟可获得100khz、200khz、300khz、400khz的时钟频率。器件退出总线竞争后,时钟线置高电平。
2.1 通讯的启动与停止
在主机方式下,接收数据时,isp器件必须通过启动信号生成器送出一个启动信号,然后发送从机的地址信号和读写信号。只有这样,才能在总线上发送数据。该过程由控制寄存器启动。vhdl描述如下:
process(wr,cs)
——wr is cpu write signal
——cs is this chip‘s select signal addrs:=’0‘;
if(ctrreg(0)=’1‘and ctrreg(3)=’1‘ and scl1=’1‘)then
——ctrreg 为控制寄存器
clk1count:=’0‘;
sda1:=’1‘;
if(clk1 event and clk=’0‘)then
if(clk1count=’3‘)then
sda1:=’1‘;
addrs:=’1‘;
ctrreg(3):=’0‘;
csta:=’1‘;
else[page]
clk1count:=clk1count+1;
end if;
end if;
end if;
if(addrs=’1‘and scl1 ’event and scl1=‘1’)then
························——将数据寄存器中的数据
························——及wr信号移位发出(略)
end if;
end process;
当一次通讯结束时,主机要发送停止信号。该过程同样同控制寄存器控制;当控制字第二位为‘1’时,isp器件产生停止信号。vhdl描述与启动类似。
2.2 发送数据
在主机方式下,完成启动和地址信号发送后即开始发送数据。发送数据时并串转换器在scl的下降沿移位,保证scl高电平时sda上的数据稳定。发送的进程由wr信号和从机的应答信号启动。
当isp器件在总线竞争失败时,由处理器将isp器件转为从机工作方式,处理器向地址检测电路送该器件在系统中的地址。只有在接收到的地址信息与该器件所设的地址相同时,才发出应答信号,开始通讯。每发送一个字节即将sda拉高,等待接收机的应答信号,准备下一个数据。
2.3 接收数据
在主机方式下,完成通讯启动和地址信号发送后便开始准备接收数据。每接收一个字节后要发出应答信号,产生一个负脉冲作为中断请求信号输出给处理器。若此时系统忙,则拉低scl电平迫使发送机进入等待状态。从机方式下的接收与主机方式下一样。vhdl描述如下:
process(sda1)
sack:=‘0’;
full1:=‘0’;
stp:=‘0’;
intq:=‘1’;
if(csta=‘1’ and addok=‘1’)then
if(scl‘1’event and scl1=‘0’)then
……——接收数据,串入并出移位(略)
full1:=‘1’;
end if;
end if;
if(full1=‘1’)then
if(rd‘event and rd=’1‘and
scl1’event and scl1=‘0 and
busy=’0‘)then
sda1:=’0‘;
full:=’0‘;
intq:=’0‘;
else
sda1:=’1‘;
if(clk1’event and clk=‘0’ and full1=‘0’)then
if(clk1count‘20’)then
intq:=‘1’;
clk1count:=‘0’;[page]
else
clk1count:=clk1count+1;
end if;
end if;
if(slave=‘1’ and scl=‘1’ and sda ‘event and sda=’1‘)then
stp:=’1‘;
csta:=’0‘;
end if;
end if;
end process;
2.4 总线仲裁
在通讯过程中,isp器件在发送数据的同时接收总线上的数据,将该数据与已送的数据进行比较,若不相同则置位状态发生器的slave,表示该主机退出竞争。通过处理给控制寄存器发送控制字可以让isp器件转入从机工作方式。这时启动地址检测,禁止scl的发送。在一次通讯结束后,将状态生成器的end置位,此时处理器可以再次将isp器件设置为主机方式。
2.5 控制寄存器与状态生成器
控制寄存器主要是定义isp器件的工作状态,其各位的定义为:
busy:若该位为’1‘,主机作为接收机时,不发应答信号;
sta:启动信号位;
stp:停止信号位;
m/s:主从机位,用于选择芯片工作状态(主机还是从机);
clks1、clks2:频选控制位;
clken:scl使能位,该位为1时scl置高电平。
状态生成器可以生成工作状态信号(中断、iic总线竞争、从机方式时通讯开始与结束)供处理器查询处理。
3、 参数配置
该器件可以配置为从100kbps(标准)到400kbps(高速)的任何传送速度,以满足不同的需要。只需在vhdl(描述的结构体中指明配置的参数即可实现配置,非常方便。
本设计只使用一片可编程芯片即可完成iic总线接口的芯片功能。由于采用vhdl-93语言进行设计,具有良好的可移植性,可用于其它isp厂家的产品中。通过byteblast下载线可以在线改变其功能,体现了isp器件的优越性。


小米新一轮的安卓7.0又来了, 这次有你的机型么?
瑞浦兰钧IAA上连续放大招!问顶家族产品、欧洲发展战略、ESG碳中和路线齐首发
dfrobotURM06-PULSE大功率超声波测距模块简介
CAXA经验谈问答集
雷诺 Zoe击败特斯拉Model 3,成为欧洲销量最高的电动汽车
采用VHDL-93语言和可编程芯片实现IIC总线接口的芯片功能设计
意法半导体32nm元件库采用Mentor Graphics Eldo仿真器
基于EASY CORE芯片组的专用PLC设计
运算放大器的环路稳定性基础知识介绍
纳芯微直流有刷电机驱动NSD731x系列发布多款新品,任君挑选!
关于Linux三剑客之grep实战示例详细教程讲解
855处理器是“世界上第一个支持数千兆位5G的商用移动平台
iPad Pro将成苹果首款使用Mini LED的设备
网上买的充电宝哪个好用?充电宝网上哪里买比较好
华为荣耀V9黑色价格是多少 荣耀V9黑色价格曝光
中试线、Demo线助力国产供应商发展
上海微系统所助力研制超导神经形态处理器原型芯片—苏轼(SUSHI)
iPhone在美国智能手机市场排名第二
区块链游戏,究竟能不能挣钱?
物联网神器:不需要电池的WIFI通讯技术