当前位置: 首页 > news >正文

FPGA学习笔记(四)——计数器设计与验证

此实验在FPGA学习笔记(三)中记录一遍了,此文再加入相应的电路图。

实验内容:

LED在计数器的控制下,每500ms,状态翻转一次。

系统时钟为50M,对应的时钟周期是20ns。

500ms = 500 000us = 500 000 000 ns

则500ms翻转一次,对应25 000 000个时钟周期之后翻转一次,则需要一个计数器寄存器对时钟周期进行计数统计。

500 000 000ns/20 = 25 000 000个周期

源代码:

module main(
	Clk_100M,
	Rst_n,
	led
    );
input Clk_100M;//系统时钟,100M
input Rst_n;//全局复位,低电平复位

output reg led;
/*********************************/
//计数器计数控制进程
reg [24:0] cnt;//计数器寄存器
always@(posedge Clk_100M or negedge Rst_n) begin
if(!Rst_n)
    cnt <= 25'd0;
else if(cnt == 25'd24_999_999)
    cnt <= 25'd0;
else 
    cnt <= cnt + 1'b1;
end
/*********************************/
//led控制进程
always@(posedge Clk_100M or negedge Rst_n) begin
if(!Rst_n)
    led <= 1'b0;
else if(cnt == 25'd24_999_999)
    led <= ~led;
else
    led <= led;
end
/*********************************/
endmodule

仿真代码:
 

`timescale 1ns / 1ps

`define clock_period 20
module main_test;

// Inputs
reg Clk_100M;
reg Rst_n;

// Outputs
wire led;

// Instantiate the Unit Under Test (UUT)
main uut (
	.Clk_100M(Clk_100M), 
	.Rst_n(Rst_n), 
	.led(led)
);

initial begin
    // Initialize Inputs
    Clk_100M = 1;
    Rst_n = 0;

    // Wait 100 ns for global reset to finish
    #(`clock_period*200);
    Rst_n = 1;
    #2000_000_000;
    $stop;
        
    // Add stimulus here

end
always #(`clock_period/2) Clk_100M = ~Clk_100M; 
endmodule

整体电路图:

 计数器cnt电路图:

 

相关文章:

  • 三星S8能够虚拟定位吗
  • 湘怡源生,中国能源集团,中铁集团,服务非洲安哥拉
  • 实例讲解遗传算法——基于遗传算法的自动组卷系统
  • 厉害了!泉州这栋写字楼完全符合专家的判断,步入办公2.0时代!
  • 那些骨科医生误诊的“腰腿痛”,你中招了没?!
  • Inspired Living精致生活首家快闪店4月12至17日亮相上海K11艺术购物中心
  • python PyQt kears Tensorflow numpy 打包exe过程
  • 王石川:名目繁多的建筑业保证金早该取消
  • Java实现简单的socket通信
  • node.js中文资料导航
  • 粤语学习:颠覆手机的会是什么?
  • 帮助孩子养成独立自理的好习惯,关注6个关键点
  • 经济管理系:不负韶华,共同战“疫” 让担当成为青春最亮丽的底色
  • 关于csdn论坛登录的问题!
  • 【python】word2vec词向量,相似词,近义词,k-means文本聚类预处理
  • cf手游欢乐谷虚拟定位
  • MySQL误删除文件后,如何恢复
  • MySQL事务简单介绍
  • 春雷一声惊蛰到,万物复苏疫情消
  • 一个基于velocity模板引擎的代码生成器