在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
EETOP诚邀模拟IC相关培训讲师 创芯人才网--重磅上线啦!
楼主: liuwanghao

请教有关AHB的slave几个问题!!

[复制链接]
发表于 2006-7-13 20:35:01 | 显示全部楼层
谢过,我一个朋友很需要,所以下载给他看啦
 楼主| 发表于 2006-7-13 21:57:53 | 显示全部楼层

有些明白了,还是有点晕,呵呵……

1.HREADYout信号是有slave自己发出的,它啥时候ready了,就拉高HREADYout,完全是自主的吧,不知道我理解的对不对?
2.HREADYout在输入的HREADY的控制下变化,HREADYout的输出通过mux选出HREADY,这样不就形成一个组合反馈环路了吗?还是我哪里理解错了,还是HREADYout不应该在输入的HREADY的控制下变化,完全是自主发出的?
发表于 2006-7-13 23:41:55 | 显示全部楼层


原帖由 liuwanghao 于 2006-7-13 21:57 发表
1.HREADYout信号是有slave自己发出的,它啥时候ready了,就拉高HREADYout,完全是自主的吧,不知道我理解的对不对?
2.HREADYout在输入的HREADY的控制下变化,HREADYout的输出通过mux选出HREADY,这样不就形成一 ...


out是自主的,你的1说得对。
in只是总线状态的引入而已,一般情况下是不可能用来做out的控制的。而且一般实现时,out是寄存器输出的,不会形成组合环。
 楼主| 发表于 2006-7-16 16:08:39 | 显示全部楼层
这是我要AHB上挂的slave设备的读写时序。
有个问题:在操作时,如果先是写操作,紧接着是读操作,根据时序会造成slave的地址总线的冲突,我在考虑通过拉低HREADYout,把读地址拉长一个cycle来解决这个问题,关键是怎么识别这个先读后写的状态并及时给出HREADYout低的信号?
我把HWRITE延时一个cycle,当采到HWRITE低,且HWRITE_ff1高时,认为识别到这个状态,但是这时候给出HREADYout低,已经晚了,写地址已经送出去了?
难道用组合逻辑做,一旦HWRITE低,且HWRITE_ff1高,就拉低HREADYout,这样做感觉不爽?

slave的读写时序

slave的读写时序

HREADYout晚了一个cycle

HREADYout晚了一个cycle
发表于 2006-7-16 20:33:45 | 显示全部楼层
怎么会搞得这么复杂?data phase本来就是晚address phase一拍,任何操作都是pipeline进行的,你在address phase做判断,在data phase可以从容地拉低hready的。
 楼主| 发表于 2006-7-17 21:48:32 | 显示全部楼层
按照那个SLAVE要求的时序:写操作,HADDR为1时,要把地址延时一拍,才能写到SLAVE中,这样就和读操作HADDR为2的地址在SLAVE的地址线上冲突了,只能把HADDR为2拉长,也就是把数据11拉长,但是我只需要在写操作后紧接着读这种情况,才把HREADYout拉低,我需要先知道是先写后读这种操作,才拉低HREADYout,所以就会出现实际上是把数据22拉长了,没达到目的!

请扁兄帮我多看看,谢谢!
发表于 2006-7-18 10:55:00 | 显示全部楼层


原帖由 liuwanghao 于 2006-7-17 21:48 发表
按照那个SLAVE要求的时序:写操作,HADDR为1时,要把地址延时一拍,才能写到SLAVE中,这样就和读操作HADDR为2的地址在SLAVE的地址线上冲突了,只能把HADDR为2拉长,也就是把数据11拉长,但是我只需要在写操作后紧 ...


写数据11是不需要拉长的,马上写入就可以了;只有读数据22是需要拉长的(你的读地址也要锁存一拍),所以你的hreadyout的时序是对的。
 楼主| 发表于 2006-7-18 22:09:54 | 显示全部楼层
把数据11来长的同时,不就把地址2来长了吗?我的目的是拉长地址2,所以HREADYout提前一拍不就好了,把数据11拉长只是被动的?如果要是把数据22拉长的话,那读取一个数据就固定要2个cycle了,如果总线连续读取数据,总线的效率就低了?
发表于 2006-7-18 22:47:01 | 显示全部楼层


原帖由 liuwanghao 于 2006-7-18 22:09 发表
把数据11来长的同时,不就把地址2来长了吗?我的目的是拉长地址2,所以HREADYout提前一拍不就好了,把数据11拉长只是被动的?如果要是把数据22拉长的话,那读取一个数据就固定要2个cycle了,如果总线连续读取数据 ...



数据11拉长是来不及的,而且也是降低效率的。所以要靠判断“写后读”的条件来拉低读时候的hready,同时锁存地址2;如果不满足“写后读”条件就不拉低hready,也不锁存地址,所以你的访存地址要有个“条件”来选择是来自锁存地址还是直接来自总线地址。

你考虑一下怎么把这个思路实现出来就可以了。
 楼主| 发表于 2006-7-18 23:04:15 | 显示全部楼层
有些明白了,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-1-5 12:49 , Processed in 0.024861 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表