yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
阅读:2135回复:21

一读LOCAL端FIFO就死机为什么?中断使能也是死机WHY

楼主#
更多 发布于:2003-06-09 00:06
LOCAL端是个FIFO自己在CPLD中造一批已知数据,读FIFO的使能由CPLD产生根据LW/R_,/ADS,/BLAST等信号,现在在自己写的驱动中一读LOCAL端就死机,为什么?是因为逻辑写的不对吗,该如何测试?希望哪位大侠指点一下!还有一使能LOCAL INPUT中断(INTCSR_B[11]=1)也是死机,为什么呀?
flyingcowboy
驱动牛犊
驱动牛犊
  • 注册日期2002-10-23
  • 最后登录2004-03-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-09 09:18
看兄弟用的好象是9054,你的LINT#接高就不会4机了,因为9054是平触发的。我以前也遇见过
qizhi
驱动小牛
驱动小牛
  • 注册日期2001-10-18
  • 最后登录2017-07-31
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-06-09 09:27
我遇到过与你类似的问题。
首先检查一下逻辑问题。LHOLDA=LHOLD或者经过时钟LCLK上升沿控制;READY信号低有效,在LHOLD高期间。
一般死机就是READY信号没有,或者由于其它错误导致LHOLD信号一直为高而其它操作无法进行。你可以从上述信号焊线检测,注意使用逻辑 分析仪或者数字示波器的单次触发功能捕捉。
还有一个可能性,调试时用PLXMon软件的复位功能先对卡复位一次。
yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-09 22:51
to flyingcowboy
  多谢指点!我是用的9054,用LINT#通知PCI可以从LOCAL端读数据了,现在解决了死机问题,是一进中断服务程序就立马清该中断源
就可以不死机,我想这样:先清中断,在ISP最后再使能该中断,不知这样行不行,我还没写ISP只是先试试挂中断行不行。

yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-09 23:13
to qizhi
   多谢指点!我的LHOLDA是LHOLD经时钟LCLK上升沿采样所得;READY信号是个RS触发器的Q端的非,
READY_=!(RSFF.Q),
RSFF.D=VCC;
RSFF.S=!(ADS_);
RSFF.R=!(BLAST_);
RSFF.CLK=LCLK
这样可以吗;
结果单次读FIFO死机。
现在为了验证READY_是否有,改逻辑为READY_=RESET,即其一直有效,发现读FIFO时不死机,应该说原来是因为没有READY信号。但是读到的数据不对。我现在不明白这种单次读LOCAL操作该符合哪种时序图是PCI INITIATE还是PCI TARGET?
   为什么调试时要用PLXMon软件的复位功能先对卡复位一次?我还不知道如何用PLXMON?是PLXMON2000吗我的是从网上当的,它怎么要用串口调试吗?我是用windriver的一个工具调的。
qizhi
驱动小牛
驱动小牛
  • 注册日期2001-10-18
  • 最后登录2017-07-31
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-06-10 09:13
yunyanrong:
首先,如果你卡上没有CPU(DSP等)则你的卡恐怕比较难以支持PCI INITIATE,除非你用逻辑搭出来。初步看你应该符合这样的情况。

关于READY信号的问题。我的产生方法是:在地址译码后的ADS上升沿,触发锁存器为0,在BLAST的上升沿清除锁存器。可能需要增加一级寄存器。这样,READY在ADS上升沿后为低,在BLAST上升沿后为高。此设计的前提是,你的FIFO足够快,满足一个时钟可以操作。另外,READY的锁存器可以用LHOLD信号作为选通。估计这样READY信号应该没有问题了。

关于FIFO读数不正确,需要知道FIFO是同步FIFO还是异步FIFO,需要知道是写的问题还是读的问题。同步FIFO需要注意读时钟、读使能、输出使能等信号的时序关系,需要注意写信号可能影响FIFO的FF、EF、HF、PAE、PAF等的状态等;仔细测量FIFO的各个控制信号之间的关系。
PLXMon软件可以用串口,但是应该也可以不用。如果一执行就提示串口说明你的卡可能有问题,或者你的卡的DEVICEID等不在PLXMon支持的范围内。关于为什么用PLXMon复位一次我说不太清楚,大概是使各个寄存器的状态对,同时,保证LHOLD等信号对吧。
yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-10 21:33
to qizhi:
  谢谢你这么详细的指点,我再仔细看看。再请问一下为什么读FIFO时LW/R观察不到变化一直是高?
qizhi
驱动小牛
驱动小牛
  • 注册日期2001-10-18
  • 最后登录2017-07-31
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2003-06-11 08:56
LW/R#在读时应该为低。但是,因为其常态为高,所以读信号是瞬态信号,如果观察要用数字示波器或者逻辑分析仪较好,而如果是DMA读操作可能LW/R#会较长时间为低。如果这样仍然无法观察可能就是软件把读写的方向搞错了。
yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-06-11 09:47
我感觉写逻辑怎么这么难,没有什么可以参考的,就是按照数据手册上给的时序图来吗还有没有可以借鉴的?
再者调试工具PLXMON2000要用来调试自己开发的板子是不是必须改驱动,该改哪里?
软件会在哪里把读写的方向搞错?
qizhi
驱动小牛
驱动小牛
  • 注册日期2001-10-18
  • 最后登录2017-07-31
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2003-06-11 11:06
驱动一般不用改,但是需要配置许多寄存器以适应你特定的需求,例如:DMA就有多种方式可选。方向在PLXMon里是在DMA选择寄存器里的PCI to Local,或者Local to PCI。但是,你能确定一定没有低电平码?
yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-06-11 15:45
qizhi 谢谢指点,我现在可以用PLXMON了,原来是将DEVICEID改成它缺省的某一种即可.
   我是在信号lw/r上接了个二极管,单次读看不到灯亮.应该能确定没有低电平吧?
  再问一下PLXMON中,memory display窗口: memory spaces and buffer选S0(S0的PCI地址为0XE0100000),offset from S0写0,但是显示窗口中怎么是从地址839e7000开始的值?这应该是LOCAL端FIFO的内容吧.

  刚才将LCLK换成5M的时钟竟然又出现读FIFO就死机的现象了再换回25M又不死,逻辑等都没动,这是为啥.
qizhi
驱动小牛
驱动小牛
  • 注册日期2001-10-18
  • 最后登录2017-07-31
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2003-06-11 16:47
LED监测LW/R#信号肯定没戏,因为LW/R#只有几十到几百nS!即使LED可以发光,眼睛也无法看到。
其它问题,暂时没想明白。
算了,使用25MHz吧,干吗非得用5MHz?不是浪费9054了吗?
yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-06-11 23:05
用5M是确保FIFO能反应过来,FIFO是20ns的,25M应该没问题,算了就用它了
是同步FIFO,应该写进去了,因为我能量到写时钟写使能入口数据。读还是有问题比如现在读到的是0X45000047,应该是0X45464647不知道为啥中间没值,我再看看了。
3x!
imagewxg
驱动小牛
驱动小牛
  • 注册日期2003-05-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分221分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-06-12 08:13
看看数据线是否有短接的!!!!!
qizhi
驱动小牛
驱动小牛
  • 注册日期2001-10-18
  • 最后登录2017-07-31
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2003-06-12 09:07
首先,看是否数据线有问题。
再保证写数的时序正常。
读数时序更重要。特别是同步FIFO,时序比较复杂,引起重视。
yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-06-12 23:00
to qizhi:
1。同步FIFO时序怎么复杂?我理解是:写:在WCLK上升沿时只要WEN有效即可。读:在RCLK上升沿时只要REN有效即可。不是这样的吗。
2。还有你以前说的“此设计的前提是,你的FIFO足够快,满足一个时钟可以操作”,我的FIFO为20ns应该足够反应了吧?
3。地址译码我怎么觉得用不上,因为LOCAL端就只有FIFO空间。你说呢
4。PLXMON里面有个BLOCK DMA测试环境,这时DMA寄存器的值是啥呢,我能自己设吗我觉得必须设,比如LOCAL地址为常数就必须设置该位为1。
qizhi最好能和你电话联系了,你在深圳吗
qizhi
驱动小牛
驱动小牛
  • 注册日期2001-10-18
  • 最后登录2017-07-31
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
16楼#
发布于:2003-06-13 13:44
抱歉我在北京。但是,如果愿意你可以打电话。如果需要,请给我发邮件,我可以告诉你我的电话,请恕不能在此公开。
1、同步FIFO的WCLK和RCLK除了对应时刻的WEN和REN分别有效外,有的可能需要在WCLK、RCLK上升沿(也许是上升沿,不同的FIFO可能有差异)之前若干nS和沿之后若干nS一定有效,这样,就无法将WCLK和WEN、RCLK和REN分别连接到一起,这与异步时序有差异。不知道你的同步FIFO是否这种情况。
   关于此因为我恰好刚刚调试完成了一个FIFO的操作。为了测试,我用CPLD将FIFO的读写信号和读写数据线全部经过LOCAL控制,在实际设计中发现与我原来的想法有差异,也许我原来想的太简单了,认为与异步FIFO差不多,看来还是有差异。应该说,调试FIFO还是费了一点功夫的。
  另外,我用的FIFO的FF、EF、HF、PAE、PAF等标志,与时钟关系较为复杂,所以,我也因为要靠HF来实现Demand方式的DMA而费了一些力气,在此提出,仅为提醒大家少走弯路。
2、FIFO足够快的前提是指,你的FIFO在一个LCLK的周期内,能够完成读或者写操作,且建立时间、保持时间等参数可以得到保证。单纯从20nS难以判断,因为,FIFO除了操作速度外,还有数据建立时间、数据保持时间、写或者读脉冲宽度等参数,需要综合考虑。但是,以50MHz的本地时钟粗看20nS恰好满足移位速度的要求,但是,具体是否满足还请仔细看时序是否可以满足要求。如果LCLK速度低于50MHz,则满足的可能性更大些。
3、如果LOCAL只有FIFO,那么可能取任何地址都可以,但是需要注意这时需要选择本地地址保持常量选项。其实,FIFO还是有地址的,我的就有,只不过你的本地总线上没有其它设备占用地址,所以,不用具体地址译码罢了,但是,对FIFO的读写总得完成一定的逻辑操作,以便保证对FIFO操作的唯一性。
4、我不太清楚,我想设置是应该的。
yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-06-13 15:36
qizhi你的EMAIL地址?我的是yunyanrong@sina.com
调FIFO好痛苦呀
yunyanrong
驱动小牛
驱动小牛
  • 注册日期2003-04-18
  • 最后登录2013-03-02
  • 粉丝0
  • 关注0
  • 积分1040分
  • 威望457点
  • 贡献值1点
  • 好评度90点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2003-06-15 11:21
qizhi:
1。我用的是IDT72V285它是16位的,我用两个拼凑成32位,现在作试验只往FIFO中写6次,WCLK的上升沿在数据和WEN的正中间,连续6个WCLK写,时序仿真可以。比如写的是1,2,3,4,5,6;但是读到的却是2,4,6好像漏掉了不知是写漏的还是读漏的,我觉得是读漏的,READY信号按照你以前的那种方法产生的,读我就直接让REN=LW/R。你觉得是逻辑问题呢还是哪里寄存器没设置好?
2。PLXMON的按钮\"DMA\"进去后设置各个寄存器的值一按“start\"就出现蓝屏死机;但是用下拉菜单中的“BLOCK DMA”,进一个类似DOS的调试环境又可以读出来,但这种不知道该怎么设置DMA寄存器的值。你测试DMA是用的哪种方式?
测单次读写用的哪种方式?
你很久不上网了?
qizhi
驱动小牛
驱动小牛
  • 注册日期2001-10-18
  • 最后登录2017-07-31
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
19楼#
发布于:2003-06-15 14:10
1:我用的IDT72V255,与你的IDT72V285时序类似。看你的介绍好象是读有问题。请再次检查,RCLK应该比LCLK早,因为在RCLK上升沿后Ta的时间后,数据才有效,这时LCLK才应该有效。这也是我一直提醒你注意时序的一个原因,注意看其时序图。READY信号的产生是否还可能存在问题哪,请检查。
2:DMA按钮直接按不成,请看9054RDK的手册,需要设置PCI和本地寄存器为适当值才可以,否则死机是一定的。我恰好使用的是这种方式,块DMA和Demand方式的DMA我都试成了。
祝你好运。
上一页
游客

返回顶部