grlib说明文档中文版

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5GRLIB design concept

5.1introduction

GRLIB是一个可重用IP Core的集合,并分成了多个VHDL库。每一个库提供了特定厂商的元件或者一系列共享的功能或接口。在GRLIB设计中使用的数据结构和元件声明都是通过库指定的VHDL包来输出的。

GRLIB是基于AMBA AHB和APB片上总线的,并把该总线用作标准的互联接口。AHB/APB总线的实现是与AMBA-2.0相兼容的,并附加了额外的“sideband”(边带)信号。这些边带信号的有三个用途:automatic address decoding,interrupt steering和device identification(a.k.a plug&play support)。根据AHB/APB 信号的功能,GRLIB的库把这些信号以VHDL records的形式组合在一起。GRLIB AMBA包的源文件在lib/grlib/amba/下。

所有的GRLIB core都使用同样的data structures来声明AMBA接口,这样相互之间的连接就很容易了。GRLIB库还包含了一个AHB bus controller和一个AHB/APB bridge,借助这两个模块,可以很快组装成一个全功能的AHB/APB的系统。

下面的部分将描述AMBA总线是怎么实现的以及怎样用GRLIB来建一个SOC设计。

5.2AMAB AHB on-chip bus

5.2.1General(概述)

AMBA Advanced High-performance Bus(AHB)是一个multi-master的总线,可以以high data rate and/or variable latency的形式来互连各单元。图5就是一个概念图。图中连在总线上的单元分为masters(主)和slaves(客),并都受一个全局的总线仲裁器(global bus arbiter)控制。

由于AHB总线是复用的(而不是三态的),更正确的总线与单元互连示图可以参考图6。每一个master驱

动了一系列以VHDL record形式的组合在一起的信号HMSTO。当前总线master的输出record被总线复用器选中并被送到所有AHB slaves的input record(ahbsi)。被激活的slave的output record(ahbso)被总线复用器(bus multiplexer)选中并输出到所有的masters。一个组合的bus arbiter,address decoder and bus multiplexer 控制着哪个master和slave会被选中。

5.2.2AHB master interface

AHB master的inputs、outputs都定义成VHDL record type形式,都以GRLIB AMBA库中TYPES package 的形式输出:

--AHB master inputs

Type ahb_mst_in_type is record

hgrant:std_logic_vector(0to NAHBMST-1);--bus grant

hready:std_ulogic;--transfer done

hresp:std_logic_vector(1downto0);--response type

hrdata:std_logic_vector(31downto0);--read data bus

hcache:std_ulogic;--cacheable

hirq:std_logic_vector(NABIRQ-1downto0);--interrupt result bus

end record;

--AHB master outputs

type ahb_mst_out_type is record

hbusreq:std_ulogic;--bus request

hlock:std_ulogic;--lock request

htrans:std_logic_vector(1downto0);--transfer type

haddr:std_logic_vector(31downto0);--address bus(byte)

hwrite:std_ulogic;--read/write

hsize:std_logic_vector(2downto0);--transfer size

hburst:std_logic_vector(2downto0);--burst type

hprot:std_logic_vector(3downto0);--protection control

hwdata:std_logic_vector(31downto0);--write data bus

hirq:std_logic_vector(NAHBIRQ-1downto0);--interrupt bus

hconfig:ahb_config_type;--memory access reg.

hindex:integer range0to NAHBMST-1;--diagnostic use only

end record;

record type中的信号与AMBA2.0规范中AHB master的相应信号一致,但附加了四个边带信号:HCACHE,HIRQ,HCONFIG,HINDEX。GRLIB中一个典型的AHB master定义如下:

library grlib;

use grlib.amba.all;

library ieee;

use ieee.std_logic.all;

entity ahbmaster is

generic(

hindex:integer:=0);--master bus index

port(

reset:in std_ulogic;

clk:in std_ulogic;

hmsti:in ahb_mst_in_type;--AHB master inputs

hmsto:out ahb_mst_out_type--AHB master outputs

);

end entity;

输入record(HMSTI)接到各masters,当中包括对全部masters的bus grant(总线允许)信号HMSTI.HGRANT。因此,一个AHB master必须使用一个generic(常量)来指定具体的哪一根HGRANT是要用的。这个generic 的type是integer,通常叫作HINDEX(参见上面的例子)。

5.2.3AHB slave interface

与AHB master的接口类似,AHB slaves的inputs和outputs也是定义成两个VHDL的records types: --AHB slave inputs

type ahb_slv_in_type is record

hsel:std_logic_vector(0to NAHBSLV-1);--slave select

haddr:std_logic_vector(31downto0);--address bus(byte)

hwrite:std_ulogic;--read/write

htrans:std_logic_vector(1downto0);--transfer type

hsize:std_logic_vector(2downto0);--transfer size

hburst:std_logic_vector(2downto0);--burst type

hwdata:std_logic_vector(31downto0);--write data bus

hprot:std_logic_vector(3downto0);--protection control

hready:std_ulogic;--transfer done

hmaster:std_logic_vector(3downto0);--current master

hmastlock:std_ulogic;--locked access

相关文档
最新文档