目标功能
实现按键点灯,当按键按下时一个LED亮起,松开后LED熄灭。
使用开发版型号:AX309
设计流程
一般的用FPGA开发项目的设计流程:
- 分析需求来设计系统的结构、层次,划分出一个一个子模块并确定子模块之间的相互关系,确定子模块的端口信号。
- 结合芯片和时序手册,可以用VISIO画出模块正常的时序波形图
- 根据时序波形图设计代码并编译至无错误
- 可以用ModelSim进行仿真。将仿真出来的波形与用VISIO画出来的进行对比,如果有差别就修改至无差别
- 绑定管脚、分析综合、布局布线,最后下载到板卡中。
点灯流程
原理分析
AX309相关原理图如下:
由原理图可以知道:LED通过二极管一端接地,需要给高电平才能发光。按键按下时,KEY端被拉低,所以KEY由高电平变为低电平时视为按键按下,由低电平变为高电平时视为按键松开。
这里我们使用KEY1和LED1。对应IO口如下
LED1对应N5
KEY1对应C3
系统结构与层次分析
由功能我们可以知道,按键电灯由一个输入端和一个输出端组成。
如果不考虑工作原理,只考虑输入输出的关系,就可以画成如下框图:
列表为:
信号 | 类型 | 功能 |
---|---|---|
KEY_in | Input | 按键输入 |
LED_out | Output | 输出控制 |
画时序图
这里我们可以使用VISIO的三个相关组件:
对于组合逻辑值,我们一般先列出真值表:
输入 | 输出 |
---|---|
KEY_in | LED_out |
0 | 1 |
1 | 0 |
根据此真值表,可以画出波形图如下:
编写代码
新建工程
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仿真
过程:
- 产生模拟激励(输入波形)
- 将产生的激励加入到被测试模块并观察其输出响应。
- 将输出响应与期望进行比较,判断设计的正确性。
代码编写:
与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,就下载到板子上了。可以在板子上实验时候观察到了目的现象。
整个流程到此结束。