数字逻辑—16位寄存器的设计

77 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

数字逻辑——16位寄存器的设计

一、实验目的:

设计一个16位移位寄存器。具有以下功能:并行置数、串行右移1位、串行左移1位。有数据并行输出端,数据并行输入端,同步置数控制端Load,移位控制端left_right。

二、实验使用环境:

    QuartusII 9.0

二、实验内容与完成情况:(真值表 函数表达式,仿真波形图 测试数据等)

1.主要代码截图

image.png   2.仿真波形图

load =  1 时dout值与din值相同为“1110000000000000”,并行输出

image.png

load =  0  且 left_right  =  0 时寄存器数据右移,串行右移输出

dout值由“1111011000011111”变为“1111101100001111”

image.png

load =  0 且 left_right  =  1 时寄存器数据左移,串行左移输出

dout值由“1011100000000000”变为“0111000000000000”

  image.png

3.RTL电路图

  image.png

4.测试数据

并行输入

load  =  1  

din  = “1110000000000000” → dout  = “1110000000000000”

串行右移

load  =  0 and left_right = 0  

dout  = “1111011000011111” → dout  =  “1111101100001111”

串行左移

load  =  0 and left_right = 1  

dout  = “1011000000000000” → dout  = “0111000000000000”

 

三、出现的的问题及解决方案(列出遇到的问题和解决办法,列出没有解决的问题)

将4位移位寄存器与16位移位寄存器混淆,以至并行左移/右移出错。故将原代码实现左移/右移功能中对于4位移位寄存器的编码改为适应16位移位寄存器的编码。

在创建仿真波形图时,由于未对移位寄存器仿真波形输出原理领悟透彻导致load与left_right的输入时序过大,形成了不适合测试实验结果的波形图。故在老师的指导下将其时序调节为适宜的大小,最终形成了合适的仿真波形图。

 

四、实验小结。

进入系统时先新建一个名为“shifter4B”的项目,再在该项目中分别新建VHDL与仿真波形文件,分别设置各节点变量值后输出仿真波形图,再生成RTL电路图。

该实验实现了16位寄存器逻辑电路的设计,通过调用ieee库下 std_logic_1164程序包,定义实体,通过端口信号输入din、clk、load、left_right信号,再定义结构体通过并行语句嵌套if语句判断load与left_right的值在几种不同情况下对输出dout的处理,实现并行输入,串行左移、右移等功能。

通过对VHDL语言及Quartus系统的多次运用,逐步掌握了一些常用的基础知识,通过对多种程序代码的推敲思考,在老师的指导下对于这些基础的VHDL程序设计均能理解。感受到了Quartus 系统与VHDL语言的实用性及其在数字逻辑学科以致电路科学方面的重要作用。