阅读:2403回复:10
68013 slavefifo满标志flagb异常的问题----高手请进
同步写入时,控制面板不读的情况下,我的满标志flagb在slwr<='0'时不正常,按理满标志应该一直为'0'(满)有效才对,可是视波器显示
是有高有低,而且是高占多数,而改为slwr<=not fullflag则一切正常,控制面板不读的时候flagb常为'0' 各位老大到底是怎么回事啊?slwr<='0'就是一直写入fifo,应该一直满才对啊? 另外,半满标志如何定义啊?小第一直找不到? ![]() |
|
沙发#
发布于:2007-05-11 13:14
看的我晕乎。。
slwr可以设置极性 flag也可以设置极性 具体参考技术参考第15章,寄存器中的第5节的PINFLAGSAB,PINFLAGSCD,FIFOPINPOLAR 找不到就稀奇了。。 |
|
板凳#
发布于:2007-05-11 15:05
巨牛兄:我的意思是slwr低有效时是不是满标识也一直低有效,按理由应该是的,可是结果确是经常出现高(不知为何).
默认情况下slwr和flagb当然是高有效啦,这个我知道, |
|
地板#
发布于:2007-05-11 19:08
PKTEND<='1';
SLOE<='1' ; SLRD<='1'; fifoAdd<="10"; --端点6 process(IFCLK) --48M的IFCLK begin if IFCLK'event and IFCLK='1'then if fullflag='1'then --fifo不满时计数器++ dataCount<=dataCount+1; end if; end if; end process; FD(7 downto 0)<=dataCount(7 downto 0); --FD的低8位 ----------------------------------以上代码对应第一副图-------------------------------------------------- ----------------------------以下代码是把SLWR放在时钟里,对应第二副图----------------------------- process(IFCLK) --48M的IFCLK begin if IFCLK'event and IFCLK='1'then SLWR<= not fullflag; end if; end process; PKTEND<='1'; SLOE<='1' ; SLRD<='1'; fifoAdd<="10"; --端点6 process(IFCLK) --48M的IFCLK begin if IFCLK'event and IFCLK='1'then if fullflag='1'then --fifo不满时计数器++ dataCount<=dataCount+1; end if; end if; end process; FD(7 downto 0)<=dataCount(7 downto 0); --FD的低8位 |
|
地下室#
发布于:2007-05-11 19:22
第二副图明显漏数据了,就因为用了
process(IFCLK) --48M的IFCLK begin if IFCLK'event and IFCLK='1'then SLWR<= not fullflag; end if; end process; 不知道为何用slwr跟时钟同步反而会漏数据?? 用示波器观察满标志flagb的结果: SLWR<= not fullflag 不在时钟里的话,软件端又不读的话,flagb一直为'0',即一直为满,很正常,所以第一副图没漏数据。 SLWR<= not fullflag 在时钟里的话,软件端又不读的话,flagb有高有低,不正常,所以第二副图漏数据。 还有,将SLWR<='0'的话flagb也是有高有低,不正常 不知大家看懂我要问什么没有?我就是想知道明明是SLWR接地fifo已经写满了,为何flagb还会出现非满的情况?!!! |
|
5楼#
发布于:2007-05-14 09:34
你第一幅图像也丢数据了,只是可能丢的比较有规律,比如取了前一幅的前半部分和后一幅的前半部分拼成的数据
第2幅不过是取了前一幅的中间部分和后一幅的中间部分拼成的,没什么区别 不管同步不同步,读数据的时候一定不能让端点满了,否则数据必然丢失 |
|
6楼#
发布于:2007-05-14 11:39
jinghuiren兄,我第一副图没有丢数,是很完整的一副256灰阶图,另外我用控制面板读过,当前读出的第512个数跟下一次读出的第一个数是连在一起的,当然同一512字节里的数也是连在一起的。
jinghuiren兄:你在写fifo时是不是用满标志来判断,不满时则写入,满时则写无效,那么你的这句逻辑是不是 SLWR<=NOT FullFlag;或者是SLWR<=NOT FullFlag when (符合你的条件);第一种逻辑表达方式不会漏数,第二种则经常在不该写入时也写入了,不知是不是我的68013芯片有问题造成的? 另外,你在回复我的短消息中说在slavefifo模式下,slwr接地后软件端没有读数的情况下是常满的,可是我测试的结果是:即使slwr接地,满标志在软件端没有读数的情况下也经常不满,难道是我的芯片坏了?你确实试过将slwr接地并观察到满标志为常满么?? |
|
7楼#
发布于:2007-05-14 16:40
满标识满后,如果slwr在接低一段时间,满标识会不会变为非满(在软件端不读走数据的情况下)??
|
|
8楼#
发布于:2007-05-14 16:53
我出现的问题也可能是这样,所以在两次去数据之间出现丢数据的现象
|
|
|
9楼#
发布于:2007-05-14 20:39
我试过将电路板上电后等待6秒后史slwr保持2048个ifclk周期的低电平,然后恢复高电平,可是满标志始终没满,而且控制面板读512*2个字节就再也读不出了??
史slwr保持4096个ifclk周期(或更长时间)的低电平也一样,到底为什么??? |
|
10楼#
发布于:2007-05-14 22:10
我现在怀疑可能还是时序的问题,回头再看时序
|
|
|