[D-IX] 2(通用)计数器s 2标志线

EDA:quartus II 13. 1

平台:CycloneV:5CSEMA5F31C6

阅读“《自己设计制作CPU与单片机》 ---- 姜咏江”

粗略过渡到门级的一片笔记:[D-VII] (数)晶体管2逻辑门2寄存器s个人笔记中的文字表达极差。读书后为计数器的出现编、斗。在quartus II 13.1平台下的计数器和标志线的练习笔记保存地址:to_counters(通用计数器


2015.06.18

1 行波计数器

行波计数器描述的规律。

行波计数器这个名称描述的是一种能够自动记录脉冲数量的计数器。每来一个脉冲计数器就增1。一个n位的计数器计数方式描述如下:

clk(上升沿个数)                  n位计数器的变化

0                                                      0000….0000

1                                                      0000….0001

2                                                      0000….0010

3                                                      0000….0011

4                                                      0000….0100

                       ……                               

行波计数器表现出来的规律是每来一个脉冲,最低位发生一次翻转;当且仅当qi-1由1变为0且脉冲来临时,qi(i> 0)发生一次翻转。


位翻转的器件。

JK触发器具有位翻转的功能(至于这个器件是怎么冒出来的,笔记还只能说是书上介绍的)。它由一个SR触发器和4个三态门组成:

Figure1. JK触发器的组成

假设SR锁存器处于稳定状态,当J= K = 1时,clk由0变1时,SR锁存器状态翻转。(JK触发器的一种状态)


4位行波计数器

按照行波计数器描述的规律以及JK触发器的特性,一个4位的行波计数器lp_counter4可用下图描述:

[D-IX] 2(通用)计数器s 2标志线_第1张图片

Figure2. 4位行波计数器lp_counter4电路描述图

lp_counter4功能仿真图为:

Figure3. 4位行波计数器lp_counter4功能仿真

当行波计数器计满以后,再来脉冲时会重新开始计数。计数器跟时钟周期相关,所以计数器可以用来计时。像lp_counter4行波计数器一个计数对应一个时钟周期这样的计数器,计数多少就对应多少个计数器输入时钟周期。按照lp_counter4电路描述图做出来的实际计数器,计数过程要能够在一个时钟周期内完成(输入进入计数器到输出有延时)。


2015.06.21

2 通用计数器

“通用计数器”描述的功能为:

  • 能被赋予初值;
  • 能够保持数据;
  •  能加减k。

2.1 1位计数单元

n位计数器的每一位都应该上述功能。先斗出通用计数器的一位to_counter1,然后将n个to_counter1组合在一起形成n位通用计数器。


“JK触发器”、“寄存器DFF(E)”等都能够保持数据,不妨选取DFF来保持数据。根据通用计数器描述的功能,DFF有3个输入且同时只能选择某一个输入,所以先要斗出一个3路选择器(借用 2寄存器s 中用与非门斗的3选1电路描述图three21的封装)。结合DFF和three21得到to_counter1电路描述图的框架:
[D-IX] 2(通用)计数器s 2标志线_第2张图片

Figure4. to_counter1电路描述图框架

当s0 = s1 = 0时,o = q(保持数据q);s0 = 1,s1 = 0时,o = d(接收外部数据);s0 = 0,s1 = 1时,o = as(q + 1或q – 1)。外部数据d的来源可以是其它器件(如行波计数器)的输出,as的值为q + 1或者q – 1,所以需要斗出一个1位的加减单元。根据限位数对称制理论,减法可由加法完成(负数由负数绝对值的反码加1表示)。故而1位的加减法单元可在1位加法单元(限位数对称制2分段加减法器中的cadder1)的基础之上添加一个异或门得来:

Figure5. 1位加减法单元cas1

cas1能够完成1位二进制(0,1)集合的加减法运算。sub = 0时,完成a + b的运算;sub = l2c = 1时,完成a – b的运算。n个cas1能够组成n位的加减法器。将cas1的s端连接到to_counter1的as端:

[D-IX] 2(通用)计数器s 2标志线_第3张图片

Figure6. 1位计数单元to_counter1电路描述图

将n个to_counter1组合在一块,第i个to_counter1的l2c连接到第i-1个to_counter1的l2c。当s0 = 0且s1 = 1时就能够将实现q[n-1..0]加(sub = 0)减(sub = l2c = 1)b[n-1..0]的功能。


2.2 n位计数单元

以to_counter1的封装来组成4位计数单元为例。

[D-IX] 2(通用)计数器s 2标志线_第4张图片

Figure7. 4位通用计数器to_counter4电路描述图

通过s0/s1,sub,clk,clrn端口可以统一每一位计数单元的行为。当s0 = s1 = 0时,计数器保持原有值不变;s0 = 1且s1 = 0时,计数器接收外部输入使得q[3..0] = d[3..0](d[3..0]可以是程序中的一个初始值,也可以是行波计数器的输出);s0 = 0且s1 = 1时,sub = l2c = 0时,q[3..0] = q[3..0] + 1,sub = l2c = 1时,q[3..0] = q[3..0] – 1。(这里,将b[3..0]置成了常量1)


to_counter4功能仿真图如下。

[D-IX] 2(通用)计数器s 2标志线_第5张图片

Figure8. to_counter4功能仿真

to_counter4可以接收初值,在初值的基础之上可以实现增1计数或者减1计数的操作。通过to_counter4的封装可以得到以4n位的计数器。


3 标志线

如果当前正在做一个减法运算,运算结果被保存到某个8位寄存器内。要判断这个值是否等于某个特定的值,若等于则将标志寄存器某一位置一。


以dffe_register8的封装为例:

[D-IX] 2(通用)计数器s 2标志线_第6张图片

Figure9. 表寄存器标志位标志线设计

4 小结

在设计计数器时,要保证使计数增/减1的两个时钟之间的这段时间能够让计数器完成增/减1操作。

[2015.06.21-16:36]
[ETF Note Over]

你可能感兴趣的:([D-IX] 2(通用)计数器s 2标志线)