已阅读5页,还剩127页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VERILOGHDL实验指导书VERILOGHDL实验指导书VERILOGHDL实验指导书II前言随着电子设计自动化技术EDA以及可编程逻辑器件PLD发展,现场可编程门阵列FPGA的应用越来越广泛。VERILOGHDL作为FPGA的一门主要的编程语言,会逐渐成为主流的编程语言。越来越多的高校将会开设VERILOGHDL这门课程和相应的实验教学课程,但是目前合适的实验讲义比较缺乏。因此,设计和开发VERILOGHDL的实验内容并编写合适的实验讲义是非常有必要的。本设计主要是研究了基于FPGA设计和开发的VERILOGHDL的实验内容,包括了基础实验和综合实验。基础实验包含流水灯、数码管动态显示、表决器、四路抢答器、同步复位和异步复位、十六位键盘按键扫描、RS232协议收发数据七个实验,综合实验包含交通灯、数字计算器、SPI总线设计、LCD显示与抢答器的综合、基于VERILOG数字时钟的设计五个实验。每个实验都介绍了实验目的、内容、原理、程序设计方法、软硬件仿真结果、UCF配置文件。本设计的所有实验都是以VERILOGHDL为编程语言,在ISE软件上编程、仿真、调试,并在FPGA的开发板BASYS2上进行硬件仿真调试。本文给出了BASYS2开发板的设计流程。通过由基础实验到综合实验由浅入深地设计和开发,学生能加深对VERILOGHDL这门语言的理解,更好地学习并掌握VERILOGHDL实验内容的设计思路,熟悉并掌握FPGA的设计开发流程。这充分调动了学生的自主学习的积极性,培养了学生的创新思维和创新能力。关键字VERILOGHDL,实验,FPGA设计与开发VERILOGHDL实验指导书III目录目录III第一章绪论111课题研究背景及意义1111课题研究背景1112课题研究意义112本设计的主要工作2第二章VERILOGHDL和FPGA介绍321VERILOGHDL介绍322FPGA3221ISE简介4221开发板BASYS2简介5第三章基础实验631流水灯6311实验目的6312实验内容6313LED灯的显示原理6314程序设计6315BASYS2开发板开发流程832数码管动态显示22321实验目的22322实验内容22323实验原理22324程序设计23325仿真结果29326UCF配置文件3033表决器32331实验目的32332实验内容32333程序设计32334仿真结果33335UCF配置文件3434四路抢答器35341实验目的35VERILOGHDL实验指导书IV342实验内容35343程序设计35344仿真结果38345UCF配置文件3835同步复位和异步复位40351实验目的40352实验内容40353同步复位和异步复位的介绍40354程序设计40355仿真结果44356UCF配置文件4536十六位键盘按键扫描46361实验目的46362实验内容46363实验原理463631PMODKYPD子板介绍463632键盘扫描原理46364程序设计47365UCF配置文件4937RS232协议收发数据51371实验目的51372实验内容51373实验原理513731RS232协议介绍513732UART介绍52374程序设计533741波特率发生模块533742数据发送模块543743数据接收模块573744BIT调整模块593745数码管显示模块603746顶层模块60375实验仿真62376UCF配置文件63第四章综合实验7041交通灯70411实验目的70412实验内容70VERILOGHDL实验指导书V413程序设计70414仿真结果76415UCF配置文件7742数字计算器78421实验目的78422实验内容78423加法器的原理和实现78424程序设计80425仿真结果85426UCF配置文件8643SPI总线的设计88431实验目的88432实验内容88433实验原理88434程序设计884341主机发送模块924342从机接受模块944343顶层模块95435仿真结果9644LCD显示与抢答器的综合97441实验目的97442实验内容97443PMODCLS模块使用说明97444程序设计97445仿真结果117446UCF配置文件12845基于VERILOG数字时钟的设计120451实验目的120452实验内容120453程序设计1204531基础时钟分频模块1234532时钟计数模块1234533显示模块1254534顶层模块126454仿真结果127455UCF配置文件127附录ASCII码表129致谢131参考文献132VERILOGHDL实验指导书1第1章绪论11课题研究背景及意义111课题研究背景随着时代的进步和电子信息技术产业的飞速发展,现场可编程门阵列FPGA在数字电路设计、微处理器系统、DSP、通信以及专用集成电路APPLICATIONSPECIFICINTEGATEDCIRCUIT,ASIC设计等高科技领域应用广泛。根据当前发展的趋势,未来的FPGA势必将会取代大部分专用集成电路(ASIC)的市场,FPGA将成为21世纪最重要的高科技产业之一。VERILOGHDL是目前应用最广泛的硬件描述语言之一,VERILOGHDL也是进行FPGA设计的主要的编程语言。VERILOGHDL的兴起繁荣受到各高等院校的重视,越来越多的高校相继地开设VERILOGHDL这门课程并开设实验教学1。实验课的教学需要对VERILOGHDL这门课程进行实验内容的设计和开发,这离不开实验讲义的指导。112课题研究意义实验讲义在实验课中有着很多的优点,对于理论知识和上机实际操作兼顾的VERILOGHDL这门课程,实验讲义起到了很好的辅助的作用。但是目前较好的实验讲义比较缺乏。有些实验讲义只有实验目的、内容和要求,忽略了对实验原理,方法,怎么实现的步骤流程的介绍,从而使学生不能很好地达到对VERILOGHDL这门课程的内容的设计和开发的目标和要求,可能会导致一些对知识的误解等。同学们阅读了实验讲义可能只是大体知道这个实验要做什么,而不会学习掌握设计和开发VERILOGHDL这门语言的实现方法,这不利于学习者关于VERILOGHDL编程语言的整体构建设计思路。编写出适合VERILOGHDL实验教学的实验讲义正是本课题研究的意义所在。VERILOGHDL的实验讲义除了要介绍了其目的和内容要求,还应介绍实验原理和程序设计的思路和方法,给出了实验的软件仿真和硬件测试的结果。这不仅有利于学习者更好地掌握VERILOGHDL这门课程的实验内容设计和开发方法,更VERILOGHDL实验指导书2有利于引导学习者以后对FPGA设计开发的方法构思,激发他们对VERILOGHDL语言的兴趣爱好,培养他们的创新能力。12本设计的主要工作本次设计主要设计了十二个实验,七个基础实验流水灯、数码管动态显示、表决器、四路抢答器、同步复位和异步复位、十六位键盘按键扫描、RS232协议收发数据,五个综合实验交通灯、数字计算器、SPI总线设计、LCD显示与抢答器的综合、基于VERILOG数字时钟的设计。每个实验均要给出实验目的、内容、原理、程序设计方法、软硬件仿真结果、UCF配置文件。为了方便学生学习BASYS2开发板的使用,在第三章也给出了BASYS2的开发流程。VERILOGHDL实验指导书3第二章基础知识21VERILOGHDL介绍VERILOGHDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同的描述中显式地进行时序建模2。VERILOGHDL支持硬件设计的开发、验证、综合和测试;硬件数据之间的通信;硬件的设计、维护和修改。VERILOGHDL可以在各种抽象层次上描述数字电路,可以测试各种层次数字电路的行为,可以设计出正确有效的复杂电路结构,因此VERILOGHDL功能非常强大3。VERILOGHDL已经成为数字系统设计的首选语言,并成为综合、验证和布局布线技术的基础。使用VERILOGHDL设计数字系统是一种趋势,大到复杂的CPU,小到一些简单的逻辑门,而数字化是技术发展的趋势,因此未来VERILOGHDL的应用领域会越来越广。在设计中小型数字系统时,采用VERILOGHDL明显优于采用其他硬件描述语言。另外,VERILOGHDL的语法非常类似于C语言,比较灵活,容易学习和应用2,若有C的基础,能在一个比较短的时间内学习和掌握,因此许多大型公司都采用VERILOGHDL作为数字系统设计的首选语言。22FPGA221简介FPGAFIELDPROGRAMMABLEGATEARRAY即现场可编程门阵列,它是在PAL、EPLD、GAL等可编程器件的基础上进一步发展的产物。作为专业集成电路(ASIC领域中的一种半定制电路,FPGA既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA一般采用SRAM工艺,也有一些军品和宇航级FPGA采用FLASH或熔丝与反熔丝工艺。FPGA的集成度很高,其器件密度从数万门到数千万门不等,可以完VERILOGHDL实验指导书4成极其复杂的时序逻辑与组合逻辑电路功能,适用于高速、高密度的高端数字逻辑电路设计领域。其主要组成部分有可编程输入/输出单元、基本可编程逻辑单元、内嵌SRAM、丰富的布线资源、底层嵌入功能单元、内嵌专业单元等3。FPGA的设计流程就是利用EDA开发软件和编程工具对FPGA芯片进行开发的过程。FPGA的开发流程包括电路设计、设计输入、功能仿真、综合优化、综合后仿真、实现与布局布线、时序仿真与验证、板级仿真与验证,以及芯片编程与调试等主要步骤3。FPGA的使用非常灵活,对于同一片FPGA,通过配置不同的编程数据可以产生不同的电路功能。FPGA有很多的优势FPGA能让数字系统里可靠性高、效率高、小型化、功耗低。可以完全让用户自己调试配置来完成某些指定的功能。FPGA可以多次修改,在修改的过程中可以保持PCB电路板不变。只需要电脑修改程序即可,不必修改硬件电路,比较灵活轻松。很多工作只要在实验室就能完成了,能大大地提高效率,缩短时间,减少成本。因而FPGA的市场会扩大。目前,FPGA在通信、数据处理、网络、仪器、工业控制、军事和航空航天等众多领域已经得到了广泛应用3。221ISE简介进行FPGA开发需要专用的FPGA工具软件,功能包括FPGA程序的编写、综合、仿真及下载等。目前FPGA工具软件分为两类一类是FPGA芯片生产商直接提供的集成开发环境,如XILINX公司的FOUNDATIONSERIESISE简称ISE、ALTERA公司的QUARTUS,以及LATTICE公司为ISPLSI器件提供的ISPDESIGNEXPERT软件等;另一类是其他专业的EDA软件公司提供的辅助软件工具,统称为第三方软件。在本文是使用集成开发软件ISE进行FPGA设计。ISE软件是一个硬件设计工具,具有界面友好、操作简单的特点3。ISE的主要功能包括设计输入、综合、仿真、实现和下载。设计输入ISE提供的设计输入工具包括用于HDL代码输入和查看报告的ISE文本编辑器(THEISETEXTEDITOR,用于原理图编辑的工具ECS(THEENGINEERINGCAPTURESYSTEM,用于生成IPCORE的COREGENERATOR,用于状态机设计的STATECAD,以及用于约束文件的编辑CONSTRAINTEDITOR等。VERILOGHDL实验指导书5综合ISE的综合工具不但包含了XILINX自身提供的综合工具XST,同时还可以继承MENTORGRAPHICS公司的LEONARDOSPECTRUM和SYNPLICITY公司的SYNPLIFY。仿真ISE本身自带了一个具有图形化波形编辑功能的仿真工具HDLBENCHER,同时又提供了使用MODELTECH公司的MODELSIM进行仿真的接口。实现此功能包括了翻译、映射、布局布线灯等。下载下载功能包括了BITGEN,用于将布局布线后的设计文件转换为位流文件,还包括了IMPACT,功能是进行设备配置和通信,控制将程序烧写到FPGA芯片中4。221开发板BASYS2简介本文使用的FPGA开发板是BASYS2,BASYS2FPGA开发板是一个数字电路设计实现平台。BASYS2是围绕着一个SPARTAN3EFPGA芯片和一个ATMELAT90USBUSB控制器搭建的,它提供了完整、随时可以使用的硬件平台,并且它适合于从基本逻辑器件到复杂控制器件的各种主机电路。BASYS2上集成了大量的I/O设备和FPGA所需的支持电路,能够构建无数的设计而不需要其他器件。用户设计可以不局限于BASYS2本身,还可以通过四个标准的扩展连接口延伸到面包板、用户自定义电路板或PMOD模块中。VERILOGHDL实验指导书6第三章基础实验31流水灯311实验目的1学会用VERILOGHDL语言设计一个流水灯。2学习简单的时序电路的设计和硬件测试。3初步了解并学习VERILOGHDL实验内容的FPGA设计开发流程。4初步了解并学习ISE软件的使用方法,并学习如何编程下载调试到BASYS2开发板。312实验内容在BASYS2开发板上实现LED灯的花样流水的显示,如隔位显示,依次向左移位显示,依次向右移位显示,两边同时靠中间显示,在本例中,重点介绍了依次向左移动的方式。313LED灯的显示原理LED工作的主要参数是IF、VF。LED是一个PN结发光二极管。VF为正向电压,IF为正向电流,LED的发光亮度高低是与流过的电流成正比。LED的标称电压34V02V。当一个正向的电流通过LED时,LED就会发光。当阳极的电压高于阴极的电压时,LED就会有电流通过。当在LED上增添一个典型值为15V20V之间的电压时,LED就会有电流通过并发光5。314程序设计本设计只需要一个LED流水灯顶层模块就可以完成其功能输入信号CLK_50MHZ(主时钟信号),RST(重置信号)输出信号70LED(LED灯控制信号),CLK(分频后的时钟信号)BASYS2板子上提供的时钟信号CLK的默认频率为50MHZ,频率太快,不利于VERILOGHDL实验指导书7观察LED流水灯的显示,肉眼无法观察其灯的流动闪烁,所以需要对时钟频率进行分频,才能观察出LED灯的流动。在本例中,分频代码如下使用状态变量STATE来实现LED灯的自动循环显示,复位清零。代码如下所示LED灯的花样显示品种繁多,可以设计LED灯隔位显示,依次向左移位显示,依次向右移位显示,两边同时靠中间显示。本实验是点亮实验板上的LED灯,我们这里可以用一个OUTPUT来表示LED的输出端口,实验板上有8个LED灯,所以位宽是8位。点亮一个LED灯,只要给实验板上LED置1高电平而其他位为0。例如点亮第一个LED灯,则LED“LOC“G1“BANK3,SIGNALNAMELD7NET“LED“LOC“P4“BANK2,SIGNALNAMELD6NET“LED“LOC“N4“BANK2,SIGNALNAMELD5NET“LED“LOC“N5“BANK2,SIGNALNAMELD4NET“LED“LOC“P6“BANK2,SIGNALNAMELD3NET“LED“LOC“P7“BANK3,SIGNALNAMELD2NET“LED“LOC“M11“BANK2,SIGNALNAMELD1VERILOGHDL实验指导书20NET“LED“LOC“M5“BANK2,SIGNALNAMELD0UCF文件写好后,可以进行IMPLEMENTDESIGN完成布局布线工作,双击IMPLEMENTDESIGN或右键后单击RUN完成。确定无误后进行下一步(生成可编写文件)。如图324所示图324如果无误后,可以进行可编程文件的生成(BIT的文件),即是将要烧写的文件。如图325所示图3254DIGILENTADEPT下载工程由于这块板子是DIGILENT出的,其官网也给出了对应的下载软件配套USB下载线使用,此处我选择了PC模式,即直接下载到FPGA中去。找到BIT文件。VERILOGHDL实验指导书21如图326所示。图326会弹出WARNING,点YES,然后点PROGRAM,点YES。这样就可以下载到BASYS2板子上了。5硬件验证LED灯实现了花样流水显示,如图327、328所示图327图328VERILOGHDL实验指导书2232数码管动态显示321实验目的(1)熟悉VERILOGHDL状态机的使用;(2)熟悉数码管动态扫描思想;(3)基本掌握ISE软件的操作方法,熟悉整个FPGA的开发过程322实验内容设计一个数码管动态扫描程序,实现在四位数码管上动态循环显示“1”、“2”“3”“4”;323实验原理1数码管显示原理数码管分为七段和八段,八段比七段多一位小数点。七段和八段数码管一样,通过控制内部发光二极管亮灭来显示不同字形。数码管又分为共阴极和共阳极两种类型,共阴极就是将八个二极管的阴极连在一起,让其共同接地,给任何一个二极管的另一端高电平,它便能点亮。而共阳极就是将八个LED的阳极连在一起,给任意一个二极管的另一端低电平,它便能点亮。在本开发板上,使用的数码管是八段共阳极数码管。2设计原理根据实验目的,数码管循环显示的关键是各个状态之间的转换和进行适当的时间延时,根据状态机的设计规范,本次设计了四个状态之间的循环转化,其状态转化图及真值表如图329和表31所示VERILOGHDL实验指导书23图329状态数码管1数码管2数码管3数码管40010011111001001010000110110011001010010010100001101100110011001111110000011011001100110011111001001011110011001100111110010010100001101表31同时,在每一种状态下,由于四个数码管的显示数值不同,需要对四个数码管进行动态扫描来显示四个不同的数字。动态扫描的原理是先使第一个数码管亮1,其余三个数码管灭;接着使第二个数码管亮2,其余三个数码管灭;然后使第三个数码管亮3,其余三个数码管灭;最后使第四个数码管亮4,其余三个数码管灭;依照此规律使四个数码管轮流亮起,但每次只能有一个数码管亮。由于四个数码管之间的切换非常快,使得人看数码管仿佛是四个数码管从左到右依次同时显示1234,对于其他要显示的数字,可依次规律类推。324程序设计该实验所设计的模块分为三个部分,分频模块CLK_DIVIDE,状态切换模块DISPLAY_SHIFT以及动态扫描模块DISPLAY_SCAN。整体结构图如下状态10状态11状态01状态00VERILOGHDL实验指导书24(1)分频模块CLK_DIVIDE输入信号CLK_50MHZ主时钟信号,RST重置信号输出信号CLK_SCANDISPLAY_SCAN模块用的时钟信号,CLK_SHIFTDISPLAY_SHIFT模块用的时钟信号。功能分频模块对开发板上的主时钟信号(50MHZ)进行分频,分别输出一个周期为1S的DISPLAY_SHIFT信号和一个周期为1MS的DISPLAY_SCAN信号。(2)状态切换模块DISPLAY_SHIFTVERILOGHDL实验指导书25输入信号CLK_SHIFT时钟信号,RST重置信号输出信号DATAONE,DATATWO,DATATHREE,DATAFOUR四个位选信号功能在分频模块CLK_DIVIDE提供的移位时钟CLK_SHIFT控制下将四个数据移位,它产生的位选信号将会送到动态扫描模块显示。首先定义4个状态,代码如下PARAMETERSTATE_ONE2B00,STATE_TWO2B01,STATE_THREE2B10,STATE_FOUR2B11四个状态的切换代码如下(部分代码)CASECURRENT_STATESTATE_ONEBEGINDATAONE“LOC“K14“NET“DIGIT_SELECT“LOC“M13“NET“DIGIT_SELECT“LOC“J12“VERILOGHDL实验指导书31NET“DIGIT_SELECT“LOC“F12“NET“SEG_SELECT“LOC“L14“NET“SEG_SELECT“LOC“H12“NET“SEG_SELECT“LOC“N14“NET“SEG_SELECT“LOC“N11“NET“SEG_SELECT“LOC“P12“NET“SEG_SELECT“LOC“L13“NET“SEG_SELECT“LOC“M12“NET“SEG_SELECT“LOC“N13“VERILOGHDL实验指导书3233表决器331实验目的1、设计一个简单的三人表决器。2、学习并掌握数字电路建模方法。3、运用VERILOGHDL基本的IF、ELSE语句实现程序功能,并实现硬件写入及仿真。4、熟练掌握ISE软件的操作方法,熟悉整个FPGA的开发过程。332实验内容设计一个简单的三人表决器。设计实现一个3人判决电路,若3个人中有2人或者超过2人同意,则表决结果为通过;否则表决结果不通过。333程序设计1设计思路3人表决器的逻辑功能是以大多数人的意见为最终结果,即2人或以上的人同意就通过,否则不通过。设A、B、C(输入逻辑变量)分别代表3个人,设Y为表决结果。同意用高电平1表示,不同意用低电平0表示。当A、B、C三个中有2个为1,或者3个均为1时,Y为1,即表决结果为通过,否则Y为0,表决结果不通过。列真值表,如表32所示。表32三人表决器的真值表输入逻辑变量输出逻辑变量ABCY000000100100VERILOGHDL实验指导书3301111000101111011111根据真值表,列输出方程并化简得YABBCCA编程时采用三个BASYS2板子上的开关N3、E2、F3来表示A、B、C三人的意愿。如果对这次决议表示同意,每人就把自己相对应的开关拨上去,即高电平。如果对此次决议不同意,每人就把自己对应的开关拨下来,即低电平。表决结果Y用BASYS2板子上的LED(高电平亮)显示。如果对此决议只有一人或没人同意,则此次决议不通过,即LED灯不亮。如果对此决议有2人或3人同意,则此决议通过,即LED灯亮。通过上述分析,可实现3人表决器功能。程序说明MODULEDECISION_1A,B,C,YINPUTA,B,COUTPUTREGYALWAYSA,B,CIFAELSEY0ENDMODULEDECESION_1为模块名,输入A、B、C,输出Y,上述程序用到了行为建模方式建模,运用了ALWAYS语句、条件语句IF。334仿真结果软件仿真结果如下VERILOGHDL实验指导书34图332硬件仿真调试结果如下图333A和B都同意,判决通过335UCF配置文件PINASSIGNMENTFORLEDSNET“Y“LOC“G1“BANK3,SIGNALNAMELEDNET“A“LOC“N3“NET“B“LOC“E2“NET“C“LOC“F3“VERILOGHDL实验指导书3534四路抢答器341实验目的1、设计一个简单的四人抢答器电路。2、运用IF、ELSE语句实现程序功能,并实现硬件写入及仿真。3、了解并掌握FPGA简单的设计流程342实验内容设计一个四人抢答器,要求抢答器有复位功能,抢答情况下,第一人抢答后,其他人抢答无效,并在数码管上显示第几个人抢答到。343程序设计1设计思路本实验设计一个四人抢答器,要求具有四路抢答输入,能够识别第一个人抢答的信号,数码管显示最先抢答的号码。可以用BASYS2板子上的四个开关代表四个参赛人,当开关拨到高电平,表明抢答,开关拨到低电平,说明没有抢答。本设计没有定时模块,可设置一个主持人按键,按键要一直保持高电平来表明可以答题,可以用开关实现。主持人开关拨到高电平时,选手开始答题,拨到低电平时,选手答题无效。选手答题成功后,其对应的LED灯会亮。提出一个问题如果第一人抢答了,数码管显示其号码,但是当第二人抢答时,怎么样保证数码管显示的号码还是第一人的,而不是其他人的呢解决这个问题需要本设计有一个锁存功能,即参赛选手拨动开关后,锁存相应的号码,可以用一个LED灯来表示是否有人抢答,即锁存触发后,LED灯亮,其他人不能抢答,抢答也无效。数码管显示部分,只需显示最先抢答选手的号码,所以只需给一个数码管输入数据即可。同时设定一个复位按钮,具有清零功能。VERILOGHDL实验指导书36程序说明输入信号CLK时钟信号,RST重置信号,I1选手1的输入,I2选手2的输入,I3选手3的输入,I4选手4的输入,I5主持人的控制键,高电平表示允许抢答输出信号LED1指示选手1是否抢答成功,LED2指示选手2是否抢答成功,LED3指示选手3是否抢答成功,LED4指示选手4是否抢答成功,FLAG指示是否已有人抢答成功,SEG_SELECT数码管段选信号,DIGIT_SELECT数码管位选信号,程序主要部分如下/只需用到一个数码管,所以使位选信号为0111,只点亮第一个数码管ASSIGNDIGIT_SELECT4B0111ALWAYSPOSEDGECLKORPOSEDGERSTBEGINIFRSTBEGINLED1“LOC“L14“NET“SEG_SELECT“LOC“H12“NET“SEG_SELECT“LOC“N14“NET“SEG_SELECT“LOC“N11“NET“SEG_SELECT“LOC“P12“NET“SEG_SELECT“LOC“L13“NET“SEG_SELECT“LOC“M12“NET“SEG_SELECT“LOC“N13“NET“DIGIT_SELECT“LOC“K14“NET“DIGIT_SELECT“LOC“M13“NET“DIGIT_SELECT“LOC“J12“NET“DIGIT_SELECT“LOC“F12“NET“CLK“LOC“B8“NET“RST“LOC“G12“VERILOGHDL实验指导书4035同步复位和异步复位351实验目的1理解和掌握同步复位和异步复位的意义和差别2学会并掌握用VERILOGHDL语言编写同步复位和异步复位代码3了解并掌握FPGA的设计开发流程,熟练使用ISE软件352实验内容编写同步复位和异步复位的VERILOGHDL代码,在BASYS2板子上区别这两种复位。353同步复位和异步复位的介绍在VERILOGHDL的数字逻辑设计过程中,复位操作是任何一个模块都避免不了的环节。复位操作最主要的功能是对系统内部一些寄存器变量进行初始化赋值,我们知道,VERILOGHDL中一个REG类型的变量如果不进行初始化它的值是一个未知(X)类型,这个类型和任何数据进行运算后得到的结果仍然是未知(X)类型,这可能会导致数字逻辑的输出得不到我们想要的结果,因此,在VERILOGHDL的设计中,对任何一个寄存器使用前最好都要进行一个复位操作,这样才能够得到正确的结果。在VERILOGHDL中,复位操作有两种类别同步复位和异步复位。所谓“同步”和“异步”,是和输入时钟相对应的。同步复位是指复位信号有效后,系统不立即复位,而是等待时钟有效沿到来的时候才进行复位操作,即复位信号跟时钟是同步的;异步复位是指复位信号不等待有效时钟沿,而是在复位信号有效后立即进行复位操作,即复位信号跟时钟是不同步的。VERILOGHDL实验指导书41354程序设计根据同步复位和异步复位的差别,我们可以利用数码管显示区别它们。即设置同步复位和异步复位相对应的复位键,数码管显示任意数值。当按下复位键时,不等待有效时钟沿,数码管的数值立即清零的,就是异步复位。反之,若数码管的数值不立即清零,而是等待时钟有效沿到来的时候才进行复位操作,则属于同步复位。本实验可以设计成由四个模块组成,即分频模块、同步复位和异步复位模块、译码显示模块、数码管动态扫描模块。1分频模块分频模块主要是为动态扫描模块和同步复位与异步复位模块内的计数分别提供两种合适频率的信号,来使得实验现象更容易观察。具体原理与代码参考数码管动态显示一章的内容。2同步复位和异步复位模块1同步复位模块输入信号SYNCHRORST同步复位信号CLK时钟信号输出信号SEG_COUNT1计数器1输出同步复位模块的部分VERILOGHDL代码如下ALWAYSPOSEDGECLKBEGINIFSYNCHRORSTBEGINSEG_COUNT14B1001NET“SEG_SELECT“LOC“H12“NET“SEG_SELECT“LOC“N14“NET“SEG_SELECT“LOC“N11“NET“SEG_SELECT“LOC“P12“NET“SEG_SELECT“LOC“L13“NET“SEG_SELECT“LOC“M12“NET“SEG_SELECT“LOC“N13“NET“DIGIT_SELECT“LOC“K14“NET“DIGIT_SELECT“LOC“M13“NET“DIGIT_SELECT“LOC“J12“NET“DIGIT_SELECT“LOC“F12“VERILOGHDL实验指导书4636十六位键盘按键扫描361实验目的1理解和掌握键盘扫描的原理。2学会并掌握用VERILOGHDL语言编写键盘扫描代码3了解并掌握FPGA的设计开发流程,熟练使用ISE软件362实验内容本课题主要实现一个键盘扫描功能,能够正确检测按下的按键,并且能够实现按键消抖功能,然后将按下的按键值输出显示到LED数码管上。363实验原理3631PMODKYPD子板介绍PMODKYPD是一个十六位按键的子板模块,其中包含了从十六进制0到F的十六位按键。并配有双排62只IO引脚,能够方便地连接到XILINX提供的BASYS2主板上。本课题主要使用这个子板进行按键检测,并将它输出显示到LED七段数码管上。PMODKYPD的实物图和原理图如图34所示,键盘的输入输出引脚总共分为四行四列,其中每一行通过一个上拉电阻上拉至VCC,MCU的IO管脚分别接到四个行线和四个列线上。当没有按键按下的时候,键盘对应的四行输出为逻辑1电平;当某一个按键按下时,该按键所处位置的行线和对应的列线就会导通,如果我们给每一根列线送低电平,则对应按键按下的那一行电平就会被列线拉低至逻辑0,这样我们就可以通过检测行线是否有逻辑0电平来判断当前是否有按键按下。当没有按键按下时,所有行线均上拉至VCC,检测到的电平为高电平,当检测到某一行的电平不为1时,我们就可以确定该行有按键按下了。但是,由于每一行对应有四个按键,我们无法只通过行线来判断究竟是哪一列的按键按下了,所以程序由此会进入到按键扫描模块中进行扫描。VERILOGHDL实验指导书47图34PMODKYPD键盘模块的实物(左)图和原理图(右)3632键盘扫描原理按键扫描的原理如下,由于按键按下的那一行跟对应的那一列是导通的,按键所处的列的电平能够直接影响到对应行的电平变化,当该列的电平为0时会将该行的电平拉低,当该列的电平为高电平时,会将该行的电平拉高,我们可以运用这个机制来实现键盘的按键检测。当检测到某一行的电平值不为1时,进入到按键扫描程序中。在这个模块中,程序会通过一个循环依次给四个列线分别送逻辑1电平,然后在行线检测四个行线是否全部变为逻辑1,如果发现某一列的电平变化使得对应行的电平跟随变化,那么我们就可以肯定就是这一列的按键按下;反之,如果该列的电平变化不会影响到这行的电平变化,则可以证明该列和该行的物理连接是断开的,即它们之间的电平不会影响到彼此,由此可以推出这一列的按键没有按下。364程序设计通过前面的分析,我们已经对键盘扫描的原理和实现过程有了大概的了解,接下来我们要将我们的想法付诸行动。由于PMODKYPD子板对应的输入管脚有62根,除去四根电源/地,还剩下八根,即四根行线和四根列线,在BASYS2的开发板上,每个插槽配有六个插口,其中包含了一根电源口和一根地口,因此我们至少需要定义八个引脚提供给键盘模块。4要实现键盘按键的检测,我们需要实事检测四根行线的电平变化,当有其中一根行线的电平变为低电平时,启动键盘扫描程序,获取到按键值。要能够正确地VERILOGHDL实验指导书48判断是那一列的按键按下,我们还必须设计一个循环过程,能够逐一地给每一列置位高电平然后检测行线的电平变化,我们可以使用一个状态机来控制扫描循环的过程,把扫描四个列线对应成为四个不同的状态,在扫描时钟的驱动下切换状态机的当前状态以完成相应的工作10。输入信号CLK,RST,ROW;输出信号COLUMN,KEY_RESULT;其中,CLK,RST为系统时钟和系统复位,ROW对应键盘根行线,COLUMN对应键盘的四根列线,KEY_RESULT为扫描输出。由于本课题比较简单,所以键盘扫描的过程放到一个单独的模块中实现。在这个模块中对应三个独立的进程第一,实时检测四根行线的电平变化,启动或者停止列线扫描状态机;第二,列线扫描状态机,在时钟的驱动下轮询每一个列线,分别置位,检测并找到能够影响行线电平的状态,将该状态的行线列线的电平组合输出;第三,键码译码模块,当状态机输出一个行线列线的编码时,程序是不知道到底按下了哪个按键的,这就需要我们另外设计一个译码模块将状态机输出的编码译码成为相应的按键值编码,状态机输出的八位数字可以看作一个经纬度坐标,在它们的配合下我们可以唯一地确定键盘上的一个按键。我们可以事先编辑好一个ROM查找表,规定好每个键码和键值的映射关系,存储到模块中,当状态机输出一个键码时,我们就可以方便地获取到对应的键值。图341是键盘消抖模块的关键代码。VERILOGHDL实验指导书49图341键盘消抖程序关键代码键盘消抖程序,机械键盘按下开始时或多或少地会有一些抖动产生,这就使得按键检测模块可能会检测到多次按键按下,一个可行的解决办法是当有按键按下时,程序不立刻响应按键,而是延时一定时间,待按键稳定后开始扫描。当检测到行线中有为零的输入时,模块在扫描时钟的控制下开始计数,当计数到达最大值,将内部的一个寄存器标志位(KEYFLAG)置位,通知状态机接收到一个稳定的按键输入,开始扫描。365UCF配置文件NET“CLK“LOC“B8“NET“RESET“LOC“G12“NET“ROW“LOC“C12“NET“ROW“LOC“A13“NET“ROW“LOC“C13“NET“ROW“LOC“D12“NET“COLUMN“LOC“A9“NET“COLUMN“LOC“B9“VERILOGHDL实验指导书50NET“COLUMN“LOC“A10“NET“COLUMN“LOC“C9“NET“KEY_RESULT“LOC“L14“NET“KEY_RESULT“LOC“H12“NET“KEY_RESULT“LOC“N14“NET“KEY_RESULT“LOC“N11“NET“KEY_RESULT“LOC“P12“NET“KEY_RESULT“LOC“L13“NET“KEY_RESULT“LOC“M12“NET“KEY_RESULT“LOC“N13“VERILOGHDL实验指导书5137RS232协议收发数据371实验目的1理解和掌握RS232协议的基本内容。2学会并掌握用VERILOGHDL语言编写遵守RS232协议的数据收发。3了解并掌握FPGA的设计开发流程,熟练使用ISE软件。372实验内容本课题主要实现一个UART发送/接收模块,能够通过蓝牙模块PMODBT2遵循RS232协议的标准与PC上的上位机发送和接收数据,具体分为两个内容(1)每按下一次发送按键,FPGA向PC发送一次“HELLO”字符;(2)FPGA接收PC发送的09之间的数字并将它显示在数码管上。373实验原理3731RS232协议介绍RS232是个人计算机上使用的通讯接口之一,由电子工业协会制定的异步传输标准接口,所谓“异步”是指其在进行数据通讯的时候针对数据交换的每一方来说,接受数据和发送数据可以在时间域上是同时的,即它们是互不干扰的独立的过程。RS232是一个串行的数据通信接口,数据低位在前、高位在后,通过内部的一个移位寄存器进行移位输出。每一个数据包包含十个BIT位,也可以包含更多位(例如奇偶校验位等),可以根据具体的要求设计VERILOG的代码。RS232接口通常有9个引脚或者25个引脚,最少可以支持三线通信,即一根地线(GND),一根发送数据引脚(TXD)和一根数据接收引脚(RXD)。它们是RS232协议最重要的三根信号线,物理连接上发送方的TXD引脚应该连接到接收方的RXD12。RS232的工作时序比较简单。当接口处于空闲状态时,TXD和RXD引脚的电平都处于高电平状态;当有一个新数据到来时,发送方首先发送一个起始位给接收端,通常数据的起始位规定为TTL逻辑低电平(0),当接收方的检测到这个VERILOGHDL实验指导书52低电平跳变的时候,就会进入到接收状态,同时内部的状态机开始运行,控制移位寄存器的数据接收;接下来进入到数据内容的发送,发送方会将内部寄存器中的数据通过移位寄存器由低到高依次通过TXD引脚发送给接收端,在这个过程中,同时计算当前发送的数据位数以控制状态机的运行;当一个字节发送完毕,发送方会发送一个结束位给接收端以告诉接受段一个字节发送完毕,结束位为逻辑高电平(1),接收端接受到结束位,则停止数据的接受,并将接收到的数据传给MCU。RS232主机和从机之间没有同步时钟控制,所以它们之间必须要有相同的波特率才能保证数据通信的顺利完成。RS232规定的波特率有以下几种50、75、100、150、300、600、1200、4800、9600、19200、38400。3732UART介绍UART(UNIVERSALASYNCHRONOUSRECEIVER/TRANSMITTER)全称通用异步收发传输器,也是电脑硬件的一部分,它是异步串行通信口的总称,包括了RS232、RS499、RS423、RS422和RS485等标准规范。UART是用在串行通信和并行通信之间的传输转换接口,它的数据接收和发送能够同时进行,即它是全双工的串行通信接口。本课题讨论的是基于RS232协议的UART数据收发接口的设计,它的工作时序符合RS232的时序,内部包含了一个波特率发生器模块,产生用于控制数据收发的时钟信号,UART的数据发送速度取决于波特率的大小,它的时序如图342所示。起始位LSBMSB奇偶校验位停止位空闲位7位有效数据发送第N位数据图342UART数据传输格式其中各个BI位的意义如下起始位一个TTL低电平信号,表示一个字节数据的开始。数据位可以是58位BIT位。例如如ASCII码(7位),扩展BCD码(8位)。数据在UART中低位在前、高位在后进行传输。校验位标识当前传输的字节中TTL逻辑高电平的BIT数,用来判断数据传输VERILOGHDL实验指导书53是否正确。校验位的格式有两种,分别是“奇校验”和“偶校验”。停止位标识一个字节数据的结束,通常为TTL高电平。持续时间可以是1位、15位或者2位的高电平。空闲位当数据发送完毕后,数据线上的电平变为TTL高电平,表示数据线处于空闲状态,为下一次数据传输做准备。374程序设计RS232工作时序虽然简单,但是要实现这个串行接口可没那么容易,通信双方没有同步时钟的控制,两边的波特率必须控制在相同的速率下才能保证数据的正确收发。为了正确的控制数据每一个字节能够正确地被收发,可以在内部设置一个计数变量,计算当前发送/接受到的BIT位数,内部发送/接受状态机通过检测内部计数变量的变化来控制状态机的运行状态。同时,由于蓝牙使用的是PMODBT2模块,硬件上也要做一些准备,将模块上的JP4短接,其余不处理,这样就选择了预设模式,比特率9600。将16号引脚接到FPGA板上的JA口。3741波特率发生模块输入信号CLK,RST;输出信号CLK_DIV;波特率时钟。由于UART发送/接收的过程中是不发送同步时钟的,所以发送和接收的双方必须控制两边的波特率同步。BASYS2的开发板提供了三个不同频率的时钟,分别是100HZ、50HZ和25HZ,默认是50HZ的时钟,在本次实验中,我们的通信波特率选择的是9600,我们可以通过一个时钟分频模块来产生我们想要的波特率,实现可以参考如下代码PARAMETERCLK_COUNT_MAX13D2604ALWAYSPOSEDGECLKBEGINVERILOGHDL实验指导书54IFRST1B1BEGINCLK_COUNT“LOC“L14“NET“SEG_SELECT“LOC“H12“NET“SEG_SELECT“LOC“N14“NET“SEG_SELECT“LOC“N11“NET“SEG_SELECT“LOC“P12“NET“SEG_SELECT“LOC“L13“NET“SEG_SELECT“LOC“M12“NET“SEG_SELECT“LOC“N13“NET“DIGIT_SELECT“LOC“F12“NET“DIGIT_SELECT“LOC“J12“NET“DIGIT_SELECT“LOC“M13“NET“DIGIT_SELECT“LOC“K14“NET“LED“LOC“G1“NET“LED“LOC“P4“NET“LED“LOC“N4“NET“LED“LOC“N5“NET“LED“LOC“P6“NET“LED“LOC“P7“NET“LED“LOC“M11“NET“LED“LOC“M5“VERILOGHDL实验指导书64第四章综合实验41交通灯411实验目的1设计一个基于FPGA的交通灯。2熟练掌握VERILOGHDL语言,将状态机和计数器分频综合运用。3熟练掌握ISE软件的操作方法和整个FPGA的开发过程。412实验内容设计一个基于FPGA十字路口的交通灯,假设交通灯处于南北和东西两条大街的十字路口上,两个方向分别设置红灯、黄灯、绿灯,每个方向设置时间,用来指挥路人和车辆安全有序的行驶。413程序设计根据交通灯的规则,本实验设计可分为三个模块交通灯控制模块、时钟分频模块、顶层模块。其中交通灯控制模块包含了计数的部分。1交通灯控制模块输入信号CLK,CLR输出信号50LIGHTS本实验可以用FPGA开发板上的LED灯LIGHTS50来表示交通灯中的红、黄、绿3种颜色信号。如图41所示VERILOGHDL实验指导书65图416个LED代表一组信号灯并且按一定的顺序、时延来点亮LED,如表所示。如果我们用频率为3HZ的时钟来驱动电路,那么1S时延能通过停留3个时钟来的到。以此类推,停留15个时钟就能得到5S钟的时延。表41交通灯状态表状态南北大街东西大街时延(S012345绿黄红红红红红红红绿黄红511511交通灯对应状态的程序代码是ALWAYSBEGINVERILOGHDL实验指导书66CASESTATES0LIGHTS6B100001S1LIGHTS6B100010S2LIGHTS6B100100S3LIGHTS6B001100S4LIGHTS6B010100S5LIGHTS6B100100DEFAULTLIGHTS6B100001ENDCASEEND在S0S5这6个状态中,南北方向的交通灯的工作顺序是绿灯黄灯红灯红灯红灯红灯,该方向的灯亮持续时间为绿灯时间为15秒,红灯时间为24秒,黄灯时间为3秒。周期是42秒。东西方向的交通灯的工作顺序是红灯红灯红灯绿灯黄灯红灯,该方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海邦德职业技术学院《刑诉法》2025-2026学年期末试卷
- 石家庄幼儿师范高等专科学校《教育学基础》2025-2026学年期末试卷
- 山西中医药大学《幼儿音乐教育与活动指导》2025-2026学年期末试卷
- 山西警官职业学院《教育学基础》2025-2026学年期末试卷
- 沈阳医学院《体内药物分析》2025-2026学年期末试卷
- 上海师范大学天华学院《国际贸易理论》2025-2026学年期末试卷
- 上海民远职业技术学院《网络与新媒体导论》2025-2026学年期末试卷
- 上海浦东职业技术学院《刑诉法》2025-2026学年期末试卷
- 2026年部编版语文四年级下册期末测试题附答案(三)
- Butyl-benzoate-Standard-生命科学试剂-MCE
- 沥青路面施工方案
- 《心脏急危重症诊治》课件
- 文旅新媒体运营 课件 第4章 文旅新媒体内容运营
- 村集体草场流转方案
- 小学生道德与法治评价方案+评价表
- 厂房镀锌圆形风管施工方案
- JB-T 13101-2017 机床 高速回转油缸
- T-SCTSS 16-2023 珠兰花茶团体标准
- 2023年上海松江区卫生系统事业单位公开招聘笔试《行政职业能力测验》模拟试卷答案详解版
- 成语故事草木皆兵课件
- 5G通信中的射频微波集成电路设计
评论
0/150
提交评论