数逻第六章 寄存器

寄存器组成

一般使用load信号选择将寄存器的值重新加载或者加载原来的值。

而不使用停掉时钟信号而产生时序问题。

可以在In1上接自增自减信号,或者其他信号。

数逻第六章 寄存器

寄存器传输操作

寄存器名称:数字和字母表示。

寄存器的位数:括号中的数字表示,特别有H代表高位数一半,L代表低位数一半。

箭头代表数据的转移

括号内的字母代表内存地址。

条件传输

if(K1) R1<-R2 缩写为:K1:(R1<-R2)

冒号左侧的式子为逻辑1时,进行冒号右边的式子,否则不进行。

sl:逻辑左移,填0

sr:逻辑右移,填0

微操作

数逻第六章 寄存器

数逻第六章 寄存器

数逻第六章 寄存器

数逻第六章 寄存器

多路复用器传输

Multiplexer-Based Transfers:由多路复用器确定寄存器的输入

数逻第六章 寄存器

K1:(R0<-R1)

~K1(K2):(R0<-R2)

寄存器设计

数逻第六章 寄存器

右侧是一个寄存器,首先输入K选择操作并对寄存器使能。

若输入全0则维持,否则用多路复用器选择一个操作对寄存器的值进行更新。(每一个编码选择一个操作)

1.首先确定有几个寄存器(如果可以的话)(注意并不是有几个寄存器就有几个状态,寄存器的个数应该和输入的个数相同)

2.画出状态表,第一列为现态,第二列为次态,第三列为输出

3.根据状态表写出次态方程。比如两个寄存器A,B输入x,y,那么次态A(i+1)和Ai,Bi,x,y有关,画出四变量卡诺图进行化简

Bus-Based Transfers for Multiple Registers

一般是用于多路复用器之间的传输。

数逻第六章 寄存器

注意到每一个的输出都接在了两路总线上,这两路总线分别接在另两个寄存器的输入选择上

 数逻第六章 寄存器

这种方法减少了电路成本,注意到将三个寄存器的输入接在了一个3选1多路复用器上,然后将多路复用器的输出接在了三个寄存器的输入上

Three-State Bus

数逻第六章 寄存器

基于三态门的寄存器信号传输。输出信号通过三态门以后被直接接在了总线上,总线分别接在了三个寄存器的输入上。通过三个三态门的控制实现寄存器信号转移

Shift Registers

数逻第六章 寄存器

最基本的移位寄存器,每一个时钟脉冲,信号就移位一次

将In的信号移入

数逻第六章 寄存器数逻第六章 寄存器

 如果加入多路复用器,可以选择加载信号或者移位。

首先shift选择串行输入还是并行输入。

当选择并行输入时,Load选择加载数据还是进行移位

数逻第六章 寄存器

四选一多路复用器,输出接着一个寄存器上,如果选择0,则保持

如果选择1,则上方的移入,如果选择2,下方的移入,如果选择3,输入一个新的数

计数器

Ripple Counters

数逻第六章 寄存器数逻第六章 寄存器

由于传输延迟而实现的。

clk的第一个上升沿,传入的是clk=0,A=1

clk的第二个上升沿,传入的是clk = 1,A=0,因此A是clk的两倍,B是A的两倍

产生的是BA = 00 01 10 11 00 01 10 11,...产生了计数效果

Synchronous Counters

数逻第六章 寄存器

每一个时钟信号就将寄存器的数值加1传输进寄存器

Counter with Parallel Load

数逻第六章 寄存器

Load

Count

Action

0

0

Hold Stored Value

0

1

Count Up Stored Value

1

X

Load D

添加了一个load的选择器,可以选择信号。

Counting Modulo 7

数逻第六章 寄存器

计数到6时重新加载输入0,否则自增。不能加在clear上,因为可能时间不够长导致其被reset

 

上一篇:【紫光同创国产FPGA教程】【第二十一章】AD9767双通道三角波产生例程


下一篇:【正点原子Linux连载】第十六章主频和时钟配置实验-摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0