AG1280串口通信

因为上次做的板子是将FPGA和一块MCU芯片集成在一块的,他们之间就需要通信,当然最容易实现的就是UART串口通信; 下面的代码是一个Demo代码,实现的功能是,RX接收到什么,TX就发送相同的数据; FPGA芯片 AG1280Q48 时钟频率 48MHZ 波特率 921600 RX引脚 PIN_16 TX引脚 PIN_14 LED引脚 PIN_48 时钟输入引脚 PIN_15 复位引脚 PIN_17 具体代码如下: 顶层模块 module connect_mcu (input clk, input rst_n, input wire uart_rx, output wire uart_tx, output wire led); wire clk_pll_o; //PLL时钟 inpll pll_inst ( .clkin(clk), // PLL.clkin MUST connect to PIN_XX_GB .clkfb(clk_pll_o), .pllen(1'b1), .resetn(rst_n), .clkout0en(1'b1), .clkout1en(1'b0), .clkout2en(1'b0), .clkout3en(1'b0), .clkout0(clk_pll_o), .clkout1(), .clkout2(), .clkout3(), .lock() ); parameter SYSTERM_CLK = 26'd48_000_000; //系统时钟频率 parameter UART_BPS = 20'd921600; //串口波特率 wire flag; wire [7:0] data; // assign led = data[0]; uart_receive #( .SYSTERM_CLK (SYSTERM_CLK), .UART_BPS (UART_BPS) ) u_uart_receive( .clk (clk_pll_o), .rst_n (rst_n), .uart_rx (uart_rx), .receive_done (flag), .uart_data (data) ); uart_send #( .SYSTERM_CLK (SYSTERM_CLK), .UART_BPS (UART_BPS) ) u_uart_send( .clk (clk_pll_o), .rst_n (rst_n), .uart_in_data (data), .uart_in_flag (flag), .uart_tx (uart_tx) ); reg [1:0] led_counter; assign led = led_counter[0]; // parameter SEC_TIME = 32'd48_000_000;//48M reg [31:0] cnt; always @ (posedge clk_pll_o or negedge rst_n)begin if (rst_n == 0) cnt = 4'd1)) begin reg_data ![f1992c7fce5ccbde038bca329048345](img-1.png)

October 30, 2022 · 1 min · Rancho

AG1280开发记录

AG1280是一款国产的CPLD芯片,我准备将这个芯片和MCU配合起来,来做一些定制化的接口和功能,例如扩展UART接口,外接一些高速的AD/DA芯片; 芯片资源: AG1280资源: LUTs 1280 Distributed RAM (Kbits) 10 EBR SRAM (Kbits) 68 Maximum User I/O pins 40 Number of PLLs 1 Package 48-Pin QFN 价格很便宜,每颗单价大概是7元; 我画了一个评估板,除了这颗CPLD芯片外,还加了一颗STM32F103C6T6芯片,他们之间有六个IO口互相连接来进行通信或者时钟输入; STM32F103C6T6资源: 封装 / 箱体 LQFP-48 核心 ARM Cortex M3 程序存储器大小 32 kB 数据总线宽度 32 bit ADC分辨率 12 bit 最大时钟频率 72 MHz 输入/输出端数量 48 I/O 数据 RAM 大小 10 kB 评估板设计: 板子原理图如下: PCB视图如下: 硬件设计注意: AG1280硬件设计中有几个需要特别注意的点: 1、IO_GLOBE_S1(位于第9脚)、IO_GLOBE_S2(位于第13脚)、IO_GLOBE_S3(位于第15脚)、IO_GLOBE_S4(位于第19脚)、IO_GLOBE_N1(位于第41脚) 、IO_GLOBE_N2(位于第44脚) 、IO_GLOBE_N3(位于第46脚)可以作为全局时钟输入管脚,可用于输入全局时钟。但若要使用PLL,则只能从13、15和19管脚输入。 2、电路板载一个24MHz有源晶振,另外还可以通过PMOD接口从STM32的MCO时钟输出管脚获得时钟,它们被连接到具有PLL输入功能的管脚13、15上。 3、AG1280的GPIO分为North和South两组,可以使用不同IO电平,以实现不同电平逻辑的转换。另外AG1280还需要3.3V电源作为片上Flash电源,且该电源域North组的IO电源共用,因此North组也只能使用3.3V的IO电源电压。South组却可以任选电源电压。 4、AG1280还需要1.2V内核电源电压,且该电源应略迟于Flash电源上电,以方便Flash加载程序。我的图2电路通过PMOD接口从STM32开发板获得3.3V电源,再用LDO芯片XC6206P122MR从3.3V向下稳压到1.2V内核电源,LDO后带有100uF电容,1.2V上电时间自然要落后于3.3V上电。 板子已经发出去打样了,估计今天就能到,我到时候焊接测试下; 软件: 环境配置: AG1280的开发EDA软件Supera还不具备分析和综合电路的能力,但能实现其特有的PLL和片上RAM的IP核打包、综合后的布局布线、下载文件打包及下载等功能。 ...

October 12, 2022 · 2 min · Rancho