



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、欢迎访问Freekaoyan论文站基于CPLD的PCI总线存储卡的设计欢迎访问Freekaoyan论文站 欢迎访问Freekaoyan论文站 摘 要:以自行开发的PCI总线存储卡为背景,详细论述了PCI总线的信号定义和命令操作,以及总线上的数据传输过程。介绍了所用芯片的基本情况,给出了采用CPLD实现数据存储功能的主要编程设计。 关键词:PCI;CPLD;AHDL;数据存取 复杂可编程逻辑器件CPLD(C
2、omplex Programmable Logic Devices)是一种用户可以根据自行需要而自己能够设计构造其逻辑功能的数字集成电路系统。其基本设计方法是借助EDA软件,采用原理图、状态机、布尔表达式、硬件描述语言(VerilogHDL, VHDL或AHDL)等方法,生成相应的目标文件,再由编程器或者下载电缆用目标器件实现设计功能的数字系统。1 CPLD的特点 CPLD的基本特点如下: (1) 规模大; (2) 编程方式简单方便; (3
3、) 可靠性高; (4) 实现了硬件设计的软件化。 可编程逻辑器件CPLDFPGA由于具有集成度高、速度快、开发周期短、开发费用低廉、用户可自定义其功能及其可重复编程和反复擦写等许多优点越来越受到人们的青睐。这些器件的灵活性和通用性使得它们已成为研制和开发复杂数字系统的理想选择。2 器件介绍 MAX7000系列的集成度为600-320 A 5000可用门,有32-256个宏单元和36-164个用户IO引脚。这些基于EEPROM的器件能够提供组合传输延迟时间能快至50 ns,其1
4、6位计数器的频率为178 MHz。它们的输入寄存器的建立时间非常短,且能够提供多个系统时钟,且有可编程的速度功率控制功能。设计过程中实际采用的芯片是EPM7192SQC160-7,有3750个可用门,192个宏单元,12个逻辑阵列块,124个用户IO引脚。MAX7000S器件具有MAX7000E的增强特性,是通过工业标准4引脚JTAG接口实现在线可编程的。3 PCI总线的传输控制策略 PCI总线上所有的数据传输基本上都是通过以下3条信号线的控制来实现的。3条信号线及其功能如下: · FRAME# 由主
5、设备驱动,指明一个数据传输的起始和结束。 · IRDY# 由主设备驱动,允许插入等待周期。 · TRDY# 由从设备驱动,允许插入等待周期。 其控制原理如下: (1) 当FRAME#和IRDY#都无效时,PCI总线处于空闲状态(IDLE)。 (2) 当FRAME#有效时,且CLK的第一个上升沿时为地址周期,地址和总线命令将会出现。
6、0; (3) 在下一个时钟周期,当IRDY#和TRDY#都有效时,在时钟的的第一个上升沿,数据在PCI的主从设备间交换。当IRDY#或TRDY#无效时就进入了插入在数据周期中的等待周期。 当数据有效时,数据资源需要无条件设置xRDY#信号(写操作为IRDY#,读操作为TRDY#)。接收方在没有准备好接受时可以延迟发出它的xRDY#信号。但接收方至少应在FRAME#信号有效后16个时钟周期内发出他的回应信号。相应的发送方会产生一个额外的16个周期的时钟,所以发送方的初始化数据周期永远不会超过32个时钟周期。每逢IRDY#和TRDY#同时有效时,所对应的时钟前沿
7、就使数据在主、从设备之间传送,在此期间,可由主设备或从设备分别利用IRDY#和TRDY#的无效而插入等待周期。 一旦主设备设置了IRDY#信号,将不能改变IRDY#和FRAME#,直到当前的数据期完成为止。而一个从设备一旦设置了TRDY#信号或STOP#信号,就不能改变DEVSEL#、TRDY#或STOP#,直到当前的数据期完成。不管是主设备还是从设备,只要承诺了的数据传输,就必须进行到底。数据能否传输决定于TRDY#的状态。 当主设备要结束数据的传送过程(可以在地址周期结束后马上进行),将FRAME#宣布无效且IRDY#
8、置为有效表明主设备已经准备完毕。当从设备表示最后的一个数据已经转换完毕(TRCY#有效),FRAME#和IRDY#都变为无效总线的变为空闲状态。4 用AHDL语言描述 PCI总线存储卡 下面是采用Altera公司的CPLD-MAX7000系列芯片进行功能实现的主要设计过程。其中,所用编程语言为Altera公司的AHDL语言。4.1 内部状态机 由于PCI总线的时序延迟的特性,为了简化设计特别设计了一个控制全局时序状态的状态机。 整个系统有4个状态,分别用圆圈表示各
9、个状态,状态机的状态转换图如图1所示。<!endif> 4.2 PCI总线上的命令和地址译码: PCI总线上的命令是用来规定主从设备之间的传输类型,它出现与地址周期的CBE3:0#线上。由于设计要求能够通过PCI总线有和读写RAM的方式自由的存取数据,所以在译码时不能仅仅对Memory Read(0110)和Memory Write(0111)进行译码。对于大数据量的数据存取也应该支持所以对于存储器多行读命令(1100),存储器一行读命令(1110)和存储器写并无效命令(1111)都要进行译码。cbe_decd_reg6定义为总线读命
10、令,cbe_decd_reg7定义为总线写定义。cbe3.0是输入的总线命令。 在对总线命令译码后如果从cbe_decd_reg6.7有效,则要进一步对地址进行译码。地址AD31.0和总线命令cbe3.0被同时锁存在寄存器里,以保证在对命令译码后地址译码的同步性。在这个设计中所采用的是对地址的高15位进行译码,低17位地址直接寻址。即将低17 位的地址线直接输出到外部存储芯片,地址是0xFF8XXXXX。addr_hit是一个内部的状态指示信号,当译码正确是为高,触发内部状态机的转换。t_st1.0是内部状态机的指示位。
11、 在进入到状态three时才对时钟计数,当时间超过16个时钟周期则跳出,回到Idel状态。说明主设备已异常退出,从设备也从新回到等待的状态。在此设计中,我们把TRDY#的状态简化为仅在状态three时,当计数器计数到3后跟随IRDY#的状态,在计数器没有计数到3时为高,当不在状态three时为高阻态。trdy是一个双向端口,trdy_tri是一个内部三态端口,trdy_en是一个内部节点。trdy_tri的输入端与trdy_en相连接,输出端与trdy相连接。内部计数器count4对PCI的全局时钟进行计数。当且仅当在内部计数器count4的值为3时trey_en跟随IRDY#的状
12、态。内部计数器count4仅在状态THREE有效,当IRDY#有效时才进行计数,当IRDY#无效时count4保持。当不在状态THREE时count4的值为0。当在状态ONE和状态THREE时trdy_tri的使能端被允许。 trdy_en=!count41 # !count40 # irdy; DEVSEL#是设备选择信号。该信号有效时,表示驱动它的设备已成为当前访问的从设备。换言之,它的有效说明总线上某处的某一设备已被选中。当进入状态three就确认了当前设备已被选中,在退出状态three后也应该同时宣布DEVSEL#
13、信号无效。devsel_tri是一个内部三态端口,devsel_reg是一个D触发器。在状态ONE和状态THREE,devsel_tri的使能端被允许。在状态THREE devsel_reg的数据输入端置为低,devsel_tri的输入端口与devsel_reg的数据输出端口相连。devsel_reg的时钟信号采用PCI总线输入的全局时钟。所以当进入在状态ONE后一个时钟周期内DEVSEL的状态就被变为无效(为高),进入状态THREE后一个时钟周期内DEVSEL的状态就被变为有效(为低)。当不在状态ONE和状态THREE时,DEVSEL#的状态为高阻态。由于TRDY#与DEVSEL#都是双向的
14、信号,不能由从设备一方决定状态,所以要在在内部设一个三态门,当从设备不对这几个门控制时其状态为高阻态,可由其它设备驱动。4.4 对存储器读与写的具体操作: 首先应该设定数据线的方向。由于PCI总线地址与数据总线复用,结合本设计实例,只有在状态THREE才是总线的数据周期。当主设备对从设备进行读操作时将数据从芯片送到PCI数据总线,在进行写操作时与此相反。Ad31.0是PCI总线的地址与数据复用总线端口,ram_data31.0是外部数据存储器的数据端口,data_ad31.0和 data_ram31.0是内部三态端口与外部数据端口相连。在PCI总
15、线读周期且状态机为状态THREE即t_st=B“11”时,内部三态端口data_ad31.0使能端被允许。data_ad31.0的数据输入端与外部数据数据端口ram_data31.0相连接,输出端与PCI数据与地址复用端口ad31.0相连,由此保证了读操作时的数据流方向。同理,在写操作时即PCI总线写周期且状态机为状态THREE时,外部数据存储器的三态端口data_ram31.0使能端被允许。data_ram31.0的数据输入端与PCI数据地址复用端口ad31.0相连,输出端与外部数据数据端口ram_data31.0相连接。 对于读写的控制信号OE,WE和使
16、能信号CE#也同样仅在状态THREE时有效。同时也需要IRDY#和TRDY#信号的共同作用。在PCI总线为写周期,在状态THREE且IRDY#与TRDY#都有效时将WE#置为全局时钟,OE#置为高。将WE#与时钟信号相连是考虑到在一个PCI操作中如果要进行大数据量的操作为了安全起见。 we =
17、60; clk; oe = VCC; 在PCI总线为读周期且在状态THREE将WE#置为高OE#置为低。在其它状态下WE#和OE#均置为高。 对于外部存储芯片的片选信号CE#,当进入状态THREE后就进入了读写操作周期,应置为有效。根据PCI总线规范,
18、在读写操作周期里,cbe#线上的信息指出数据线上的哪些字节是有效的(即哪几个字节是当前要传输的)。故 ce_ram = cbe3.0;其余情况,只要不在状态THREE,ce_ram均要置为高。4.5 设计中全局时钟的应用: 对于一个设计项目来说,全局时钟是最简单和最可预测的时钟。在PLDFPGA设计中最好的时钟方案是:由专用的全局时钟输入引脚驱动的单个主时钟去钟控设计项目中的每一个触发器。只要可能就应尽量在设计项目中采用全局时钟。PLDFPGA都具有专门的全局时钟引脚,它直接连到器件中的每一个寄存器。这种全局时钟提供器件中最短的时钟到输出的延时,在本设计实例中就采用了全局时钟。将PCI总线的时钟信号通过MAX7000上的专门时钟引脚输入,连接到每个寄存器,从而减少了很多时序上的冒险与竞争,同时也减化了设计。5 结语 总之,使用CPLD做P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宿命的轮回:命运戏剧细则
- 考研复试面试中常见问题解答
- 在花园中创造一个梦幻般的世界
- 学生教育信息化规划
- 2025浙江泰隆商业银行招聘10人笔试备考试题及答案解析
- 2025浙江丽水青田县教育局下属事业单位选聘2人笔试含答案
- 云计算性能优化指南
- 农学领域农业物联网建设预案
- 矿业事故应急预案
- 2025西安未央区职汉城社区卫生服务中心招聘(13人)笔试备考试题及答案解析
- 海姆立克急救法完整版本课件
- 国家地表水环境质量监测网采测分离实施方案课件
- 控压钻井技术及实践培训讲义工艺课件
- 加速康复在肝胆胰外科的应用课件
- 厚度仪点检表
- 北京市水利工程维修养护定额
- 自然拼读法在小学英语教学中的应用的实践研究
- 无领导小组面试评分表模板
- “自然拼读法在识记单词中的实践研究”课题开题报告
- 第二届上海十佳理财之星参赛作品
- 桥梁工程变形监测方案
评论
0/150
提交评论