基于VHDL的I2C总线控制核设计
子状态(A,B,C、D、IDLE)。I2C总线时序状态转移关系如图3所示,状态划分如图4所示。在实际中为了更精确地控制时序,对命令时序进行了更细的划分。START和STOP分为7位子状态(a~f,idle),WRITE和READ分为6个子状态(a~e,idle)。这个“6”也就是为什么在公式(2)中分母上有一个“6”。
SCL在Start命令的A状态时,保持原有电平不变,而在B状态时变为高电平,这样就可以实现Restart命令。系统时钟信号eclk由时钟尺度因子分频,得到状态转移的同步时钟使能信号(eclk_en)。在eclk和eclk_en的控制下进行状态移转,最后都转移到空闲状态(IDLE),并保持最后一个状态时的信号电平。图4中标注了每个命令的关键时刻。
3中断信号的处理机制
I2C控制核作为I2C总线的主设备,是在DSP的控制下工作的。它采用中断机制与DSP通道。当一个读写命令完成后,主设备会向DSP发出一个中断申请信号eint(上升沿有效)。在DSP的中断服务程序中,置位命令寄存器的中断响应确认位(i_ack_r='1'),使主设备清除其发出的中断申请信号(eint='0'),而i_ack_r信号将在置位命令结束后的下一个时钟上升沿自动清除。这样,可以允许主设备发出下一个中断申请。
图5
process(nReset,eclk)
begin
if(nReset='0')then
int<='0';i_ack_r<='0';
elsif(eclk'ventandeclk='1')then
if(nce='0'andnAwe='0')then
if(core_en='1'andeadd="001")then
--写入命令寄存器
i_ack_r<=cr(7);--写入'1'
endif;
else
i_ack_r<='0';--自动清除
endif;
int<=cmd_done_ackandien;
endif;
Eint<=intand(noti_ack_r_;endprocess;命令码
4EDA综合结果与结论
使用XilinxISE6.1对I2C核的VHDL描述进行综合(synthesize)和实现(implement),目标器件采用Xilinx公司的高密度系统级FPGA-Virtex系列芯片v50cs144-6。设计的总体等效门数为1844门,系统时钟的最大频率为120.758MHz。图5为使用ModelsimXE5.6a对在目标器件上布局布线后的VHDL模块进行仿真(SimulatePost-Place&RouteVHDLModule)的结果。其中,edat信号上“10010000”中的“1”依次是启动和写命令;“01100001”中的“1”依次是停止、读、中断清除命令。从图中可以看出,实现了从TMS320C6000EMIF接口到I2C总线接口的转换功能,并实现发中断申请(eint=1)和清除中断申请的功能,完成了 《基于VHDL的I2C总线控制核设计(第4页)》
本文链接地址:http://www.oyaya.net/fanwen/view/172485.html
SCL在Start命令的A状态时,保持原有电平不变,而在B状态时变为高电平,这样就可以实现Restart命令。系统时钟信号eclk由时钟尺度因子分频,得到状态转移的同步时钟使能信号(eclk_en)。在eclk和eclk_en的控制下进行状态移转,最后都转移到空闲状态(IDLE),并保持最后一个状态时的信号电平。图4中标注了每个命令的关键时刻。
3中断信号的处理机制
I2C控制核作为I2C总线的主设备,是在DSP的控制下工作的。它采用中断机制与DSP通道。当一个读写命令完成后,主设备会向DSP发出一个中断申请信号eint(上升沿有效)。在DSP的中断服务程序中,置位命令寄存器的中断响应确认位(i_ack_r='1'),使主设备清除其发出的中断申请信号(eint='0'),而i_ack_r信号将在置位命令结束后的下一个时钟上升沿自动清除。这样,可以允许主设备发出下一个中断申请。
图5
process(nReset,eclk)
begin
if(nReset='0')then
int<='0';i_ack_r<='0';
elsif(eclk'ventandeclk='1')then
if(nce='0'andnAwe='0')then
if(core_en='1'andeadd="001")then
--写入命令寄存器
i_ack_r<=cr(7);--写入'1'
endif;
else
i_ack_r<='0';--自动清除
endif;
int<=cmd_done_ackandien;
endif;
Eint<=intand(noti_ack_r_;endprocess;命令码
4EDA综合结果与结论
使用XilinxISE6.1对I2C核的VHDL描述进行综合(synthesize)和实现(implement),目标器件采用Xilinx公司的高密度系统级FPGA-Virtex系列芯片v50cs144-6。设计的总体等效门数为1844门,系统时钟的最大频率为120.758MHz。图5为使用ModelsimXE5.6a对在目标器件上布局布线后的VHDL模块进行仿真(SimulatePost-Place&RouteVHDLModule)的结果。其中,edat信号上“10010000”中的“1”依次是启动和写命令;“01100001”中的“1”依次是停止、读、中断清除命令。从图中可以看出,实现了从TMS320C6000EMIF接口到I2C总线接口的转换功能,并实现发中断申请(eint=1)和清除中断申请的功能,完成了 《基于VHDL的I2C总线控制核设计(第4页)》