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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 100756|回复: 191

[原创] 关于AHB总线verilog代码实现(design篇)

[复制链接]
发表于 2013-12-5 10:24:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 hbhbts 于 2013-12-5 12:24 编辑

首先,来eetop也有两年了,在这里很感谢eetop!
回到正题,我准备利用周末的时间把前段时间学习的AHB spec相关知识做一个verilog AHB bus。
实际上verilog module完成只花了一点时间,但是验证这个module估计要花很长时间,目前正在使用UVM验证中...
等验证完,我会将verilog代码贴到论坛上。

下面关于我写的这个ahb bus 一些说明:
1)支持4个master port  和 4 个slave port,其中最后1个master port 如果没有使用(undefine master port:UMP),则需要
设置为default master (per AHB spec), default 作用是为了当bus没有owner时,指定一个只发IDLE trans的master。具体实现
可以set hbusreq=1, htrans=IDLE;  由于总线切换需要slave的hready和hresp信号的支持,所以,最好在system reset之后需要
所有的slave都能提供hready = 1 和 hresp = OKAY, 以支持总线的owner从default master 切换到需要transfer的master。

2)在verilog coding时,已经考虑到以后可能扩展到16 master port 和16 slave port, 因此该veriog代码的扩展性不错

3)该bus采用固定优先级总裁的方式, master port 编号越低,优先级越高,最后一个如果是UMP,那么就定义为default master

4)该bus不会在一个完整的busrt transfer完成之前将总线的owner切换,为此arbiter需要monitor master的htrans和hburst信号,在一个burst的最后一个transaction beat之前进行仲裁(per AHB spec),因此我需要提前知道该burst的长度, 该feature不支持INCR 不定长传输方式。
5)为了4)中的feature能在SINGLE 方式下依然可以支持,bus的hgrant信号需要做成组合逻辑。即:当仲裁使能信号有效时,arbiter会根据各个master的hbusreq信号立即给出响应(hgrant), 结合4)master在发定长的burst时,不需要一直拉着hbusreq,可以最短只拉一周期,如果一直拉着hbusreq且该master优先级较高的话,可以保证后续的transfer跟该transfer pipeling在一起,否者,在有default master的情况下,该master会丢掉bus access的权利,后续的transfer不得不重新申请总线,而浪费一个cycle。
6)master的hlock信号与hbusreq信号一样是在同一时间被bus arbiter访问的, 但是hlock需要在整个burst transfer都要拉着,不能像hbusreq只拉一小段cycles。为了能够handle slave response RETRY和SPLIT,master的hlock最好持续到burst的最后一个beat的后一个cycle。(per AHB SPEC)
7)对于hresp中的RETRY和SPLIT的支持,RETRY不需要bus做特别要求, 但SPLIT需要, 为此需要给每个master的busreq设定一个mask 信号,bus arbiter需要每个cycle都monitor slave的hresp信号是不是SPLIT, 如果是则要当hready==0的时候将对应的master的mask给打上,在下一个时钟(hready为高,hresp为SPLIT,master的htrans为IDLE)进行总线仲裁,从而让其他的mster获得access权利。同时,arbiter也要每个cycle都要monitor slave的hsplit信号,这个hsplit信号可将所有的slave的respose 的 split信号按位或在一起得到,如果发现有为1的bit位,就会将其对应的master的mask设为0,取消屏蔽,让该master能够重新获得access bus的权利(per AHB spec)
8)总线access的权利的切换只能在hready为高时进行。

ps:啰啰嗦嗦写了这些,肯定有些不对的地方,望请指正,谢谢!
 楼主| 发表于 2013-12-5 13:29:40 | 显示全部楼层
自个儿顶一下!
发表于 2013-12-5 14:45:56 | 显示全部楼层
好东西,顶
发表于 2013-12-5 14:48:58 | 显示全部楼层
难得的技术好帖,值得提倡和分享
发表于 2013-12-5 14:58:30 | 显示全部楼层
回复 1# hbhbts


   slave port略少,更希望看到UVM平台的分享
 楼主| 发表于 2013-12-6 11:06:44 | 显示全部楼层
UVM验证确实要比design麻烦很多,这个deriver很麻烦
发表于 2013-12-6 13:34:21 | 显示全部楼层

顶起~~祝楼主开心~
发表于 2014-2-27 14:19:12 | 显示全部楼层
我想知道代码呢?
发表于 2014-2-27 15:01:02 | 显示全部楼层
好东西啊
 楼主| 发表于 2014-2-27 19:03:16 | 显示全部楼层
回复 1# hbhbts

a.zip (28.08 KB, 下载次数: 2228 )
   上面这个就是ahb verilog code 和 基本的一些function的test
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-22 01:31 , Processed in 0.024885 second(s), 10 queries , Gzip On, Redis On.

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