与8位微处理器系统连接的计数器IP核的设计

2017-05-30 20:49:46柯宝中侯丽潘绍明蔡启仲
广西科技大学学报 2017年2期
关键词:计数器

柯宝中 侯丽 潘绍明 蔡启仲

摘 要:针对工业上对计数器的需求以及计数器扩展存在的问题,充分应用FPGA的并行处理功能,提出了一种模块内部串行处理,各模块间并行执行的计数器IP核的设计方法;设计了系统的电路结构,指令格式,并行处理模块电路和串行处理流程程序,研制的计数器IP核为具有多达14个16位或6个32位的计数器,能够自动重新装载计数参数,选择计数输入脉冲滤波参数等功能.经仿真验证了研制的计数器IP核功能的正确性.

关键词:FPGA;并行处理;计数器;IP核

中图分类号:TP332 文献标志码:A

0 引言

在大规模定时/计数控制或其他需要应用众多定时/计数器的8位微处理器應用系统中,扩展定时器/计数器的方法有3种:一是应用微处理器内部有限数量的定时器/计数器,辅以软件计数方式予以解决,但增加了计数程序的运行时间;二是采用微处理器外扩专用定时器/计数器芯片,所需的定时器/计数器越多,外扩专用定时器/计数器芯片就越多,8位微处理器应用系统的电路规模就越大;三是采用不可编程的硬件定时/计数,其每个定时器/计数器用独立的硬件电路实现;采用这种方式实现定时计数功能,所需的定时/计数器越多,电路规模就越大,维护工作量越大[1-5].本文应用FPGA[6-8]的并行处理功能设计一种实现十余个计数器并行计数的IP核,提出模块内部串行处理,各模块间并行执行的设计方法,设计并行处理模块电路和串行处理流程程序,满足工业应用系统对计数器的需求,提高计数器IP核的运行速率.

1 设计的基本思路

通常计数器电路的设计是对每个计数器专门设计一个加1或减1计数器,这是一般微处理器设计计数器常用的方法.而本文对每个计数器设置一个存储单元作为计数寄存器,设计16位字长的命令字,在数据输入输出与命令字分解储存控制模块中对命令字进行分析,输出被选中的计数器的控制信号,并在计数处理控制模块中设计3个并行处理的处理流程,实现计数脉冲输入端口状态的循环扫描、滤波、计数、溢出的并行处理.

计数寄存器和命令寄存器采用8位字长的寄存器,其地址编码与计数、命令字寄存器设计如表1所示.表1中,相邻的2个计数寄存器组成1个16位计数寄存器,2个16位计数寄存器组成1个32位的计数寄存器,能够得到14个16位计数器或6个32位计数器.表1中还有2个16位命令寄存器.

2 命令字指令格式

16位命令字寄存器分为工作模式与滤波命令字寄存器和状态控制命令字寄存器,其命令字指令格式如表2和表3所示.

工作模式与滤波命令字寄存器的各位定义如下:

D0D1:M1M0(工作模式).00:16位计数器;01:32位计数器;10:GATE16位计数器;11:GATE32位计数器.

D2~D5:S3~S0(计数器编号).16位计数器:0~13;32位计数器:0~5.

D6~D7:F1F0(滤波参数).00:滤波参数为1;01:滤波参数为100;10:滤波参数为1 000;11:滤波参数为10 000.

状态控制命令字寄存器的各位定义如下:

D0:清溢出标志,低电平有效.

D1:清当前计数值,低电平有效.

D5~D2:S3~S0(计数器编号).16位计数器:0~13;32位计数器:0~5.

D6:保留位,用于后续的扩展.

D7:启停位,1:启动;0:停止.

3 计数器IP核电路设计

计数器的系统电路结构如图1所示,包括数据输入输出与命令字分解存储控制模块,计数处理控制模块,脉冲12分频器,输入门控选择控制模块,计数器溢出控制模块.

3.1 数据输入输出与命令字分解储存控制模块

数据输入输出与命令字分解存储控制模块的主要功能是控制数据输入输出和命令字分解输出,以及输出写、读等控制信号.该控制模块将系统写入的低8位命令字分解为工作模式与滤波命令和计数器编号,并发出写信号1将工作模式与滤波命令按照计数器编号将分频倍数编码写入相对应的控制模块.将高8位命令字分解为清溢出标志,清当前计数值,启停计数器工作和计数器编号,并发出写信号2将这些控制信号写入相对应的控制模块.

如果系统写信号有效,地址为某一计数器的计数寄存器,该控制模块向计数处理控制模块发出写信号3,通过计数参数数据线将计数器参数写入所对应的计数寄存器.

如果系统读信号有效,按照系统给定计数器的计数寄存器地址,直接读出该计数寄存器的实时计数值,通过计数实时值数据线读出传输到应用系统的数据总线,16位计数器的实时计数参数需要分时2次予以读出,32位计数器的实时计数参数需要分时4次予以读出.在8位微处理器应用系统输出的复位信号作用下,停止所有计数器的计数操作.

3.2 计数处理控制模块

计数处理控制模块包括双端口存储器,计数控制操作模块.计数处理控制模块是整个计数器IP核的核心控制模块.

3.2.1 双端口寄存器模块 计数处理控制模块内部包括5个双端口寄存器模块,分别为8位计数参数模块,8位计数实时参数寄存器模块,4位工作模式分频倍数编码寄存器模块,3位状态控制双端口寄存器模块,4位计数滤波参数移位寄存器模块.其中4位工作模式分频倍数编码双端口存储器,3位状态控制双端口存储器均采用顺序存取.由于计数器的初值可能是16/32位,则8位计数参数双端口存储器和8位计数实时参数双端口存储器采用的是8位的存储单元,16位的数据将顺序存在相连的两个地址内,32位的则存在相连的4个地址内.4位计数滤波参数移位存储器主要是检测外部计数源的下降沿.

3.2.2 计数控制操作模块 计数控制操作模块按照模块内部串行处理,各模块间并行执行的设计思路,设计并行处理模块和串行处理流程程序.该模块包括了3个处理流程:计数器指令分析处理流程,滤波检测处理流程,计数器加1与溢出流程.控制器对每个计数器的操作分为:读取数据,数据操作和数据存储[9].

计数器指令分析处理流程:一个滤波基准时钟脉冲周期完成计数器的一次分析处理,判断该计数器是否启动,其主要过程是当指令写入后,计数器指令分析处理模块开始执行指令分析操作,先通过读取判断计数器j是否超出计数器的个数(当设置为32位计数器时j最大为5,当设置为16位计数器时j最大为13,所以取j最大为13),一个时钟后从双端口存储器中读取该计数器的信息,2个时钟之后开始对计数器的信息进行判断,根据不同的指令信息确定该计数器是否启动完成,操作完成后设置该计数器的启动标志位,并将计数器编号加1循环判断下个计数器是否启动,其流程图如图2所示.

滤波检测模块的功能是检测外部计数信号是否产生下降沿.當计数器的启动标志位为1时,根据计数器设置的滤波参数值对外部计数源进行采样检测,当检测到1100时,设置计数器的加1标志位为1,其流程图如图3所示.

计数器加1与溢出模块主要是实现是否加1的过程,通过计数器加1标志来判断.当加1标志为1时,该计数器加1,清加1标志;然后判断计数器是否溢出,如果溢出则设置溢出标志位为1,自动重新装载初值,重新判断计数器加1标志;如果没溢出则设置计数器溢出标志为0时,返回重新判断计数器加1标志,其流程图如图4所示.

根据上面对于各个模块流程图的分析理解可以计算出1个计数器完成一次计算需要的周期为15个时钟,则完成一次所有计数器的操作需要的扫描周期为T=15*14*(1 / T系统 ),所以当系统时钟为48 MHz时,对应该计数器的计数最高频率为228.57 kHz.

3.3 输入门控选择控制模块

输入门控选择控制模块主要功能是使计数器不仅可以通过软件编程控制计数器运行,还可以通过门控信息实现外部信号对计数器运行的控制.

4 通信协议

应用FPGA设计的计数器IP核与微处理器的总线连接,每个计数器输入的计数脉冲来自于IP核的计数脉冲输入端口,其IP核的封装如图5所示.

计数器与8位微处理器的接口采用了8位并行数据通信方式.端口包括8位的DB数据线,5位的AB地址线,CS片选信号线,CLK时钟输入信号线,WR写控制线,RD读控制线,RST复位信号线.其中数据线采用了三态门实现双向I/O口.计数器与微处理之间的通信时序如图6所示,片选信号CS为低,当WR信号有效时,进行写操作;片选信号CS为低,当RD信号有效时,进行读操作;每个数据和指令写入或读出都只维持一个系统时钟.

5 仿真与验证

通过modelsim软件进行仿真,编写一个testbench.v文件用于模拟实际处理发送指令的操作.在仿真的过程中可以观察各个模块内部数据的变化.测试的方法:通过编程仿真外部的输入信号启动计数器,并测试计数器是否在规定的时间内执行相应的操作.

1) 顺序向FPGA写入2个计数器的指令和计数初值.

根据写入的指令和地址可以确定计数器的工作模式、工作状态、滤波参数.

如图7(a)所示:首先写入第一个计数器的指令为8'b10000000,8'b10000001,计数初值为16'b11111111_11111110,即设置计数器0的工作模式是16位的无门控计数,工作状态是启动该计数器,清溢出标志,滤波参数为1 000.

如图7(b)所示:接下来顺序写入第二个计数器的指令8'b11001101,8'b10001100,计数初值32'b01000011_01000011_00000101_00000001,即设置计数器3的工作模式是无门控32位计数,工作状态是启动该计数器,滤波参数为10 000.

2) 设置外部计数源信号.

如图8所示:设置计数器0的外部计数源c0产生了3个计数信号,计数器3的外部计数源c3产生了2个计数信号.

3) 对启动的计数器在外部计数信号不再发出后,读出2个计数器的当前值.

如图9(a)所示:计数器0的当前值为16'b11111111_11111110,根据计数器0外部计数信号为3个,由于计数器0的初值16'b11111111_1111110,当检测外部计数信号下降沿后计数器加1,计数值满溢出标志tf0为1,由于计数器具有自动装载初值的功能则计数器0的当前值变成16'b11111111_11111110.由图8可知,在计数信号下降沿到达后,tf0产生一个脉冲信号.

如图9(b)所示:计数器3的当前值为32'b01000011_01000011_00000101_00000011.根据图8所示计数器3的外部计数信号为2个,可以知道计数器3的计数结果正确,由于计数结果未超出上限值则计数结果未溢出,由此可以看出计数器0与计数器3可以同时对各自外部计数信号进行计数.

6 结论

本文以FPGA为平台研制了一种与8位微处理器应用系统连接的计数器IP核,提出了模块内部串行处理,各模块间并行执行的设计思路,设计了计数器的指令格式和命令字地址编码.这不仅能够实现计数、自动重新装载、溢出等功能,而且可以利用命令字地址编码来实现地址映射存储器存储计数器的相关操作,使得计数器的操作更简单,从而达到设计要求.该设计克服了已有计数方式存在的不足,使得IP核与微处理器应用系统连接,编程控制便利,适合计数器计数与计数控制系统需求.

参考文献

[1] 薛迎春. 基于FPGA的8051IP核的设计与验证研究[D].苏州:苏州大学,2010.

[2] 刘凤新,潘小莉. 基于VHDL的定时/计数芯片的设计[J].微计算机应用,2004,25(1):122-125.

[3] 闫永志,刘伟,何方. 基于FPGA的可编程定时器/计数器8253的设计与实现[J].电子设计应用, 2004(2):26-28.

[4] 柯宝中,侯丽,蔡启仲,等. 一种与8位微处理器应用系统连接的计数器IP核:L201520463374.7[P].2015-11-18.

[5] 余玲. 基于FPGA的可重构定时器IP核设计[J].轻工科技, 2015,31(7):86-88.

[6] 李克俭,付杰,蔡启仲,等. 基于FPGA的串行定时器设计[J].广西工学院学报,2012,23(3):61-65.

[7] 周曙光,李克俭,蔡启仲,等. 基于FPGA的PLC并行数据输出控制器设计[J].广西工学院学报,2013,24(1):14-18.

[8] 任杰,李克俭,潘绍明,等. 双口RAM读写正确性自动测试的有限状态机控制器设计方法[J].广西科技大学学报,2015,

26(4):36-41.

[9] 张炜,李克俭,蔡启仲,等. 基于FPGA的PLC并行定时器的设计[J].计算机工程与设计,2013,34(4):1244-1249.

Abstract: To meet the demand of counters and solve the problem of their extension in industry, this design uses the parallel processing function of FPGA to propose a design of the counter IP core which features the module internal serial processing and each module parallel executing. We design the circuit configuration of the system, instruction format, parallel processing module circuit and serial processing procedures. The IP core includes 14 16-bit or 6 32-bit counters. When the count value of each counter overflows, the counter will reload the count parameter automatically, and choose pulse filtering parameter by programming. The simulation results show the correctness of the IP core functions.

Key words: FPGA; parallel processing; counter; IP core

(學科编辑:黎 娅)

猜你喜欢
计数器
采用虚拟计数器的电子式膜式燃气表
煤气与热力(2022年2期)2022-03-09 06:29:30
计数器竞争冒险及其处理的仿真分析
基于单片机的自动计数器设计
时代农机(2015年3期)2015-11-14 01:15:43
任意N进制计数器的设计方法
河南科技(2014年10期)2014-02-27 14:09:30
三值绝热多米诺可逆计数器设计
三值绝热多米诺可逆计数器设计
基于单片机的仰卧起坐计数器