1.介绍
- 从零开始焊接一个FPGA电路板,并实现基础的LED编程。中间踩坑较多(购买器件,比较器件价格,买错买漏器件和等待器件邮寄到,花费时间较多。且中间准备自己焊接JTAG烧录器,但是大概率是晶振焊接有问题,所以当前文章中使用的网上购买的JTAG)。实现的效果如下。
2.XC9572XL芯片介绍
2.1 订购信息
2.2 说明书
3.XC9572XL核心板
3.1 开源电路
4.核心板编程
4.1 开发环境
- ISE安装
- iMPACT是ISE的组成部分。
- iMPACT 主要用于器件编程和文件生成,使用赛灵思通信线(MutiPRO Desktop Tool, Parallel Cable IV,或者Platform Cable USB)直接对FPGA、CPLD或PROM进行多种模式的配置;边界扫描模式可进行所有元件配置,从串和SelectMAP模式则仅可配置FPGA,在Desktop配置模式CPLD和PROM可配置,在直接SPI模式可编程select SPI serial flash(STMicro: M25P, M25PE, M45PE 或 Atmel: AT45DB)。
4.2 编程
- file->new project->输入名称"led"->下一步到设置界面:
- NEXT 后输出总结信息:
Project:
Project Name: led
Project Path: C:\Users\auditor\Desktop\GOOD_PROJECT\led
Working Directory: C:\Users\auditor\Desktop\GOOD_PROJECT\led
Description:
Top Level Source Type: HDL
Device:
Device Family: XC9500XL CPLDs
Device: xc9572xl
Package: PC44
Speed: -5
Top-Level Source Type: HDL
Synthesis Tool: XST (VHDL/Verilog)
Simulator: ISim (VHDL/Verilog)
Preferred Language: Verilog
Property Specification in Project File: Store all values
Manual Compile Order: false
VHDL Source Analysis Standard: VHDL-93
Message Filtering: disabled
- 新建源文件-》选择verlog module并输入名称-》然后next到finish
- 编写代码
module led1(
input wire key1,
input wire key2,
output wire led,
);
assign out = key1&key2;
endmodule
- 点击"implement Design",然后点击“View RTL Schematic”查看电路
4.3 引脚配置
// 这里的pin序号是乱写的,后边“效果”部分会进行修改
net "key1" loc = p1;
net "key2" loc = p2;
net "led" loc = p3;
4.4 引脚配置方式二
5.仿真
`timescale 1ns / 1ps
// Company:
// Engineer:
//
// Create Date: 12:24:47 05/20/2024
// Design Name: led1
// Module Name: C:/Users/auditor/Desktop/GOOD_PROJECT/led/led_tb.v
// Project Name: led
// Target Device:
// Tool versions:
// Description:
//
// Verilog Test Fixture created by ISE for module: led1
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
module led_tb;
// Inputs
reg key1;
reg key2;
// Outputs
wire led;
// Instantiate the Unit Under Test (UUT)
led1 uut (
.key1(key1),
.key2(key2),
.led(led)
);
initial begin
// Initialize Inputs
key1 = 0;
key2 = 0;
// Wait 100 ns for global reset to finish
#100;
key1 = 1;
key2 = 0;
#100;
key1 = 0;
key2 = 1;
#100;
key1 = 1;
key2 = 1;
#100;
// Add stimulus here
end
endmodule
- 参考 ise Simulator:861 - Failed to link the design
- 找到“安装目录\Xilinx\14.x\ISE_DS\ISE\gnu\MinGW\5.0.0\nt\libexec\gcc\mingw32\3.4.2\collect2.exe”并将其删除,重新运行仿真器,问题得到解决!!
5.1 仿真结果
6.Platform Cable USB接线
7.烧录
-
在iMPACT软件中双击Boundary Scan
-
空白处右键,并点击Initialize Chain初始化下载链路
-
打开jed文件
-
output -> cable reset
-
右键编程
8.效果一
对应于上边代码的pin配置
9.效果二
代码
module blink_led(
input clk, // 输入时钟信号
input rst, // 复位信号
output reg led // 输出LED控制信号
);
reg [23:0] counter; // 24位计数器
always @(posedge clk or posedge rst) begin
if (rst) begin
counter <= 0;
led <= 0;
end else begin
counter <= counter + 1;
if (counter == 4_000_000) begin // 假设时钟频率为24MHz,1秒计数达到24000000
counter <= 0;
led <= ~led; // 切换LED状态
end
end
end
endmodule
pin配置
10.开发过程踩坑记录
买错了元器件
元件 | 类型 | 封装 | 数量 | ------ |
---|---|---|---|---|
93LC56BT-I/OT | 存储器IC | SOT23-6 | 1 | |
4MHZ OSC | 振荡器 | SMD 4P | 1 | |
C4201WVA | 插件接口 | 2*7pin | 1 | |
FT2232HL | 1 | |||
XC9572XL-7VQG44C | CPLD | QFP44 | 1 | |
10miuf | 电容 | 0805 | 1 | |
1k | 电阻 | 0805 | 1 | |
22pf | 电容 | 0603 | 1 | |
104 | 电容 | 0603 | 1 | |
104 | 电容 | 0805 | 1 | |
105 | 电容 | 0805 | 1 | |
R1R2 | 电阻 | 0603 | 1 | |
12k 1% | 电阻 | 0603 | 1 | |
51 | 电阻 | 0805 | 1 | |
3.9k | 电阻 | 0805 | 1 | |
4.7k | 电阻 | 0603 | 1 | |
4.7k | 电阻 | 0805 | 1 | |
10k | 电阻 | 0603 | 1 | |
2k2 | 电阻 | 0603 | 1 | |
5k1 | 电阻 | 0603 | 1 | |
Red LED | LED | 0805 | 1 | |
Type C | 连接器 | 2P | 1 | |
3.3 LDO | 稳压器 | 1 | ||
LL4148 | 二极管 | SOD-80 | 1 | |
12MHZ OSC | 振荡器 | SMD 4P | 1 | 怎么测量晶振的好坏 |
USBLC6 4SC6Y | 保护装置 | SOT-23-6L | 1 | |
74LVC1T45W6-7 | 6 | |||
AO3400A | 场效应管 | SOT | 1 | |
PESD5V0S1BA,115 | 二极管 | SOD-323 | 7 | ESD(ectro-Static discharge,“静电释放”)的保护 |
FSMD010-24-0805-R | 保险丝 | 1206 | 1 | |
74HC14D | 逻辑芯片 | SOP14 | 1 | |
MF-NSMF075-2 | 保险丝 | 1206 | 1 |
- 本来应该买上边(XC9572XL-10PCG44C)大小的,现在买成了下边大小的XC9572XL-5VQG44C