实验一加法器的设计与实现Word下载.docx
- 文档编号:7991819
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:10
- 大小:264.74KB
实验一加法器的设计与实现Word下载.docx
《实验一加法器的设计与实现Word下载.docx》由会员分享,可在线阅读,更多相关《实验一加法器的设计与实现Word下载.docx(10页珍藏版)》请在冰点文库上搜索。
4、掌握元件例化语句用法;
5、熟悉软硬件设计验证方法。
四、实验过程
设计思想:
8位二进制加法器可以由8个全加器通过级联的方式构成。
根据全加器级联的原理,用VHDL设计一个8位二进制数的加法器,可以先设计一个一位全加器,然后利用一位全加器采用元件例化的方式实现加法器。
实验步骤:
1、设计一个全加器
新建工程,建立源文件,输入VHDL设计文件,如下图所示:
完成设计文件输入后,保存文件,对文件进行编译、仿真,以下是仿真结果,如图所示:
由图可知仿真结果正确。
2、元件例化
把VHDL设计文件转为原理图中使用的元件。
在文件菜单File中选择Creat/Update选项,单击CreateSymbolFileforCurrentFile选项,系统自动生成相应的元件标号。
重复新建文件的操作,选择BlockDiagram/SchmaticFile选项,新建一个原理图文件,在添加元件列表中可以看到自动生成的元件,选择full_adder这个元件添加到原理图中,如下图所示:
3、完成顶层图的设计
用生成的元件标号,完成顶层图的设计。
这里有两种方法,一种是直接用原理图设计,根据原理图设计工具的使用方法,完成顶层文件的设计,这个方法比较复杂,所以这里选择另一种方法,通过VHDL设计文件。
继续建立源文件,输入VHDL设计文件,如下图所示:
依照上述步骤,保存文件,对文件进行编译、仿真,以下是仿真结果,如图所示:
五、实验总结
本次实验的目的是设计一个8位二进制加法器,而8位二进制加法器可以由8个全加器通过级联的方式构成。
总结实验过程中遇到的各种问题,问题产生的原因,解决方法,分析仿真结果,验证8位加法器设计的是否正确。
根据实验设计思路,我先用VHDL设计了一个全加器full_adder.vhd,编译、仿真成功后,通过元件例化的方式,采用原理图设计了一个8位的加法器adder8.bdf,但是在这个过程中出现了很多问题,即由于我是把这个8位的加法器的每个全加器元件输入输出引脚分开的,因此一开始就设计了17个输入引脚,这使得我在给输入引脚添加信号时不知道添加什么信号,才能够起到验证仿真结果是否正确的目的。
另外,我在这里还遇到了一些其他问题,由于在建立原理图文件adder8.bdf以后没有将该原理图文件设置成顶层文件,这使得我在给输入引脚添加信号时无法添加引脚。
这里还存在一个问题:
当通过原理图设计8位加法器时,我不知道能不能把它当着一个整体,即3输入2输出。
另外,怎么通过在原理图设计里面把这一思想表示出来。
由于通过原理图设计无法完成8位加法器的设计,所以我又换了VHDL设计。
通过VHDL设计比原理图设计简单,但是更容易出错,比如输入引脚、中间信号生成等的不匹配。
建立VHDL源文件以后,保存为adder8.vhd文件名,编译、仿真,但是由于我是将8位加法器当成的一个整体,即3输入2输出,并且在端口定义时我所定义的数据类型为逻辑矢量,因此这里又出现一个问题,即在仿真时给输入信号添加信号时不能确定到底应该怎么添加,并且其中间信号无法确定。
不过后来在老师的指导下,我明白了错误根源在哪里。
在对8位的加法器进行仿真时,一开始我是用的时序仿真,这里就出现一个问题,即仿真结果为未知,但是换用功能仿真的时候,其结果就是正确的,不指导是什么原因。
还有另外一个问题,即我在将adder8.vhd文件设置为顶层文件以后,并没有进行编译就开始仿真,这使得我在给引脚添加信号时始终也找不到输入信号,不过好在面意识到了这个问题。
在本次实验过程中,虽然出现了很多问题,但正是因为在操作过程中发现了很多问题并且通过对这些问题的解决,我对QuartusII7.0开发系统环境也有了更深入的了解和认识。
每一次发现错误,都是一个新的进步,比起上次实验课,我觉得自己在操作动手能力方面又有了提升,至少现在看到一个问题的时候,能够明白是什么问题,能够知道该怎么去问,该怎么去解决它。
所以说,无论干什么,但凡是要想真正学一门知识,都要自己去摸索,只有自己亲自动手去做了,才能够真正深入地认识和了解它,才能够学到自己想要的东西。
另外,在学习的过程中,还要掌握技巧,我觉得在这方面自己就很欠缺,因此,以后一定要注意,努力培养这方面的能力。
实验六乘法器的设计
1、了解乘法器的工作原理。
2、了解复杂时序电路的设计流程。
二、实验原理及内容
实验原理
设计一个能进行两个十进制数的乘法器,乘数和被乘数的输入用开关K1~K10代表0~9,用编码器对数据开关进行编码,设置相乘信号,当输入完毕后,相乘信号有效,使输入的乘数送进寄存器寄存。
在输入被乘数。
设计等于信号。
当输入完毕后。
启动乘法模块。
实验内容
1、设计一个能进行两个十进制数相乘的乘法器,乘数和被乘数均小于100。
(可以参考教材231页的VHDL代码来设计)
2、对所编写的电路进行编译及正确的仿真。
三、实验条件
QuartusII实验环境
四、实验及仿真
顶层文件如下:
该器件multi对乘法过程进行时序控制。
Clk为时钟信号;
lStart控制乘法器的开始;
Endd控制乘法器结束;
Clr起到复位作用;
Ca用来控制乘数移位寄存器(74194)的移位功能,在乘法器进行移位相加的过程中进行移位;
Cb[0]、cb[1]用来控制被乘数移位寄存器(74194)的移位功能,在乘法器进行移位相加的过程中进行移位;
Cm[0]、cm[1]控制八位移位寄存器(74198)的移位功能,使得和乘数与被乘数的移位相一致;
编码如下;
libraryieee;
useieee.std_logic_1164.all;
entitymultiis
port
(
start:
instd_logic;
i4:
bi:
clk:
endd:
outstd_logic;
clr:
ca:
cb1:
cb0:
cm1:
cm0:
cc:
outstd_logic
);
endmulti;
architecturemulti_architectureofmultiis
signalcurrent_state,next_state:
bit_vector(1downto0);
constants0:
bit_vector(1downto0):
="
00"
;
constants1:
01"
constants2:
10"
constants3:
11"
begin
com1:
process(current_state,start,i4)
casecurrent_stateis
whens0=>
if(start='
1'
)thennext_state<
=s1;
elsenext_state<
=s0;
endif;
whens1=>
next_state<
=s2;
whens2=>
=s3;
whens3=>
if(i4='
endcase;
endprocesscom1;
com2:
process(current_state,bi)
endd<
='
clr<
ca<
0'
cb1<
cb0<
cm1<
cm0<
cc<
if(bi='
)then
endd<
else
endprocesscom2;
reg:
process(clk)
begin
ifclk='
andclk'
eventthen
current_state<
=next_state;
endprocessreg;
endmulti_architecture;
仿真如下:
五、收获与总结
在乘法器的试验中,主要设计的其实是乘法器的时序控制信号multi,把multi的对应输出与移位器,加法器和计数器相连之后,就能够进行4位二进制数移位相加的功能,即乘法功能。
这次课程设计,期间遇到了许多的问题。
我通过查阅课本及资料。
以及相互讨论和老师的指导。
最终设计成、功了。
而且通过了仿真。
不断的完善了自己的设计。
经过浙西设计我体会到了合作的重要性,同时也发现了自身的问题。
在以后的学习工作中,我希望能培养我的动手能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 加法器 设计 实现