1、 通信与信息工程学院 2023 /2023 学年 第 2 学期 软件设计 实验报告 模 块 名 称 VHDL 专 业 通信工程 学 生 班 级 学 生 学 号 学 生 姓 名 指 导 教 师 梅中辉 设计题目 基本课题:04. 2对4译码器 综合课题:18. 奇偶校验器 任务规定 1.
2、基本课题:设计一个2对4译码器(输入:A B 输出:Y3 Y2 Y1 Y0),真值表如图2。 A B Y3 Y2 Y1 Y0 0 0 0 1 1 0 0 1 1 1 1 0 1 1 0 1 1 0 1 1 0 1 1 1 2. 奇偶校验器系统的功能是对八位二进制数据及其奇偶校验位的输入进行校验,输出对的的奇、偶校验位。ODD_IN与EVEN_IN是控制奇校验和偶校验功能输入,IN0到IN7是七位数据及一位校验位数据输入,IN_READY表达输入数据已经准备好,可以解决,
3、当OUT_REQ输入表达规定输出数据,CLK端口用于接受时钟信号,支持系统的时钟上升沿同步。当输出端口OUT_READY输出信号有效时,表达输出数据已经准备好,可认为下级电路使用,ODD_OUT与EVEN_OUT用来输出对的的奇偶校验位。上述控制端口均为高电平有效。 实验设备及软件 1. 微型计算机 2. EDA-VHDL开发软件 同组人员学号及姓名 11001803 胡雪琪 参考文献 1. 张顺兴 《数字电路与系统设计》东南大学出版社2023.8 2. 苗丽华《VHDL数字电路设计教程》人民邮电出版社2023.11 VHDL课程设计题目及规定(自编资料) 3.
4、VHDL课程设计题目及规定(自编资料) 4. 杨晓慧 杨永健 《基于FPGA的EDA/SOPC技术与VHDL》 国防工业出版社 2023.7 5. Peter J. Ashenden 《The VHDL Cookbook》Dept. Computer Science University of Adelaide South Australia July, 1990 报告内容 一. 实验目的 1.掌握组合逻辑中译码器电路的设计原理。 2.能运用VHDL语言设计一个2-4译码器。 二. 实验器件 1.微型计算机 2.EDA-VHDL开发软件 三. 实验名称 2-
5、4译码器 四. 题目规定概述 设计一个2对4译码器(输入:A B 输出:Y3 Y2 Y1 Y0),真值表如图 A B Y3 Y2 Y1 Y0 1 0 0 1 1 0 0 1 1 1 1 0 1 1 0 1 1 0 1 1 0 1 1 1 五. 系统分析 .原理图: 分析:EN=1,Z[0]=Z[1]=Z[2]=Z[3]=1; EN=0,Z[0]=!(!A!B),Z[1]=!(!AB),Z[2]=!(A!B),Z[3]=!AB .设计算法:
6、 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY XiaoLi IS --定义实体名称为XiaoLi PORT( EN:IN STD_LOGIC; --定义输入/输出端口 a:IN STD_LOGIC_VECTOR(1 DOWNTO 0); y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END XiaoLi; ARCHITECTURE dataxl OF XiaoLi
7、 IS BEGIN PROCESS(EN,a) BEGIN IF(EN='0')THEN CASE a IS --用CASE语句进行译码 WHEN "00"=>y<="1110"; WHEN "01"=>y<="1101"; WHEN "10"=>y<="1011"; WHEN "11"=>y<="0111"; WHEN OTHERS=>y<="0000"; END CASE; ELSE y<="1111"; END IF; END PROCESS; END dat
8、axl; 设计要点: 1. 2-4译码器有一个使能端EN,低电平有效,所以要用到IF语句分情况解决,当EN=1时,输出全为逻辑1;当EN=0时,在使能下对输入进行译码输出。 2. 在2-4译码器中,规定根据相应的输入译码得到相应的输出,这需要用到CASE语句,根据满足的条件直接选择相应的顺序语句执行。然后根据题目规定进行设立。 六. 逻辑仿真图及功能分析 逻辑仿真图: 功能分析:EN=1时,y[0..3]=1111 EN=0时,a[0..1]=00,y[0..3]=1110 a[0..1]=01,y[0..3]=11
9、01 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.创建工程:
10、 在File/NewProjectWizard里输入工程途径作为当前的工作目录,工程名和顶层文献实体名为必须相同设为XiaoLi。其中目的器件选取Altera公司Cyclone2的EP2C8T144C8。 2 建立文本/编辑文献: 在File/New里选取VHDL File文献类型,输入相应代码后保存文献,要保存在已建立的文献夹里,存盘文献名要与实体名保持一致,即XiaoLi.vhd。若不一致,在编译过程中会出现错误,在顶层文献中找不到要编译的文献。 3 编译综合: 执行Processing/Compiler Tool,启动编译器,编译成功后显示编译报告。 选择Tool
11、/Netlist Viewer/Technology Map Viewer观测生成后的门级电路原理图。对于不同的目的器件,尽管逻辑功能同样,但是其门级电路的结构是不同样。 2-4译码器综合后的门级电路原理图: 4 仿真实验: 在File/New里选择适量波形文献“Vector Waveform File”,弹出波形编辑窗口。在Edit/End time中选择仿真结束时间和时间单位,设立为1μs。在波形编辑窗口选择要加入的波形节点。 设立相应的输入信号,将a0时钟信号周期设立为200ns,a1时钟信号周期设立为100ns。设立完后保存波形文献,文献名为XiaoLi.vwf
12、 在Assignments/Settings里设立仿真器,这里只要进行功能仿真,所以选择的仿真模式为Functional。在仿真之前,先产生功能仿真网表文献,设立完毕后启动仿真器,直到出现simulation was successful仿真结束。打开仿真波形报告窗口查看波形。 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时,不管a
13、1a0输入为什么,y3y2y1y0=1111。 输出结果与理论值相同,仿真对的。 问题: 1. 起初在编写好代码后在编译过程中老是出现文献未定义,找不到等问题,后来通过查找资料发现:工程目录可以随意设立,但必须是英文的目录,工程名和顶层实体名必须也是英文开头,不要将文献夹设在计算机已有的安装目录中,更不要将工程文献直接放在安装目录中。文献夹所在的途径名和文献夹名不能用中文,不能用空格,不能用括号,也不能用数字开头。后来规范了书写就可以对的编译了。 2. 起初在最后仿真过程中,输入时序信号不能对的产生“00”,“01”,“10”,“11”,后通过设立两输入信号周期相差一倍得出了抱负的
14、结果。 一.实验目的 1.掌握组合逻辑中奇偶校验器电路的设计原理。 2.运用VHDL语言设计一个八位奇偶校验器。 二.实验器件 1.微型计算机 2.EDA-VHDL开发软件 三.实验名称 奇偶校验器 四.题目规定概述 奇偶校验器系统的功能是对八位二进制数据及其奇偶校验位的输入进行校验,输出对的的奇、偶校验位。ODD_IN与EVEN_IN是控制奇校验和偶校验功能输入,IN0到IN7是七位数据及一位校验位数据输入,IN_READY表达输入数据已经准备好,可以解决,当OUT_REQ输入表达规定输出数据,CLK端口用于接受时钟信号,支持系统的时钟上升沿同步。当输出端
15、口OUT_READY输出信号有效时,表达输出数据已经准备好,可认为下级电路使用,ODD_OUT与EVEN_OUT用来输出对的的奇偶校验位。上述控制端口均为高电平有效。 CLK ODD_IN EVEN_IN IN_READY OUT_REQ IN7 IN0 … EVEN_OUT OUT_READY ODD_OUT 功能:用来校验某一组传输数据有否错误的组合逻辑电路。 方法:在被传输的数据后面加一位奇偶校验位,使这一组数据中含1的位数成为奇数或是使这一组数据中含1的位数为偶数。通过检测1的个数是奇数还是偶
16、数来判断数据传输是否有误。奇校验时,加了校验位后1的位数成为奇数;偶校验时,加了校验位后1的位数成为偶数。 IN0~IN7为8位代码输入,ODD_OUT,EVEN_OUT为校验后的结果输出,ODD_IN,EVEN_IN为是奇校验还是偶校验控制。 五.系统分析 .原理图: 分析: P=B7B6B5B4B3B2B1B0 由异或运算可知: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,
17、SE=1;TOD=P,YE=!P,B7~B0中有偶数个1时,YOD=0,YE=1,传输对的;出现奇数个1时,YOD=1,YE=0,说明传输有误。 YOD是加上的校验位,YE位用来判断传输是否对的。 设计算法: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY XL11001802 IS --定义实体名为XL11001802 PO
18、RT(iready,CLK,oreq:IN STD_LOGIC; --定义输入/输出 a:IN STD_LOGIC_VECTOR(7 DOWNTO 0); sod,se:IN STD_LOGIC; oready:OUT STD_LOGIC; yod,ye:OUT STD_LOGIC); END XL11001802; ARCHITECTURE dataxl OF XL11001802 IS BEGIN PROCESS(iready,clk,or
19、eq,a,sod,se) VARIABLE temp:STD_LOGIC; BEGIN IF(iready='0') THEN --判断是否准备输入数据 yod<='0'; --时钟上升沿同步 ye<='0'; ELSIF (clk'event and clk='1') THEN IF(sod='1'and se='0') THEN --此处为奇校验 temp:='1'; FOR i IN 0 T
20、O 7 LOOP --LOOP语句开始奇校错 temp:=temp XOR a(i); END LOOP; IF(oreq='0')THEN --判断是否要输出数据 yod<='0'; ye<='0'; ELSE oready<='1'; --准备输出数据 yod<=temp; ye<=NOT temp; END IF;
21、ELSIF(sod='0'AND se='1') THEN --此处为偶校验 temp:='0'; FOR i IN 0 TO 7 LOOP --LOOP语句开始偶校错 temp:=temp XOR a(i); END LOOP; IF(oreq='0')THEN yod<='0'; ye<='0'; ELSE oready<='1'; yod<=temp; ye<=NOT temp; EN
22、D IF; END IF; END IF; END PROCESS; END dataxl; .设计要点及特色点: 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=!
23、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,CL
24、K=1时, sod=1,se=0时,奇校验得temp值 oreq=1时,oready=1,yod=temp,ye=not temp; oreq=0时,yod=ye=0; sod=0,se=1时,偶校验得temp值 oreq=1时,oready=1,yod=temp,ye=not temp; oreq=0时,yod=ye=0. 七.时序仿真和分析 时序仿真:
25、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.建立
26、文本/编辑文献: 在File/New里选取VHDL File文献类型,输入相应代码后保存文献,要保存在已建立的文献夹里,存盘文献名要与实体名保持一致,即XL11001802.vhd。若不一致,在编译过程中会出现错误,在顶层文献中找不到要编译的文献。 3.编译综合: 执行Processing/Compiler Tool,启动编译器,编译成功后显示编译报告。 选择Tool/Netlist Viewer/Technology Map Viewer观测生成后的门级电路原理图。对于不同的目的器件,尽管逻辑功能同样,但是其门级电路的结构是不同样。 奇偶校验器综合后的门级电路原
27、理图: 4.仿真实验: 在File/New里选择适量波形文献“Vector Waveform File”,弹出波形编辑窗口。在Edit/End time中选择仿真结束时间和时间单位,设立为1μs。在波形编辑窗口选择要加入的波形节点。 设立相应的输入信号,将iready,oreq设立为高电平1,在Assignment/Settings里设立时钟信号CLK周期为10ns,根据奇/偶校验来设立sod和se的值,把a[7]~a[0]都设立为间隔10ns输出的随机波形,最后将a的输出方式设为“binary”设立完后保存波形文献,文献名为XL11001802.vwf。 在Assig
28、nments/Settings里设立仿真器,这里只要进行功能仿真,所以选择的仿真模式为Functional。在仿真之前,先产生功能仿真网表文献,设立完毕后启动仿真器,直到出现simulation was successful仿真结束。打开仿真波形报告窗口查看波形。 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=10011
29、011,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. 在编译代码的过程
30、中,老是会出现temp的输出格式不对的,要改为“:=”,且temp定义的位置不对的,后来我通过看老师给的PPT发现,VARIABLE定义的是局部变量,只能在进程语句,函数语句和过程语句结构中使用。变量在赋值时不能产生附加延时,其说明格式如下:VARIABLE变量名:数据类型约束条件:= 表达式样。我将temp的输出所有改为“:=”,并将temp定义在BEGIN后解决了这个问题。 2. 在最后仿真的过程中,我发现根据a7~a0的输入值得到的校验结果有时对的有时错误,起初我认为是我在定义输入信号时出现问题,后发现时在代码的“LOOP语句”编写上出现了错误,将temp:=sod XOR a(i);
31、使yod输出结果错误,后将temp:=‘相应sod的值’;temp:=temp XOR a(i);修改后输出结果对的。 3. 为让仿真结果看的更清楚方便,将a的输出模式改为binary,结果一目了然。 九.体会和建议 这是我第一次接触VHDL语言,在做实验的过程中会碰到不同的问题,需要我边学边用找寻相关资料从最基础的学起。这次的实验是基于Quartus2的VHDL数字系统设计。要完毕这次实验一方面要学会如何操作Quartus2,然后是学习VHDL语言,学习如何用它来编译实现我所需要的功能器件。通过学习,我初步了解了VHDL对时序器件功能和逻辑行为描述所具有的特点,也结识到了VH
32、DL电路系统行为描述的强大功能。 在做实验前老师说过VHDL语言与C语言有许多相似之处,我在做实验的过程中也发现了其异同。在2-4译码器的VHDL代码编写过程中我学到了与C语言不同的CASE语句;在奇偶校验器的VHDL代码编写过程中我也发现虽然在语法上有不同,但在编写方法和功能上与C语言相似的IF语句和FOR LOOP语句,结识到这一点也让我在接下来的实验过程中更加容易。 通过这两周的学习,我掌握了时序电路描述的一般规律和设计方法,并对Quartus2软件的使用更加纯熟。原本面对新知识的不知所措也在这两周中没有了,觉得这个实验并不是想象中那么困难。事先分析要实现器件的工作原理,
33、理清思绪,在接下来的编写过程中就简朴了。这次的实验让我经历了从不会到会,从零散到系统,真正做出一点东西来,掌握一些VHDL技术方面的知识的过程,还让我在思考和实践中得到提高,对以前所学的数字电路和C语言都有了更深的了解,这两周的实验让我受益匪浅。 设计成绩评估 评分内容 具体规定 总分 评分 上机时间 上机时间是否达成规定的学时,按照实际情况给与一定的成绩。 10分 报告审阅结果 报告结构严谨,文字通顺,用语符合技术规范,图表清楚,书写格式规范,不与别人雷同。 30分 验收结果 原理 原理清楚,能较好地理解课题任务并提出实行方案。 20分 完毕情况 独立完毕规定设计任务,论证、分析、设计、计算、结构、建模、实验对的合理,有一定的创新。 30分 操作 能纯熟操作相关工具软件,并运用工具软件完毕设计任务。 10分 总成绩(五分制) 100分 指导教师评阅意见






