EDA技术实验指导书_2014.doc_第1页
EDA技术实验指导书_2014.doc_第2页
EDA技术实验指导书_2014.doc_第3页
EDA技术实验指导书_2014.doc_第4页
EDA技术实验指导书_2014.doc_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字系统EDA技术实验指导书EDA课程组2014年9月序 言数字系统EDA技术实验指导书是与理论课程数字系统EDA技术配套使用。该实验课程是电子信息类专业的一门专业实验课程,对电子信息类专业的学生具有非常重要的作用。本实验课与理论课同时进行,同学们在做本实验之前必须具备以下的基础知识:1、数字电路的基础知识;2、电子计算机常用操作系统的使用方法;3、一定的英语基础;4、必须有一定的理论知识做基础,与理论课同时进行。PLD(可编程逻辑器件)是与ISP(在系统可编程)技术和EDA(电子设计自动化)工具紧密结合、同时进行的。它代表了数字系统设计领域的最高水平,给数字电路的设计带来了革命性的变化。从70 年代第一片可编程逻辑器件PROM的诞生到现在的CPLD/FPGA,数字系统的设计发生了本质的变化。从传统的对电路板的设计到现在的基于芯片的设计,使得数字系统设计的效率大大提高,产品更新速度大大加快,设计周期大大变短。本实验不同于其它实验,他的实验手段和实验方法都有了重大的变化,主要体现在以下几个方面:1、实验方法不同本实验是在PC、实验箱和相关软件搭配成的专用实验平台上,用原理图或文本进行输入,按以下流程反复对设计源文件进行修改,直到其设计满足要求为止。修改修改修改编写源文件编译仿真下载修改系统测试2、本实验课的目的学生学习完本实验课后,应达到如下的要求:1)能熟练使用本实验的配套EDA软件Quartus、ModelSim;2)掌握PLD 芯片的基本使用方法,能用现代数字系统的设计方法进行基本的数字系统设计;3)掌握图形编辑和VHDL文本编辑两种设计方法,重点是VHDL文本编辑;4)具备基本的开发能力,为后续学习打下坚实的基础。实验规则为了维护正常的实验教学次序,提高实验课的教学质量,顺利的完成各项实验任务,确保人身、设备安全,特制定如下实验规则:一、实验前必须充分预习,完成指定的预习内容,并写出预习报告,预习要求如下:1、认真阅读本实验指导书,分析掌握本次实验的基本原理;2、完成各实验预习要求中指定的内容;3、熟悉实验任务。二、实验时,认真、仔细的写出源程序,进行调试,有问题向指导老师举手提问;调试成功准备下载时,必须请示指导老师,得到允许方可下载。三、实验时注意观察,如发现有异常现象(电脑故障或实验箱故障),必须及时报告指导老师,严禁私自乱动。四、实验过程中应仔细观察实验现象,认真记录实验数据、波形、逻辑关系及其它现象,记录的原始结果必须经指导教师审阅签字后,方可离开。五、自觉保持实验室的肃静、整洁;实验结束后,必须清理实验桌,将实验设备、工具、导线按规定放好,并填写仪器设备使用记录。六、凡有下列情况之一者,不准做实验:1、没有写预习报告者;2、实验开始后迟到10 分钟以上者;3、实验中不遵守实验室有关规定,不爱护仪器,表现不好而又不服从管理教育者;七、实验后,必须认真作好实验报告,下次实验时交实验指导老师批阅。没交实验报告者,在规定时间里必须交给实验指导老师,否则视为缺做一次实验。八、一次未做实验,本实验课成绩视为不及格,原则上与下一届学生进行重修。以上实验规则,请同学们自觉遵守,并互相监督。注意:请参加实验的同学每次实验后将自己的源程序拷贝备用。数字系统实验室仪器设备操作规程1、 指导教师或实验工作人员应密切注视实验人员的操作行为,如发现不按操作规程办事,或随意乱动室内的仪器设备,应予以制止;2、 进行本实验的学生,应具备一定的电脑知识,基本熟悉Windows操作系统的应用;3、 实验前,学生应在实验教师的指导下,学习实验软件Quartus、ModelSim软件的基本使用方法,了解数字逻辑实验箱的使用方法,并在实验中逐步熟悉;4、 本实验室的仪器设备较贵重,严禁随意乱动;严禁在电脑上私设密码;实验时,必须按实验程序进行;5、 实验中,对于学生使用的各种仪器、仪表及实验连线,必须经实验指导教师审查确认后,方可接通电源;通电后,应随时观察是否正常工作,如发现异常情况,应立即切断电源,并报告指导教师,在故障未排除之前,严禁强行通电,否则后果自负;6、 学生在指定桌上实验,除本桌仪器外,不得擅自取用其它仪器设备;如确需要取用,须经指导教师同意;7、 实验过程中,如发现损坏仪器设备、仪表工具,或软件不能正常使用等情况,应立即报告指导教师或实验工作人员;8、 实验完毕后,实验人员应清点好实验所用的一切仪器设备,并经实验指导教师同意后方可离开;9、违规操作损坏的设备,除照价赔偿外,并给予相应的纪律处分。实验一 十进制计数器设计与仿真一、预习内容1. 结合教材中的介绍熟悉Quartus、ModelSim软件的使用及设计流程;2. 十进制计数器设计原理。二、实验目的3. 图形设计方法二、实验目的1. 掌握VHDL设计方法;2. 熟悉Quartus、ModelSim软件的使用及设计流程;3. 掌握十进制计数器的设计。三、实验器材三、 实验器材PC机一台、配套EDA开发工具Quartus、ModelSim四、实验要求1、用VHDL设计一个十进制计数器;2、用VHDL设计十进制计数器的测试平台; 3、用Quartus II完成十进制计数器的综合实现;4、用ModelSim完成十进制计数器的时序仿真。五、实验原理与内容1、原理:计数器是数字系统中的基本逻辑器件。计数器分为同步计数器和异步计数器。同步计数器指在时钟脉冲(计数脉冲)的控制下,构成计数器的各触发器状态同时发生变化的计数器,即计数器内部各触发器的时钟信号是统一的时钟信号。同步计数器具有工作稳定可靠、工作频率高的优点,但消耗硬件资源较多。异步计数器又称为行波计数器,它的低位计数器的输出作为高位计数器的时钟信号。异步计数器采用行波计数,使计数延迟增加,计数器工作频率较低,但具有消耗资源较少的优点。计数器的清零信号分为同步清零和异步清零。同步清零由时钟的边沿信号控制产生清零操作,异步清零操作与时钟信号无关。十进制计数器的计数范围为09循环变化,输入信号包括时钟信号、复位信号,输出信号位宽为4。2、实现框图: 十进制计数器clockresetCounter_out六、实验步骤1、 用VHDL语言设计一个异步清零的十进制同步计数器;2、 用VHDL设计十进制计数器的测试平台;3、 完成该计数器的综合、布局布线和时序仿真;七、实验报告1、写出实验源程序,并附上综合结果和仿真波形;2、分析实验结果;3、心得体会本次实验中你的感受;你从实验中获得了哪些收益;本次实验你的成功之处;本次实验中还有待改进的地方;下次实验应该从哪些地方进行改进;怎样提高自己的实验效率和实验水平等等。4、完成实验思考题。八、问题及思考1、通过仿真比较计数器同步清零与异步清零的区别。2、理解同步计数器与异步计数器原理的区别,比较两种计数器综合后的性能差异(主要从消耗资源和运算速度考虑)。实验二 DE2-115开发板接口应用一、预习内容1、 结合附录一了解EDA实验箱的原理;2、 七段LED显示原理;3、 怎样用VHDL实现8421BCD码在七段LED数码管上显示。二、实验目的实验目的1. 掌握VHDL进行EDA设计的基本步骤;2. 了解EDA实验箱的基本功能和使用方法;3. 掌握七段LED的显示原理;三、实验器材验器材PC机一台、EDA教学实验系统一台、下载电缆一根。四、实验要求1. 将学号后四位的每一位数字均转换为8421BCD码,使用实验箱上的16个滑动开关(SW15SW0)分别将四位学号的BCD码输入,并作为输入信号。2. 用VHDL设计七段LED译码显示电路;3. 用图形输入法设计完成显示学号后四位的显示电路;4. 下载该程序验证程序是否正确;5. 使用实验箱中的四组七段LED电路(HEX3、HEX2、HEX1、HEX0)依次显示学号后四位;6. 请事先准备一个优盘,本实验程序需要保存,后面实验需要用到。五、实验原理与内容1、 8421BCD编码 在数字系统中常用四位二进制代码来表示一位十进制数字0、1、2、9,称之为二十进制代码,即BCD码。将十进制数编成BCD码的电路,称为二十进制(BCD)编码器。二-十进制编码的方案很多,若BCD编码器采用8421编码方案,称为8421BCD编码器。例如:十进制数5的8421BCD编码为:0101。2、 七段译码器BCD七段译码器是一种常见的显示译码电路,其逻辑图如图2-1所示,其中:D3.0代表输入的四位二进制BCD码,a,b,c,d,e,f,g 接对应的数码显示接口,通过点亮7个数码管中的某几个数码管的方式可实现在数码管上显示相应的数字。本实验箱中的数码管为低电平0点亮,高电平1熄灭。图2-1 译码器逻辑图BCD七段译码器的真值表如表2-1。表2-1 译码器的真值表数值输入输出D3D2D1D0abcdefg000000000001100011001111200100010010300110000110401001001100501010100100601100100000701110001111810000000000910010000100A10100001000B10111100000C11000110001D11011000010E11100110000F11110111000六、实验步骤1、写出输入为8421BCD码的七段译码器电路;2、利用步骤一得到的七段译码器,使用图形输入法实现同时对四组输入数据的七段译码;3、选定器件、映射管脚、编译、下载。七、实验报告1、写出实验源程序;2、总结实验步骤和实验结果;3、心得体会本次实验中你的感受;你从实验中获得了哪些收益;本次实验你的成功之处;本次实验中还有待改进的地方;下次实验应该从哪些地方进行改进;怎样提高自己的实验效率和实验水平等等。4、完成实验思考题。八、问题及思考 如果要求译出09和,程序该如何修改呢?九、实验中需要用到的引脚编号1、实验中需要使用16个滑动开关(SW15SW0)实现将四位学号的BCD码进行输入,这16个滑动开关的引脚编号如表2-2所示:2、实验箱共提供八组七段LED电路(HEX7HEX0)。本实验中使用实验箱中的后四组七段LED电路(HEX3、HEX2、HEX1、HEX0)依次显示学号后四位。各组七段LED电路的引脚编号如表2-3所示:3、实验箱中七段LED电路各数码管的编号索引如图2-2所示:图2-2 七段数码管索引编号4、若将工程中所有的输入输出信号定义成与上述表中的信号名字相同,可通过将引脚配置文件DE2_115_pin_assignments.csv导入工程的方式自动配置各信号引脚编号,而不必一个一个的指定信号的引脚编号。导入引脚配置文件的方法:选择Assignments-Import Assignments-选择文件“DE2_115_pin_assignments.csv”- OK实验三 处理器核心电路的设计及验证一、实验目的 1、进一步掌握Altera DE2-115开发平台的使用; 2、掌握Quartus软件设计流程; 3、掌握一个处理器核心电路的基本结构及设计方法; 4、掌握状态机的设计方法; 5、进一步掌握如何编写testBench,并利用Modelsim进行仿真。二、实验前的准备工作 1、通过查询相关资料或书籍自学如何编写testBench; 2、通过查询相关资料或书籍自学如何使用Modelsim进行仿真。三、实验环境 1、预装开发环境Quartus11.0以上的版本和仿真工具软件Modelsim的计算机; 2、DE2-115开发板一套。四、实验内容1、 利用层次化的设计方法使用VHDL语言设计一个简单的处理器;2、 设计一个应用程序用于验证所设计的处理器的功能。五、实验原理1、一个最基本处理器的主要部件的构成如下图所示,一个最基本的处理器应该包括一些寄存器,一个多路选择器、一个加法/减法单元、计数器和一个控制单元。其中,寄存器的位宽可以选择8位、16位、32位、64位。以下均以16位为例来说明所设计的处理器的基本结构。处理器所处理的输入数据通过多路复用器加载到不同的寄存器内,寄存器分别定义为R0、R1、R2、R3、R4、R5、R6、R7和A。各个寄存器之间可以相互传递数据。复用器的输出称之为总线。该总线容许数据从一个位置传递到另一个位置。加法/减法单元首先通过多路复用器将一个16位数加载到寄存器A中,寄存器A固定作为加法/减法单元的一个操作数。加法/减法单元的第二个操作数将通过总线传至加法/减法单元的另一个数据输入接口,完成运算操作后的数据存入寄存器G内。寄存器G的值可通过复用器将其搬移到需要的位置。图1 处理器内部结构图 在控制单元的控制下,每个时钟周期可完成不同的操作。这个控制单元决定什么数据放在总线上,并且控制哪个寄存器加载总线上的数据。例如,将寄存器R0的值加载到寄存器A内,可在两个时钟周期内完成,第一个时钟周期是将R0的值放在总线上,第二个周期则将总线上的数据加载到寄存器A内。2、处理器的操作处理器可通过各种指令来进行所需要的操作。下表列出了本次实验需要完成的4条指令及相应的功能。mv Rx, Ry 表示将Ry寄存器内的数据移到Rx寄存器内。mvi Rx, #D 表示将立即数送到Rx寄存器内。add Rx, Ry 表示将Rx和Ry寄存器内的数据相加,结果存入Rx寄存器内。sub Rx,Ry 表示将Rx和Ry寄存器内的数据相加减,结果存入Rx寄存器内。指令可通过编码后存入IR寄存器内。IR寄存器可以使用9位表示。如IIIXXXYYY。其中III表示指令,XXX代表Rx寄存器,YYY代表Ry寄存器。IR必须连接到16位数据输入脚上(可以是低9位或高9位)。对于mvi指令,YYY域不用,立即数#D在mvi指令存入IR寄存器后由16位数据输入口送入。对于加法和减法指令,由于该类操作需要多次占用总线,因此完成这类操作需要多个时钟周期。为此可增加一个2位的计数器counter。当RUN有效时计数器counter开始计数,即检测到开始执行加法/减法操作,当指令执行完毕后Done有效,此时清空counter计数器,可以进行下一指令的操作。表1处理器操作指令操作所完成的功能mv Rx, RyRx - Rymvi Rx, #DRx - Dadd Rx, RyRx - Rx + Rysub Rx, RyRx Rx, 001: R1 - Rx, . , 111: R7 - Rx-YYY: select Ry value : 000: R0 - Ry, 001: R1 - Ry, . , 111: R7 - Ry-resources-8 16-bit registers: R0 R7 -1 16-bit ALU(Add or subtract)-Operation timing- 1 2 3 4 5 6-clk _|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_|-|_-Run _|-|_-DIn =-Done _|-|_ mv or mvi-procBus= Bus valid data-R7:0 = R7:0 valid data(delay a clock period) -Done _|-|_ add or sub-procBus=-R7:0 =R7:0 valid data(delay a clock period)- : Valid Instruction-: Valid Data-库、程序包的声明library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; -有符号的加减运算-处理器的输入和输出口entity simProc isgeneric (BusWidth : integer :=16);port(DIn : in std_logic_vector(BusWidth-1 downto 0); -16-bit data input portnARst : in std_logic ; -reset signal, low activeclk : in std_logic ; -clock input, can be obtained through 50 MHZ frequency -divider or through a button of DE2_115 boardRun: in std_logic ; -high active, Keep at least one clock cycleDone: out std_logic; -operation over, high activeprocBus: out std_logic_vector(BusWidth-1 downto 0); -output processor bus statIndic: out std_logic_vector(2 downto 0) -state indicators);end simProc ; architecture arch of simProc issignal highLevel : std_logic ;signal upCntClr: std_logic ;signal cntRst: std_logic ;signal procBusReg: std_logic_vector(BusWidth-1 downto 0); -register procBus -IR(2 downto 0): RY register-IR(5 downto 3): RX register-IR(8 downto 6): resprents Instruction signal IR: std_logic_vector(8 downto 0) ; -9-bit Instruction-mv : I=0 -mvi: I=1-add: I=2-sub: I=3signal I : std_logic_vector(2 downto 0); -Instruction registersignal Xreg, Yreg: std_logic_vector(7 downto 0) ;-Indicate which registers(R0 R7) -R0 R7 registerssignal R0, R1, R2, R3, R4, R5, R6, R7: std_logic_vector(BusWidth-1 downto 0) ;-write enable signals of R0 R7 registerssignal Rin: std_logic_vector(7 downto 0) ;- operand Rx and Rysignal Rx, Ry: std_logic_vector(BusWidth-1 downto 0) ;-A register which is used to save Rx operand when to add or subtract operationsignal A: std_logic_vector(BusWidth-1 downto 0) ;-write enable signal of A register-signal A_En: std_logic ; -Hidden in the program-save add/subtract result signal G: std_logic_vector(BusWidth-1 downto 0) ;-operation steps-signal Tstep_Q :std_logic_vector(1 downto 0) ;type Tstep is (Tstep_Q0, Tstep_Q1, Tstep_Q2, Tstep_Q3) ;signal currentOpState : std_logic_vector(1 downto 0) ;signal nextOpState : Tstep ;component dec3to8 isport(w: in std_logic_vector(2 downto 0); En: in std_logic; Y: out std_logic_vector(7 downto 0);end component ;component regn isgeneric (regWidth: integer:=16);port(R: in std_logic_vector(regWidth-1 downto 0); nRst: in std_logic ; Rin, clk: in std_logic ; Q: out std_logic_vector(regWidth-1 downto 0);end component ; begin-highLevel = 1 ;procBus = procBusReg ;-decode IR registerI BusWidth)port map(procBusReg, nARst, Rin(0), clk, R0);reg_1: regn generic map(regWidth = BusWidth)port map(procBusReg, nARst, Rin(1), clk, R1);reg_2: regn generic map(regWidth = BusWidth)port map(procBusReg, nARst, Rin(2), clk, R2);reg_3: regn generic map(regWidth = BusWidth)port map(procBusReg, nARst, Rin(3), clk, R3);reg_4: regn generic map(regWidth = BusWidth)port map(procBusReg, nARst, Rin(4), clk, R4);reg_5: regn generic map(regWidth = BusWidth)port map(procBusReg, nARst, Rin(5), clk, R5);reg_6: regn generic map(regWidth = BusWidth)port map(procBusReg, nARst, Rin(6), clk, R6);reg_7: regn generic map(regWidth = BusWidth)port map(procBusReg, nARst, Rin(7), clk, R7);-Determine which registers are used according to IR instructiuon-RxRx = R0 when IR(5 downto 3) = 000 elseR1 when IR(5 downto 3) = 001 elseR2 when IR(5 downto 3) = 010 elseR3 when IR(5 downto 3) = 011 elseR4 when IR(5 downto 3) = 100 elseR5 when IR(5 downto 3) = 101 elseR6 when IR(5 downto 3) = 110 elseR7 ;-RyRy = R0 when IR(2 downto 0) = 000 elseR1 when IR(2 downto 0) = 001 elseR2 when IR(2 downto 0) = 010 elseR3 when IR(2 downto 0) = 011 elseR4 when IR(2 downto 0) = 100 elseR5 when IR(2 downto 0) = 101 elseR6 when IR(2 downto 0) = 110 elseR7 ;-instruction operation state machineprocess(clk, nARst)beginif (nARst = 0) then currentOpState = 00 ;elsif clkevent and clk = 1 then- currentOpState -Tstep_Q :T0if (Run = 1) then currentOpState -Tstep_Q :T1 if (I = 010) or (I = 011) then currentOpState = 10 ;else currentOpState -Tstep_Q : T2 if (I = 010) or (I = 011) then currentOpState = 11 ;else currentOpState - nextOpState -Tstep_Q :T3 currentOpState = 00 ;end case ;end if ;end process;- instruction operationprocess(clk, nARst)beginif (nARst = 0) thenDone = 0 ;Rin 0) ;statIndic(0) = 0 ;procBusReg 0) ;IR 0) ;G 0) ;elsif clkevent and clk = 1 thencase currentOpState is-load instructionwhen 00 = -Tstep_Q :T0Done = 0 ;Rin 0) ;statIndic(0) = 0 ;if (Run = 1) then IR -Tstep_Q :T1 case I is when 000 = -mv Rx, Ry procBusReg = Ry ; Rin = Xreg ; Done -mvi Rx, #D procBusReg = DIn ; Rin = Xreg ; Done - add Rx, Ry A -input error statIndic(0) -Tstep_Q : T2 case I is when 000 | 001 = statIndic(0) - add Rx, Ry G - sub Rx, Ry G statIndic(0) -Tstep_Q :T3 case I is when 000 | 001 = statIndic(0) - add Rx, Ry or sub Rx, Ry procBusReg = G ; Rin = Xreg ; Done statIndic(0) statIndic(0) = 1 ;end case ;end if ;end process;statIndic(2 downto 1) Y Y = 00000010 ; . end case ;else Y = 00000000 ; end if ;end process;end arch ; 寄存器的实现regn-库、程序包的声明entity regn isgeneric (regWidth: integer:=16);port(R: in std_logic_vector(regWidth-1 downto 0); nRst: in std_logic ; Rin, clk: in std_logic ; Q: out std_logic_vector(regWidth-1 downto 0); end regn ;architecture arch of regn isbeginprocess(clk)beginif (clkevent and clk = 1) then if (nRst = 0) then Q 0) ; else. end if ;end if ; end process ;end arch ; 2、处理器核心电路的设计利用ModelSim完成对上述核心电路的仿真。需要仿真的功能完成如下一段功能代码。mvi R(n), #D1mvi R(n+5), #D2mv R(n+1), R(n+5)add R(n), R(n+5)sub R(n), R(n+1)其中n为学号的最后一位数字模8后的值,(n+5)及(n+1)则分别取其模7后的值;D1为学号的高4位数字,D2为学号的低4位数字,4位数当作16进制数,若学号中有非数字,则用0表示。如:学号为123407436787,则n=7,(n+5) mod 7=5, (n+1) mod 7=1, D1=0x1234, D2=0x6787library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all; entity simProc_tb isend simProc_tb ;architecture tb of simProc_tb is-define signalssignal DIn: std_logic_vector(15 downto 0) ;signal nARst: std_logic ;signal clk: std_logic ;signal Run: std_logic ;signal Done: std_logic ;signal procBus: std_logic_vector(15 downto 0) ;signal ErrorIndic: std_logic_vector(2 downto 0) ;signal opCnt: std_logic_vector(1 downto 0) ;signal simIRCnt: std_logic_vector(2 downto 0) ;-componentscomponent simProc is generic (BusWidth : integer :=16);port(DIn : in std_logic_vector(BusWidth-1 downto 0); -16-bit data input portnARst : in std_logic ; -reset signal, low activeClk : in std_logic ; -clock input, can be obtained through 50 MHZ frequency - divider or through a button of DE2_115 boardRun: in std_logic ; -high activeDone: out std_logic; -operatio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论