0
点赞
收藏
分享

微信扫一扫

FPGA学习汇总(四)----计数器(定时取反led)

哈哈我是你爹呀 2022-04-15 阅读 60

如何创建工程 新建一个测试平台 如何模拟 如何编译 如何配置引脚 如何导入程序 前面文章都已经介绍过了 这里不赘述了 大部分朋友已经学会了 很简单 如果又忘记了 可以看前面的文章复习一下

实验目的:

做一个2s为周期,每1s取反一次的led 1s亮 1s灭 计数器为时间1s

思路

因为我们的时钟为20ns一周期 所以我们需要计数50000000个个数才可以

二进制寄存器位宽为26 也就是 0到25 因为0是第一个数

 代码

module f410(
    clk,
    rst_n,
    led
);
input clk;
input rst_n;
output reg led;

reg [25:0]cnt; 
//计数部分
always@(posedge clk or negedge rst_n)// 时钟上升沿 复位下降沿时 则
begin
     if(!rst_n)//复位
    cnt<=0;//计数归零 (非阻塞赋值)
//else if(cnt==26'd49_999) //测试平台的时候用 因为我们测试只需要验证正确性 所以时间可以取短一些
else if(cnt==26'd49_999_999)//计数满了
cnt<=0;//归零
else //计数没满 没复位
cnt<=cnt+1;//计数加一 (计49999999个数 一个数 20ns 也就是1s)

end
//led部分
always@(posedge clk or negedge rst_n)

begin 
     if(!rst_n)//复位
    led<=1;//不亮
//else if(cnt==26'd49_999)//测试平台的时候用
else if(cnt==26'd49_999_999//计数满了 
     led<=~led;//led取反
else 
  led<=led;  //计数没满 led不变
end

endmodule

测试平台

`timescale 1ns/1ns//时标 分辨率 1s
module f410_tb;

reg clk;
reg rst_n;
wire led;
f410 u1 (
    .clk(clk),
     .rst_n(rst_n),
      .led(led)
); 
initial //激励 (给初始值)

begin
clk=0;
rst_n=0;
#100 rst_n=1;//100ns后不复位了 
#2000_000; // 2000000ns
//#4000_000;//实际测试时候用 4000000ns 因为我们前面想测试时候时间短一点 则这个可以稍长方便观测

 $stop;

end
always #10 clk=~clk;  //10ns 时钟取反
endmodule

我们把上面注释部分 取消注释 进行模拟(把上面与其一个意思的语句注释掉,导入板子的时候恢复) 

模拟现象

 符合实验预期

配置引脚(根据原理图 按照自己板子自行配置)

 配置好引脚 然后全局编译 之后导入程序

然后通过我们的板子 就可以观测到实验现象 经验证 无误 

举报

相关推荐

0 条评论