找回密码
 注册
关于网站域名变更的通知
查看: 518|回复: 1
打印 上一主题 下一主题

转——从零开始学FPGA——by ihalin——实现让LED灯每50ms翻转一次

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-1 11:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
转——从零开始学FPGA——by ihalin——实现让LED灯每50ms翻转一次
# ]" ]$ H# k" y/ x

( A' F! `* y4 V4 d% N
这是我前面做的实验 实验一和实验二 计划每天一个
, n- [2 C" Y- h- m
下面是第三个实验计数器实验
5 S3 z, r+ D: o7 w# y& g$ ]9 q; b
实现让LED灯每50ms翻转一次( s9 K  O( d8 w9 N* r1 J+ V
1 B/ s* y0 e! R5 H( n8 t
原理是连接50MHZ的晶振 50MHZ=50_000_000HZ 时间是  1/50_000_000秒=20ns3 q; Y, R! Y. n5 S# P
所以计数的次数CNT=50_000_000/20=25_000_000次因为计数是从0开始计数的所以只需要计数到24_999_999即可
1 p$ l' p6 {3 v, i( Q1 y
开始时序逻辑电路了
$ ?# R: p6 c4 }+ H# r/ q/ P& V
posedge 等待CLK上升沿. p2 [( u6 b% D3 ?8 k
negedge 等待RST下降沿2 k" Z$ ~" ]% P1 [
always之间是并行的,它是一直在检测触发条件,always内部是顺序执行的。% n8 {! v7 ?1 \; X
下面是代码
1. module counter(Clk50M,Rst_n,led);
2.         input Clk50M;//系统时钟,50M=20ns
3.         input Rst_n;//全局复位,低电平复位
4.         output reg led;//led输出
5.         reg [24:0]cnt;//500ms=500_000_000ns/20ns = 25000 000
6. //计数器的进程        
7.         always@(posedge Clk50M or negedge Rst_n)//在系统时钟是上升沿时候或者是复位的下降沿
8.                 if(Rst_n == 1'b0)//如果发生了复位则计数器清零
9.                         cnt <= 25'd0;
10.       else if(cnt == 25'd24_999_999)//如果计数到了24 999 999时候则计数器清零
11.                         cnt <= 25'd0;
12.            else
13.                         cnt <= cnt +1'b1;//否则计数器自加1        
14.                        
15. //led的进程                        
16.         always@(posedge Clk50M or negedge Rst_n)//在系统时钟是上升沿时候或者是复位的下降沿
17.                 if(Rst_n == 1'b0)
18.                         led <= 1'b0;
19.                 else if(cnt == 25'd24_999_999)
20.                         led <= ~led;
21.                 else
22.                         led <= led;
23.                 
24.         
25. endmodule        
26.        
然后是testbench
5 |5 x. `3 }! S1 s3 x$ e8 a
使用宏定义方便代码修改
1. `timescale 1ns/1ns//仿真时间步进和精度
2. `define clock_period 20
3. module counter_tb;
4.   reg clk;
5.   reg rst_n;
6.   
7.   wire led;
8.   
9.
10. counter ct0(
11.                         .Clk50M(clk),
12.                         .Rst_n(rst_n),
13.                         .led(led)
14.                         );
15.                        
16.         initial clk =1;
17.         always #(`clock_period/2) clk =~clk;
18.         
19.         initial begin
20.                 rst_n = 1'b0;
21.                 #(`clock_period*200);
22.                 rst_n = 1'b1;
23.                 #2000000000;
24.                 $stop;
25.                 
26.         
27.         end
28.
29.
30. endmodule
31.
然后是RTL的仿真实验
3 {- m& H/ F4 M$ ~$ V

# j) Y' m, C' F( C- M
符合设计
" M$ o- `/ K2 N( D9 C
然后是门级仿真- w3 x+ a8 U( B$ \8 i6 ?

4 @) s- \$ t& {/ ^, p& g; e6 S
然后是下载到板子上
5 U: O$ J" w: n( \: k, O

; ?' `( _$ R+ C' X& j
一闪一闪的时间估计对的上。

; p8 ~8 {2 ?0 H, J  k$ W9 x4 |

该用户从未签到

2#
发表于 2019-4-1 16:48 | 只看该作者
没问题 对上了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-8 18:29 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表