数字电路与逻辑设计实验报告第1页共20页实验四译码器与编码器的设计与仿真班级姓名学号指导老师一、实验目的熟悉QuartusⅡ仿真软件的基本操作,用逻辑图和VHDL语言设计实现3-8译码器和8-3编码器二、实验内容1.参照芯片74LS138的电路结构,用逻辑图和VHDL语言设计3-8译码器;2.参照芯片74LS148的电路结构,用逻辑图和VHDL语言设计8-3优先编码器。三、实验原理(1)74148:8-3优先编码器(8to3PriorityEncoder)用途:将各种输入信号转换成一组二进制代码,使得计算机可以识别这一信号的作用。键盘里就有大家天天打交道的编码器,当你敲击按键时,被敲击的按键被键盘里的编码器编码成计算机能够识别的ASCII码。译码器与编码器的功能正好相反。逻辑图真值表INPUTOUTPUT数字电路与逻辑设计实验报告第2页共20页EN0N1N2N3N4N5N6N7NA2A1A0EOGS1××××××××111110×××××××0000100××××××01001100×××××011010100××××0111011100×××01111100100××011111101100×0111111110100011111111111001111111111101相当于a2、a1、a0输出0N、1N、2N、3N、4N、5N、6N、7N,从右往左数的第一个零右边的值相加值,gs为进位,当相加值大于等于8时,gs为1,enout为0,其余情况gs为0,enout为1.特殊地,当输入没有0全是1时,gs和enout都输出1.74138:3-8译码器(3to8Demultiplexer),也叫3-8解码器用途:用一组二进制代码来产生各种独立的输出信号,这种输出信号可以用来执行不同的工作。显示器中的像素点受到译码器的输出控制。逻辑框图:用逻辑符号(Symbol)来解释该电路输入与输出信号之间的逻辑关系,既省事又直观。如下图所示。逻辑功能表:用真值表来定量描述该电路的逻辑功能。这个表是设计3-8译码器的关键;74138的逻辑功能表如下:INPUTOUTPUTSelectEnableCBAG1 ̄GHA ̄G2B ̄Y ̄7 ̄Y ̄6 ̄ ̄Y ̄5 ̄ ̄Y ̄4 ̄Y ̄3 ̄Y ̄2 ̄Y ̄1 ̄Y ̄0代码输入端解码信号输出端低电平有效使能输入端数字电路与逻辑设计实验报告第3页共20页××××××000001010011100101110111×110××10010010010010010010010011111111111111111111111011111101111110111111011111101111110111111011111101111111注:使能端G1是高电平有效;使能端G2是低电平有效,G2=G2AANDG2B。数字电路与逻辑设计实验报告第4页共20页四、实验方法与步骤实验方法:采用基于FPGA进行数字逻辑电路设计的方法。采用的软件工具是QuartusII软件仿真平台,采用的硬件平台是AlteraEPF10K20TI144_4的FPGA试验箱。五、实验步骤:(1)3_8编码器1、编写源代码。打开QuartusⅡ软件平台,点击File中得NewProject新建工程,将工程名称建得跟文件夹名称一样为new8_3。在File中New建立一个VHDL文件。VHDL语言设计如下:libraryieee;useieee.std_logic_1164.all;entitynew8_3isport(enable:instd_logic;x0,x1,x2,x3,x4,x5,x6,x7:instd_logic;a0,a1,a2:outstd_logic;enout,gs:outstd_logic);endnew8_3;architecturebhvofnew8_3isbeginprocess(enable,x0,x1,x2,x3,x4,x5,x6,x7)beginif(enable='1')thena2='1';a1='1';a0='1';enout='1';gs='1';elseif(x7='1')thenif(x6='1')thenif(x5='1')thenif(x4='1')thenif(x3='1')thenif(x2='1')thenif(x1='1')thenif(x0='1')thena2='1';a1='1';a0='1';enout='0';gs='1';else数字电路与逻辑设计实验报告第5页共20页a2='1';a1='1';a0='1';enout='1';gs='0';endif;elsea2='1';a1='1';a0='0';enout='1';gs='0';endif;elsea2='1';a1='0';a0='1';enout='1';gs='0';endif;elsea2='1';a1='0';a0='0';enout='1';gs='0';endif;elsea2='0';a1='1';a0='1';enout='1';gs='0';endif;elsea2='0';a1='1';a0='0';enout='1';gs='0';endif;elsea2='0';a1='0';数字电路与逻辑设计实验报告第6页共20页a0='1';enout='1';gs='0';endif;elsea2='0';a1='0';a0='0';enout='1';gs='0';endif;endif;endprocess;endbhv;点击File/Saveas以“.vhd”为扩展名存盘文件,命名为“new8_3.vhd”,保存时勾选“Addfiletocurrentfile”选项。点击“processing”选择“Compiletool”,出现界面0,点击“start”开始全编译,成功后会出现图1.否则修改代码。界面02.点击File中得New建立一个波形文件。点击“Edit”中“insert”的“insertnodesandbus_”,进入界面1,单击“NodeFinder”,进入界面2,在“Filter”下拉列表中选择“Pinsall”,点击“list”,“NodesFound”框格中出现节点,双击节点选中节点,使节点名出现在选中的节点框格“SelectedNodes”中.点击“OK”返回界面1,再点击“OK”完成节点选择。数字电路与逻辑设计实验报告第7页共20页界面1界面2点击“Edit”中“endtime”,出现界面3,将时间设定为2.0us.点击“Edit”中“gridsize”,出现界面4,将网格大小设定为100ns.界面3数字电路与逻辑设计实验报告第8页共20页界面4选中输入节点x0-x7,点击右键,选中grouping中的group,出现界面5,将组合节点Groupname定为x.同理将输出节点a2-a0合并为a.界面5点击x,使其节点x成为高亮状态,点击左侧栏中的,进入界面6,将开始值“startvalue”设为00000000,点击“timing”,将开始时间“starttime”设为0,结束时间“endtime”设为2.0us,每个值的时间长度(半周期)“countevery”设定为50ns,值“Mulipliedby”为“1”。点击“确定”输入信号激励。再双击要修改值的框格,,直接输入可以反应该8—3编码器作用的值,前十个值分别为00000000、00000001、11011011、00000011、11000111、10101111、01011111、10111111、01111111、11111111。双击enable的值,出现界面7,将enable的值Numericornamedvalue设为0。只有125ns到235ns这段时间设为1;双击节点a,出现界面8,Radix选择Hexadecimal,即选择十六进制输出。界面6数字电路与逻辑设计实验报告第9页共20页界面7界面8点击”View”中的”Zoomout”命令缩小波形显示。制作波形如下图3所示点击File/Saveas以“.vwf”为扩展名存盘文件,命名为“new8_3.vwf”,保存时勾选“Addfiletocurrentfile”选项。3.波形仿真及验证。保存波形文件后,点击”processing“中”Generatefunctionalsimulationnetlist”,命令产生功能仿真网表。出现成功后提示如下图4后,点击”assignments“中”settings”,出现以下界面9。点击左侧栏中“simulatorSettings”,在”Simulationmode”的下拉列表中选择“Functional”,指定波形激励文件”Silulationinput“为本波形文件“new8_3.vwf”,点击“OK”完成设定。点击“Processing”中的“Startsimulation”,开始功能仿真。若仿真成功,会提示仿真成功图5,能够从SimulationReport窗口查看结果,见图6。数字电路与逻辑设计实验报告第10页共20页界面9.时序仿真:功能仿真成功后,点击”assignments“中”settings”,出现以下界面9。点击左侧栏中“simulatorSettings”,在”Simulationmode”的下拉列表中选择“timing”,指定波形激励文件”Silulationinput“为本波形文件“new8_3。vwf”,点击“OK”完成设定。点击“Processing”中的“Startsimulation”,开始功能仿真。若仿真成功,会提示仿真成功图7,能够从SimulationReport窗口查看结果。时序仿真结果如图7(2)3_8译码器1、编写源代码。打开QuartusⅡ软件平台,点击File中得NewProject新建工程,将工程名称建得跟文件夹名称一样。在File中New建立一个VHDL文件。VHDL语言设计如下:libraryieee;useieee.std_logic_1164.all;entitynew3_8isport(x:instd_logic_vector(2downto0);g1,g1a,g2b:instd_logic;y:outstd_logic_vector(7downto0));endnew3_8;architecturertlofnew3_8isbeginprocess(g1,g1a,g2b,x)beginif((g1='0')or(g1a='1'andg2b='1'))theny=11111111;elseif(g1='1'andg1a='0'andg2b='0')thencasexiswhen000=y=11111110;when001=y=11111101;数字电路与逻辑设计实验报告第11页共20页when010=y=11111011;when011=y=11110111;when100=y=11101111;when101=y=11011111;when110=y=10111111;when111=y=01111111;endcase;endif;endif;endprocess;endrtl;点击File/Saveas以“.vhd”为扩展名存盘文件,命名为“new3_8.vhd”,保存时勾选“Addfiletocurrentfile”选项。点击“processing”选择“compiletool”,点击“start”开始全编译,全编译成功会出现图12证明编译成功。2.点击File中得New建立一个波形文件。点击“Edit”中“insert”的“insertnodesandbus_”,进入界面1,单击“NodeFinder”,进入界面12,在“Filter”下拉列表中选择“Pinsall”,点击“list”,“NodesFo