3.2.2 寄存器和移位寄存器
寄存器和移位寄存器是数字电路的基本模块,可用来暂存指令、数据和地址等,是许多复杂的时序电路的重要组成部分,掌握它们的VHDL描述是非常必要的。
1.寄存器
在数字系统中寄存器用来存储一组二进制代码,而触发器具有记忆功能,所以可以用触发器构成寄存器。下面以8位寄存器74374为例,介绍寄存器的VHDL描述。74374的逻辑框图如图3-14,功能表如表3-12。逻辑框图中D为寄存器的8位数据输入,Q为寄存器的8位数据输出端,CLK为时钟信号,OE为控制信号。从功能表可以看出OE为低电平时,在时钟上升沿输入端信号从输出端输出,其他时刻输出保持;而OE为高电平时,输出一直保持为高阻。
图3-13 74374的逻辑框图
表3-12 74374的功能表
(1)8位寄存器74374的VHDL行为型描述
寄存器VHDL描述有多种形式,下面是它的行为型描述,其特点是在进程中使用顺序语句描述出74374的行为特点。
(2)8位寄存器74374的VHDL结构型描述
前面介绍过寄存器可以由D触发器构成,在VHDL描述时可以首先进行D触发器的描述,然后调用此D触发器,实现寄存器,这就是结构型设计方法,利用D触发器实现8位寄存器的示意图如图3-14所示。
图3-14 利用D触发器实现8位寄存器
下面是74374的结构型描述,其特点是在上一层的设计中使用COMPONENT语句声明已有底层的设计,并用PORT MAP语句描述底层元件之间硬件连接关系,从而实现上层设计74374。其中底层的设计D触发器,在本例中实体名为ddd的VHDL描述可以作为实体名为reg374_d上层设计文件的一部分,也可以作为独立的文件,与上层文件存于同一文件目录并在同一个PROJECT中。
底层的D触发器VHDL描述:
从74374的结构型描述中可以看出,上层的端口名称和底层的端口名称是互不干扰的,例如上层74374中的端口d的意义是8位的输入端口,而底层的d只是触发器的一位输入端口,它们可以“重名”,但各自具有各自的意义,在PORT MAP语句进行端口映射时正确使用即可。
2.移位寄存器
移位寄存器同寄存器一样具有存储二进制代码的功能,还具有移位的功能,这使得移位寄存器具有更广泛的应用。移位寄存器在用VHDL描述时也有不同的方法,8位移位寄存器74164的逻辑连接图如图3-15,功能表如表3-13。从两者可以看出输入有两位串行输入A和B,CLEAR为清零信号,时钟CLK;输出有八位并行输出QA~QH。清零信号低电平有效;在时钟上升沿A或B数据移入,然后依次向QA至QH移动一位输出。
图3-15 74164的逻辑连接图和功能表
表3-13 74164的功能表
(1)8位移位寄存器74164的VHDL行为型描述
行为型描述中用了三个进程,它们并行执行完成移位寄存器74164的功能。
上例中,第一个进程p1中描述了输入信号A和B的选择,第二个进程p2描述了移位寄存器由低向高位的移动,第三个进程p3描述了移位的结果的输出,如过移位寄存器的位数比较多,则第二个进程中描述移位过程的简单赋值语句就要相应增多,代码长度增加,比较烦琐。为了描述简便,可以使用循环语句LOOP来代替这些简单赋值语句,则上例可以改写如下:
(2)8位移位寄存器74164的VHDL结构型描述
同74374一样,也可以用D触发器组成移位寄存器74164,其结构如图3-16所示。
图3-16 用D触发器组成移位寄存器
根据图3-16可以进行74164的结构型VHDL描述如下:
底层的D触发器的VHDL描述:
与前面行为型描述相比较,结构型描述中保留了描述输入信号A和B的选择和描述移位结果输出两个进程,而移位寄存器移位过程不再是移位行为的描述,而是通过若干条PORT MAP语句描述其构成结构。
同行为型描述一样,如果移位寄存器的位数比较多,则使用的D触发器相应增多,按照上面的描述方法,PORT MAP语句就要相应增多,代码长度增加,比较繁琐。为了描述简便,可以使用使用FOR模式的生成语句GENERATE来描述重复调用D触发器的过程,还可以使用参数传递GENARIC定义所用D触发器的个数,这样可以通过修改参数方便地修改寄存器的长度,使得设计更具有通用性。按照这个设想,则上例可以改写如下:
底层的D触发器的VHDL描述:
注意:由于在生成语句GENERATE中也使用了关键字FOR,所以应该注意生成语句与FOR模式的LOOP语句的区别,它们还是有很大的不同的。另外,在使用了GENERIC语句后,文件中只能有一个实体,也就是说底层的D触发器的VHDL描述不能再作为上层设计文件的一部分,只能与上层文件在同一路径中单独存储成独立文件。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。