你的位置:EETOP 赛灵思(Xilinx) 社区 >> >> 全部 >> 详细内容

关于AHB总线verilog代码实现(design篇)(EETOP网友原创)

发布者:jackzhang 时间:2013-12-08 11:05:00

作者:hbhbts
转自EETOP论坛:http://bbs.eetop.cn/thread-429966-1-1.html

首先,来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为高时进行。

最新课程

  • 深入浅出玩儿转FPGA

    本视频基于Xilinx公司的Artix-7FPGA器件以及各种丰富的入门和进阶外设,提供了一些典型的工程实例,帮助读者从FPGA基础知识、逻辑设计概念

  • 从零开始大战FPGA基础篇

    本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“

  • Verilog基础及典型数字

    课程中首先会给大家讲解在企业中一般数字电路从算法到流片这整个过程中会涉及到哪些流程,都分别使用什么工具,以及其中每个流程都分别做了