1. 紫光同创开发板调试入门
第一次拿到紫光同创开发板时,我和很多新手一样兴奋又忐忑。这块国产FPGA开发板性价比很高,但调试过程确实会遇到不少坑。今天我就以最基础的LED闪烁项目为例,带你走通从代码编写到波形抓取的全流程。
调试FPGA和单片机最大的区别在于:FPGA是硬件编程,我们需要通过波形来"看到"硬件电路的实际工作情况。紫光同创的工具链虽然界面朴实,但功能很扎实。先准备好这些:
- PDS开发环境(建议2022以上版本)
- 开发板配套的USB-JTAG调试器
- 一根质量好的Micro USB线(劣质线会导致JTAG不稳定)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 从代码到比特流
2.1 编写LED闪烁代码
先来看这个200MHz时钟驱动的LED闪烁代码。关键点在于:
- 差分时钟要用GTP_INBUFGDS原语处理
- 计数器要做时钟分频(200MHz→1Hz)
- 输出LED状态寄存器
verilog复制`timescale 1ns / 1ps
module led_test(
input sys_clk_p, //200M差分时钟+
input sys_clk_n, //200M差分时钟-
input rst_n,
output [1:0] led
);
wire sys_clk;
reg [31:0] count;
reg [1:0] led_cnt;
// 差分时钟缓冲
GTP_INBUFGDS GTP_INBUFGDS_inst (
.O(sys_clk),
.I(sys_clk_p),
.IB(sys_clk_n)
);
// 1秒计数器(200MHz时钟)
always@(posedge sys_clk or negedge rst_n) begin
if(!rst_n)
count <= 32'd0;
else if(count == 32'd199_999_999) // 200MHz时钟下计满2亿次=1秒
count <= 32'd0;
else
count <= count + 1'b1;
end
// LED状态切换
always@(posedge sys_clk or ne
