1. 紫光同创PGL50H开发板初体验
作为一名长期从事嵌入式开发的工程师,最近有幸拿到了小眼睛科技基于紫光同创PGL50H FPGA设计的盘古50K开发板。这款国产FPGA开发平台在业内关注度颇高,官方定价1999元,定位中端FPGA学习与开发市场。
开箱第一印象是开发板的做工相当扎实,核心板与扩展板采用分离式设计。板载资源方面,最吸引我的是其LED配置方案:1颗位于核心板上的状态指示灯,配合扩展板上的4颗可编程LED,这种设计既保证了基础状态监控需求,又为初学者提供了足够的GPIO实践资源。值得一提的是,板载的5个LED采用了不同的颜色区分,这在后续的多LED协同控制实验中会非常实用。
2. 开发环境搭建要点
2.1 软件工具链准备
紫光同创为PGL系列FPGA提供了专用的PDS开发环境。与Xilinx的Vivado或Intel的Quartus不同,PDS的安装包相对精简,约3GB左右。安装过程中需要特别注意:
- 驱动程序选择:务必勾选"USB-JTAG Driver",这是后续烧录的关键
- 许可证配置:首次使用需要申请免费评估license,处理时间约1个工作日
- 工程模板:建议直接使用PDS内置的"PGL50H_EvBoard"模板,可避免多数引脚约束问题
重要提示:PDS对Windows系统版本较敏感,实测Windows 10 21H2版本兼容性最佳,避免使用LTSC版本
2.2 硬件连接注意事项
开发板采用Type-C接口供电,同时需要Micro USB接口连接JTAG调试器。实际使用中发现一个易错点:必须严格按照以下顺序连接:
- 先接Type-C电源(5V/2A以上适配器)
- 等待核心板红色电源指示灯稳定
- 再连接JTAG调试器
若顺序颠倒,可能导致JTAG枚举失败。这种设计是为了确保FPGA在上电时有稳定的供电环境。
3. LED控制实战解析
3.1 引脚分配与约束文件
盘古50K开发板的LED电路设计采用了共阳极接法,通过FPGA输出低电平点亮。在PDS环境中需要正确配置引脚约束,关键参数如下:
| LED编号 | 网络标号 | FPGA引脚号 | 电压域 |
|---|---|---|---|
| LED1 | LED_C1 | C12 | 3.3V |
| LED2 | LED_E1 | E11 | 3.3V |
| LED3 | LED_F1 | F10 | 3.3V |
| LED4 | LED_G1 | G9 | 3.3V |
| LED5 | LED_H1 | H8 | 3.3V |
约束文件(.pdc)应包含如下内容:
set_pin_assignment { led[0] } { LOCATION = C12; IOSTANDARD = LVCMOS33; } set_pin_assignment { led[1] } { LOCATION = E11; IOSTANDARD = LVCMOS33; } ...3.2 Verilog驱动代码实现
下面是一个经典的LED流水灯实现,包含可调速度参数:
module led_driver( input clk_50m, // 50MHz系统时钟 input rst_n, // 低电平复位 output reg [4:0] led // 5位LED输出 ); parameter SPEED = 24; // 速度控制参数,越大越慢 reg [31:0] counter; always @(posedge clk_50m or negedge rst_n) begin if(!rst_n) begin counter <= 0; led <= 5'b11110; // 初始状态:仅LED1亮 end else begin counter <= counter + 1; if(counter[SPEED]) begin counter <= 0; led <= {led[3:0], led[4]}; // 循环移位 end end end endmodule这段代码实现了以下功能:
- 上电后LED1初始点亮
- 每个时钟周期检测计数器高位
- 当计数器达到设定值时执行LED状态轮转
- 通过SPEED参数可灵活调整流水速度
3.3 实际调试中的发现
在烧录测试过程中,遇到了两个典型问题:
JTAG识别不稳定:当USB线质量较差时,会出现"FPGA configuration failed"错误。解决方法:
- 使用带屏蔽层的USB2.0线缆
- 在PDS中降低JTAG时钟频率至1MHz
- 确保开发板供电充足
LED亮度不均:由于板载LED的限流电阻取值不同(220Ω-1kΩ不等),导致亮度差异明显。可通过两种方式改善:
- 软件端采用PWM调光补偿
- 硬件端统一更换为470Ω电阻
4. FPGA开发进阶建议
4.1 时序约束的重要性
很多初学者容易忽略时序约束,但在实际项目中这非常关键。对于LED控制这类简单逻辑,建议至少添加以下基本约束:
create_clock -name clk_50m -period 20 [get_ports clk_50m] set_input_delay -clock clk_50m 5 [all_inputs] set_output_delay -clock clk_50m 5 [all_outputs]4.2 资源利用率监控
PGL50H拥有约50K LUT资源,在PDS的"Implementation Report"中可以查看详细利用率。以LED驱动为例,典型资源占用为:
- LUT: 15/28800 (0.05%)
- FF: 37/57600 (0.06%)
- IO: 7/200 (3.5%)
这种简单设计几乎不消耗逻辑资源,但养成查看报告的习惯对复杂项目至关重要。
4.3 扩展实验建议
完成基础LED控制后,可以尝试以下进阶实验:
- 按键消抖控制LED模式切换
- 通过PWM实现LED呼吸灯效果
- 结合板载RTC实现LED定时控制
- 使用AXI接口封装LED控制器
我在测试中发现PGL50H的全局时钟网络表现优异,即使在不添加时序约束的情况下,也能稳定运行到80MHz。这对于初学者理解FPGA的并行特性非常有帮助。