本文已参与「新人创作礼」活动,一起开启掘金创作之路。
数字逻辑——16位寄存器的设计
一、实验目的:
设计一个16位移位寄存器。具有以下功能:并行置数、串行右移1位、串行左移1位。有数据并行输出端,数据并行输入端,同步置数控制端Load,移位控制端left_right。
二、实验使用环境:
QuartusII 9.0
二、实验内容与完成情况:(真值表 函数表达式,仿真波形图 测试数据等)
1.主要代码截图
2.仿真波形图
load = 1 时dout值与din值相同为“1110000000000000”,并行输出
load = 0 且 left_right = 0 时寄存器数据右移,串行右移输出
dout值由“1111011000011111”变为“1111101100001111”
load = 0 且 left_right = 1 时寄存器数据左移,串行左移输出
dout值由“1011100000000000”变为“0111000000000000”
3.RTL电路图
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语言的实用性及其在数字逻辑学科以致电路科学方面的重要作用。