文章
  • 文章
搜索
首页 >> 技术文档 >> AG32 下 fpga/cpld 的使用入门(8月更新)
详细内容

AG32 下 fpga/cpld 的使用入门(8月更新)

在 AG32 芯片(所有型号)中,都有内嵌 2K 的逻辑门,可供 fpga/cpld 来使用。

也就是说,使用 AG32 的芯片时,有三种选择:

1. 只使用 mcu 部分;

2. 只使用 cpld 部分;

3. 同时使用 mcu 和 cpld;

这里会介绍:使用 cpld 部分,以及 mcu 和 cpld 的联合编程。


一、流程描述

该部分会对 cpld 的使用过程做一个简单的介绍。

1、安装工具软件:

fpga/cpld 需要使用 Supra 和 Altera Quartus II 两个软件来编程。

其中:

Supra.exe 软件在安装完 SDK 后,已经在 SDK 路径下了。

(注:如果 SDK 下没有找到 Supra.exe,可进入 AgRV_pio\packages\tool-agrv_logic\bin 去打开

Supra,同时建议手工新建一个快捷方式到 SDK 路径下以方便后续使用)

Altera Quartus II 软件需要用户自行安装,安装后对应安装器件库。

在这两个软件中,

Quartus 工具用来编写 vlog 代码并导出 vo 文件,

Supra 工具使用 vo 文件来生成最终的 bin 并烧录下载。


2、建立 cpld 空工程:

注:如果只使用 cpld 不使用 mcu 功能,可以使用这步来自动产生引脚映射代码,也可跳过

这步用 Supra 来创建工程(这个过程可参考文档《AG1KLP 应用指南.pdf》)

这里默认是安装过 VSCODE 以及 mcu 的 SDK 开发包的。如果该软件没安装,请先参考《AG32

开发环境搭建.pdf》搭建 mcu 环境。

搭建好 SDK 环境后,这里以 example(路径:...\AgRV_pio\platforms\AgRV\examples\example)

为例建立工程。

在 example 样例程序中,默认是没有打开自定义 ip 的。

要先打开自定义 ip:

方法:在 platformio.ini 中打开以下两项:

ip_name = analog_ip

logic_dir = logic


打开以上两项后,才能在左边栏看到创建 logic 默认工程的选项(prepare LOGIC):

image.png

点击该功能【Prepare LOGIC】后,可以看到在 example 工程目录下生成一个 logic 文件夹,

自动生成的文件如下图:


image.png

这里生成的 logic 文件夹,就是后续编写 cpld 的模板。

关于改写文件名:

这里的文件名字,是根据 platformio.ini 里边的配置项来的:

board_logic.ve = example_board.ve

ip_name = analog_ip

logic_dir = logic 如果想改文件名字,可先在 platformio.ini 中更改名字,更改后再点生成按钮来自动生成。可更改的名字,

就是上边的三项:

board_logic.ve 对应 logic 文件夹内 example_board.v 的名字

Ip_name 对应 logic 文件夹内 analog_ip.v 的名字

Logic_dir 对应文件夹 logic 的文件夹名字

在生成后的文件夹内,注意其中的两个.v 文件:analog_ip.v 和 example_board.v。

这两个文件是 vlog 的源码文件。

其中:

analog_ip.v 是一份空的模板,用户自己要实现的功能,就在这个空模板上展开;

example_board.v 是根据工程中 example_board.ve 里的 pin 配置,自动转换出来的 v 源码。这

部分最好不要手工改写。如果项目中有引脚改动,最好改 ve 配置然后这里自动导出。

到这里,空工程建立完毕。

注:这里只是以 example 来举例。实际应用中,在导出空工程前,需要先配置好 platformio.ini

的其他项和 example_board.ve 所需要的引脚。

包括:board_logic.device 配置 48/64/100 脚。


3、打开工程:

使用前边安装的 Quartus II,打开 example\logic 下的工程。

如果是初次使用 Quartus II,在安装完器件库后,AG32 要选用器件库中里 Cyclone IV E 的

EP4CE75F23C8 来模拟。(默认打开 example\logic 工程后已经是该项了,确认下即可)

工程如下:


image.png



这里除了 example_board.v 和 analog_ip.v 外,还有个系统的 alta_sim.v,这个文件是提供芯片

系统的功能,可不用关注。

此时,这个工程是个空的工程,用户要根据需求在 analog_ip.v 中实现功能。

这里展示使用流程,先使用现有的 demo:

把样例程序 examples\analog\logic 下的 ahb2apb.v 和 analog_ip.v 复制过来,替换掉刚生成的

空的 analog_ip.v。

然后在项目中把 ahb2apb.v 也加入到工程。


image.png


这个时候,原有的工程就变成 examples\analog 样例工程了。

接下来进行编译和烧录。


4、生成 VO:

打开 Quartus 的 tools->TCL Scripts,如下图所示:

image.png


【Run】运行成功后,可以看到该 logic 占用的逻辑单元数。


image.png


这里的资源,斜杠前边标识的大小就是所占的逻辑单元大小,不能超过 2K。

注意:第一次导入工程,必须执行上图的方式来转换。后续编写和修改 cpld 代码后,可以

仍然执行上图方式,也可以直接点“编译”按钮编译即可。


image.png


执行到这里,会在 logic 下生成 vo 文件出来(在\logic\simulation\modelsim 下),Quartus

工具的任务完成。

接下来打开 Supra 来继续生成 bin 文件。


5、supra 编译:

在 Supra 工具里,打开该工程(example\logic)。

然后,点击 Tool -> Compile,在弹出的画面中点右下角的【run】


image.png


编译成功后,画面会有提示。

Compile design example_board done with code 0


然后在 logic 路径下可以看到新编译出来的 bin。

这个 bin 就是要烧录到 mcu 的 cpld 部分最终 bin。


6、烧录:

可以使用 supra 直接烧录,也可以在 vscode 下烧录。

如果在 vscode 下烧录,请参考《AG32 在 VSCode 下的使用入门.pdf》,

如果在 supra 下烧录,请参照下图,或参考《MANUAL_Supra_6.2.pdf》对烧录部分的描述。


image.png


到这里,新建一个空工程,编译,烧录的流程描述完毕。


注意:

如果使用纯粹的 fpga,逻辑部分的定义和编写不用考虑 mcu 这边。

但是,如果要使用 mcu 和 fpga 的信息交互,必须依赖上述的流程。上述流程中涉及两个比

较关键的点:

1. 顶层模块的命名:

      自定义的逻辑,顶层文件名必须与顶层模块名相同,就是在 platformio.ini 中设置的

       ip_name 的名字。

       这个对应关系,在上述流程点 prepare LOGIC 自动生成代码时,会自动完成。

       如果是自己纯手工编辑的逻辑代码,或者对这里的命名进行过改动,会出现后续 Quartus

       中的异常。


2. Ve 中定义的信号关联:

在 AG32 中,mcu 和 cpld 和外部引脚,三者是相互独立的。

    1. mcu 用的 IO,在 ve 里,可以关联到外部引脚 Pin_xx;

    2. cpld 用的 IO,在 ve 里,可以关联到外部引脚 pin_xx;

    3. mcu 的某一路信号又可以直接和 cpld 的某一路信号,在 ve 里,关联起来;

         所以,ve 是很关键的一个桥梁。

在 ve 中定义好以后,运行 prepare LOGIC 会自动产生 cpld 的顶层模块的输入输出接口,

这些接口就是 cpld 模块连接到 mcu(或外部引脚)的信号通路。


这里着重描述下 3 种情况在 VE 里的定义。

     1. mcu 和外部引脚的关联:

        比如,定义 gpio 到外部引脚:GPIO4_3 PIN_32

        比如,定义串口 0 到外部引脚:UART0_UARTRXD PIN_31


image.png


定义格式为:前边为 mcu 的 FunctionName,后边是 PIN 脚 ID。

这部分在 mcu 使用里描述的很多了,不再赘述。



2. cpld 和外部引脚的关联:

    比如,定义 led 到外部引脚:LED_D3 PIN_32:OUTPUT


image.png


定义格式为:cpld 信号名称 外部 pin 脚 ID: 方向

其中,

cpld 信号名称,是自定义名称,随后在 cpld 中自行引用;

方向,有 3 种:OUTPUT、INPUT 和 INOUT,这个方向是 cpld 对外来说的。

在 ve 里定义后,prepare LOGIC 时,在逻辑顶级模块中会自动生成 output LED_D3,然后

在 cpld 代码中操作 LED_D3 这个通路,就是实际操作的 PIN_32 管脚。

这部分的使用,参考样例《cpld 控制 led》。


3. mcu 和 cpld 之间的信号关联:

比如,定义 gpio 信号到 cpld:GPIO4_1 iocvt_ip

比如,定义串口 1 的 tx 信号到 cpld:UART1_UARTTXD txd_ip

定义格式为:MCU 的 FunctionName cpld 引脚名称

其中,

这里的 FunctionName,同 1 中的 FunctionName,就是 mcu 里的通路定义。更多定义参

考《AGRV2K_逻辑设置.pdf》,里边有全部的 mcu 端可用的 FunctionName 列表。

除了 mcu 的 FunctionName(映射到引脚)外,mcu 对 cpld 还开放出更多的内核级通路

接口,如:mem_ahb_各通道,dma 各通道,mcu 的 reset 和 stop 等信号,具体定义也

参考《AGRV2K_逻辑设置.pdf》。

而 cpld 引脚名称,则同 2,会在 cpld 的顶层模块接口中生成,在 cpld 代码中使用。

这里需要注意的是,有些配置,在 ve 里配置一条,自动生成的 cpld 接口中会对应多条,

如串口:

VE 中的一句配置:

UART4_UARTTXD txd_ip

会生成 cpld 中的两句:

input txd_ip_out_data,

input txd_ip_out_en,


这里列举的使用方式,会通过后续的样例,一一讲解到。

注:每次修改完 ve 文件,要通过 prepare LOGIC 会自动生成对应的.v 源码,避免手工改动带

来的纰漏。(另,如果修改过 ve,下次再 prepare LOGIC 时,为防止冲突会生成 templ 的文

件,而不是直接覆盖.v 文件,需要自己通过比较后后合并过去。)


二、可参考样例:

1. cpld 控制 pin 脚:

这个样例程序是个非常简单的逻辑,在 cpld 里驱动两个 led 灯的闪烁。

这个样例中,展示了 cpld 中如何和外部 pin 脚关联,通过 clk 来驱动 led 的闪烁。

大致描述:


A. 在 ve 中定义 cpld 和引脚的关联:

image.png


B. 点 prepare LOGIC 后,自动生成的 analog_ip 中包含了 LED_D2 和 LED_D3 通路;

image.png


C. 然后在代码中通过时钟 clk 来定时改变 led 的高低;

image.png


2. Adc/dac/cmp 样例:

这个就是第一部分使用的例子,工程在\examples\analog 下。

这个样例中的代码也是系统使用的 ADC 源码。

3. ram 和 ahb 交互:

对应工程\examples\custom_ip 下。

这个样例中,举例了 ahb 和 ram 的使用。


待补充


需要获取更多的“资料”和“支持”和“批量采购”可以联系我们

提供“芯片测样-发送资料-技术支持-批量采购”


联系方式: 姚工 13661545024(VX同号)

(加的时候备注下公司名和个人名字)

在线商城:agm-micro.taobao.com

公司网站:www.agm-micro.com

资料网站: www.tcx-micro.com

在线商城.png


关于我们

品牌中心

产品中心

新闻动态

咨询热线:13661545024(全国技术销售热线)

上海天晨芯科技有限公司

销售邮箱:sales@chipmorn.com

技术邮箱:jun.yao@chipmorn.com

公司地址:上海浦东新区东方路1365号5号楼

seo seo