搜索
bottom↓
回复: 19

谁能实现2个AVR读写同一片外扩的RAM的硬件电路设计???【恢复】

[复制链接]

出0入0汤圆

发表于 2008-11-29 23:05:42 | 显示全部楼层 |阅读模式
硬件设计上面能否实现用2个MCU操作同一片外扩的RAM





这样的的MCU的协调性就比较用串口通信要来的快的多



谁能实现2个AVR读写同一片外扩的RAM的硬件电路设计???

如果实现了 AVR 也能玩双核啊

出0入0汤圆

发表于 2008-12-31 21:52:12 | 显示全部楼层
取决于接口的形式,CPLD可以仲裁,如果用I2C的RAM(确实比较少,但是可以用铁电代替),本身就解决了仲裁问题。

出0入0汤圆

发表于 2008-12-5 21:38:12 | 显示全部楼层
用CPLD吧,就不用考虑以述情况了。

出0入0汤圆

 楼主| 发表于 2008-12-2 23:08:13 | 显示全部楼层
谢谢【15楼】 gliet_su



看来还是方案一比较好实现



我在想如何建立一个评定方法来评估各个方案优缺点



1. 数据交换的频率 相当由波特率 或总线频率

2. 实时性,当一方将数据更新后,另外一台能够多快的响应

3. 没想到了^_^

出0入0汤圆

发表于 2008-12-2 21:35:54 | 显示全部楼层
加一个信号灯上锁,可以吗?

出0入0汤圆

发表于 2008-12-2 21:33:00 | 显示全部楼层
好吧,说几个方案,不足之处请补充

1.两片单片机,分主从机。主机为从机分配操作时间。主机操作一段时候后,发消息给从机(如:某个IO口的电平),从机必需在主机规定的时间内完成操作,然后释放总线。

如果完成不了的,也必须释放总线。之后由主机控制,如此循环。

2.三片单片机,一个用作仲裁。可以向两个控制机各提供8BIT数据接口(控制线自己定义)。但仲裁机的时钟要快,不要让这两个控制机的数据滞留。

3.两片单片机,一片CPLD。操作方法与2相同。是只用CPLD作仲裁,用逻辑器件,快得多。

出0入0汤圆

 楼主| 发表于 2008-12-2 21:13:54 | 显示全部楼层
如果是单口RAM 

还是要顾及时序的分配

出0入0汤圆

发表于 2008-12-1 19:47:33 | 显示全部楼层
不是高手,所以才讲一半。

出0入0汤圆

 楼主| 发表于 2008-12-1 13:00:01 | 显示全部楼层
楼上都是高手,但是都只肯讲一半留一半哪!

出0入0汤圆

发表于 2008-11-30 21:59:27 | 显示全部楼层
单口RAM就可以。

出0入0汤圆

发表于 2008-11-30 20:03:19 | 显示全部楼层
为什么要用双口RAM呢?非常贵。

单口RAM也可以实现的。

本贴被 gliet_su 编辑过,最后修改时间:2008-11-30,20:24:15.

出0入0汤圆

 楼主| 发表于 2008-11-30 17:54:52 | 显示全部楼层
楼上还是没讲明白如何仲裁啊?是不是先向仲裁MCU申请,然后操作???







我下了一些双口RAM、双CPU的文献,学习中



好像大家用的多是 IDT7132的片子,查了一下,淘宝最便宜的价格15块,不过这个片子只有2k容量



还CYPRESS的 CY7C026AV 双口RAM芯片,太贵了 85块啊



看来真是要用在特定用途才行

出0入0汤圆

发表于 2008-11-30 15:29:18 | 显示全部楼层
回楼上

这样的操作就是主从机了。

如果主机总是对RAM操作,那么从机就无法对RAM操作。

没能达到充分利用RAM的目的。



如果有仲裁,那么就可以为每个CPU分配相同的操作时间。

出0入0汤圆

发表于 2008-11-30 12:09:32 | 显示全部楼层
楼上浪费

强制定义一数组A到外部SRAM绝对地址

各CPU输出一个状态位(用MCU的一个I/O了)

每次访问这个数组A前检查状态才访问/并把自己的状态置位

把协议自己定义一下就好了



本贴被 wangguanfu 编辑过,最后修改时间:2008-11-30,12:10:33.

出0入0汤圆

 楼主| 发表于 2008-11-30 12:04:39 | 显示全部楼层
【5楼】 gliet_su 

 



请问如何仲裁啊?

出0入0汤圆

发表于 2008-11-30 11:50:53 | 显示全部楼层
用3个AVR吧,一个作为仲裁器。

出0入0汤圆

 楼主| 发表于 2008-11-30 11:44:51 | 显示全部楼层
找到一些

http://www.mcublog.com/blog/blog2007/sophialee/archives/2008/29325.html



双口RAM 

[ 2008-9-4 9:30:00 | By: sophialee ] 

  

    在测控、仪器仪表、语音信号处理和图像通信领域中往往需要多处理器分工完成数字信号处理(DSP)算法和与外部系统的通信、控制、数据采集和人机接口功能。在多机系统中,CPU之间的通信常采用以下几种方式:(1)串行通信。这种方式相对简单,由于受到波特率的限制,在不同档次单片机之间需要通信业务大的场合得不到很好的通信效果。(2)并行通信。利用CPU的I/O功能在CPU之间增加缓冲器或锁存器实现双机通信。通信性能较串行通信有所提高,但仍然得不到理想的效果。(3)利用共享式存储器实现。DMA方式就是其中的一种,能够达到数据的高速传输,但不能同时访问存储器,CPU必须等待总线,而且有些CPU不支持DMA功能。另一种是利用多端口存储器,双口RAM和FIFO是常用的两种多端口的存储器,允许多CPU同时访问存储器,大大提高了通信效率,而且对CPU没有过多的要求,特别适合异种CPU之间异步高速系统中。因此,受到硬件设计者的青睐。



  一、两种多端口存储器



1.双口RAM的仲裁控制



双口RAM是常见的共享式多端口存储器,以图1所示通用双口静态RAM为例来说明双口RAM的工作原理和仲裁逻辑控制。双口RAM最大的特点是存储数据共享。图1中,一个存储器配备两套独立的地址、数据和控制线,允许两个独立的CPU或控制器同时异步地访问存储单元。既然数据共享,就必须存在访问仲裁控制。内部仲裁逻辑控制提供以下功能:对同一地址单元访问的时序控制;存储单元数据块的访问权限分配;信令交换逻辑(例如中断信号)等。



(1)对同一地址单元访问的竞争控制



  如果同时访问双口RAM的同一存储单元,势必造成数据访问失真。为了防止冲突的发生,采用Busy逻辑控制,也称硬件地址仲裁逻辑。图2给出了地址总线发生匹配时的竞争时序。,此处只给出了地址总线选通信信号先于片选脉冲信号的情况,而且,两端的片选信号至少相差tAPS——仲裁最小时间间隔(IDT7132为5ns),内部仲裁逻辑控制才可给后访问的一方输出Busy闭锁信号,将访问权交给另一方直至结束对该地址单元的访问,才撤消Busy闭锁信号,将访问权交给另一方直至结束对该地址单元的访问,才撤消Busy闭锁信号。即使在极限情况,两个CPU几乎同时访问同一单元——地址匹配时片选信号低跳变之差少于tAPS,Busy闭锁信号也仅输出给其中任一CPU,只允许一个CPU访问该地址单元。仲裁控制不会同时向两个CPU发Busy闭锁信号。



2)存储单元数据块的访问权限分配 



存储单元数据块的访问权限分配只允许在某一时间段内由1个CPU对自定义的某一数据块进行读写操作,这将有助于存储数据的保护,更有效地避免地址冲突。信号量(Semaphore,简称SEM)仲裁闭锁就是一种硬件电路结合软件实现访问权限分配方法。SEM单元是与存储单元无关的独立标志单元,图3给出了一个信号量闭锁逻辑框图。两个触发器在初始化时均使SEM允许输出为高电平,等待双方申请SEM。如果收到一方写入的SEM信号(通常低电平写入),如图3所示,仲裁电路将使其中一个触发器的SEM允许输出端为低电平,而闭锁另一个SEM允许输出端使其继续保持高电平。只有当先请求的一方撤消SEM信号,即写入高电平,才使另一SEM允许输出端的闭锁得到解除,恢复等待新的SEM申请。



(3)信令交换逻辑(signaling logic)



为了提高数据的交换能力,有些双口RAM采用信令交换逻辑来通知对方。IDT7130(1K容量)就是采用中断方式交换信令。利用两个特殊的单元(3FFH和3FEH)作为信令字和中断源。假设左端CPU向3FFH写入信令,将由写信号和地址选通信号触发右端的中断输出,只有当右端的CPU响应中断并读取3FFH信令字单元,其中断才被双口RAM撤消。





2.FIFO的工作原理



FIFO(First In First Out)全称是先进先出的存储器。先进先出也是FIFO的主要特点。



20世纪80年代早期,FIFO芯片是基于移位寄存器的中规模逻辑器件。容量为n的这种FIFO中,输入的数据逐个寄存器移位,经n次移位才能输出。因此,这种FIFO的输入到输出延时与容量成正比,工作效率得到限制。



3.其他多端口存储器



以上只介绍了两种双端口存储器。随着电子工艺的飞速发展,出现了三端口及以上的存储器,并且在存储深度和宽度上得到很大发展,仲裁逻辑控制更加复杂;但多端口存储器源彼双端口存储器,基本更加复杂;但多端口存储器源自双端口存储器,基本工作原理入双端口存储器相似,这里不一一详述。



二、双口RAM实现数据采集系统



数字信号处理器(DSP)能实时快速地实现各种数字信号处理算法,而DSP的控制功能不强,可以采用8051单片机控制数据采集板,将采集的原始数据送给DSP处理并将处理结果传送给8位单片机。图5给出了利用1片数字信号处理器TMS320F206(以下简称DSP)和2片AT89C51单片机(以下简称MCU)构成多机数据采集系统接口图。



本系统采用两片CMOS静态双口RAM(IDT7132)实现MCU和DSP的数据双向传递。双口RAM作为DSP的片外数据存储器,即用外部数据存储器选通信号DS和高位地址信号经高速或门输出选通双口RAM的片选信号。这样可以利用DSP的重复操作指令(RPT)和数据存储器块移动指令(BLDD)减少数据传送时间,双口RAM的8位数据总线接在DSP的低8位。IDT7132的仲裁逻辑控制只提供Busy逻辑输出,而由于MCU无Busy功能,只能采用自行设计的软件协议仲裁方法。将双口RAM划分为两块:上行数据区(DSP接收MCU采集的数据区)和下地数据区(DSP输出处理结果区)。此处的上行数据区将远大于下行数据区。采用DSP的4个I/O口与MCU中断口和I/O口相连,并在数据区中规定一个信令交换单元。以DSP采集右端MCU上行数据为例,说明仲裁流程。



(1)初始化时,DSP置IO3为输出口,保持高电平,IO2为输入口(MCU使其初始化为低电平)。



(2)DSP需要采集MCU数据时,向右端IDT7132下行数据区的下行信令字单元(此处设为00H)写入需要取数的信令字,再向右端MCU发中断,置IO3为低电平,然后查询IO2等待MCU应答。



(3)MCU及时响应中断后,则先从IDT7132的下行数据区的下行信令字单元读取DSP请求信息,检测为DSP需要取数的下行信令。然后,向IDT7132上行数据区的上行信令字单元写入数据,准备好需要DSP取数据的信令(00H)或数据未准备好的信令(01H)。最后,向DSP发送应答信号,置IO2为高电平(此处高电平的持续时间不过长,只要DSP可以检测到即可)。



(4)DSP检测到IO2为高是平,表明MCU应答,立即读取IDT7132上行数据区的上行信令字单元。若为可以取数据的上行信令,则从IDT7132上行数据区取出采集数据,完成后,需要向右端MCU发送采集结束下行信令(01H);若为数据未准备好的上行信令(01H),则跳转至与左端MCU通信程序中。





为了提高FIFO的容量和减小输出延时,现在FIFO内部存储器均采用双口RAM,数据从输入到读出的延迟大大缩小。以通用的IDT7202为例,结构框图如图4所示。输入和输出具有两套数据线。独立的读写地址指针在读写脉冲的控制下顺序地从双口RAM读写数据,读写指针均从第一个存储单元开始,到最后个存储单元,然后,又回到第一个存储单元。标志逻辑部分即内部仲裁电路通过对读指针和写指针的比较,相应给出双口RAM的空(EF)和满(FF)状态指示,甚至还有中间指示(XO/HF)。如果内部仲裁仅提供空和满状态指示,FIFO的传输效率得不到充分的艇。新型的FIFO提供可编程标志功能,例如,可以设置空加4或满减4的标志输出。目前,为了使容量得到更大提高,存储单元采用动态RAM代替静态RAM,并将刷新电路集成在芯片,且内部仲裁单元决定器件的输入、读出及自动刷新操作。



FIFO只允许两端一个写,一个读,因此FIFO是一种半共享式存储器。在双机系统中,只允许一个CPU往FIFO写数据,另一个CPU从FIFO读数据。而且,只要注意标志输出,空指示不写,满指示不读,就不会发生写入数据丢失和读出数据无效。



 以下是DSP部分采集右端MCU数据的部分代码: 



rx1: splk #0020h,60h



out 60h,wsgr ;设置等待状态寄存器,指令周期为50ns;而IDT7132选用55ns,则需插入1个等待状态



splk #0000h,dn-sig ;向下行信令字单元写入00h(dn-sig表示下行信令字单元),通知MCU需要接收上行的语音数据



call int0gr ;向右端MCU发中断



reply:in 70h,iosr



bit 70h,12 ;检测IO3



bcnd reply,ntc ;IO3为低,返回reply,继续检测



lacl up-sig ;读上行信令字单元(up-sig表示下行信令字单元)到累加器中



sacl 70h



bit 70h,15



bcnd rx2,tc ;若为01H,表示MCU没有准备好,跳之与另一MCU通信rx2处;为00H,表示允许采集数据



mar *,ar1



lar ar1,#data-buf ;将目的数据块首地址存入ar1辅助寄存器



rpt #data-size ;重复下一条指令(data-size+1)次



bldd #up-data,*+



splk #0000h,dn-sig ;向下行信令字单元写入01h,表示采集数据结束,让出双口RAM上行数据区的使用权



call int0gr ;向右端MCU发中断



b rx2



RPT和BLDD是TMS320F206的高级指令,充分体现了DSP的流水线特点。RPT没有时间开销,它使下一条指令重复执行;BLDD是数据存储器间块移动指令,源和目的块不一定都要在片内或片外。当RPT和BLDD一起使用时,中断应该禁止,而且一旦流水线启动,BLDD就变成了单周期指令,如上述程序,DSP采集100Byte的数据,指令周期为50ns,一个等待状态周期则仅需50ns×2×100=10000ns=10μs,充分节省了采集时间,使DSP将更多的时间投入到算法中。



以下是产生中断子程序:



int0gr:in 70h,iosr ;读IO状态寄存器到70H单元中



lacl 70h



and #0fffbh



sacl 71h



out 71h,iosr;置IO2为低电平,下跳变触发INT0中断



call wait1 ;延时,低电平的持续时间需满足MCU接收中断的要求



lacl 70h



or #0004h



sacl 71h



out 71h,iosr ;恢复IO2为高电平



ret

 

出0入0汤圆

 楼主| 发表于 2008-11-30 11:42:37 | 显示全部楼层
谢楼上的,学到东西了,贴一些双口的RAM的开发资料吧

出0入0汤圆

发表于 2008-11-30 10:52:11 | 显示全部楼层
爽口RAM

出0入22汤圆

发表于 2008-11-29 23:15:48 | 显示全部楼层
用双口ram吧。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 01:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表