基于原理图的十进制计数器的设计(FPGA)

合集下载

基于原理图的十进制计数器的设计(FPGA)

基于原理图的十进制计数器的设计(FPGA)

实验一:基于原理图的十进制计数器设计一、 实验目的:1. 熟悉和掌握ISE Foudation 软件的使用;2. 掌握基于原理图进行FPGA 设计开发的全流程;3. 理解和掌握“自底向上”的层次化设计方法;4. 温习数字电路设计的基础知识。

二、 实验原理:完成一个具有数显输出的十进制计数器设计,原理图如图2.1所示。

图2.1 十进制计数器原理图本实验为完成设计,采用了自底向上的设计流程。

自底向上设计是一种设计程序的过程和方法,是在设计具有层次结构的大型程序时,先设计一些较下层的程序,即去解决问题的各个不同的小部分,然后把这些部分组合成为完整的程序。

自底向上设计是从底层(具体部件)开始的,实际中无论是取用已有模块还是自行设计电路,其设计成本和开发周期都优于自顶向下法;但由于设计是从最底层开始的,所以难以保证总体设计的最佳性,例如电路结构不优化、能够共用的器件没有共用。

在现代许多设计中,是混合使用自顶向下法和自顶向上法的,因为混合应用可能会取得更好的设计效果。

一般来说,自顶向下设计方法适用于设计各种规模的数字系统,而自底向上的设计方法则更适用于设计小型数字系统。

十进制计数器七段数码管显示译码器使能控制端时钟端 异步清零端FPGA1、七段数码管译码器的设计七段数码管属于数码管的一种,是由7段二极管组成。

按发光二极管单元衔接方式分为共阳极数码管和共阴极数码管。

本实验使用共阴数码管。

它是指将一切发光二极管的阴极接到一同构成公共阴极(COM)的数码管。

共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平相应字段就点亮,当某一字段的阳极为低电平相应字段就不亮。

显示译码器,一般是将一种编码译成十进制码或特定的编码,并通过显示器件将译码器的状态显示出来。

根据显示的要求,可以得到七段显示译码器产生的各段LED输出与输入的二进制对应关系:表2.1七段字符显示真值表最小项译码器输出能产生输入变量的所有最小项,而任何一个组合逻辑函数都可以变换为最小项之和的标准形式,故采用译码器和门电路可实现任何单输出或多输出的组合逻辑函数。

fpga计数器原理

fpga计数器原理

fpga计数器原理FPGA计数器是一种在可编程逻辑器件(FPGA)中实现计数器的方案。

FPGA是一种高度灵活的芯片,可以由用户按照具体需求进行编程,因此在实现各种逻辑电路中,FPGA被广泛应用。

计数器是一种常见的数字电路,用于计算输入脉冲信号的数量,也被广泛应用于数字信号处理、时间测量、频率测量等领域。

本文将介绍FPGA计数器的原理、设计和实现。

FPGA计数器的原理FPGA计数器的实现方案可以分为同步计数器和异步计数器两种。

同步计数器是基于时钟边沿触发的原理,每个时钟周期都可以更新计数器的值。

在FPGA中,时钟边沿可以通过PLL锁相环(Unit Phase Locked Loop)进行生成和控制。

异步计数器则是基于输入脉冲信号触发的原理,每当输入脉冲信号触发时,计数器的值加1。

下面分别介绍同步计数器和异步计数器的原理。

同步计数器同步计数器的实现原理是基于时钟边沿触发的原理,每个时钟周期都可以更新计数器的值。

在FPGA中,时钟边沿可以通过PLL锁相环进行生成和控制。

同步计数器的电路原理图如图1所示。

计数器的输入包括一个时钟信号CLK和一个重置信号RST。

计数器由4位二进制加法器和4位D触发器(D flip-flop)组成。

D0-D3为D 触发器的输入,Q0-Q3为D触发器的输出,Q0-Q3的值即为计数器的当前值。

时钟信号CLK 作为D触发器的时钟输入,每个时钟周期触发时计数器的值更新。

重置信号RST可以将计数器的值归零,以实现初始状态的确定。

在同步计数器的实现中,利用FPGA中的时钟控制功能,可以控制计数器的更新速率,实现各种不同的频率测量和时间计数功能。

异步计数器异步计数器的实现原理是基于输入脉冲信号触发的原理,每当输入脉冲信号触发时,计数器的值加1。

异步计数器的电路原理图如图2所示。

计数器的输入包括一个输入脉冲信号IN和一个重置信号RST。

计数器由4位二进制加法器和4位D触发器组成。

当输入脉冲信号IN触发时,计数器的值加1,直到计数器的值达到最大值时,计数器的值重新归零。

fpga计数代码

fpga计数代码

fpga计数代码FPGA 计数器是基于 FPGA 实现的计数器,主要用于对电路中的事件进行计数。

通过 FPGA 的可编程性,可以通过更改代码来实现计数器的不同规格和特性。

下面是FPGA计数代码的一些相关参考内容:一、计数器的工作原理FPGA 计数器是由一组寄存器组成的计数器。

它的工作原理就是通过不断地累加计数器中的数字来实现事件的计数。

当计数器达到设定的上限时,它会向下复位并重新开始计数。

二、FPGA 计数器的实现FPGA 计数器可以通过 VHDL 或 Verilog HDL 等编程语言来实现。

以下是 VHDL 代码示例:```library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity cnt_4_bit isPort ( clk : in STD_LOGIC;rst : in STD_LOGIC;en : in STD_LOGIC;q : out STD_LOGIC_VECTOR (3 downto 0));end cnt_4_bit;architecture Behavioral of cnt_4_bit issignal cnt : STD_LOGIC_VECTOR (3 downto 0) := "0000"; beginprocess(clk, rst)beginif rst = '1' thencnt <= "0000";elsif rising_edge(clk) thenif en = '1' thencnt <= cnt + 1;end if;end if;end process;q <= cnt;end Behavioral;```在上面的代码中,四位计数器被定义为一个VHDL实体。

在计数器的行为结构中,产生了一个进程,该进程在时钟上升沿增加计数器的值。

基于HDL的十进制计数器的设计(FPGA)

基于HDL的十进制计数器的设计(FPGA)

实验二:基于HDL十进制计数、显示系统设计一、实验目的:1.掌握基于语言的ISE设计全流程;2.熟悉、应用VerilogHDL描述数字电路;3.掌握基于Verilog的组合和时序逻辑电路的设计方法;4.具有数显输出的十进制计数器的设计。

二、实验原理:1.实验内容:设计具有异步复位,同步使能的十进制计数器,其计数结果可以通过七段数码,管发光二极管进行显示。

其系统原理图如下:2.十进制计数器模块端口信号说明:①输入信号:clk----计数器的时钟信号Clc——异步清零信号,当clc=1时,输出复位为0;当clc=0时,正常计数Ena——使能控制信号,当ena=1时,电路正常累加计数,否则电路不工作输出信号。

②输出信号:SUM[3:0]-------- 计数值的个位。

即,在CLK上升沿检测到SUM=9时,SUM将被置0,开始新一轮的计数。

COUT --------计数值的十位进位,即:只有在时钟CLK上升沿测到SUM=9时,COUT将被置1,其余情况下COUT=0;3.自顶向下的设计思路进行模块划分:整个系统要求设计的模块:十进制计数模块和数码管驱动模块,由于实验按键为实现按键防抖,所以在实验时候需要加入消抖模块:电源按键消抖:通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。

因而在闭合及断开的瞬间均伴随有一连串的抖动,为了产生这种现象而作的措施就是按键消抖。

三、实验过程:按照实验原理的设计思想,做出了以下设计代码:十进制计数器部分:module cnt10(clr,clk,ena,sum,cout);input clr,clk,ena;output[3:0] sum;output cout;reg[3:0] sum;reg cout;always @(posedge clk or posedge clr)beginif(clr)beginsum<=4'b0000;cout<=0;endelse if(ena)beginif(sum==4'b1001)beginsum<=4'b0000;cout <= 1;endelse if(sum<4'b1001)beginsum <= sum+4'b0001;cout<=0;endendendEndmodule数码管驱动模块代码:module led(out_y,sum);output [6:0] out_y;input[3:0] sum;reg [6:0] out_y;always @(sum)begincase(sum)4'b0000:out_y=7'b0111111;4'b0001:out_y=7'b0000110;4'b0010:out_y=7'b1011011;4'b0011:out_y=7'b1001111;4'b0100:out_y=7'b1100110;4'b0101:out_y=7'b1101101;4'b0110:out_y=7'b1111101;4'b0111:out_y=7'b0000111;4'b1000:out_y=7'b1111111;4'b1001:out_y=7'b1101111;default:out_y=7'b00000000;endcaseendendmodule消抖模块部分实验已经给出,最后综合模块代码:module int(clk_50,clk,rest,ena,out_y,cout );input clk_50,clk,rest,ena;output [6:0] out_y;output cout;wire [3:0] out;wire clk_out;wire [6:0] out_y;debounce_module u1(clk_50,rest,clk,clk_out); cnt10 u2(rest,clk_out,ena,out,cout);led u3(out_y,out);Endmodule根据实验要求综合:1.2.相应的引脚约束文件为:NET "clk" LOC = “V16” | PULLDOWN; NET "clk_50" LOC = "C9" ;NET "clr" LOC = "N17" ;NET "cout" LOC = "C11" ;NET "data_out<0>" LOC = "D5" ;NET "data_out<1>" LOC = "C5" ;NET "data_out<2>" LOC = "B6" ;NET "data_out<3>" LOC = "E7" ;NET "data_out<4>" LOC = "F7" ;NET "data_out<5>" LOC = "A4" ;NET "data_out<6>" LOC = "B4" ;NET "ena" LOC = "H18" ;NET "clk" CLOCK_DEDICATED_ROUTE=FALSE; 3.时序仿真为:十进制计数器仿真如下:最后例化后的结果为:思考题比较实验一与实验二的实验过程,说明原理图输入法与HDL输入法的不同的应用环境答:实验一中应用的是原理图完成十进制计数器的数显,工作量相对较大,需要绘制8张原理图,其中还不包括消抖模块。

十进制计数与显示电路的设计与仿真

十进制计数与显示电路的设计与仿真

摘要:计数器的功能是记忆脉冲的个数,它是数字系统中应用最广泛的基本时序逻辑构件。

计数器在微型计算机系统中的主要作用就是为CPU和I/O设备提供实时时钟,以实现定时中断、定时检测、定时扫描、定时显示等定时控制,或者对外部事件进行计数。

一般的微机系统和微机应用系统中均配置了定时器/计数器电路,它既可当作计数器作用,又可当作定时器使用,其基本的工作原理就是"减1"计数。

计数器:CLK输入脉冲是一个非周期事件计数脉冲,当计算单元为零时,OUT输出一个脉冲信号,以示计数完毕。

以下是关于十进制计数器的几种设计方法。

1.计数器计数器是数字系统中用的较多的基本逻辑器件。

它不仅能记录输入时钟脉冲的个数,还可以实现分频,定时,产生节拍脉冲和脉冲序列等。

例如,计算机中的时序发生器,分频器,指令计数器等都要使用计数器。

计数器的种类很多。

按时序脉冲输入方式的不同,可分为同步计数器和异步计数器;按进位体制不同可以分为二进制计数器和非二进制计数器;按计数器的数字增减趋势的不同,可分为加法计数器,减法计数器和可逆计数器。

同步计数器是指计数器内所有的触发器共同使用同一个输入的时钟脉冲信号,在同一个时刻翻转,有计数速度快的特点。

异步计数器是指计数器内各触发器的输入时钟信号的来源不同,各电路的翻转时刻也不一样,因此计数速度较慢在非二进制计数器中,最常用的是十进制计数器,其他进制计数器习惯上称为任意进制计数器。

非二进制计数器也有异步和同步,加减和可逆计数器的各种类型。

2.集成计数器集成计数器在一些简单小型数字系统中仍被广泛有用,因为他们具有体积小,功耗低,功能灵活等优点。

集成计数器的类型很多,表1列举了若干集成计数器产品。

表1 几种集成计数器CP脉冲引入方式型号计数模式清零方式预置数方式同步741614位二进制加法异步(低电平)同步74HC1614位二进制加法异步(低电平)同步74HCT1614位二进制加法异步(低电平)同步74LS191单时钟4位二进制可逆无异步74LS193双时钟4位二进制可逆异步(高电平)异步74160 十进制加法异步(低电平)同步74LS190单时钟十进制可逆无异步异步74LS293双时钟4位二进制加法异步无74LS290二-五-十进制加法异步异步3常用计数器74161的功能74161是4位二进制同步加计数器。

十进制计数器设计与制作介绍课件

十进制计数器设计与制作介绍课件

确定计数器 的功能需求, 如计数范围、 显示方式等
编写计数器的 软件程序,包 括计数算法、 显示控制等
测试计数器的 功能,包括计 数准确性、显 示效果等
01
03
05
02
04
06
设计计数器的 硬件结构,包 括电路图、元 器件选择等
制作计数器 的硬件电路, 包括焊接、 调试等
优化计数器的 性能,包括提 高计数速度、 降低功耗等
如电子表、计数器、定时器等。
04 十进制计数器可以通过编程实现各
种功能,如计数、定时、报警等。
十进制计数器的工作原理
01
十进制计数器是一 种能够计数到10 的电子设备。
02
它的基本工作原理 是通过对输入脉冲 进行计数,当计数 值达到10时,输出 一个脉冲信号,然 后重新开始计数。
03
十进制计数器通常 由多个触发器组成, 每个触发器对应一 个计数值,当所有 触发器的计数值都 达到10时,输出脉 冲信号。
计数器
实例二:使 用555定时器 制作十进制
计数器
实例三:使 用FPGA制作 十进制计数

分析:不同 制作方法的 优缺点和适
用场景
十进制计数器的测 试与调试
测试方法与标准
功能测试:检查计数 器的基本功能是否正 常,如计数、清零、 复位等
精度测试:检查计数 器的计数精度,如最 大误差、最小误差等
稳定性测试:检查计 数器在不同工作环境 下的稳定性,如温度、 湿度等
抗干扰测试:检查计数 器在受到外界干扰时的 抗干扰能力,如电磁干 扰、电源干扰等
安全性测试:检查计 数器的安全性能,如 漏电流、绝缘强度等
寿命测试:检查计数 器的使用寿命,如连 续工作时间、开关次 数等

基于FPGA十进制计时器设计

基于FPGA十进制计时器设计

十进制计时器设计一、实验目的:熟悉Quartus II的开发环境和开发流程,掌握Verilog文本设计流程,并使用Verilog编写一个十进制计时器,在Altera-Modelsim软件上仿真,验证十进制计时器的功能是否正确。

二、实验原理:十进制计数器的CLK为计数的信号,上升沿有效;RST为计数器复位信号;EN为时钟使能信号,当EN处于高电平时,计数器在CLK有效时开始计数;DATA为4位并行的数据输入端;DOUT为4位并行的数据输出端;Load为计数器的数据加载控制信号,当Load处于低电平时,数据输入端DATA 的数据被加载至数据输出端DOUT;Cout为计数器的进位输出。

三、实验步骤:3.1创建项目(1)新建一个文件夹存放EDA项目设计的相关文件。

本项设计的内容为十进制计数器,并且文件名不能使用中文,因此文件夹取名为CNT10,存放的路径为C:\Users\pp\Desktop\CNT10。

其次,项目的顶层文件名设置必须与编辑代码中的顶层模块名一致。

(2)将设计文件加入工程中。

单击File name栏后的控件,将与工程相关的Verilog文件加入工程;若没有编写相关Verilog文件,便单击Next进入下一步。

(3)选择目标芯片。

根据项目开发的硬件平台,选择与之相应的FPGA芯片。

首先在Device Family下拉列表中选择Cyclone系列,在引脚数目pin count中选择144,可快速筛选出符合条件得芯片型号。

(4)EDA工具设置。

此窗口中有三项选择:Design Entry/Synthesis用于选择输入的HDL类型和综合工具;Simulation用于选择仿真工具;Timing Analysis用于选择时序分析工具。

若不作选择,则默认选择Quartus II自含的EDA设计工具。

3.2 Verilog文本输入选择File->New命令,在New窗口中选择Verilog HDL File命令建立Verilog 文本,设置文件名为cnt10.v并存放在C:\Users\pp\Desktop\CNT10文件夹的根目录下。

课程设计(基于FPGA的数码管十进制显示)

课程设计(基于FPGA的数码管十进制显示)

中北大学课程设计说明书指导教师:崔永俊职称: 副教授2012 年 6 月 22 日目录1、课程设计的目的 (1)2、课程设计内容和要求 (1)2.1、设计内容 (1)2.2、设计要求 (1)3、设计方案及实现情况 (1)3.1、设计思路 (1)3.2、工作原理及框图 (1)3.3、各模块功能描述 (3)3.4、仿真结果 (9)3.5、试验箱验证情况 (10)4、课程设计总结 (11)5、参考文献 (12)1、课程设计的目的1)、学习操作数字电路设计实验开发系统,掌握数码管显示模块的工作原理及应用。

2)、掌握组合逻辑电路、时序逻辑电路的设计方法。

3)、学习掌握可编程器件设计的全过程。

2、课程设计内容和要求2.1、设计内容1)、学习掌握键盘控制模块、数码管显示模块的工作原理及应用;2)、熟练掌握VHDL编程语言,编写键盘控制模块的控制逻辑。

2.2、设计要求1)、仿真所编写的程序,模拟验证所编写的模块功能;2)、下载程序到芯片中,硬件验证所设置的功能,能够实现十进制数的显示;3)、整理设计内容,编写设计说明书。

3、设计方案及实现情况3.1、设计思路1)、键盘不断扫描,有按键按下则输出相应信号,并且发出使能信号给处理模块。

2)、处理模块对收到的信号进行判断,决定执行什么操作,对数据进行运算。

3)、对于数字键需要移位显示,功能键要考虑优先级判断,进行倒计时操作时要能对时钟信号分频自减。

4)、专门的程序段用来不断将当前数据各位求出,译码成显示内容输给数据选择模块。

5)、数据选择模块根据扫描电路选择信号将各位数字显示出来。

3.2、工作原理及框图1、键盘原理键盘电路网络很像一台微缩的计算机,它拥有自己的处理器和在该处理器之间传输数据的电路,这个电路的很大一部分组成了键矩阵。

键矩阵是位于键下方的一种电路网格。

在所有的键盘(中,每个电路在每个按键所处的位置点下均处于断开状态。

当您按下某个键时,此按键将按下了开关,从而闭合电路,使得少量电流可以通过。

EDA实验指导 基于FPGA的计数器设计

EDA实验指导 基于FPGA的计数器设计

FPGA实验指导及记录实验一基于FPGA的计数器的设计1、实验目的:(1)掌握QuartusⅡ软件的设计流程(2)学习原理图设计方法和波形仿真方法2、实验任务:采用原理图法设计一个十进制计数器,完成时序仿真和硬件实现。

3、实验步骤:(1)新建工程双击QuartusⅡ9.1(64-Bit)图标,打开软件,选择File→New Project Wizard,如图1-1所示,单击Next,进入图1-2所示对话框,完成工程存储文件夹建立、工程名、顶层实体名的设置。

(注:可通过单击…浏览按键新建存储文件夹,文件夹放置于D盘或E盘根目录下,目录中不能有中文名称,取名最好具有可读性。

)本例存储在E盘cnt_10文件夹中,文件名和顶层实体名均为cnt_10。

图1-1新建工程向导图1-2 新建文件夹/工程名/顶层实体单击Next,进入文件添加窗口,本例还没有设计文件,直接单击Next进入下一步设置,如图1-3所示,进行器件型号选择,本例采用EP3C16Q240C8,(建议先在Family 中选择CycloneⅢ系列,然后在右侧过滤选项中选择pin count 240缩小选择范围)。

单击Next进入下一步,设置设计/仿真/时序分析工具,本例不需要,直接单击Next,进入下一步。

观察设置细节,单击Finish完成设计。

图1-3 器件型号选择图1-4 完成工程设置(2)新建设计文件选择File→New,打开如图1-5所示对话框,选择Block Diagrom原理图设计文件,打开原理图设计文件。

双击空白处,打开symbol对话框,选择74390,单击OK后,拖动鼠标可放置于原理图任意空白处。

进一步添加输入端input/输出端output,添加完成后如图1-8所示。

图1-5 新建原理图文件图1-6 选择74390图1-7添加输入/输出端 图1-8 放置所需元器件将鼠标放置于器件端口处,鼠标即会变为“+”字型,此时可拖动鼠标进行连线。

基于HDL十进制计数、显示系统的设计说明

基于HDL十进制计数、显示系统的设计说明

****大学实验报告课程名称: FPGA技术实验名称:基于原理图的十进制计数器设计姓名: *****学号: *****班级:电子1202指导教师: ***********大学****学院制实验二基于 HDL 十进制计数、显示系统设计一、实验原理1、实验容:设计具有异步复位、同步使能的十进制计数器,其计数结果可以通过七段数码管、发光二极管等进行显示。

2、模块端口信号说明输入信号:Clk_50m ---系统采样时钟clk -------待计数的时钟clr ---------异步清零信号,当 clr=1,输出复位为 0,当 clr=0,正常计数ena---------使能控制信号,当 ena=1,电路正常累加计数,否则电路不工作输出信号:q[6: 0]---------驱动数码管,显示计数值的个位cout -----------1bit 数据,显示计数值向十位的进位COM-----------共阳级数码管,公共端(接地,参考开发板原理图)3、以自顶向下的设计思路进行模块划分:整个系统主要设计的模块是:十进制计数模块和数码管驱动模块,由于实验板的按键为实现硬件防抖,则需要将按键输入的时钟 clk,先通过消抖模块消抖后,再输出至后续使用.1)十进制计数器模块设计输入:CLK -------待计数的时钟CLR ---------异步清零信号,当 CLR =1,输出复位为 0,当 CLR =0,正常计数ENA---------使能控制信号,当 ENA=1,电路正常累加计数,否则电路不工作输出:SUM[3:0]---------- 计数值的个位。

即,在 CLK 上升沿检测到 SUM=9 时, SUM 将被置0,开始新一轮的计数。

COUT ------------计数值的十位进位,即:只有在时钟 CLK 上升沿检测到 SUM=9 时,COUT 将被置 1,其余情况下 COUT=0;在设计中可以使用 always, if-else-if语句实现,设计中注意不要在两个以上的 always模块中对同一个变量进行赋值,否则会产生多重赋值源( multi-source)的问题。

fpga计数器写法总结

fpga计数器写法总结

fpga计数器写法总结在FPGA设计中,计数器是一种常用的模块,它可以在各种应用中实现时钟同步、周期计数等功能。

本文将总结FPGA计数器的写法,包括计数器的设计思路、实现方式、常见问题及解决方法等。

一、计数器设计思路FPGA计数器通常采用有限状态机或移位寄存器的方式实现。

有限状态机可以根据输入时钟信号不断更新状态,从而实现计数功能。

移位寄存器则可以将输入时钟信号的位流逐位移入或移出寄存器,从而实现计数。

在设计中,需要根据具体的应用场景和资源约束选择合适的实现方式。

二、计数器实现方式1.硬件描述语言实现常用的硬件描述语言包括VHDL和Verilog。

使用VHDL可以实现复杂的行为描述,而使用Verilog则更注重硬件的逻辑描述。

在实现计数器时,需要先确定计数器的位数和时钟频率,然后根据设计思路和语言特点进行编码。

2.软件仿真验证在硬件设计完成后,需要进行仿真验证以确保设计的正确性和可靠性。

常用的仿真工具包括ModelSim、Quartus等。

通过仿真可以发现设计中存在的问题和错误,并及时进行修正。

三、常见问题及解决方法1.时钟抖动问题时钟抖动会导致计数器的计数不准确。

解决方法是在时钟输入端加滤波器或整形电路,以消除抖动影响。

2.计数溢出问题当计数器的位数不够时,会导致计数溢出。

解决方法是增加计数器的位数,或者在计数器溢出时进行特殊处理,如重置计数器或发出中断信号。

3.时序问题在设计中需要注意时序问题,以确保各个模块之间的信号传输正确无误。

解决方法是优化设计,合理安排模块之间的信号传输路径和时序关系。

四、总结本文总结了FPGA计数器的设计思路、实现方式、常见问题及解决方法等。

在实际应用中,需要根据具体的应用场景和资源约束选择合适的实现方式,并进行仿真验证以确保设计的正确性和可靠性。

同时,需要注意时序问题,以确保各个模块之间的信号传输正确无误。

通过不断实践和总结,可以提高计数器的设计水平和效率,为FPGA应用开发提供更好的支持。

基于FPGA的计数器设计说明

基于FPGA的计数器设计说明

EDA课程设计项目名称基于FPGA的计数器的设计专业班级通信102班学生青瓜指导教师2013年 5 月28 日摘要本课程设计要完成一个 1 位十进制计数器的设计。

计数器是大规模集成电路中运用最广泛的结构之一。

在模拟与数字集成电路设计当中, 灵活地选择与使用计数器可以实现很多复杂的功能, 可以大量减少电路设计的复杂度和工作量。

讨论了一种可预置加减计数器的设计, 运用Ver ilog H DL 语言设计出了一种同步的可预置加减计数器, 该计数器可以根据控制信号分别实现加法计数和减法计数, 从给定的预置位开始计数, 并给出详细的 VerilogHDL 源代码。

最后, 设计出了激励代码对其进行仿真验证, 实验结果证明该设计符合功能要求, 可以实现预定的功能。

关键词:计数器;VerilogHDL;QuartusⅡ;FPGA;AbstractThis course is designed to complete a one decimal counter design. The counter is LSI structure in one of the most widely used. In the analog and digital IC designs, the flexibility to select the counter can achieve a lot with the use of complex functions, can significantly reduce the complexity of circuit design and workload. Discusses a presettable down counter design, using Ver ilog H DL language designed a synchronous presettable down counter, the counter can be implemented according to the control signals are counted Addition and subtraction counting from a given the preset starts counting, and gives detailed VerilogHDL source code. Finally, the design of the incentive code its simulation, experimental results show that the design meets the functional requirements, you can achieve the intended function.Key words:Decimal counter; VerilogHDL; Quartus Ⅱ; FPGA;目录摘要IAbstractII第1章绪论11.1计数器的种类11.2计数器的发展1第2章设计环境22.1 Quartus II22.1.1 软件简介22.1.2 功能22.2 Verilog HDL硬件描述语言42.2.1 语言简介42.2.2 主要能力42.2.3 语言用途62.2.4 Verilog HDL的发展历史62.2.5 主要应用72.3 Electronic Design Automation8第3章设计思路103.1输入模块103.2 寄存器模块103.3 输出模块113.4 计数模块11第4章程序设计124.1 主程序124.3 always语句134.4 if-else语句13第5章波形仿真13结论14参考文献15附录116致16第1章绪论1.1计数器的种类1、如果按照计数器中的触发器是否同时翻转分类,可将计数器分为同步计数器和异步计数器两种。

用FPGA设计十进制计数器

用FPGA设计十进制计数器

用FPGA设计十进制计数器
张庆玲
【期刊名称】《西安航空技术高等专科学校学报》
【年(卷),期】2000(018)001
【摘要】电子设计自动化(EDA)的实现是与FPGA技术的迅速发展息息相关的,具有用户可编程的特性,以原理图输入或文本编辑,能进行波形仿真和硬件仿真,实现系统集成,降低开发成本。

【总页数】3页(P11-13)
【作者】张庆玲
【作者单位】西安航专电气系,西安710077
【正文语种】中文
【中图分类】TP332.12
【相关文献】
1.基于FPGA的十进制计数器的设计与实现 [J], 周庆芳
2.基于FPGA的十进制计数器的设计与实现 [J], 周庆芳;
3.一款简易十进制计数器的制作 [J], 胡宝明;黄双根;马文烈
4.CD4017十进制计数器 [J], 李井泉; 王兆欣; 陈大川
5.基于集成计数器74LS161设计的六十进制计数器 [J], 栾爽;翟艳男;李晶;金美善因版权原因,仅展示原文概要,查看原文内容请购买。

华中科技大学基于FPGA的十进制加减可逆计数器

华中科技大学基于FPGA的十进制加减可逆计数器

实验名称:十进制加减可逆计数器实验组别:⑨实验人:XJY 班级:光信1102 学号:U201114XXX目标要求:利用实验板实现十进制加减可逆计数器设计,具体要求为:拨码开关键SW1为自动可逆加减功能键,当SW1为HIGH时,计数器实现自动可逆模十加减计数功能,即4个七段数码管上几乎同步显示0—1—2—3—4—…9—8—7—…0—1…的模十自动可逆加减计数结果;当SW1为LOW时,计数器按拨码开关键SW0的选择分别执行加减计数功能。

即当SW0为HIGH时,计数器实现模十加计数功能,即4个七段数码管上几乎同步显示0—1—2—3—4—…9——0—1…的模十加计数结果;当SW0为LOW时,8—7…的模十减计数结果。

实现原理:源码清单:`timescale 1ns / 1ps////////////////////////////////////////////////////////////////////////////////// // Company:// Engineer://// Create Date: 14:24:13 12/09/2013// Design Name:// Module Name: xjy// Project Name:// Target Devices:// Tool versions:// Description://// Dependencies://// Revision:// Revision 0.01 - File Created// Additional Comments://////////////////////////////////////////////////////////////////////////////////// module xjy(input clk,input SW1,input SW0,input clear,input reset,output reg[3:0] sl_reg,output reg [6:0]segdat_reg);reg [26:0] count;reg [3:0] q;reg x;always@(posedge clk)beginif(clear) beginsl_reg<=0;count<=0;endelsecount<=count+1;endalways@(posedge count[24]) //程序运行时用//always@(posedge count[4]) 程序模拟时使用beginif (reset) begin q<=0; x<=0; endelse begincase(SW1)1'd1:begincase(x)1'd0: beginif(q==4'd8) x<=1;q<=q+1;end1'd1: beginif(q==4'd1) x<=0;q<=q-1;endendcaseend1'd0:begincase(SW0)1'd0:beginif(q==4'd0) q<=4'd9;else q<=q-1;end1'd1:beginif(q==4'd9) q<=4'd0;else q<=q+1;endendcaseendendcaseendendalways@(q) // 数码管显示处理begincase(q)4'h0: segdat_reg = 7'b0000001; //04'h1: segdat_reg = 7'b1001111; //14'h2: segdat_reg = 7'b0010010; //24'h3: segdat_reg = 7'b0000110; //34'h4: segdat_reg = 7'b1001100; //44'h5: segdat_reg = 7'b0100100; //54'h6: segdat_reg = 7'b0100000; //64'h7: segdat_reg = 7'b0001111; //74'h8: segdat_reg = 7'b0000000; //84'h9: segdat_reg = 7'b0000100; //9default: segdat_reg = 7'b0111000; //Fendcaseendendmodule测试文件清单:`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////// // Company:// Engineer://// Create Date: 17:46:25 12/09/2013// Design Name: XJY// Module Name: D:/ISE/XJY/xjy/xjy_test.v// Project Name: xjy// Target Device:// Tool versions:// Description://// Verilog Test Fixture created by ISE for module: XJY //// Dependencies://// Revision:// Revision 0.01 - File Created// Additional Comments:////////////////////////////////////////////////////////////////////////////////// module xjy_test;// Inputsreg clk;reg SW1;reg clear;reg reset;// Outputswire [3:0] sl_reg;wire [6:0] segdat_reg;// Instantiate the Unit Under Test (UUT)XJY uut (.clk(clk),.SW1(SW1),.clear(clear),.reset(reset),.sl_reg(sl_reg),.segdat_reg(segdat_reg));always begin#10; clk=~clk;endinitial begin// Initialize Inputsclk = 0;SW1 = 0;SW0=1;clear =1;reset = 1;// Wait 60 ns for global cleat to finish#60;clear =0;// Wait 60 ns for global reset to finish#60;reset = 0;// Add stimulus hereendEndmodule管脚定义文件:#Created by Constraints Editor (xc3s100e-cp132-4) - 2013/12/10 NET "clk" TNM_NET = clk;TIMESPEC TS_clk = PERIOD "clk" 20 ns HIGH 50%;NET "segdat_reg[6]" LOC = L14;NET "segdat_reg[5]" LOC = H12;NET "segdat_reg[4]" LOC = N14;NET "segdat_reg[3]" LOC = N11;NET "segdat_reg[2]" LOC = P12;NET "segdat_reg[1]" LOC = L13;NET "segdat_reg[0]" LOC = M12;NET "sl_reg[0]" LOC = F12;NET "sl_reg[1]" LOC = J12;NET "sl_reg[2]" LOC = M13;NET "sl_reg[3]" LOC = K14;NET "clear" LOC = K3;NET "clk" LOC = B8;NET "SW1" LOC = L3;NET "clk" SLEW=FAST;NET "reset" LOC=B4;NET "SW0" LOC=P11;NET "SW1" LOC=L3;系统使用说明:clear 为程序开始按钮,定义为开发板的拨码开关SW3reset 为程序清零按钮,拨至低电位后显示清零,定义为拨码开关SW2SW1 为程序功能控制按钮,定义为拨码开关SW1SW0 为程序功能控制按钮,定义为拨码开关SW0系统功能与性能测试结果:实验开始之前将SW3,SW2,SW1,SW0,均调至HIGH实验开始调SW3(clear),SW2(reset)为LOW当SW1为HIGH时,计数器实现自动可逆模十加减计数功能,即4个七段数码管上几乎同步显示0—1—2—3—4—…9—8—7—…0—1…的模十自动可逆加减计数结果;当SW1为LOW时,计数器按拨码开关键SW0的选择分别执行加减计数功能。

基于FPGA的十进制计数器

基于FPGA的十进制计数器

w hen"0001"=>q<="0010 ";c <='0';
w hen"0010"=>q<="00 11";c <='0';
w hen"0011"=>q<= "0100";c <='0';
w hen"0100"=>q<="0101 ";c <='0';
w hen"0101"=>q<="0 110";c <='0';
实验名称:十进制计数器 1. 实验目的:
掌握 160 计数器的使用及原理。 熟悉 Quartus II 的使用,熟练掌握程序的编译,波形的仿真及下载的过程。
2 实验内容: 编写十进制计数器的程序,并编译,下载到试验箱中查看结果。
3. 实验方案(程序设计说明)
74160 是一个 4 位二进制的计数器,它具有异步清除端与同步清除端。 异步清零功能是指只要引脚 nRd 有效电平到来,无论有无 CLK 脉冲,输出为‘0’。同步置数 功能是指当引脚 nLd 为有效电平时,计数功能被禁止,在 CLK 脉冲上升沿作用下 D0~D3 的数 据被置入计数器并呈现在 Q0~Q3 端。
w hen"0110"=>q<= "0111";c <='0';
w hen"0111 "=>q<="1000 ";c <='0';

十进制计数器 ppt课件

十进制计数器 ppt课件

2020/12/27
23
集成同步十进制计数器74160
Q3 Q2Q1 Q0 :计数输出; C:进位输出; LD:置数信号(同步); D3 D2D1 D0 :置数输入;
Rd:异步复位信号; S1S2:功能选择信号; CP:计数脉冲输入端。
2020/12/27
24
74160 时 序 图
2020/12/27
25
同步十进制可逆计数器74190:
D/U:加/减控制信号(down/up); LD:置数信号(异步); EN:计数使能信号; RCO: 行波时钟输出。加计数计数值达到最大(1001)或减计数计数值
最小 (0000)时输出低电位,否则输出高电位。 MAX/MIN:加计数计数值达到最大(1001)或减计数计数值最小(0000)
笨,没有学问无颜见爹娘 ……” • “太阳当空照,花儿对我笑,小鸟说早早早……”
4
同步时序逻辑电路分析的一般步骤:
(1) 由给定的逻辑电路,写出电路的输出方程、和各触发 器的驱动方程。
(2) 由驱动方程写出各触发器的状态方程。
(3) 根据电路方程,求出输入变量取不同值时,电路的次态 和输出;即 作出电路的状态转换表和 状态转换图,必 要时作出时序图(波形图)。
11
十进制计数器的电路设计
状态转换图
S0
S1
S2
S3
1
S9
S4
S8
S7
S6
S5
练习:
2020/12/27
12
状态分配表
2020/12/27
13
状态转换表
总卡诺图
2020/12/27
14
Q3卡诺图
2020/12/27
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一:基于原理图的十进制计数器设计
一、实验目的:
1.熟悉和掌握ISE Foudation软件的使用;
2.掌握基于原理图进行FPGA设计开发的全流程;
3.理解和掌握“自底向上”的层次化设计方法;
4.温习数字电路设计的基础知识。

二、实验原理:
完成一个具有数显输出的十进制计数器设计,原理图如图2.1所示。

图2.1十进制计数器原理图
本实验为完成设计,采用了自底向上的设计流程。

自底向上设计是一种设计程序的过程和方法,是在设计具有层次结构的大型程序时,先设计一些较下层的程序,即去解决问题的各个不同的小部分,然后把这些部分组合成为完整的程序。

自底向上设计是从底层(具体部件)开始的,实际中无论是取用已有模块还是自行设计电路,其设计成本和开发周期都优于自顶向下法;但由于设计是从最底层开始的,所以难以保证总体设计的最佳性,例如电路结构不优化、能够共用的器件没有共用。

在现代许多设计中,是混合使用自顶向下法和自顶向上法的,因为混合应用可能会取得更好的设计效果。

一般来说,自顶向下设计方法适用于设计各种规模的数字系统,而自底向上的设计方法则更适用于设计小型数字系统。

1、七段数码管译码器的设计
七段数码管属于数码管的一种,是由7段二极管组成。

按发光二极管单元衔接方式分为共阳极数码管和共阴极数码管。

本实验使用共阴数码管。

它是指将一切发光二极管的阴极接到一同构成公共阴极(COM)的数码管。

共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平相应字段就点亮,当某一字段的阳极为低电平相应字段就不亮。

显示译码器,一般是将一种编码译成十进制码或特定的编码,并通过显示器件将译码器的状态显示出来。

根据显示的要求,可以得到七段显示译码器产生的各段LED输出与输入的二进制对应关系:
表2.1七段字符显示真值表
最小项译码器输出能产生输入变量的所有最小项,而任何一个组合逻辑函数都可以变换为最小项之和的标准形式,故采用译码器和门电路可实现任何单输出或多输出的组合逻辑函数。

当译码器输出低电平有效时,一般选用与非门;当译码器输出高电平有效时,一般选用或门。

为了电路简单,我选择使用或非门。

本实验可以采用ISE软件自带的“Decoder”库中的4线-16线译码器D4_16E (带使能端,输出高电平有效)和“Logic”库中的或非门。

根据表2.1,可以绘制关于数码管A段的逻辑电路图如图2.2所示。

同理可绘制出剩余各段输出的逻辑图。

将以上绘制好的电路图生成对应的原理图模块,再绘制一个新的原理图,调用刚生成的各段输出逻辑图的原理模块,得到完整的七段显示译码器设计如图2.2所示。

图2.2七段显示译码器
2、十进制计数器的设计
调用ISE软件自带的“Counter”库中的十进制计数器CD4CE。

CD4CE是一个同步十进制器,输入有异步清零控制端CLR、工作使能控制端CE和时钟输入端C,输出有BCD码计数值输出端Q3~Q0,进位输出端TC 和输出状态标志位CEO。

CD4C E的功能表如表2.2所示。

最后完成的计数器总逻辑电路设计如图2.4所示,其中TC端直接输出驱动数码管的小数点段dp,作为进位标志位。

表2.2 CD4CE的功能表
图2.3十进制计数器总逻辑电路
三、实验内容
1、设计七段译码显示电路
新建一个工程,用led7命名。

为工程新建一个原理图文件,命名为segA。

采用“最小项译码器+逻辑门”的方案,调用ISE自带的元件符号,按图3.1所示绘制好数码管A段LED的驱动逻辑电路。

并生成原理图模块符号,以便后面调用。

使用相同的方法,按照下面各图搭建数码管B段LED、C段LED、D段LED、E段LED、F段LED、G段LED的驱动逻辑电路,并分别命名为segB、segC、segD、segE、segF、segG,生成各自的原理图模块符号。

图3.1 segA原理图图3.2 segB原理图
图3.3 segC原理图图3.4 segD原理图
图3.5 segE原理图图3.6 segF原理图
图3.7 segG原理图
图3.8 segA集成模块图
图3.9 segB集成模块图
图3.10 segC集成模块图
图3.11 segD集成模块图
图3.12 segE集成模块图
图3.13 segF集成模块图
图3.14 segG集成模块图
再为工程新建一个原理图文件,命名为seg7,调用前面生成的A~G段输出函数模块符号,如图2.2所示绘制七段显示译码器原理图。

生成模块符号,以便后面调用。

2、设计十进制计数器
调用CD4CE计数器符号和seg7模块符号,绘制计数器顶层原理图。

图3.15十进制计数器总逻辑电路
四、实验仿真
1、七段译码显示电路的仿真
在资源管理区将“Sources for”设置为“Behavioral Simulation”,然后在任意位置单击鼠标右键,在弹出的菜单中选择“New Source”命令,然后选中“Test Bench WaveForm”类型,输入文件名为“test_segA”,点击Next进入下一页,设置好激励波形的参数。

设置好波形后在资源管理区中选中test_segA,在资源操作区中双击“Xilinx ISE Simulator”下的“Simulate Behavioral Model”,启动ISE Simulator执行仿真验证。

图4.1 segA激励波形
图4.2 segA仿真结果按照上述方法分别仿真译码电路的其他模块。

图4.3 segB激励波形
图4.4 segB仿真结果
图4.5 segC激励波形
图4.6 segC仿真结果
图4.7 segD激励波形
图4.8 segD仿真结果
图4.9 segE激励波形
图4.10 segE仿真结果
图4.11 segF激励波形
图4.12 segF仿真结果
图4.13 segG激励波形
图4.14 segG仿真结果
结果分析:从对七个译码器部件的仿真结果中可以看出,设计出来的译码器部件是完全符合我们的要求。

可以使用七个译码器部件组成七段译码电路来进行仿真。

右键单击文件,选择“New Source”建立一个seg7的testbench文件,命名为“test_seg7”,激励文件设置如下图,对seg7进行仿真。

图4.15 seg7激励波形
图4.16 七段译码器仿真结果
结果分析:由仿真结果可知,此七段译码电路符合我们的要求。

能够完成七段译码的工作。

2、十进制计数器的仿真
添加名称为test_counter的激励文件,对十进制计数器进行功能仿真验证。

图4.17 十进制计数器激励文件
图4.18 十进制计数器功能仿真结果
结果分析:此十进制计数器的功能符合我们的要求。

能够进行十进制计数。

双击“User Consreaints”下的“Floorplan Area/IO/Logic-Post-Synthesis”进行引脚的锁定,如图4.19所示
图4.19 引脚锁定图
双击“File”下的“Open”,打开“counter.ucf”文件,修改约束文件,如图4.20所示
图4.20修改约束文件图
双击“Implement Design”进行布局布线,然后在“Post-Route Simulate”
下进行时序仿真。

图4.21十进制计数器时序仿真结果
五、实验体会
通过这次实验,我更进一步的了解了ISE软件的功能。

学会使用ISE软件进行时序仿真和下载原理图和程序到实验板上。

在实验过程中也遇到了各种各样的困难和问题,不过在老师的帮助下,克服了这些问题,顺利的完成了实验。

比如在这次实验中,遇到的最大的困难就是约束文件的修改。

第一次修改时添加了错误的ucf文件,结果在布局布线的时候出现了问题。

最后请教老师才知道是文件添加错误,应该添加跟工程名字相同的ucf文件。

实验中的收获是很大的,特别是实验板的使用。

一般情况下没有这些条件。

所以应该相当珍惜这些机会。

思考题:
1、分析并说明本实验所完成的工程文件结构关系。

答:counter是顶层文件,seg7是第二层文件,segA~segB是底层文件。

2、记录本实验中所完成的FPGA资源耗用情况和运行的时钟频率。

答:FPGA资源耗用情况和运行的时钟频率如下图所示。

图(1)资源消耗情况
图(2)时钟频率
3、在仿真激励信号的设计上组合电路和时序电路分别关注的重点是什么?
为什么?
答:组合电路关注的是当前的输入信号,时序电路关注的是当前输入信号和电路原来的状态。

因为组合电路的输出只与当时的输入信号有关,而与其过去的状态无关。

时序电路某一时刻的输出信号不仅与当时的输入信号有关,而且与电路过去的状态有关。

4、如何分析仿真软件运行出的结果?
答:将仿真结果里面的光标线拖到相应的位置,便可以看到相应的高低电平,对应真值表,就可以依次检查仿真结果是否正确。

相关文档
最新文档