在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1606|回复: 0

[原创] FPGAer:流水灯实战

[复制链接]
发表于 2020-4-14 17:14:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 liyirui 于 2020-4-14 17:49 编辑

流水灯想实现的功能:四个led灯依次点亮,形成“流水”的效果。
实现过程:
1、逻辑设计,Verilog编写。
捕获.PNG
因此要写一个模块flow_led,并在这个模块中实现计数和移位这两个功能。
这个模块input有两个引脚,sys_clk、sys_rst_n;这个模块output有四个引脚,led0、led1、led2、led3。
计数功能:这里需要计数0.2秒。需要芯片时钟的个数counter:
F=50MHz,T=1/F=0.2*10-7s
counter=0.2/0.2*10-7=107=1001 1000 1001 0110 1000 0000‬
所以定义reg [23:0]counter,107的二进制格式是24位
always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        counter <= 24'd0;
    else if (counter < 24'd1000_0000)
        counter <= counter + 1'b1;
    else
        counter <= 24'd0;
end
移位功能:计数0.2秒后就移位一次。
always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        led <= 4'b0001;
    else if(counter == 24'd1000_0000)
        led[3:0] <= {led[2:0],led[3]};
    else
        led <= led;
end
根据原理图,led高电平点亮,所以复位时候可以知道,一直就要一盏灯在亮。
2、确定引脚。
1977092-20200414114902574-2009774151.png
从原理图中可看出,sys_clk接芯片引脚E1;sys_rst_n接芯片引脚M1。Led0、led1、led2、led3依次接芯片引脚D11、C11、E10、F9。
3、编译成功,烧写到开发板,实现功能。
4、仿真。
利用Modelsim软件进行仿真:
①定义时间单位和时间精度
②module 功能_tb;
③定义端口:reg 输入;wire 输出;(这里定义是reg型还是wire型与输入、输出无关)
④初始化输入:initial begin
                ………..
                ………..
                end
⑤代码例化:
功能 u_功能(
…………………
);
⑥endmodule
我这里在开发板上为了肉眼看到灯的切换,所以时间为每隔0.2秒才发生变化。但是这个时间在仿真时太长了,因此调整为0.2*10-6秒,这样方便在仿真的时候能看出led灯的变化。
那么修改之后就是每十个时钟,led就会移位一次。
经上述说,在开发板和modelsim都实现具体的效果,流水灯实战结束。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-26 04:10 , Processed in 0.014697 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表