FPGA入门-----1.Quartus的使用

Quartus的使用

前言:

自从大学点了第一个流水灯的时候,就开始热爱技术,在技术协会呆了四年,学过很多东西,也应用单片机做过很多比赛,电赛、挑战杯,物联网等等等,也拿过一些奖项国奖到校奖都有。但越学越觉得自身技术的不足,意识到仍然道阻且长,而自己却没有好好整理自己所学。现在到了研究生从事的仍然是集成电路领域,而我也希望自己能一直热爱这个领域,就把自己的学习道路以文章形式记录,也算一种激励,其次希望能帮助他人,一起努力。

  • Quartus的使用流程
    1.新建工程–一定要用new project wizard,这个是一套完整的配置流程,只写new project估计可能后面还要配置很多东西
    (1)可以直接在右边new project wizard
    (2)在file上也可以
    FPGA入门-----1.Quartus的使用_第1张图片
    这个是介绍部分顾名思义,分别是
    1.项目和目录介绍
    2.顶层设计
    3.项目文件和库
    4.器件选择
    5.eda工具设置
    FPGA入门-----1.Quartus的使用_第2张图片
    FPGA入门-----1.Quartus的使用_第3张图片
    这里因为没有需要库,不添加
    FPGA入门-----1.Quartus的使用_第4张图片
    器件选择:右上角family选取你fpga的种类,如何下面去找你的器件名称,比如我的是EP4CE6F17C8
    FPGA入门-----1.Quartus的使用_第5张图片
    下面eda工具,主要是选择仿真软件,这个仿真和单片机不一样,说白了就是数电学的波形图,看的还是时序,语言选择Verilog
    FPGA入门-----1.Quartus的使用_第6张图片
    最后就配置完成了
    FPGA入门-----1.Quartus的使用_第7张图片
    下面需要添加.v文件,file-new-verilog HDL
    FPGA入门-----1.Quartus的使用_第8张图片
    复制下面的代码进去这个.v文件,这个是一个1s的闪烁灯,加上一个复位按键
module Verilog_First
(
	//输入端口
	CLK_50M,RST_N,	
	//输出端口
	LED1		
);
	
//---------------------------------------------------------------------------
//--	外部端口声明
//---------------------------------------------------------------------------
input 			CLK_50M;					//时钟的端口,开发板用的50M晶振
input				RST_N;					//复位的端口,低电平复位
output			LED1;						//对应开发板上的LED

//---------------------------------------------------------------------------
//--	内部端口声明
//---------------------------------------------------------------------------
reg	[26:0]	time_cnt;				//用来控制LED闪烁频率的定时计数器
reg	[26:0]	time_cnt_n;				//time_cnt的下一个状态
reg				led_reg;					//用来控制LED亮灭的显示寄存器
reg				led_reg_n;				//led_reg的下一个状态


//设置定时器的时间为1s,计算方法为  (1*10^6)us / (1/50)us  50MHz为开发板晶振
parameter SET_TIME_1S = 27'd50_000_000;		

//---------------------------------------------------------------------------
//--	逻辑功能实现	
//---------------------------------------------------------------------------
//时序电路,用来给time_cnt寄存器赋值
always @ (posedge CLK_50M or negedge RST_N)  
begin
	if(!RST_N)								//判断复位
		time_cnt  <=  27'h0;				//初始化time_cnt值
	else
		time_cnt  <=  time_cnt_n;		//用来给time_cnt赋值
end

//组合电路,实现1s的定时计数器
always @ (*)  
begin
	if(time_cnt == SET_TIME_1S)		//判断1s时间
		time_cnt_n = 27'h0;				//如果到达1s,定时计数器将会被清零
	else
		time_cnt_n = time_cnt + 27'h1;//如果未到1s,定时计数器将会继续累加
end

//---------------------------------------------------------------------------
//时序电路,用来给led_reg寄存器赋值
always @ (posedge CLK_50M or negedge RST_N)  
begin
	if(!RST_N)								//判断复位
		led_reg <=  1'b0;					//初始化led_reg值
	else
		led_reg <=  led_reg_n;			//用来给led_reg赋值
end

//组合电路,判断时间,控制LED的亮或灭
always @ (*)  
begin
	if(time_cnt == SET_TIME_1S)		//判断1s时间
		led_reg_n = ~led_reg;			//如果到达1s,显示寄存器将会改变LED的状态
	else
		led_reg_n = led_reg;				//如果未到1s,显示寄存器将会将保持LED的原状态
end

assign LED1 = led_reg;					//最后,将显示寄存器的值赋值给端口LED1

endmodule						

下面一步是,分配引脚,如果你看这个代码会有一个十分有意思的现象,和单片机不同,fpga代码中是没有写特定的引脚P10啥的,因为这个只是描述了一个硬件电路是什么样子,然后你再映射到实际的FPGA上,这个需要人后期分配,这个好处也显而易见,一定是兼容的,无关器件
下面就是编译:点击这个按钮
FPGA入门-----1.Quartus的使用_第9张图片
编译后,就可以下载了,点击program
FPGA入门-----1.Quartus的使用_第10张图片
点击左上角,hardware setup
FPGA入门-----1.Quartus的使用_第11张图片
选择blaster
FPGA入门-----1.Quartus的使用_第12张图片
此时显示有这个之后,就可以点击左边start了
FPGA入门-----1.Quartus的使用_第13张图片
到此程序下载完成

你可能感兴趣的:(FPGA入门-----1.Quartus的使用)