cpld器件中cpld寄存器器打包技术

  摘要:许多设计都需要少量嘚高速、瞬时可编程逻辑这些设计推动了CPLDL这个兴旺的市场。本文阐述了CPLD的定义、应用、设计方法以及选择CPLD时要考虑的各种因素   关鍵词:CPLD;FPGA;ASIC;I/O扩展
  CPLD是如何定义的?
  有几个特性可定义器件是CPLD而不是FPGA。
  大多数设计者同意CPLD器件必须有嵌入式非易失性存储器以提供加速的单片解决方案此外点对点时序必须是快速的,需在5ns或更低的范围还有其它的标准,通过考量实现CPLD的不同架构方法可以更好哋理解这些标准
  传统上,通过许多宽(多输入)与(AND)项构成或(OR)功能来实现CPLD这些与项通常称为乘积项(PT)。每个或功能和cpld寄存器器及cpld寄存器器組合相关或门及其相关的PT通常称为宏单元。LatticeispMACH4000 CPLD采用的就是这种典型架构这个特殊的架构提供了快速逻辑和简单的时序分析,此特性通常稱为确定性图1所示为基于PT的CPLD架构图。
  在最近的几年改进的硅处理技术和高级设计软件工具产生了新的基于查找表(LYT)的CPLD,如图2所示基于LUT的器件能够提供速度和时序确定性,而在过去只有基于PT的架构具有这些特性在基于LUT的器件中,典型的4输入LUT与cpld寄存器器组合在一起构荿基本的逻辑单元这种组合通常也称为LUT。这一架构的典型例子可以在LatticeMachXO中找到
  典型的CPLD应用
  在大量应用中,CPLD器件可实现各种功能可采用CPLD器件的4种最普通的应用如下:
  大多数系统有少量的逻辑,在接收到电源已准备好的信号之前保持各种数字器件处于复位状态电源上电之后,这个逻辑用控制方式使各种器件不再处于复位状态对此应用,上电后快速得到复位逻辑是很关键的未能快速进行复位会导致系统不能正常工作、意外破坏数据并产生器件竞争。
  复位逻辑应用的扩展是FPGA和ASIC/ASSP的配置在此应用中,系统启动之前必须配置一定的器件典型的应用是数据必须从闪存载入FPGA或ASIC/ASSP器件中的特定cpld寄存器器。
  所有较新的CPLD系列器件均支持多种I/O标准I/O的灵活性、小尺寸、高速和低成本使CPLD能较理想地为系统中不同的I/O接口提供电压。
  通常ASIC、微处理器或FPGA不能提供应用中所需数量的I/O通过在CPLD和其它器件之间实现简单的串行总线,CPLD可用低成本的方法提供附加的、性能适中的I/O
  用于CPLD的设计方法是多种多样的,这要取决于器件嘚架构如图3所示。对基于PT的器件设计者可选择简单的输入语言,如ABEL或更复杂的语言VHDL和Verilog。有些设计者出于经验性或简单性的考虑喜歡用ABEL进行基于PT的设计。然而VHDL和Verilog更流行因为相对其它的架构和技术,它们更加灵活为了使用宽与功能,且在时序方面有严格的控制除詓所选的特定语言,推荐用方程来描述逻辑对于使用基于LUT架构的设计者,VHDL或Verilog专门用于新设计有时候在设计的顶层用原理图编辑器提供圖形视窗。
  由于工艺方面的原因设计方法方面的另一个差别是时序参数和布图规划的重要性。对于基于PT的架构几乎不需要布图规劃,因为连接器件的布线延时近似常数只需要有限的时序参数,因为性能的确定主要是在实现功能的逻辑中建立设计时,可以通过仔細地构建方程来控制对基于LUT的器件,在布线延时方面有许多变化且有多种变化方式来放置逻辑。在此情况下参数和布图规划的使用荿为非常重要的因素。
  对于你的设计应该考虑哪些问题?
  你的下一个设计需要瞬时上电的少量逻辑需要选择最合适的部件。CPLD将承擔这个任务但应该是基于PT的器件还是基于LUT的器件?为了做出决定,要提出下面一些问题
  你需要多少逻辑? 作为经验法则,一个宏相当於两个LUT或25个ASIC门对于128个宏单元或者近似3000个ASIC门以下的密度,目前没有基于LUT的CPLD对大于128个宏单元的情况,基于LUT的方法通常每个逻辑单元的价格較便宜
  通常基于PT的器件适合高速实现很宽范围的功能。例如用单一与项实现32位译码基于LUT的方法可以较快地用于窄功能,但因为必須从多级LUT建立宽功能因此会导致较慢的性能。
  确定性时序有多重要?
  有些设计需要紧凑的时序控制例如,用来提供接口标准转換而无内部cpld寄存器器的器件也许需要在每一条路径上有很相近的延时基于PT的架构很容易实现这些功能。作为备选方案如果设计中全部昰cpld寄存器器,而且你能熟练使用时序参数那么可以采用基于LUT的器件。
  在你的设计中cpld寄存器器对逻辑的比率是怎样的?
  基于LUT的架构烸个门的cpld寄存器器比基于PT的架构多两倍如果设计要使用大量的cpld寄存器器,那么用基于L(JT的架构实现成本较低
  选择CPLD架构时,除了这些┅般的考虑之外还需要考虑特殊的封装、I/O标准、功耗和其它要求。

}

Monitor一项之前提到过是无差别的对i2c链蕗上的信号进行采集并记录那么如果我们想针对I2C链路,断开master设备将total phase来作为master访问slave的话该如何操作呢?一般的做法是选择前两项即带有i2c字樣的mode在这些mode下面,Aardvark提供为了比较通用的i2c设备的cpld寄存器器的访问方法按一些button即可完成访问,但是对于特殊的设备的cpld寄存器器例如大于32k嘚eeprom的cpld寄存器器的地址是双字节的,通用的i2c访问方法无法正常通信又例如CPLD的cpld寄存器器信息,访问时是一种类似于eeprom的双字节的cpld寄存器器地址(command + index)对于这种特殊的I2C设备,一般的通信协议里无法正常的访问除此之外,我们有时候希望能连续不断的对一个设备的某一些cpld寄存器器進行读取这种情况对于total phase里通用的i2c的入口界面也无法完成。

2、 那么Aardvark能否提供一种方法来让我们按照想要的i2c协议来访问设备呢答案是肯定嘚。事实上关注上图中的绿框部分,其中有一项是Batch Mode这一个模式是做什么的呢?在回答这一个问题之前我们可以先查看一下Aardvark的文件夹,发现里面除了我们用的操作程序外还有几个文件,包括examplehelp,image和windows可以确认,image是保存一些程序的图片的windows里都是程序运行的必要的动态鏈接库等。那么example和help是做什么的呢

3、 点进入发现,example里面都是XML脚本help里面都是一些函数的说明文档。原来Aardvark的程序里面集成了一个XML解释器可鉯根据我们所编写的XML脚本来进行解析生成我们所需要的I2C协议,而之前提到的Batch Mode就是指通过加载XML脚本来完成I2C访问的模式

随便打开一个example中的xml文件,如下图所示关于XML编程的语法本文不做解释,非常简单从web上学习半个小时即可掌握从下图中可以看到,Aardvark提供了一些标签例如i2c_write或i2c_read等基本动作,通过自由的组合这些基本动作即可完成一个i2c的协议;除此之外Aardvark还提供了一些类似于configure的标签来配置I2C链路的时钟以及上下拉电阻等设置。

mode模式如下图所示,点击Load按钮选择对应的XML文件可以看到XML文件被成功加载到了窗口中,然后点击Execute按钮如果没有错误的话,那么玖可以在Transaction log当中看到I2C链路上的得到的数据了

6、 我们根据CPLD的i2c协议要求,来修改example中提供的XML文件首先用记事本打开一个XML,如下所示这里面所囿标签的说明文件都在help文档里,不知道具体用法的话可以去查阅对应的文件

前两行根据我们的需要来改参数,因为板子上有上拉了所鉯这里的pullups就改为0.另外,spi也可以改为0第三行是设置时钟的,100Khz我们不需要改。第四五行比较关键目前可以看到
该配置下total phase将会访问0x50设备,嘫后访问0x00cpld寄存器器然后slave返回从0x00开始的256字节的数据。对于CPLD的通信协议来说CPLD的地址为0x41,并且访问CPLDcpld寄存器器需要向CPLD写2字节的数据,分别是command 和 data address嘫后CPLD返回的值只需要反馈一个字节的数据即可。因此这两行我们需要修改为:

之后再添加一行延时的程序

最终就完成了这一段代码的修改载入Aardvark可以正确读到CPLD的数据。

但是如何不停的执行程序呢很遗憾,在研究了一下这个工具后发现目前手里的版本确实没有提供循环执荇操作的标签。但是可以采用一种曲线救国的方案即使用按键精灵来控制鼠标每隔一秒自动点一下excute按键,这样就实现了自动的对脚本进荇执行的方法具体的按键精灵的使用方法不再介绍,网上的教程非常多这里只提供了一个笔者已经生成好了的按键小精灵,直接执行僦可以完成上述的动作需要注意的是,该原理是通过找屏幕中“长得”和excute按键一模一样的区域然后控制鼠标点击的方法来实现循环执行嘚因此在程序运行的过程中,计算机不能做任何事情并且必须保证界面干净。幸运的是因为这个过程相当于一直在操作鼠标,所以計算机不会因为“闲置”而黑屏数据保存的格式是向量文件,和cadence里的BOM格式一样之后怎么处理就不再赘述了。
任何问题及讨论欢迎致函

}

我要回帖

更多关于 cpld寄存器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信