FPGA 学习笔记day6
流水灯实验仿真昨天卡住,今天把它结束
仿真的波形长这样

这里仔细看会发现led灯的状态一直没有发生变化。是因为0.2s才变化一次,5ms肯定看不到变化。
所以这个时候可以改一下代码里面的延迟时间。然后再运行仿真。
仿真的时候一方面是看这个东西的运行效果是不是预期的那样
另一方面就是用光标来测量波形变化的时间或者频率。
然后用quartus试一试
创建工程,然后编译一下程序检查有无错误,
然后进行管教分配。
打开par文件夹,里面有个qsf文件,用notepad++打开
去资料盘找这个东西

打开之后长这样:

然后找到时钟、复位、led灯几个部分,拷贝到刚才的qsf文件最下面。
保存一下关闭即可。就完成了管脚的配置
这个就有点像当时师兄让用ise的时候,配置管教用的那个ucf文件,感觉是一样的东西只不过开发环境不一样。完成功能都是一样的。

期间遇到的一个问题就是。打开pinplanner的时候显示这个:

解决:


可以看到这个时候这个下面的管脚配置已经完成了
然后这个时候关掉,回去run一下,就可以生成用于下载的文件
按键控制led灯实验
一、按键简介:

触摸按键不算一个传统的按键。
二、硬件设计

这里面为什么信号线出现在按键的右侧,直接连接到了上拉电阻左侧
因为在对应的按键按下之前,其右侧的电位和3.3v是一样的,因为没有形成相应的通路,没有电流流过,上拉电阻上面也就不会存在压降。所以这个时候不按下按键的时候这个东西是不被触发的。
三、程序设计:
系统框图:

代码:
module key_led(
input sys_clk,
input sys_rst_n,
input [3:0]key,
output reg [3:0]led
);
reg [23:0]counter;
reg [1:0]led_control;
always@(posedge sys_clk or negedge sys_rst_n)begin
//0.2s timer
if(!sys_rst_n)
counter<=0;
else if(counter==24'd1000_0000-1'd1)
counter<=24'd0;
else
counter<=counter+1'd1;
end
always@(posedge sys_clk or negedge sys_rst_n)begin
if(!sys_rst_n)
led_control<=2'b0;
else if(counter==24'd999_9999)
led_control<=led_control+2'd1;
else
led_control<=led_control;
end
always@(posedge sys_clk or negedge sys_rst_n)begin
if(!sys_rst_n)
led<=4'b0000;
else if(key[0]==0)
case(led_control)
2'b00:led<=4'b1000;
2'b01:led<=4'b0100;
2'b10:led<=4'b0010;
2'b11:led<=4'b0001;
default;
endcase
else if(key[1]==0)
case(led_control)
2'b00:led<=4'b0001;
2'b01:led<=4'b0010;
2'b10:led<=4'b0100;
2'b11:led<=4'b1000;
default;
endcase
else if(key[2]==0)
case(led_control)
2'b00:led<=4'b1111;
2'b01:led<=4'b0000;
2'b10:led<=4'b1111;
2'b11:led<=4'b0000;
default;
endcase
else if(key[3]==0)
led<=4'b1111;
else
led<=4'b0000;
end
endmodule
比较简单