Tutorial 3: 使用Verilog HDL编程开发LED闪烁电路

  • 初步学习Verilog HDL编程
  • 初步学习Quartus Prime中使用Verilog HDL编程的流程

在这个教程中我们将首次引入Verilog HDL编程的方式来进行FPGA开发, 做一个LED Blinking的小实验.

STEP1: 创建一个空项目, 并添加必要的文件

依次选择添加 “Block Diagram/Schematic File” 和 “Verilog HDL File”.

STEP2: 用Verilog HDL描述电路

led_blinker.v
module led_blinker(rst, clk, led);	// module <module_name>(<pin_list>);
input rst, clk;				// define the input pins
output led;				// define the output pins
reg led;				// declare led as a 1-bit value stored in a register
reg [31:0]cnt;				// declare cnt as a 32-bit value stored in a register
 
always@(posedge clk or negedge rst)
begin
	if(rst==0)			// reset the circuit, stop blinking the led
	begin
		cnt<=0;
		led<=0;
	end
	else
	begin				// continue blinking the led
		if(cnt<500000)		// maintain the led state
			cnt<=cnt+1;
		else
		begin			// revert the led state
			cnt<=0;
			led<=~led;
		end
	end
end
 
endmodule

注意最后要留一空行!

STEP3: 绘制 Top Design

1. 利用Verilog HDL代码文件生成对应的框图元件, 添加到我们的框图设计中, 完成整个顶层电路设计.

如果代码没有错误, 将得到如下输出.

这一步非常关键, 不然无法在Top-design中调用我们用Verilog HDL描述的电路.

2. 利用Quartus自带的库生成所需的时钟模块.
打开IP Catalog:

选择如图所示的PLL Intel FPGA IP:
命名为pll后点击OK:
在出现的窗口中按照下图进行设置:

点击Finish, 等待生成完成.

通过查阅DE10-Standard的手册, 我们可以知道一共有4路50MHz的Clock接入FPGA, 分别是CLK0P, CLK2P, CLK6P, CLK4P. 对应的针脚名称依次为PIN_AF14, PIN_AA16, PIN_Y26, PIN_K14. 这里我们设置的PLL将50MHz分频为20MHz.
注: PLL全称为Phase Locking Loop, 是数字电路的心脏. PLL产生的时钟信号的质量对电路的性能有着非常大的影响.

3. 按照下图所示绘制电路图, 此图即为我们的顶层设计 (Top Design) .

注意要连接INPUT引脚和OUTPUT引脚到相应的模块的引脚上, 后续的编译才能成功!

STEP4: 编译与上传

1. 执行第一遍编译 (预编译) : 在菜单中点击 Processing » Start Compiliation.
这一次编译是一次预编译, 主要的任务是让Quartus通过分析我们设计好的电路模型, 识别出需要设置的引脚.

2. 设置引脚:
打开Pin Planner, 将引脚设置为如下图所示:

未使用的引脚注意参照Tutorial 2中所讲的步骤设置为“As input tri-stated“.

3. 执行第二次编译 (正式编译) 后上传到FPGA, 测试.

  • de10-standard-tutorial-3.txt
  • Last modified: 5 months ago
  • by daizhirui