微电子课程设计实验报告一、设计要求:应用VHDL或Verilog硬件描述语言进行设计,在ISE5.2开发工具上选择Xinlix公司的FPGA芯片完成整个电路的设计工作,包括文件输入、编译、功能仿真、综合、时序仿真和下载实现等。3道题必须在实验箱上进行下载后验证。二、设计报告内容要求要有实验题目、设计思路、设计流程、硬件描述语言代码、电路图、时序仿真图和结果分析等。用专用的报告纸手写报告,正文页必须在10页以上,仿真图打印出来粘贴在报告上,编程代码写在附页上。若有报告雷同,报告成绩为零分。三、设计实验内容1、某晚会用红绿黄3组彩灯采光,3组灯亮的顺序是:红灯亮—绿灯亮—黄灯亮—红绿灯亮—绿黄灯亮—黄红灯亮—全亮—全暗。重复以上过程,试设计这三组灯的控制电路。输入时钟频率为512Hz,灯亮的时间在1—4秒之间,可以自由控制。电路中以“1”代表灯亮,以“0”代表灯灭。1、2、奇偶校验器系统的功能是对八位二进制数据及其奇偶校验位的输入进行校验,输出正确的奇、偶校验位。ODD_IN与EVEN_IN是控制奇校验和偶校验功能输入,IN0到IN7是七位数据及一位校验位数据输入,IN_READY表示输入数据已经准备好,可以处理,当OUT_REQ输入表示要求输出数据,CLK端口用于接收时钟信号,支持系统的时钟上升沿同步。当输出端口OUT_READY输出信号有效时,表示输出数据已经准备好,可以为下级电路使用,ODD_OUT与EVEN_OUT用来输出正确的奇偶校验位。上述控制端口均为高电平有效。图奇偶校验器示意图3.设计一个交通灯管理系统。其功能如下:(1)公路上无车时,主干道绿灯亮,公路红灯亮(2)公路上有车时,传感器输出C=1,且主干道通车时间超过最短时间,主干道交通灯由绿→黄→红,公路交通灯由红→绿;(3)公路上无车,或有车,且公路通车时间超过最长时间,则主干道交通灯由红→绿,公路交通灯由绿→黄→红;(4)假设公路绿灯亮的最长时间等于主干道绿灯亮的最短时间,都为16秒,若计时到E=1;黄灯亮的时间设为4秒,若计时到F=1。当启动信号S=1时,下一时钟有效沿到,定时器清零,重新开始计时。图十字路口交通灯和传感器示意图4、设计一种4×4位高速乘法器。乘法结果通过数码管显示出来,要求带有启动和复位功能。四、实验内容一源程序libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;--Uncommentthefollowinglinestousethedeclarationsthatare--providedforinstantiatingXilinxprimitivecomponents.--libraryUNISIM;--useUNISIM.VComponents.all;entityjlp1isPort(clk,rst:instd_logic;red,green,yellow:outstd_logic);endjlp1;architectureBehavioralofjlp1issignalcount:integerrange1to80;beginp1:process(clk)beginifrst='1'thencount=1;elsifclk'eventandclk='1'thenifcount=80thencount=1;elsecount=count+1;endif;endif;endprocessp1;p2:process(clk)beginifcount=10thenred='1';green='0';yellow='0';elsifcount=20thenred='0';green='1';yellow='0';elsifcount=30thenred='0';green='0';yellow='1';elsifcount=40thenred='1';green='1';yellow='0';elsifcount=50thenred='0';green='1';yellow='1';elsifcount=60thenred='1';green='0';yellow='1';elsifcount=70thenred='1';green='1';yellow='1';elsered='0';green='0';yellow='0';endif;endprocessp2;endBehavioral;四-2设计思路读完题目后,首先确定要定义一个时钟引脚,一个复位引脚,根据题目要求,还要定义三个彩灯引脚,我采用计数来控制彩灯的灯亮时间四-3设计流程当复位信号等于1时,灯全部不亮,计数器值等于1,如果复位信号等于0,当时钟上升来到时,计数器开始计数,当记到10的时候,红灯亮,当计数记到20时,绿灯亮,当计数记到30时,黄灯亮,当计数记到40时,红绿灯亮,当计数记到50时,绿黄灯亮,到计数记到60时,黄红灯亮,当计数计到70时,灯全亮,当计数计到80时,全暗,超过80则返回初始位置四-3电路图四-4时序仿真图由上图我们可以看出,这里我的时间设置为时钟高电平为50ms,低电平为50ms,这样一个时钟周期就为100ms,这样我计数计10次,刚好为1s,刚好满足题目的要求四-5结果分析由上图我们可以看出,当复位信号等于1时,等信号全为0,当复位信号等于0时,计数器正常工作,由上图可以看出在1s内红灯亮,超过1s-2s时绿灯亮,2-3s内黄灯亮,3-4s红绿灯亮4-5s绿黄灯亮,5-6s黄红灯亮,6-7s全亮,7-8s全暗,超过8s以后又从0开始五-实验二源程序libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;--Uncommentthefollowinglinestousethedeclarationsthatare--providedforinstantiatingXilinxprimitivecomponents.--libraryUNISIM;--useUNISIM.VComponents.all;entityjlp2isport(EVEN_IN,ODD_IN,IN_READY,OUT_REQ:inbit;In0,In1,In2,In3:inbit;In4,In5,In6,In7:inbit;CLK:inbit;OUT_READY,ODD_OUT,EVEN_OUT:outbit);endjlp2;architectureBehavioralofjlp2isbeginp1:process(CLK)beginifIN_READY='1'andOUT_REQ='1'thenifCLK'eventandCLK='1'thenifEVEN_IN='0'andODD_IN='1'then--ODD_OUT=IN0XORIN1XORIN2XORIN3XORIN4XORIN5XORIN6XORIN7;EVEN_OUT='0';OUT_READY='1';elsifEVEN_IN='1'ANDODD_IN='0'thenEVEN_OUT=not(IN0XORIN1XORIN2XORIN3XORIN4XORIN5XORIN6XORIN7);ODD_OUT='0';OUT_READY='1';elseOUT_READY='0';endif;endif;ENDIF;ENDprocessp1;endBehavioral;五-2设计思路根据题目意思首先想到用异或来实现对8位二进制数的奇偶校验的判断,我采用分开实验奇偶的判断,ODD_IN与EVEN_IN是控制奇校验和偶校验功能输入,IN0到IN7是七位数据及一位校验位数据输入IN_READY表示输入数据已经准备好,可以处理,当OUT_REQ输入表示要求输出数据,CLK端口用于接收时钟信号,支持系统的时钟上升沿同步。当输出端口OUT_READY输出信号有效时,表示输出数据已经准备好,可以为下级电路使用,ODD_OUT与EVEN_OUT用来输出正确的奇偶校验位,五-3设计流程首先时钟上升沿才有效,开始输入8位二进制数据,如果ODD_IN端口等于1,EVEN_IN等于0,则奇校验有效,程序开始对8位二进制数进行奇校验判断,如果8位二进制数1的个数为奇数个,则输出为1,f否则为0,如果ODD_IN端口等于0,EVEN_IN等于1,则偶校验有效,如果8位二进制数为偶数个,则输出为1,否则为0五-4实验电路图五-5实验时序仿真图由上图可以看出,我这里设计的是奇校验偶检验有效五-6结果分析由上第一个时序仿真图可以看出,奇校验有效,in0-in7端口只有一个1,所以最后结果输出为1由上第一个时序仿真图可以看出,偶校验有效,in0-in7端口有四个端口为1,所以最后结果输出为1六实验三源程序libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;--Uncommentthefollowinglinestousethedeclarationsthatare--providedforinstantiatingXilinxprimitivecomponents.--libraryUNISIM;--useUNISIM.VComponents.all;entityjlp3isPort(clk,rst,C:instd_logic;lighta:outstd_logic_vector(2downto0);--主干道红绿黄灯lightb:outstd_logic_vector(2downto0);--公路Ya1,Ya0:outstd_logic_vector(3downto0);--主干道倒计时Yb1,Yb0:outstd_logic_vector(3downto0)--公路);endjlp3;architectureBehavioralofjlp3issignalcount:integerrange1to40:=1;signalcnta:integerrange1to20:=16;signalcntb:integerrange1to20:=20;signalcnta1,cnta0,cntb1,cntb0:integerrange0to9;--主干道倒计时十位,个位,--公路倒计时十位,个位beginp1:process(clk,rst,C)beginifclk'eventandclk='1'thenifrst='1'thencount=1;lighta=000;lightb=000;elsifC='0'then--公路上无车count=1;lighta=010;--主干道绿灯亮lightb=100;--公路红灯亮else--公路有车ifcount=16then–小于等于16Scnta=17-count;--主倒计16scntb=21-count;--公倒计时20秒lighta=010;--主干道绿灯亮lightb=100;--公路红灯亮elsifcount=20then—小于等于20秒16cnta=21-count;--主倒计时4秒cntb=21-count;--公倒计时4秒lighta=001;--主干道黄灯亮lightb=100;--公路红灯亮elsifcount=36then–小于等于36秒20cnta=41-count;--主倒计时20秒cntb=37-count;--公倒计时16秒lighta=100;--主红灯亮lightb=010;--公绿灯亮elsecnta=41-count;--