保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

基于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

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。