数字电子基础技术应用 3_第1页
数字电子基础技术应用 3_第2页
数字电子基础技术应用 3_第3页
数字电子基础技术应用 3_第4页
数字电子基础技术应用 3_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

6Verilog

硬件描述语言

以及EGO1ARTIX-7介绍西安交通大学电气工程学院宁改娣

博士

教授门电路IC设计电路举例

假设要实现(不要求化简):2026/1/30PLDINTRODUCTION可以想象,使用数以百计的不同逻辑门实现复杂数字逻辑变得非常困难,除了手头要有需要的逻辑门,PCB的面积也将会非常大、功耗和可靠性问题突出。Thencame“programmablelogic”—theideathatimplementingalllogicdesignsusing7400-or4000-seriesICsisnolongerneeded.可编程逻辑器件(ProgrammableLogicDevices,PLD)主流是FPGA。PLD内部集成了大量资源,出厂后可以实现用户需要的各种不同功能,第五章介绍,不讲结构也可以用2026/1/30PLD设计举例(实验室早期平台)用很少的PLD资源实现了2026/1/30FPGAdesignflow原理图和VHDL实现X=AB2026/1/30PLD及平台左84引脚右475脚一张白纸2026/1/306.1硬件描述语言简介HardwareDescriptionLanguage,HDL是对硬件电路及其执行过程的描述。用软件方法对硬件的结构和运行进行建模。所以程序设计过程也叫电路建模过程。HDL有上百种,成为IEEE的HDL共有2种:VHDL,1987成为IEEE标准,美国军方组织开发

即VHSICHDL,VHSIC——VeryHighSpeedIntegratedCircuit)VerilogHDL,1995成为IEEE标准,民间开发HDL为适应新的情况,迅速发展新的硬件描述语言,像Superlog、SystemC、Cynlib

C++、SystemVerilog等等。Xilinx-7系列的综合支持C、C++、SystemC等高级语言。2026/1/30VHDL就是超高速集成电路硬件描述语言。VHDL的主要优点是:①是一种高层次的硬件描述语言,与器件的具体特性无关,②可移植性好。Verilog语法类似于C语言。可以灵活、简洁地进行各种级别的逻辑设计,方便、快速地进行数字逻辑系统的仿真验证、时序分析和逻辑综合。Verilog硬件描述语言的优点是:书写简洁,结构清晰,容易掌握,便于自学。2001年发布的Verilog

HDL

1364-2001标准中加入了VerilogHDL-A标准,使Verilog有了模拟设计描述的能力。VHDL与Verilog比较(指导书有简介)VerilogHDL与C语言Verilog和C都对大小写敏感。;、/*...*/和//、

“==”Verilog语言和C语言一样都不能用关键字作为变量名2026/1/30C语言VerilogHDLfunctionmodule,function,taskif-then-elseif-then-elseforforwhilewhilecasecasebreakbreakdefinedefineprintfprintfintint{…}begin…endVerilog语言中没有C语言中的一些较抽象的语法,例如迭代、指针、不确定次数的循环等。VerilogHDL与C语言Verilog语言描述的是电路!C语言编写的可执行程序。C程序是一行接一行依次执行的,属于顺序结构——串行执行指令,任一时间点只能有一条指令在执行。

.exeVerilog描述的硬件是可以在同一时间同时运行的,属于并行结构。一旦设备电源开启,硬件的每个单元就会一直处于运行状态。——Verilog语言是并发执行的。电路2026/1/30VerilogHDL与C语言VerilogHDL的模块调用与C语言的函数调用也有区别:C语言每调用一次某函数,就是去存储器中存储该函数的空间读取指令执行一次该函数,入口地址固定的。VerilogHDL即使对同一个模块的不同调用,每调用一次,都会综合生成对应的硬件电路。评价HDL代码的优劣,要看综合、实现后是否满足面积、速度等指标要求,以及资源利用率的多少?2026/1/30VerilogHDL翻译工具

综合——是一种软件工具,将高层次逻辑设计转换成低层次的电路描述文件(网表文件,EDIF格式的文本文件)实现——也是一种软件工具,是将网表文件翻译成所选PLD器件的的底层模块与硬件原语,将设计映射到FPGA器件结构上,并布局布线。即翻译、映射和布局布线。可用于综合的Verilog语法是相当有限的。语法没有错误的Verilog程序不一定都能综合,能综合不一定都能实现。但基本的、常用的语法就可以实现大多数的电路设计。初学者要养成了解相关语法实现的硬件电路。2026/1/30Verilog的变量一种为网络型(netstype),对应组合电路变量另一种为寄存器型(registertype),描述时序电路变量nets型变量指输出根据输入的变化而更新其值的变量register型变量对应的是具有状态保持作用的电路元件,如触发器、寄存器等。2026/1/30nets型变量(网络型变量)wirea,b; //定义了两个宽度为1位wire型变量a,bwire[7:0]out;wire[3:0]in;assignout[5:2]=in;//in赋值给out向量的第2位~5位2026/1/30类型功能说明wire,tri标准连线类型(缺省为wire类型)其取值为0,1,x,zwor,trior多重驱动时,具有线或特性的连线wand,triand多重驱动时,具有线与特性的连线tri1,tri0分别为上拉电阻和下拉电阻supply1,supply0分别为电源(逻辑1)和地(逻辑0)register型变量register型数据保持最后一次赋值,默认初始值为不定值x,通过过程赋值语句赋值reg数据名1,数据名2,……数据名n;//定义n个一位的reg变量,rega,b; //定义了两个宽度为1位的reg型变量a,breg[n-l:0]数据名1,数据名2,……数据名n;//定义n位宽度的向量,例如:reg[7:0]data;//定义data为8位宽的reg型向量2026/1/30类型功能说明reg常用的寄存器型变量

integer32位带符号整数型变量

real64位带符号整数型变量

time无符号时间变量

Wire和reg的区别寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动;wire只能被assign连续赋值,wire表示直通,即只要输入有变化,输出马上无条件地反映,wire型的变量综合出来一般是一根导线。reg只能在initial和always中赋值。reg表示一定要有触发,输出才会反映输入;在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到左侧的一个变量当中。上、下沿或高、低电平2026/1/30数字和常量表示格式:<位宽>'<进制><数字>8'b11000101 //位宽为8位的二进制数110001018'hc5 //位宽为8位的十六进制数c5197//代表十进制数197,十进制数可缺省8‘b1001xxxx//位宽为8位的二进制数,低四位不确定,等价于8'h9x8‘b1010zzzz//等价于8’hAz,Z或者?表示高阻,x、z不区分大小写参数用于模块中定义常量

格式:parameter参数名1=表达式,参数名2=表达式…;parametersel=8,code=8‘ha3;2026/1/30Verilog运算符2026/1/30C语言VerilogHDL语言功能++加--减**乘//除%%取模!!逻辑取反&&&&逻辑与||||逻辑或>>大于<<小于>=>=大于等于<=<=小于等于====等于!=!=不等于~~位反相&&按位逻辑与||按位逻辑或^^按位逻辑异或~^~^按位逻辑同或>>>>右移<<<<左移?:?:同等于if-else叙述算术运算符逻辑运算关系运算符按位逻辑运算Verilog语言运算符的优先级运算类型运算符优先级单目运算+,-,!,~高优先级↓↓↓加()避免错误

低优先级乘、除、取模*,/,%双目运算(加、减)+,-移位<<,>>关系<,<=,>,>=等价==,!=,===,!==按位与、单目运算(与、与非)&,~&单目或双目运算(异或、同或)^,^~按位或、单目运算(或、或非)|,~|逻辑与&&逻辑或||条件?:2026/1/30模块(module)是Verilog设计中的基本单元,每个Verilog设计的系统中都由若干module组成①模块在语言形式上是以关键词module开始,endmodule结束的一段程序。②模块的实际意义是代表硬件电路的逻辑实体。③每个模块都实现特定的功能。④模块之间是并行运行的。⑤模块是分层的,高层模块通过调用、连接低层模块的实例来实现复杂的功能。⑥各模块连接完成整个系统,因此,需要一个顶层模块(top-module)。2026/1/30自顶向下(TOP-DOWN)的设计方法顶层文件多数用原理图设计(比如,CPU的ALU、控制器、指令译码、PC等部件)2026/1/30Verilog模块(module)的结构

2026/1/30Verilog模块的端口示意图是Verilog程序的基本设计单元包含:模块声明、端口定义、信号类型声明和逻辑功能描述四部分组成。Verilog模块的结构(举例1)modulenot2_inst(a,b,c);//模块名为not2_inst,端口列表a,b,cinputa,b; //模块的输入端口为a,boutputc; //模块的输出端口为cwirea,b,c; //定义信号的数据类型(默认)assignc=~(a&b); //逻辑功能描述endmodule //模块定义结束2026/1/30Verilog设计的描述风格Verilog设计的描述风格可分为:结构(Structural)描述数据流(DataFlow)描述行为(Behavioural)描述混合描述2026/1/30结构(Structural)描述知道具体电路结构。modulemux2_1( inputa,b,sl, outputout ); wirensl,sela,selb;

notu1(nsl,sl);

andu2(sela,a,nsl);

andu3(selb,b,sl);

oru4(out,sela,selb);endmodule2026/1/30

结构化描述就是在设计中,通过实例化(instantiate)Verilog语言内建的元件或是已经设计好的模块来完成设计实体功能的描述。

例子中引用了Verilog语言内建的not、and和or门原语。结构(Structural)描述特点描述的是门级电路结构或模块结构很难看出其描述的逻辑功能是什么适合开发小规模的组合电路侧重于描述电路由那些基本元件组成以及元件的相互连接关系2026/1/30数据流(DataFlow)描述知道逻辑关系表达式modulemux2_1( inputa,b,sl, outputout ); assignout=(a&~sl)|(b&sl);endmodule侧重于逻辑表达式以及HDL运算符的灵活运用2026/1/30行为(Behavioural)描述行为描述只关注逻辑电路输入、输出的因果关系(行为特性),即在何种输入条件下,产生何种输出(操作),并不关心电路的内部结构。modulemuxtwo( inputa,b,sl, outputregout); always@(sloraorb) if(!sl)out=a; elseout=b;endmoduleEDA的综合工具会自动将行为描述转换成电路结构。2026/1/30混合描述在一个.v程序中,用assign语句描述简单的组合逻辑电路,用always语句描述较为复杂的逻辑过程。一个.v程序所表达的逻辑电路可由多个assign语句和多个always过程块来描述。多个assign语句和多个always过程块是同时并发执行的。2026/1/30Verilog语句类别语句可综合性赋值语句持续赋值语句assign√过程赋值语句=、<=√条件语句if-else语句√case语句√循环语句for语句√repeat语句while语句forever语句过程语句initial语句always语句√function语句√task语句√编译预处理语句`define语句√`include语句√`timescale语句√`ifdef、`else、`endif√2026/1/30赋值语句持续赋值语句

assign(为网络型变量赋值)格式:assign变量=表达式;assignc=~(a|b);在上面的赋值中,a和b信号的任何变化,都将随时反映到c上来,因此称为持续赋值方式。2026/1/30赋值语句2.过程赋值语句always(为reg等常用变量类型赋值)即寄存器建模。在always过程块中的被赋值变量必须是reg型,Verilog语言支持两种类型的赋值:1)非阻塞(non_blocking)赋值(并行赋值,不阻塞下句)非阻塞赋值使用“<=”语句,如

:b<=a;块中所有<=语句同时将右边赋值给左边变量。2026/1/30非阻塞过程赋值语句(“<=”)--注意缓冲器2026/1/30波形图红色部分表示什么?综合后原理图中,IO信号自动生成了缓冲器赋值语句2.过程赋值语句2)阻塞(blocking)赋值方式(串行赋值)阻塞赋值使用“=”语句,如:b=a;阻塞赋值在该语句结束时就完成赋值操作,即b的值在该赋值语句结束后立刻改变。如果在一个块语句中,有多条阻塞赋值语句,那么在前面的赋值语句没有完成之前,阻塞(blocking)后面赋值语句的执行。注意:assign赋值语句不允许出现在always语句块中。2026/1/30阻塞过程赋值语句(“=”)2026/1/30赋值语句再举例:moduleshiftreg( //这是正确使用非阻塞赋值的实例inputclk, inputserin, outoutreg[3:0]q ); always@(posedgeclk) begin q[0]<=serin; //非阻塞赋值:<= q[1]<=q[0]; q[2]<=q[1] q[3]<=q[2]; //写作q<={q[2:0],serin};更简单一些 endendmodule//实现移位寄存器功能,用=语句结果如何?2026/1/30用if-else语句描述一个三态门moduletristate( inputin,en, outputregout ); always@(inoren) begin if(en)out<=in; elseout<=1'bz; end endmodule2026/1/30用always过程语句描述D触发器的Verilog程序moduleD_Flip_Flop( inputclk,//时钟信号输入端口,信号类型默认为wire型 inputset, //置位输入端口,信号类型默认为wire型 inputD, //触发信号输入端口,信号类型默认为wire型 inputclr, //清零信号输入端口,信号类型默认为wire型 outputregq //输出端口,always过程块中的输出必须是reg型变量 ); always@(posedgeclkorposedgeclrornegedgeset)//敏感信号列表 begin//如果clk或clr有上升沿,或set的下降沿,将执行下列程序段 if(clr)q<=0; //如果clr为高电平,则q输出0 elseif(!set)q<=1;//如果set为低电平,则q输出1 elseq<=D; //否则q输出D end //always过程块结束endmodule //模块结束2026/1/30用case语句描述的4选1MUXmodulemux4_1b( inputin1,in2,in3,in4,s0,s1, outputregout ); always@(*)//使用通配符,任何一个输入变量发生变化,都会执行always case({s0,s1}) 2'b00:out=in1; 2'b01:out=in2; 2'b10:out=in3; 2'b11:out=in4; default:out=2'bx; endcaseendmodule2026/1/30

实验板EGO1-模数混合口袋实验平台12026/1/30FPGA采用Artix-7XC7A35T-1CSG324-C的器件即Artix-7系列,封装形式(Package)为CSG324,速度等级(Speedgrade)为-1(慢),温度等级(TempGrade)为C商用)2026/1/30xilinxfpga温度等级E扩展级(商业级)0~100°I工业级-40~100℃Q汽车级-40~125℃XA(XA打头)M军工级-55~125℃(DEFENSEGRADE)EGO1采用XilinxArtix-7系列XC7A35T-1CSG324CFPGA其资源如下:2026/1/302026/1/30

实验板Basys2介绍USBportFour6-pinPmodconnectorsVGAPS/2相关外围接口JTAGprogrammingviaon-boardUSB2portusingthefreeAdeptSoftware(version2.0orlater)参考文献:/或/

/或/Basys2Reference: 用户参考手册Basys2Schematic: Basys2开发板原理图Basys2_100_250General: 管脚约束文件AdeptIOExpansion: AdeptI/O扩展口参考设计ActivePowerMeter: 有源功率计参考设计Basys2UserDemo: 用户演示文件MouseDisplayerRefComp: 鼠标显示参考模块MouseRefComp: 鼠标参考模块设计PwmRefComp: PWM(脉宽调制)模块设计Rs232RefProj: RS232参考设计工程文件VGARefComp: VGA参考设计模块课外作业:用Verilog实现X=AB下载安装Vivado;——PLD和处理器都需要IDE下载需要的学习资料及实验案例;注意方法!建立实现与非的工程文件;管脚约束文件(XAB);可以纸上谈兵,仿真验证;下载到FPGA,用开关和LED测试(开关作为输入,LED作为输出,要熟悉EGO1的原理图)开关抖动对该功能是否有影响?抖动引起的LED闪烁对人的视觉是否有影响?如何消除抖动?

学习通上有:手把手教你设计2026/1/30熟悉软件开发介绍ISE软件使用与FPGA设计实例熟悉工程建立、源文件编辑、仿真、综合、实现、下载等。Basys2实验板上对应开关和LED原理图。2026/1/30课外作业:熟悉EGO原理图2026/1/302026/1/30西安交通大学电气学院电子学abcdefg七段数码管的结构如图所示,它有七个发光段(a、b、c、d、e、f、g);LED数码管的每个段为一个或数个发光二极管,加上适当的电压时,对应段就发光。七段数码管的外形00000001001000110100010101100111100010018421BCD码相应发光段2026/1/30西安交通大学电气学院电子学1.七段LED数码管的结构及显示原理

LED数码管有两种结构:共阴和共阳,共阴数码管的外形和内部结构为:补充七段数码管结构、原理(7.2.4)R+5VRR······2026/1/30西安交通大学电气学院电子学74LS47abcdefgLTBI/RBORBIA0A1A2A374LS47abcdefgLTBI/RBORBIA0A1A2A374LS47abcdefgLTBI/RBORBIA0A1A2A374LS47abcdefgLTBI/RBORBIA0A1A2A3···abcdefg·COMR···abcdefg·COMR···abcdefg·COMR···abcdefg·COMRVCCA1B1C1D1A0B0C0D0A-1B-1C-D-1A-2B-2C-D-2RLT1多个数码管的静态显示

所有数码管公共端始终有效,各数码管a~g分开数码管动态显示动态显示:公共端分时有效,数码管a~g段分别接一起。2026/1/30西安交通大学电气学院电子学2026/1/30EGO上的数码管部分原理图

——来自EGO1用户手册_v2.22026/1/30EGO上的数码管部分原理图

数码管限流电阻?B2上的4个数码管电路是共阳极还是共阴极?静态显示?动态显示?2026/1/30BCD到七段显示译码器,若是共阳极数码管2026/1/30Verilog

HDL参考源代码

B2板BCD-TO_7SEG接共阳极数码管,共阴极?modulehex7seg( inputwire[3:0]x, outputreg[6:0]a_to_g, outputwire[3:0]an ); assignan=4'b0000;//4个数码管全部使能always@(*) case(x) 0:a_to_g=7‘b0000001;//x=0时,7位二进制数赋给a_to_g 1:a_to_g=7'b1001111;//a_to_g的高位对应A段,最低位对应G段 2:a_to_g=7'b0010010; 3:a_to_g=7'b0000110; 4:a_to_

温馨提示

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

评论

0/150

提交评论