fpga[1]计数器(附源码)

这篇具有很好参考价值的文章主要介绍了fpga[1]计数器(附源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

计数器电路是在数字电子技术中应用的最多的时序逻辑电路。计数器不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。
在许多大型电路中必然有计数器电路的身影,可以说了解并掌握计数器的设计方法是学习fpga的第一步。
本文使用的软件是Quartus II 13.1modelsimnotepad++,开发板是黑金的AX301

  • 下图是计数器的基本设计流程。

1.创建项目文件夹

首先我们先创建一个存放项目的文件夹:
fpga[1]计数器(附源码)
再分别在counter内创建用来存放工程文件、rtl代码和波形图的文件夹:
fpga[1]计数器(附源码)
然后,打开Quartus II软件,新建一个工程文件并存放在我们刚刚建立好的prj文件夹中,命名为counter
fpga[1]计数器(附源码)
我们使用的开发板是黑金AX301搭载的是Cyclone IV E系列的EP4CE6F17C8,选择对应的型号。
fpga[1]计数器(附源码)
为了方便后续的仿真,我们先将仿真软件设置为Modelsim语言为Verilog HDL
fpga[1]计数器(附源码)

2.绘制波形图

对于计数器这个时序逻辑电路来说,需要时钟的驱动,复位方式选择异步复位。
同时,需要定义一个变量cnt来对时钟进行计数(后续需要利用LED来验证代码,此处先将cnt的位宽设置为25),计数值满时将flag进行取反。
最后将文件存放在visio文件夹中
fpga[1]计数器(附源码)

3.编写rtl代码

我们在rtl文件夹下建立名为counter的.v文件
fpga[1]计数器(附源码)
notepad++ 是一款小巧且好用的代码编辑软件,我们在language选项中勾选Verilog语言。
可以看到,notepad++Verilog语言有了关键字提示。
fpga[1]计数器(附源码)
编写代码如下:

module counter
(
	input			sys_clk	 ,
	input			sys_rst_n,		//输入端口为时钟和复位信号
	
	output		reg flag			//输出端口为计数器计满时的标志信号
);
	parameter	CNT_MAX = 24_999; 		//定义计数最大值,方便后续修改
	
	reg [24:0]	cnt;		//声明一个25位宽的变量cnt
	
	always@(posedge sys_clk or negedge sys_rst_n)		//复位方式设为异步复位
		if(sys_rst_n == 1'b0)
			cnt <= 25'd0;		//复位信号为低电平时计数变量清零
		else	if(cnt == CNT_MAX)
			cnt <= 25'd0;		//计数器计满时清零
		else 
			cnt <= cnt + 1'b1;	//其他情况对时钟计数
	
	always@(posedge sys_clk or negedge sys_rst_n)
		if(sys_rst_n == 1'b0)
			flag <= 1'b0;		//复位信号为低电平时标志信号设为低电平
		else	if(cnt == CNT_MAX)
			flag <= ~flag;		//计数器计满时将标志信号进行取反
		else 
			flag <= flag;		//其他情况标志信号保持不变

endmodule

Quartus II中我们进行一次全编译,没有报错。
fpga[1]计数器(附源码)

4.编写testbench代码

为了验证我们的设计,需要编写testbench文件进行仿真验证
我们编写testbench文件,是为了产生满足条件的激励信号,同时对模块的输出进行捕捉,测试输出是否满足要求。
编写代码如下:

`timescale 1ns/1ns		//设置时间参数
module tb_counter();	//模块声明

reg	sys_clk;			
reg sys_rst_n;

wire flag;				//声明端口(将原文件中wire类型和reg类型对换)


initial					//初始化语句
	begin
	sys_rst_n = 1'b0;	sys_clk = 1'b0;		//设置初始参数
	#50		//延迟50个时间单位
	sys_rst_n = 1'b1;	
	end
	always#10 sys_clk = ~sys_clk;			//每10个时间单位sys_clk取反一次
	

counter	counter_inst		//例化语句
(
	.sys_clk	(sys_clk),
	.sys_rst_n	(sys_rst_n),
	
	.flag_0		(flag),
);   

endmodule

tb_counter文件添加到工程中,并进行编译
fpga[1]计数器(附源码)
结果没有报错

fpga[1]计数器(附源码)
然后使用Quartus & Modelsim 联合仿真
我们可以在Quartus中点击Assignments→Settings→Simulation
在Simulation中的NativeLink Settings中添加文件()

fpga[1]计数器(附源码)
点击Test Benches添加自己写好的tb文件,这里注意文件名一定要与自己编写的tb_counter文件同名
fpga[1]计数器(附源码)
完成后回到主页面点击仿真按钮,Modelsim就会被启动,开始仿真
fpga[1]计数器(附源码)

在前面的rtl代码中,我们将CNT_MAX设置为了24_999,方便这部分的仿真
Instance栏目中我们点击counter_inst 使用ctrl+ W 将添加波形(因为默认的设置无法观察到我们设置的cnt变量)
fpga[1]计数器(附源码)
在波形管理页面我们按住ctrl + A 然后ctrl + G进行分组,方便我们观察
fpga[1]计数器(附源码)
点击这里可以隐藏变量地址
fpga[1]计数器(附源码)
然后点continue run
fpga[1]计数器(附源码)
再查看全局波形
fpga[1]计数器(附源码)
波形如下:
fpga[1]计数器(附源码)
我们需要对局部进行放大,可以看出:
当复位信号有效时(为低电平),cnt未开始计数,复位信号为高电平且时钟上升沿到来时计数开始

fpga[1]计数器(附源码)
每个时钟上升沿到来时cnt增加1(可以右键cnt变量在Radix中选择Unsigned设置为无符号数)
fpga[1]计数器(附源码)
当计数到24_999时cnt清零,且flag翻转
fpga[1]计数器(附源码)
fpga[1]计数器(附源码)
从这里看出来我们的设计是正确的。

为了更好的观察现象,我们把CNT_MAX设置为24_999_999,准备上板验证。

5.上板验证

我们需要绑定管脚,点击File→New→Tcl Script File

fpga[1]计数器(附源码)
为了更容易观察现象,我们将flag信号引到LED0上,Tcl脚本如下

set_location_assignment PIN_E1 -to sys_clk
set_location_assignment PIN_N13 -to sys_rst_n
set_location_assignment PIN_E10 -to flag

将Tcl脚本保存到工程中,然后点击Tools→TCL Scripts→Tcl_script1.tcl

fpga[1]计数器(附源码)
点击Run来执行我们编写好的Tcl脚本
fpga[1]计数器(附源码)
执行成功

fpga[1]计数器(附源码)
我们可以在这里看到管脚连接(也可以直接在该界面绑定管脚)
fpga[1]计数器(附源码)
fpga[1]计数器(附源码)
完成之后,我们进行一次全编译,然后就可以上板验证,点击这个按钮
fpga[1]计数器(附源码)
连接开发板后我们可以在Hardware Settings中看到USB-0,需要进行选择(需要预先安装驱动)

fpga[1]计数器(附源码)
先给开发板上电,然后点击Startfpga[1]计数器(附源码)
在这里看到,操作成功了
fpga[1]计数器(附源码)
LED0会以亮0.5秒熄灭0.5秒的规律闪烁。
fpga[1]计数器(附源码)

6.总结

本次我们设计了一个计数器,产生了占空比为50%的1Hz方波,以此来控制LED灯的闪烁。后续我们可以通过对1Hz方波进行分频来实现多个LED等按照不同频率闪烁,也可以将计数器作为子模块添加到其他的顶层模块来作为时间基准(1秒),以此来进行其他项目的设计。

工程文件点这下载文章来源地址https://www.toymoban.com/news/detail-424742.html

到了这里,关于fpga[1]计数器(附源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA】Verilog:时序电路设计 | 自循环移位寄存器 | 环形计数 | 扭环计数 | 约翰逊计数器

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:计数器   ​​ 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用IO:Switch :

    2024年02月10日
    浏览(95)
  • fpga[1]计数器(附源码)

    计数器电路是在数字电子技术中应用的最多的时序逻辑电路。计数器不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。 在许多大型电路中必然有计数器电路的身影,可以说了解并掌握计数器的设计方法是学习fpga的第一步。

    2023年04月25日
    浏览(50)
  • 【FPGA】时序逻辑电路——基于计数器实现一个以1秒频率闪烁的LED灯

    1 D触发器 分析: 特性:输出端Q只在CK处于上升沿的时候变化 图中波形的形成过程: 当D处于高电平时,CK未处于上升沿时,Q仍处于低电平 当CK来到上升沿,Q需要根据D发生变化,由于D是高电平,所以Q要从低电平变化成高电平 D从高电平变化成低电平,但是此时CK未来到上升沿

    2024年02月09日
    浏览(43)
  • fpga[1.1]BCD计数器(附源码)

    BCD码也称二进码十进数,可以分为有权码和无权码两个种类。常见的有权BCD码有8421码、2421码、5421码,无权BCD码有余3码、余3循环码、格雷码。 其中,8421BCD码是最基本和最常用的BCD码。其各个bit位的权值分别为8d、4d、2d、1d(5421码、2421码同理)。 BCD码常用于数码管这类经常用

    2023年04月09日
    浏览(42)
  • 【LabVIEW FPGA入门】使用数字IO卡实现计数器输入功能

            1.首先需要用一个数字IO的输入FPGA端口,并将其拖入程序框图中,同时创建一个循环。                  2.如果想要在循环中实现累加功能,就可以使用移位寄存器。         数字输入的当前值和历史值进行比较,用于一个判断大于,来确定是否出现了上升沿

    2024年01月20日
    浏览(48)
  • 【时序逻辑电路】——计数器

    🦄🦄欢迎大家来学习数字电路——时序逻辑电路。 🦄🦄在这里我们会讲解二进制计数器、十进制计数器和集成计数器74LS161,希望通过我们的学习会让你更明白数字电路中的奥秘。 目录 🔑一、计数器  🏆1.二进制计数器  (1)异步二进制加法计数器 (2)同步二进制加法

    2024年02月02日
    浏览(57)
  • 任意进制加法计数器电路设计

    目录 一、题目 二、时钟发生电路 1、施密特触发电路 2、单稳态电路 3、多谐振荡电路 三、 N进制计数器 1、M的情形 2、MN的情形 2、1  193实现 2、2 192实现 四、设计的小bug 1、两个bug 2、bug的原因及解决 五、仿真源文件的获取 图一 题目要求         如题,我们要设计三部

    2024年02月09日
    浏览(48)
  • 【FPGA】Verilog:计数器 | 异步计数器 | 同步计数器 | 2位二进制计数器的实现 | 4位十进制计数器的实现

    目录 Ⅰ. 实践说明 0x00 计数器(Counter) 0x01 异步计数器(Asynchronous Counter)

    2024年02月05日
    浏览(54)
  • 【FPGA】Verilog:升降计数器 | 波纹计数器 | 约翰逊计数器 | 实现 4-bit 升降计数器的 UP/DOWN

    目录 Ⅰ. 理论部分 0x00 升降计数器(UP DOWN Counter) 0x01 波纹计数器(Ripple Counter)

    2024年02月05日
    浏览(49)
  • FPGA拾忆_(3):调用IP 计数器&BCD计数器

    调用IP计数器: 每来一个cin(进位输入)信号,计数器输出值加一,当计数值为9且cin为1时,输出一个时钟长度的cout(进位输出)信号。 首先采用调用quartus种IP的方式,具体步骤: Tools----IP Catalog: 然后会调出IP目录窗口: 通过搜索counter来添加计数器模块,需要设置的内容

    2024年02月03日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包