AGRV2K逻辑设置

8 min read
AG32入门文档

1. 器件配置

 platformio.ini为PlatformIO的工程文件,所有工程设置均可以在这个文件中进行修改。


根据所使用器件修改board_logic.device,缺省为100 PIN的AGRV2KL100。如果使用的是64或48PIN的器件,需要修改为AGRV2KL64或AGRV2KL48。


逻辑配置文件大小固定为100KB。支持压缩功能,压缩之后的文件大小与设计有关,但一 般不会超过40KB。可以通过设置board_logic.compress = true来打开压缩,默认为false。逻辑配置文件默认占用内部fl ash的最后部分,可以通过board_upload.logic_address来改变。

2. 引脚设置

通过逻辑改变引脚定义:在platformio.ini中加入:

board_logic.ve = my_board.ve

将指定的ve文件放在platformio.ini同一目录下,然后点击PROJECT TASKS下的Upload LOGIC。VE文件格式为每个引脚一行,每行由Function_Pin和Device_Pin组成,可参考 AgRV_pio\platforms\AgRV\boards\agrv2k_103\board.ve。Device_Pin 由封装决定,一般为PIN_xx的形式。指定的VE文件名称可以是相对路径(基于当前项目目录,亦即platformio.ini文 件所在目录)或绝对路径。

Function_Pin 列表:

每一行的GPIO和外设引脚同一时间只能使用一个,可以在程序中使用 GPIO_AF_ENABLE(MAC0_MDC) 或 GPIO_AF_DISABLE(MAC0_MDC) 来打开或关闭外设。同一行的输入和输出外设引脚可以同时使用,例如UART1_UARTRXD可以和GPTIMER2_CHN2同时使用,但使用了二者任意一个均不可使用GPIO6_3。

每个引脚的其他设置可以通过在platformio.ini中指定board_logic.asf来实现:
board_logic.asf = my_board.asf

在指定的asf文件中加入具体设置:
# 将指定的PIN设为弱上拉(缺省为OFF)
set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to PIN_1
# 打开Slew Rate(缺省为0)
set_instance_assignment -name SLEW_RATE 1 -to PIN_68
# 设置驱动强度(缺省为8MA,支持4MA/8MA/12MA/16MA)
set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to PIN_1
# 打开Bus Hold(缺省为OFF)
set_instance_assignment -name ENABLE_BUS_HOLD_CIRCUITRY ON -to PIN_1

3. 预定义IP

在platformio.ini中加入:ip_name,然后同上点击Upload LOGIC。预定义逻辑不能与自定义逻辑同时使用。

4. 自 定义IP

在platformio.ini中加入logic_dir和ip_name。logic_dir是存放自定义逻辑的子目录,如果该目录不存在将自动创建。ip_name为自定逻辑的模块名称,不能与预定义IP同时使用。然后点击PROJECT TASKS下的Prepare LOGIC,工具将在指定的目录下产生一个Supra工程,工程文件以上图为例是 .\logic\agrv2k_103.proj。Supra软件可以通过AgRV_pio目录下的快捷方式Supra.exe启动,在软件中打开这个工程文件并选择 Tools -> Compile,详细使用请参见Supra的使用手册。在Supra工具成功编译完成之后,再点击Upload LOGIC更新逻辑配置。以上图为例,逻辑配置文件将产生于 .\logic\agrv2k_103.bin。例程可参考AgRV_pio\platforms\AgRV\examples\analog。

自定义逻辑的ve文件中除上述 “Function_Pin Device_Pin” 的引脚设置外,还可以加入另外两种引脚设置:
1.与自定义逻辑连接的顶层管脚,格式为:”Name Device_Pin:DIR”,DIR可以是INPUT,OUTPUT,或者INOUT。工具将把一个指定方向的管脚加入自定义逻辑,并连接到对应的芯片顶层管脚。
2.与自定义逻辑连接的某个MCU功能,格式为:”Function_Pin Name”。根据Function_Pin的方向,工具将自动在Name后面加入后缀 _in (用于驱动Function_Pin输入),以及_out_data/_out_en (用于接收Function_Pin的输出数据和使能) 作为自定义逻辑的管脚。

自动创建的Supra工程缺省将包含两个Verilog文件,分别对应芯片顶层和自定义逻辑模块。以上面为例名称分别是agrv2k_103.v和custom_ip.v。其中芯片顶层文件agrv2k_103.v每次运行 Prepare LOGIC的时候都会根据ve文件自动生成覆盖,请勿手工修改。自定义逻辑模块文件custom_ip.v则不会被覆盖,如果已经存在,新生成的文件将被命名为custom_ip_tmpl.v。生成的文件中包含根据ve文件生成的所有自定义逻辑模块管脚。

例如一个下面的ve配置:
txd_top PIN_67:OUTPUT
rxd_top PIN_66:INPUT
UART4_UARTTXD txd_ip
UART4_UARTRXD rxd_ip

将生成如下的自动逻辑模块:
module custom_ip (
output txd_top,
input rxd_top,
output rxd_ip_in,
input txd_ip_out_data,
input txd_ip_out_en,
……

除根据ve文件生成的管脚外,自定义模块中还包含以下信号与MCU连接:

5. 可移植IP

上述的自定义IP可以被转化成可移植IP,供其他AGRV2K工程使用。在platformio.ini中除logic_dir和ip_name外,再加入logic_ip:
logic_ip = true
然后点击PROJECT TASKS下的Prepare IP,工具将在指定的目录下产生类似自定义IP的Supra工程。这个工程的顶层模块即是自定义逻辑的顶层,不包括芯片顶层。一切设置,包括时序约束,都应当基于自定义逻辑的顶层。使用Supra编译好之后,可移植IP的目录位于指定的logic_dir\ip_name下。以上图为例,工程的顶层模块是custom_ip.v,可移植IP的目录是logic\custom_ip。例程可参考AgRV_pio\platforms\AgRV\examples\custom_ip。

使用可移植IP的时,把上面生成的custom_ip目录放在任意目录下,例如my_ips。然后在platformio.ini中加入ips_dir来指定这个目录(如果在同一个工程中使用可以跳过这一步):
ips_dir = my_ips # 注意这里不是custom_ip目录,而是它的上一级

点击PROJECT TASKS下的Update LOGIC,即可生成以及下载基于可移植IP的逻辑配置。这里使用的ve文件与生成可移植IP时使用的ve文件相比,必须满足如下条件:

    • 由 “Function_Pin Device_Pin” 定义的管脚可以随意改变,也可以增减,因为它们与IP没有连接关系
    • 由 “Name Device_Pin:DIR” 和 “Function_Pin Name” 定义的管脚,Name不得改变,Device_Pin以及Function_Pin则可以改变,也就是说同一个IP管脚可以在使用的时候映射到不同的顶层管脚或是MCU功能