南京邮电大学软件设计VHDL实验报告.docx
- 文档编号:4437101
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:21
- 大小:722.50KB
南京邮电大学软件设计VHDL实验报告.docx
《南京邮电大学软件设计VHDL实验报告.docx》由会员分享,可在线阅读,更多相关《南京邮电大学软件设计VHDL实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
南京邮电大学软件设计VHDL实验报告
通信与信息工程学院
2013/2014学年第2学期
软件设计实验报告
模块名称VHDL
专业通信工程
学生班级
学生学号
学生姓名
指导教师梅中辉
设计题目
基本课题:
04.2对4译码器
综合课题:
18.奇偶校验器
任务要求
1.基本课题:
设计一个2对4译码器(输入:
AB输出:
Y3Y2Y1Y0),真值表如图2。
AB
Y3Y2Y1Y0
10
11
20
01
1110
1101
1011
0111
2.奇偶校验器系统的功能是对八位二进制数据及其奇偶校验位的输入进行校验,输出正确的奇、偶校验位。
ODD_IN与EVEN_IN是控制奇校验和偶校验功能输入,IN0到IN7是七位数据及一位校验位数据输入,IN_READY表示输入数据已经准备好,可以处理,当OUT_REQ输入表示要求输出数据,CLK端口用于接收时钟信号,支持系统的时钟上升沿同步。
当输出端口OUT_READY输出信号有效时,表示输出数据已经准备好,可以为下级电路使用,ODD_OUT与EVEN_OUT用来输出正确的奇偶校验位。
上述控制端口均为高电平有效。
实验设备及软件
1.微型计算机
2.EDA-VHDL开发软件
同组人员学号及姓名
11001803胡雪琪
参考文献
1.张顺兴《数字电路与系统设计》东南大学出版社2004.8
2.苗丽华《VHDL数字电路设计教程》人民邮电出版社2012.11VHDL课程设计题目及要求(自编资料)
3.VHDL课程设计题目及要求(自编资料)
4.杨晓慧杨永健《基于FPGA的EDA/SOPC技术与VHDL》国防工业出版社2007.7
5.PeterJ.Ashenden《TheVHDLCookbook》Dept.ComputerScienceUniversityofAdelaideSouthAustraliaJuly,1990
功能分析:
EN=1时,y[0..3]=1111
EN=0时,a[0..1]=00,y[0..3]=1110
a[0..1]=01,y[0..3]=1101
a[0..1]=10,y[0..3]=1011
a[0..1]=11,y[0..3]=0111
一.时序仿真及分析
时序仿真:
EN=0
EN=1
分析:
EN=1时,y3y2y1y0=111
EN=0时,a1a0=00,y3y2y1y0=1110;a1a0=01,y3y2y1y0=1101;
a1a0=10,y3y2y1y0=1011;a1a0=11,y3y2y1y0=0111.
五.调试过程与问题
1.创建工程:
在File/NewProjectWizard里输入工程路径作为当前的工作目录,工程名和顶层文件实体名为必须相同设为XiaoLi。
其中目标器件选取Altera公司Cyclone2的EP2C8T144C8。
2建立文本/编辑文件:
在File/New里选取VHDLFile文件类型,输入相应代码后保存文件,要保存在已建立的文件夹里,存盘文件名要与实体名保持一致,即XiaoLi.vhd。
若不一致,在编译过程中会出现错误,在顶层文件中找不到要编译的文件。
3编译综合:
执行Processing/CompilerTool,启动编译器,编译成功后显示编译报告。
选择Tool/NetlistViewer/TechnologyMapViewer观察生成后的门级电路原理图。
对于不同的目标器件,尽管逻辑功能一样,但是其门级电路的结构是不一样。
2-4译码器综合后的门级电路原理图:
4仿真实验:
在File/New里选择适量波形文件“VectorWaveformFile”,弹出波形编辑窗口。
在Edit/Endtime中选择仿真结束时间和时间单位,设置为1μs。
在波形编辑窗口选择要加入的波形节点。
设置相应的输入信号,将a0时钟信号周期设置为200ns,a1时钟信号周期设置为100ns。
设置完后保存波形文件,文件名为XiaoLi.vwf。
在Assignments/Settings里设置仿真器,这里只要进行功能仿真,所以选择的仿真模式为Functional。
在仿真之前,先产生功能仿真网表文件,设置完成后启动仿真器,直到出现simulationwassuccessful仿真结束。
打开仿真波形报告窗口查看波形。
EN=0时:
EN=1时:
结果分析:
1.EN=0时,当a1a0=00时,y3y2y1y0=1110;当a1a0=01时,y3y2y1y0=1101;当a1a0=10时,y3y2y1y0=1011;当a1a0=11时,y3y2y1y0=0111。
2.EN=1时,不论a1a0输入为何,y3y2y1y0=1111。
输出结果与理论值相同,仿真正确。
问题:
1.起初在编写好代码后在编译过程中老是出现文件未定义,找不到等问题,后来通过查找资料发现:
工程目录可以随意设置,但必须是英文的目录,工程名和顶层实体名必须也是英文开头,不要将文件夹设在计算机已有的安装目录中,更不要将工程文件直接放在安装目录中。
文件夹所在的路径名和文件夹名不能用中文,不能用空格,不能用括号,也不能用数字开头。
后来规范了书写就可以正确编译了。
2.起初在最后仿真过程中,输入时序信号不能正确产生“00”,“01”,“10”,“11”,后通过设置两输入信号周期相差一倍得出了理想的结果。
一.实验目的
1.掌握组合逻辑中奇偶校验器电路的设计原理。
2.利用VHDL语言设计一个八位奇偶校验器。
二.实验器件
1.微型计算机
2.EDA-VHDL开发软件
三.实验名称
奇偶校验器
四.题目要求概述
奇偶校验器系统的功能是对八位二进制数据及其奇偶校验位的输入进行校验,输出正确的奇、偶校验位。
ODD_IN与EVEN_IN是控制奇校验和偶校验功能输入,IN0到IN7是七位数据及一位校验位数据输入,IN_READY表示输入数据已经准备好,可以处理,当OUT_REQ输入表示要求输出数据,CLK端口用于接收时钟信号,支持系统的时钟上升沿同步。
当输出端口OUT_READY输出信号有效时,表示输出数据已经准备好,可以为下级电路使用,ODD_OUT与EVEN_OUT用来输出正确的奇偶校验位。
上述控制端口均为高电平有效。
功能:
用来校验某一组传输数据有否错误的组合逻辑电路。
方法:
在被传输的数据后面加一位奇偶校验位,使这一组数据中含1的位数成为奇数或是使这一组数据中含1的位数为偶数。
通过检测1的个数是奇数还是偶数来判断数据传输是否有误。
奇校验时,加了校验位后1的位数成为奇数;偶校验时,加了校验位后1的位数成为偶数。
IN0~IN7为8位代码输入,ODD_OUT,EVEN_OUT为校验后的结果输出,ODD_IN,EVEN_IN为是奇校验还是偶校验控制。
五.系统分析
.原理图:
分析:
P=B7
B6
B5
B4
B3
B2
B1
B0
由异或运算可知:
B7~B0中有奇数个1时,P=1;偶数个1时,P=0。
当奇校验时,SOD=1,SE=0;YOD=!
P,YE=P,B7~B0中有奇数个1时,YOD=0,YE=1,传输正确;出现偶数个1时,YOD=1,YE=0,传输有误;当偶校验时,SOD=0,SE=1;TOD=P,YE=!
P,B7~B0中有偶数个1时,YOD=0,YE=1,传输正确;出现奇数个1时,YOD=1,YE=0,说明传输有误。
YOD是加上的校验位,YE位用来判断传输是否正确。
设计算法:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYXL11001802IS--定义实体名为XL11001802
PORT(iready,CLK,oreq:
INSTD_LOGIC;--定义输入/输出
a:
INSTD_LOGIC_VECTOR(7DOWNTO0);
sod,se:
INSTD_LOGIC;
oready:
OUTSTD_LOGIC;
yod,ye:
OUTSTD_LOGIC);
ENDXL11001802;
ARCHITECTUREdataxlOFXL11001802IS
BEGIN
PROCESS(iready,clk,oreq,a,sod,se)
VARIABLEtemp:
STD_LOGIC;
BEGIN
IF(iready='0')THEN--判断是否准备输入数据
yod<='0';--时钟上升沿同步
ye<='0';
ELSIF(clk'eventandclk='1')THEN
IF(sod='1'andse='0')THEN--此处为奇校验
temp:
='1';
FORiIN0TO7LOOP--LOOP语句开始奇校错
temp:
=tempXORa(i);
ENDLOOP;
IF(oreq='0')THEN--判断是否要输出数据
yod<='0';
ye<='0';
ELSEoready<='1';--准备输出数据
yod<=temp;
ye<=NOTtemp;
ENDIF;
ELSIF(sod='0'ANDse='1')THEN--此处为偶校验
temp:
='0';
FORiIN0TO7LOOP--LOOP语句开始偶校错
temp:
=tempXORa(i);
ENDLOOP;
IF(oreq='0')THEN
yod<='0';
ye<='0';
ELSEoready<='1';
yod<=temp;
ye<=NOTtemp;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ENDdataxl;
.设计要点及特色点:
1.8位输入信号经异或门输出P,当IN0~IN7中有奇数个1时,P=1;偶数个1时,P=0。
奇校验时,ODD_IN=1,EVEN_IN=0,ODD_OUT=!
P,EVEN_OUT=P,ODD_OUT=0时,传输正确;EVEN_OUT=1时,传输错误。
此处需要引入一个变量temp,使temp为ODD_IN和P的异或值,将temp输出得到的ODD_OUT即为校验位的值;偶校验时,ODD_IN=0,EVEN_IN=1,ODD_OUT=P,EVEN_OUT=!
P,思路与奇校验处相同。
2.在奇偶校验器的校验检测过程中,需要对8位输入信号进行逐次异或,此处运用LOOP语句,循环异或,最后得出引入的变量temp值。
3.在IN_READY=1时表示输入数据准备好,可进行奇偶校验检测,OUT_REQ=1时表示要输出正确的校验位,在OUT_READY=1准备好后则输出ODD_OUT和EVEN_OUT的值,这里有多个需要根据条件执行,所以需要用到多个IF语句。
4.在本设计中,将时钟控制奇偶校验的执行,实现上升沿同步。
六.逻辑仿真图和功能分析
逻辑仿真图:
功能分析:
iready=0时,yod=ye=0;
iready=1,CLK=1时,
sod=1,se=0时,奇校验得temp值
oreq=1时,oready=1,yod=temp,ye=nottemp;
oreq=0时,yod=ye=0;
sod=0,se=1时,偶校验得temp值
oreq=1时,oready=1,yod=temp,ye=nottemp;
oreq=0时,yod=ye=0.
七.时序仿真和分析
时序仿真:
sod=1,se=0(奇校验)
sod=0,se=1(偶校验)
分析:
当iready=0时,yod=ye=0;
当iready=1,clk=1时,开始奇校验,奇校验完成后根据oreq的值判断是否要输出,oreq=1时,表示要求输出校验值,则oready=1表示输出数据准备好,输出校验值yod和ye
八.调试过程和问题
1.创建工程:
在File/NewProjectWizard里输入工程路径作为当前的工作目录,工程名和顶层文件实体名为必须相同设为XL11001802。
要求与在2-4译码器中相同,其中目标器件选取Altera公司FLEX10K系列。
2.建立文本/编辑文件:
在File/New里选取VHDLFile文件类型,输入相应代码后保存文件,要保存在已建立的文件夹里,存盘文件名要与实体名保持一致,即XL11001802.vhd。
若不一致,在编译过程中会出现错误,在顶层文件中找不到要编译的文件。
3.编译综合:
执行Processing/CompilerTool,启动编译器,编译成功后显示编译报告。
选择Tool/NetlistViewer/TechnologyMapViewer观察生成后的门级电路原理图。
对于不同的目标器件,尽管逻辑功能一样,但是其门级电路的结构是不一样。
奇偶校验器综合后的门级电路原理图:
4.仿真实验:
在File/New里选择适量波形文件“VectorWaveformFile”,弹出波形编辑窗口。
在Edit/Endtime中选择仿真结束时间和时间单位,设置为1μs。
在波形编辑窗口选择要加入的波形节点。
设置相应的输入信号,将iready,oreq设置为高电平1,在Assignment/Settings里设置时钟信号CLK周期为10ns,根据奇/偶校验来设置sod和se的值,把a[7]~a[0]都设置为间隔10ns输出的随机波形,最后将a的输出方式设为“binary”设置完后保存波形文件,文件名为XL11001802.vwf。
在Assignments/Settings里设置仿真器,这里只要进行功能仿真,所以选择的仿真模式为Functional。
在仿真之前,先产生功能仿真网表文件,设置完成后启动仿真器,直到出现simulationwassuccessful仿真结束。
打开仿真波形报告窗口查看波形。
Sod=1,se=0(奇校验):
sod=0,se=1(偶校验):
结果分析:
1.sod=1,se=0
iready=0时,yod=ye=0;
iready=1,clk=1,a7a6a5a4a3a2a1a0=01110011,oreq=0时,yod=ye=0
a7a6a5a4a3a2a1a0=10011011,oreq=1时,yod=0,ye=1;
a7a6a5a4a3a2a1a0=00101011,oreq=1时,yod=1,ye=0.
2.sod=0,se=1
iready=0时,yod=ye=0;
iready=1,clk=1,a7a6a5a4a3a2a1a0=01110011,oreq=0时,yod=ye=0
a7a6a5a4a3a2a1a0=10011011,oreq=1时,yod=1,ye=0;
a7a6a5a4a3a2a1a0=00101011,oreq=1时,yod=0,ye=1.
仿真结果与理论分析符合,仿真正确。
问题:
1.在编译代码的过程中,老是会出现temp的输出格式不正确,要改为“:
=”,且temp定义的位置不正确,后来我通过看老师给的PPT发现,VARIABLE定义的是局部变量,只能在进程语句,函数语句和过程语句结构中使用。
变量在赋值时不能产生附加延时,其说明格式如下:
VARIABLE变量名:
数据类型约束条件:
=表达式样。
我将temp的输出全部改为“:
=”,并将temp定义在BEGIN后解决了这个问题。
2.在最后仿真的过程中,我发现根据a7~a0的输入值得到的校验结果有时正确有时错误,起初我以为是我在定义输入信号时出现问题,后发现时在代码的“LOOP语句”编写上出现了错误,将temp:
=sodXORa(i);使yod输出结果错误,后将temp:
=‘相应sod的值’;temp:
=tempXORa(i);修改后输出结果正确。
3.为让仿真结果看的更清楚方便,将a的输出模式改为binary,结果一目了然。
九.体会和建议
这是我第一次接触VHDL语言,在做实验的过程中会遇到不同的问题,需要我边学边用找寻相关资料从最基础的学起。
这次的实验是基于Quartus2的VHDL数字系统设计。
要完成这次试验首先要学会如何操作Quartus2,然后是学习VHDL语言,学习如何用它来编译实现我所需要的功能器件。
通过学习,我初步了解了VHDL对时序器件功能和逻辑行为描述所具有的特点,也认识到了VHDL电路系统行为描述的强大功能。
在做实验前老师说过VHDL语言与C语言有许多相似之处,我在做实验的过程中也发现了其异同。
在2-4译码器的VHDL代码编写过程中我学到了与C语言不同的CASE语句;在奇偶校验器的VHDL代码编写过程中我也发现虽然在语法上有不同,但在编写方法和功能上与C语言相似的IF语句和FORLOOP语句,认识到这一点也让我在接下来的实验过程中更加容易。
通过这两周的学习,我掌握了时序电路描述的一般规律和设计方法,并对Quartus2软件的使用更加熟练。
原本面对新知识的不知所措也在这两周中没有了,觉得这个实验并不是想象中那么困难。
事先分析要实现器件的工作原理,理清思路,在接下来的编写过程中就简单了。
这次的实验让我经历了从不会到会,从零散到系统,真正做出一点东西来,掌握一些VHDL技术方面的知识的过程,还让我在思考和实践中得到提高,对以前所学的数字电路和C语言都有了更深的了解,这两周的实验让我受益匪浅。
设计成绩评定
评分内容
具体要求
总分
评分
上机时间
上机时间是否达到要求的学时,按照实际情况给与一定的成绩。
10分
报告审阅结果
报告结构严谨,文字通顺,用语符合技术规范,图表清楚,书写格式规范,不与别人雷同。
30分
验收结果
原理
原理清楚,能较好地理解课题任务并提出实施方案。
20分
完成情况
独立完成规定设计任务,论证、分析、设计、计算、结构、建模、实验正确合理,有一定的创新。
30分
操作
能熟练操作相关工具软件,并利用工具软件完成设计任务。
10分
总成绩(五分制)
100分
指导教师评阅意见
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南京 邮电大学 软件设计 VHDL 实验 报告