欢迎光临散文网 会员登陆 & 注册

FPGA 学习笔记day6

2023-04-11 11:01 作者:崔崔TV  | 我要投稿

流水灯实验仿真昨天卡住,今天把它结束

仿真的波形长这样

这里仔细看会发现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


比较简单


FPGA 学习笔记day6的评论 (共 条)

分享到微博请遵守国家法律