FPGA按键点灯

目标功能

实现按键点灯,当按键按下时一个LED亮起,松开后LED熄灭。

使用开发版型号:AX309

设计流程

一般的用FPGA开发项目的设计流程:

  1. 分析需求来设计系统的结构、层次,划分出一个一个子模块并确定子模块之间的相互关系,确定子模块的端口信号。
  2. 结合芯片和时序手册,可以用VISIO画出模块正常的时序波形图
  3. 根据时序波形图设计代码并编译至无错误
  4. 可以用ModelSim进行仿真。将仿真出来的波形与用VISIO画出来的进行对比,如果有差别就修改至无差别
  5. 绑定管脚、分析综合、布局布线,最后下载到板卡中。

点灯流程

原理分析

AX309相关原理图如下:
在这里插入图片描述
在这里插入图片描述
由原理图可以知道:LED通过二极管一端接地,需要给高电平才能发光。按键按下时,KEY端被拉低,所以KEY由高电平变为低电平时视为按键按下,由低电平变为高电平时视为按键松开。
这里我们使用KEY1和LED1。对应IO口如下
在这里插入图片描述
在这里插入图片描述
LED1对应N5
KEY1对应C3

系统结构与层次分析

由功能我们可以知道,按键电灯由一个输入端和一个输出端组成。
如果不考虑工作原理,只考虑输入输出的关系,就可以画成如下框图:在这里插入图片描述
列表为:

信号类型功能
KEY_inInput按键输入
LED_outOutput输出控制

画时序图

这里我们可以使用VISIO的三个相关组件:在这里插入图片描述
对于组合逻辑值,我们一般先列出真值表:

输入输出
KEY_inLED_out
01
10

根据此真值表,可以画出波形图如下:在这里插入图片描述

编写代码

新建工程

ISE新建工程
在这里插入图片描述
注意下面我们选择HDL(生成Verilog文件)
在这里插入图片描述
我们用的AX309、用ModelSim仿真,所以相关设置如上图。

编写RTL代码

然后我们就进行RTL代码的编写。RTL写出的模块叫RTL模块,也称为功能模块、可综合模块。用来描述硬件电路。RTL代码能够综合出真是的电路以实现我们设计的功能。(这里我们用notepad写)

module led
(
	input wire key_in,
	
	output wire led_out
);

assign led_out = ~key_in;

endmodule

写好保存,然后添加进工程文件中,按键如下:
在这里插入图片描述
在这里插入图片描述
这一步直接点OK即可

代码分析综合

在这里插入图片描述
我们选中我们添加进工程的文件,然后再下面找Synthesize - XST按钮双击。该步骤的作用:先检查语法有没有错误,然后将代码解释成电路的形式。
如果出现绿色的√,代表分析综合完成,无语法错误产生。

然后我们可以查看RTL原理图:
在这里插入图片描述
依次按操作点击,弹出的对话框选中如下:
在这里插入图片描述
就会出现如下类似的原理图:
在这里插入图片描述

Testbench仿真

过程:

  1. 产生模拟激励(输入波形)
  2. 将产生的激励加入到被测试模块并观察其输出响应。
  3. 将输出响应与期望进行比较,判断设计的正确性。

代码编写:
与RTL代码编写过程相同,代码如下:

`timescale 1ns / 1ps
module tb_led;

	// Inputs
	reg key_in;

	// Outputs
	wire led_out;

	// Instantiate the Unit Under Test (UUT)
	led uut (
		.key_in(key_in), 
		.led_out(led_out)
	);

	initial begin
		// Initialize Inputs
		key_in = 0;

		// Wait 100 ns for global reset to finish
		#100;
        
		// Add stimulus here

	end
      
always #10 key_in <= {$random} % 2 ;
 
endmodule

写好后同样要添加到工程中:
在这里插入图片描述
要先选中Simulation后再添加,
在这里插入图片描述

仿真

这里我们用ModelSim进行仿真
在这里插入图片描述
选中要仿真的文件,然后双击下面的Simulate,软件就会自动打开ModelSim进行仿真(前提是两个软件已经关联好了)
ModelSim软件的具体操作不做阐述。

仿真结果如图:
在这里插入图片描述
和我们设计时的波形图一样,证明代码等没有问题。可以上板测验了。

引脚约束

我们前面的代码只是规定了输入输出的变量,但并没有指定相应的端口,所以上板前我们要先进行引脚约束。
在这里插入图片描述
同样的操作
在这里插入图片描述
弹出框选Yes

在这里插入图片描述
在这里插入图片描述
前面已经找到按键是C3,LED是N5,之后关闭对话框,弹出来时候保存的对话框,都点是。然后就会出现如图.urf文件。
在这里插入图片描述

全编译并下载

在这里插入图片描述
选中文件点如图按钮,就开始编译了。正常来讲会出现三个绿色的√。
然后开始下载到板子上,点下面的Configure Programming File。弹出框选ok
在这里插入图片描述
右边空白处右键选第三个
在这里插入图片描述
在这里插入图片描述
这里是问是否下载到Flash,我们这里选no
在这里插入图片描述
在这里插入图片描述
对着芯片右键选programm,就下载到板子上了。可以在板子上实验时候观察到了目的现象。
整个流程到此结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值