关于AHB-RAM的一些内容1

在介绍AHB-RAM模块之前,我准备先讲一讲AHB总线。

AHB总线是AMBA总线规范的一部分,可用于高性能,高时钟频率的系统结构。AHB可以将CPU,高带宽的签上RAM,高带宽的外部存储器接口,DMA总线master,各种拥有AHB接口的控制器连接起来形成一个完整的独立的soc系统。

AHB总线由master,slave,arbiter,数据多路,地址控制多路和译码器构成。当master发起依次读/写操作时(只能由一个主设备使用总线),从设备(通过地址译码器的地址映射来选择使用哪个从设备)响应读/写操作,arbiter允许某一个主设备控制总线。

关于AHB-RAM的一些内容1_第1张图片

在传输中从机通过响应信号来表示状态(HRESP[1:0])分别由OKAY,ERROR,RETRY和SPLIT RETRY都表示传输不能立刻完成,但总线应该继续尝试传输。

关于AHB-RAM的一些内容1_第2张图片

总的来说,总线分为三组:写数据总线,读数据总线,地址控制总线。

接下来讲一讲总线的操作。当一个master向arbiter发出请求要占用线,在这段时间按值能允许一个master可以接入总线,并且对指定的slave进行读写。得到授权的总线开始AHB传输,首先发出地址和控制信号,主要提供地址信息,传输方向,带宽和BURST类型,译码器根据地址和控制信号确定哪个slave和master进行传输,在每一次传输过程中,包括:1,一个地址和控制周期  2.一个或者多个数据周期。值得注意的是,地址和控制周期不可以扩展,但是数据周期可以通过HREADY进行扩展,当HREADY为低时剋给传输加一个等待状态让slave有足够的时间来采样数据,只有完成了一个完整的BURST传输,arbitrer才会让其他的master进入总线。

关于AHB-RAM的一些内容1_第3张图片

我们看下简单传输。在第一个周期的上升沿,MASTER驱动地址和控制信号,第二个周期的上升沿,SLAVE采样地址和控制信号,并将HREADY拉高,如果是写操作的话,master会在第二个周期上升沿传输写入的数据,如果是读操作的话,slave会在HREADY拉高后将数据写入总线。第三个周期上升沿,如果是写操作,master获取HREADY高信号,表明slave已经接收数据。如果是读操作的话,master获取HREADY信号,表明此时读数据有效并被master接受。需要注意的是,HREADY信号在数据有效期间必须为高,并延续到第三个周期的上升沿之后,确保master的正确采样。由于AHB-RAM仅做了简单传输,因此不再赘述其他传输。

AHB-RAM模块的第一步,就是VIP的构建:1.首先构建出具有ahb层次的monitor/sequencer/driver。分别使用AHB等次组件构建master和slave层次的master agent和slave agent组件。

2.构建自身的config,所有层次的组件都应该有config句柄,并且通过configdb获取config,以及定义枚举类型和宏文件_defines types。

3.构建ahb interface,并且加入协议相关的assert coverage。

4.构建ahb sequence的transaction类。

5.构建基础的sequence,通过修改seuence中变量的值来是先发送不同的数据。

6.使用base_sequence来实现具体的ahbram测试的sequence,通过vortual_sequence挂载到virtual_sequencer上。

简单来说,我们实现了一个agent组件直接用于顶层复用,transaction.sv实现激励类型,driver.sv实现协议时序和数据驱动,monitor实现了对接口数据额检测采样,seqeuencer用于将sequence传送给driver,是这两个组件之间的桥梁。

 

 

 

 

 

 

你可能感兴趣的:(网络)