|
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): 点击该功能【Prepare LOGIC】后,可以看到在 example 工程目录下生成一个 logic 文件夹, 自动生成的文件如下图: 这里生成的 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 工程后已经是该项了,确认下即可) 工程如下: 这里除了 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 也加入到工程。 这个时候,原有的工程就变成 examples\analog 样例工程了。 接下来进行编译和烧录。 4、生成 VO: 打开 Quartus 的 tools->TCL Scripts,如下图所示: 【Run】运行成功后,可以看到该 logic 占用的逻辑单元数。 这里的资源,斜杠前边标识的大小就是所占的逻辑单元大小,不能超过 2K。 注意:第一次导入工程,必须执行上图的方式来转换。后续编写和修改 cpld 代码后,可以 仍然执行上图方式,也可以直接点“编译”按钮编译即可。 执行到这里,会在 logic 下生成 vo 文件出来(在\logic\simulation\modelsim 下),Quartus 工具的任务完成。 接下来打开 Supra 来继续生成 bin 文件。 5、supra 编译: 在 Supra 工具里,打开该工程(example\logic)。 然后,点击 Tool -> Compile,在弹出的画面中点右下角的【run】 编译成功后,画面会有提示。 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》对烧录部分的描述。 到这里,新建一个空工程,编译,烧录的流程描述完毕。 注意: 如果使用纯粹的 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 定义格式为:前边为 mcu 的 FunctionName,后边是 PIN 脚 ID。 这部分在 mcu 使用里描述的很多了,不再赘述。 2. cpld 和外部引脚的关联: 比如,定义 led 到外部引脚:LED_D3 PIN_32:OUTPUT 定义格式为: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 和引脚的关联: B. 点 prepare LOGIC 后,自动生成的 analog_ip 中包含了 LED_D2 和 LED_D3 通路; C. 然后在代码中通过时钟 clk 来定时改变 led 的高低; 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 |