FPGA入门指导手册
绪论
本文将会统计FPGA学习期间,使用的过程(尽量精简的方式)
具体信息将会以视频的方式在b站上发表,此处仅以书签的方式统计
-
软件安装:FPGA开发软件的安装,FPGA芯片的驱动程序,串口芯片的驱动程序(不打算)
-
点灯程序:第一个软件的下载,下载到flash,ModelSimSE 联合仿真
-
编程语言的使用:基本语法(不打算)
-
数码管控制
-
SD卡的开发,emmc驱动
-
ddr的开发
-
camera的开发
-
VGA开发
-
HDMI开发
-
USB 3.0芯片的开发
语法相关记录
函数申明
- 输入输出的使用 input 和output作为声明
- reg声明变量,如果input和output 需要受到下面程序的更改,则添加reg,如文中的lcd_pclk信号
module clk_div(
input clk, //50Mhz
input rst_n,
input [15:0] lcd_id,
output reg lcd_pclk
);
reg clk_25m;
reg clk_12_5m;
reg div_4_cnt;
//时钟2分频 输出25MHz时钟
always @(posedge clk or negedge rst_n) begin
if(!rst_n)
clk_25m <= 1'b0;
else
clk_25m <= ~clk_25m;
end
//时钟4分频 输出12.5MHz时钟
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
div_4_cnt <= 1'b0;
clk_12_5m <= 1'b0;
end
else begin
div_4_cnt <= div_4_cnt + 1'b1;
if(div_4_cnt == 1'b1)
clk_12_5m <= ~clk_12_5m;
end
end
always @(*) begin
case(lcd_id)
16'h4342 : lcd_pclk = clk_12_5m;
16'h7084 : lcd_pclk = clk_25m;
16'h7016 : lcd_pclk = clk;
16'h4384 : lcd_pclk = clk_25m;
16'h1018 : lcd_pclk = clk;
default : lcd_pclk = 1'b0;
endcase
end
endmodule
状态机
- 组合逻辑使用阻塞赋值
- 时序逻辑使用非阻塞赋值
解释:数字电路一般包括组合逻辑和时序逻辑电路。
组合逻辑电路:在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关。 组合逻辑电路没有记忆功能,没有反馈环路。 下面章节我们会先从“与”“或”“非”门开始来学习组合逻辑。
时序逻辑电路:在逻辑功能上的特点是任意时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态,或者说,还与以前的输入有关。 下面章节我们会从锁存器、触发器和寄存器来学习时序逻辑。
毛刺问题
- 产生原因:因为门电路延迟和信号传输延迟,导致接收到的信号和实际有差异,导致的信号抖动,产生毛刺
- 解法1:添加延时环节,将信号同步,
- 解法2:添加状态机,检测时钟,触发改变信号,将信号处理后输出
实列操作
下文会进行一些实际操作的概述,现在的电脑默认 软件已经装好,驱动调试正常。
1. 点量一个LED灯(下载编译)
-
打开文件
-
设置输入输出的PIN
-
编译文件
先双击Compile Design 编译文件,再双击Program device 打开下载文件的界面
-
下载设置如下三步走,添加.sof 文件(直接下载到FPGA,断电消失)
-
点击start,开始下载,会出现绿色的successful,表示下载正常。
flash下载操作(JIC文件下载)
-
点击convert programming files打开
-
设置方式
-
生成JIC文件的过程
-
选中如图所示的文件,添加文件
-
下载最后一步一切就绪
注意:下载结束后需要重新断电才能启动程序,看到没有反应的时候断电一下即可