• 已绑定课时
  • 工程师可点评

【本节要点】 1.硬件认知 - FPGA全称现场可编程门阵列,内部由CLB逻辑块、布线资源、IOB输入输出块构成,区别于CPU软件串行执行,FPGA是硬件并行电路。 - 开发流程:需求→Verilog代码编写→综合→布局布线→生成比特流→烧录FPGA芯片。 2. Verilog基础语法入门 - 模块`module/endmodule`是最小设计单元,所有硬件逻辑封装在模块内部;端口分`input输…

二牛学FPGA
110 0

1.硬件认知

- FPGA全称现场可编程门阵列,内部由CLB逻辑块、布线资源、IOB输入输出块构成,区别于CPU软件串行执行,FPGA是硬件并行电路。

- 开发流程:需求→Verilog代码编写→综合→布局布线→生成比特流→烧录FPGA芯片。

2. Verilog基础语法入门

- 模块`

module/endmodule

`是最小设计单元,所有硬件逻辑封装在模块内部;端口分`input输入、output输出、inout双向端口`。

- 两种赋值:连续赋值assign(组合逻辑,线网wire)、过程赋值always(时序/组合逻辑,寄存器reg)。

3.工程规范

- 一个.v文件尽量对应1个功能模块,顶层模块对接开发板引脚。

- 开发工具:Quartus/Vivado完成编译,仿真工具ModelSim查看波形。

4.入门实例:LED点亮逻辑

最基础工程:输入系统时钟/按键,输出控制LED引脚高低电平。

1.数据类型混用错误:`assign`只能驱动wire变量,不能直接赋值reg;always块内不能用assign赋值,新手容易类型混用报编译错误。

2.端口方向搞反:把LED输出端口定义成input,代码编译无报错但硬件LED无法点亮。

3.硬件思维误区:用C语言串行思路写Verilog,误以为代码从上到下顺序执行,实际硬件并行同时运行。

4.缺少顶层模块:零散写多个子模块没有顶层实例化,工程无法绑定引脚、无法编译下载。

5.未区分仿真和上板:仿真波形正常,但没做引脚约束,烧录开发板后硬件无现象。

#1.通用模块模板(所有Verilog模块通用框架)

module module_name(
input  wire     in1,
input  wire     in2,
output reg      out1,
output wire     out2
);
// 连续赋值(组合逻辑)
assign out2 = in1 & in2;
// 过程块示例
always @(*)
begin
out1 = in1 | in2;
end
endmodule

#2. LED最简点亮代码(可直接改引脚复用)

module led_top(
input wire clk,
output wire led
);
assign led = 1'b0; // 低电平点亮LED,根据硬件原理图修改电平
endmodule

#3.复用思路

1.模块化思路:功能拆分,底层写小功能模块,顶层通过`模块名实例名(.端口(顶层端口))`实例化调用,后续新项目直接调用成熟子模块。

2.引脚约束复用:保存开发板引脚配置文件,同型号FPGA新项目直接导入约束,不用重复配置IO。

3.逻辑分类复用:组合逻辑固定用`assign/always@(*)`,时序逻辑固定用`always@(posedge clk)`,统一编码规范。

学习上下文

产出状态

工程师已阅110 位工程师