DesignWare_APB_GPIO模块DUT&Testbench仿真

ip测试之DW_APB_GPIO模块DUT&Testbench仿真

  • 1.学会读 DW_apb_gpio_databook(数据手册可于主页下载)
    • 1.1 Overview:
    • 1.2 Function:
    • 1.3 Features:
  • 2. 仿真
    • 2.1 Workspace Directory Contents:
    • 2.2 Function Description:
    • 2.3 Registers:
    • 2.4 仿真结果:

Synopsys 的gpio是DesignWare高级外围总线(DW_apb)的一个component,confirm to ARM的AMBA规范2.0。。


1.学会读 DW_apb_gpio_databook(数据手册可于主页下载)

其实GPIO我们很熟悉,在ARM设备中用的比较多,在使用STM32或者树莓派时我们就开始使用它。是嵌入式最基本的接口,作为输入端口时,我们可以通过它们读入外部数据,作为输出端口时,我们可以通过它们输出高电平或低电平来控制连接的外围设备。通俗地说,GPIO就是用来控制引脚的。所以以往使用GPIO的经验在这里也一样适用,我们依然是通过寄存器操作GPIO。

1.1 Overview:

Synopsys的 DW_apb_gpio是DesignWare高级外设总线的一个组成部分,我们借着这个图分析一下gpio这个IP。
DesignWare_APB_GPIO模块DUT&Testbench仿真_第1张图片

可以看到这些小IP都可以挂到APB总线上,APB高级外设总线,顾名思义主要用于低带宽的外设之间的连接,例如UART,GPIO都可以接到上面。高级外设总线不像高性能总线那样可以支持多个主模块,在APB里面唯一的主模块就是APB 桥。
 
再回到ip本身,配置一个IO需要用寄存器。按照经验,我们用配置寄存器选择引脚功能,用数据寄存器读/写端口数据。一般我们在用GPIO控制外设的时候,就是配置某个引脚为输出或是输入,再在数据寄存器中写入0或1让引脚输出高电平或者低电平。如果设置为输入的话一般用于地址控制。在adb_gpio中也一样,比如对于gpio_swporta_dr寄存器,若某些位设置为output,则寄存器的值将被输出。
 

1.2 Function:

DW_GPIO的特点包括: 1. APB与APB bridge之间的接口
2. 外部数据接口
3. 辅助硬件数据接口
4. 中断接口

 DesignWare_APB_GPIO模块DUT&Testbench仿真_第2张图片

 
最好可以生成workspace后APPLY,对照着src下面的component.v一起看,比如会生成什么信号。在代码里面看有多少生成的信号。然后他也会有注释,对于刚看这些IP的同学,如果对注释看不懂呢就结合databook一起,可能还要结合这个Block Diagram 一起看,其他IP的框图也和GPIO一样一般在手册的第一章,会有一个DW_apb_component Block Diagram。
 

1.3 Features:

DesignWare_APB_GPIO模块DUT&Testbench仿真_第3张图片 
DW_GPIO的特点包括:
1.有128个独立配置的信号
2. A到D四个端口,可单独配置
3. 每个信号都有单独的数据寄存器和数据方向寄存器
4. 每个信号位的可配置硬件和软件控制
5. 端口A的可配置中断模式
6. 可配置的去抖动逻辑,带有外部慢时钟,以消除抖动中断
7. GPIO组件类型寄存器
8. GPIO组件版本寄存器
9. 输出信号上的可配置重置值

 

2. 仿真

仿真之前做好准备工作,下载正版的Synopsys公司的软件coreConsultant。

2.1 Workspace Directory Contents:

了解一下代码结构,打开coreConsultant,建立Workspace后查看生成的代码结构。
 
在这里插入图片描述
 
这里我做了一个结构导图,大家可以看看:
 
DesignWare_APB_GPIO模块DUT&Testbench仿真_第4张图片
 

2.2 Function Description:

在这里插入图片描述

GPIO这个IP可以分为软件控制模式和硬件控制模式,在软件控制模式下,外部I/O的Direction由Portx数据方向寄存器(gpio_swportx_ddr)的写入控制。而写入的数据被传输到DW_apb_gpio外围设备的输出信号gpio_portx_ddr上。外部数据通过外部数据信号gpio_ext_portx输入。根据gpio_ext_portx是配置为输入还是输出,确定是读取信号上的值还是读取Portx的数据寄存器。
在这里插入图片描述
在该模式下,会生成辅助数据输入信号(aux_portx_out)和方向控制信号(aux_portx_en)[0 = Input; 1 = Output],其中x为a、b、c或d。
 

2.3 Registers:

DesignWare_APB_GPIO模块DUT&Testbench仿真_第5张图片
数据手册第6章记载了各种Registers的offset和对应描述,方便我们配置对应的寄存器。
 
我们来看一段代码:
DesignWare_APB_GPIO模块DUT&Testbench仿真_第6张图片应的offset然后去测试就好了。
 

2.4 仿真结果:

进入我们最关心的仿真环节,写好testbench,就可以利用coreConsultant测试了:
比如我们配置gpio_inttype_level和gpio_int_polarity这两个寄存器,
在这里插入图片描述
在这里插入图片描述
测试一下仿真结果
 
DesignWare_APB_GPIO模块DUT&Testbench仿真_第7张图片

再试一下其他的Testcase:
DesignWare_APB_GPIO模块DUT&Testbench仿真_第8张图片
没问题。。


以上就是我们测试小ip的过程,但是要跑通ARM与ASIC之间的连接,需要跑通各个ip的软件控制流程(ARM-AMBA连接测试),后面会用到DS5等软件,DS5的安装尤其细节,不过已经跑通,有时间可以写一篇分享。


DW_apb_gpio_databook的下载地址:
(https://download.csdn.net/download/weixin_49457347/86309521)

你可能感兴趣的:(FPGA,Vivado,APB_GPIO,嵌入式硬件,fpga开发,arm,系统架构,功能测试)