数字电路应用_第1页
数字电路应用_第2页
数字电路应用_第3页
数字电路应用_第4页
数字电路应用_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

数字电路应用第1页,课件共65页,创作于2023年2月装药系统的模块课程任务: 在实验箱上,通过VHDL语言实现罐装系统。第2页,课件共65页,创作于2023年2月实验箱介绍第3页,课件共65页,创作于2023年2月课程的主要内容数字系统设计的基本概念和方法Verilog语言要素以及语法Verilog语言开发环境的使用组合逻辑电路的Verilog实现时序逻辑电路的Verilog实现FPGA(CPLD)的开发过程,程序的调试和下载第4页,课件共65页,创作于2023年2月课程安排共有6次课第一次课:

讲授内容:主要了解数字系统设计的基本概念和方法,并介绍Verilog的基本语法,掌握QuartusII软件的基本使用;。

实验内容:使用Verilog语言在课内做七段译码器的软件仿真实验。第5页,课件共65页,创作于2023年2月课程安排第二次课:

讲授内容:时序逻辑电路的Verilog实现,Verilog的数据流建模。

实验内容:使用Verilog语言在课内设计BCD码的加法器,并做软件仿真实验。第6页,课件共65页,创作于2023年2月课程安排第三次课:

讲授内容:Verilog中任务和函数的学习。

实验内容:使用VHDL语言在课内设计同步计数器,并做软件仿真实验。第7页,课件共65页,创作于2023年2月课程安排第四次课:实验内容:比较器,优先编码器,和码制转换实验。第8页,课件共65页,创作于2023年2月课程安排第五次课:

讲授内容:实验箱的硬件组成以及使用方法;FPGA引脚的分配,程序的下载等。

实验内容:完成装药系统各个分立模块的调试,补充未完成的模块,并在实验箱上调试通过。第9页,课件共65页,创作于2023年2月课程安排第六次课:

实验内容:完成装药系统顶层的设计,并组合各个分立模块为一个完整的系统,在实验箱上调试通过。第10页,课件共65页,创作于2023年2月Verilog语法概要第11页,课件共65页,创作于2023年2月一、Verilog的建模方式由顶向下由底向上等级方式第12页,课件共65页,创作于2023年2月罐装系统示意图第13页,课件共65页,创作于2023年2月Verilog可以实现的建模方式行为算法级建模数据流建模门级建模开关级建模第14页,课件共65页,创作于2023年2月二、Verilog的基本语法结构模块声明,端口说明(参数说明)endmodule任务与函数Wire和reg变量声明底层模块的实例化always以及initial语句,行为建模数据流建模第15页,课件共65页,创作于2023年2月示例1(与门操作)moduleaddgate(a,b,out);inputa,b;outputout;assignout=a&b;endmodule第16页,课件共65页,创作于2023年2月三、数据流建模连续赋值语句assign例子:assignaddr[15:0]=addr1_bits[15:0]^addr2_bits[15:0];assignout=i1&i2;第17页,课件共65页,创作于2023年2月数据流建模位操作符号~ NOT& AND| OR^ EXOR~& nand~| 或非^~ 异或非第18页,课件共65页,创作于2023年2月例:多路选择器4选1modulemux4_to_1(out,i0,i1,i2,i3,s1,s0);outputout; inputi0,i1,i2,i3; inputs1,s0;out=(~s1&~s0&i0)|(~s1&s0&i1)|(s1&~s0&i2)|(s1&s0&i3);endmodule第19页,课件共65页,创作于2023年2月数据流建模算术操作* 乘/ 除+ 加- 减% 取模** 指数运算第20页,课件共65页,创作于2023年2月例4位全加器

modulefulladd4(sum,c_out,a,b,c_in); output[3:0]sum; outputc_out; input[3:0]a,b;inputc_in; assign{c_out,sum}=a+b+c_in;endmodule第21页,课件共65页,创作于2023年2月其他操作

== Equalto

!= Notequal

< Lessthan

> Greaterthan

<= Lessthanorequal

>= Greaterthanorequal

&& AND

|| OR第22页,课件共65页,创作于2023年2月其他操作

>> Shiftright

<< Shiftleft

+ Add

- Subtract

* Multiply

/ Divide

% Modulus第23页,课件共65页,创作于2023年2月数据流建模时延#assign#10out=in1&in2;第24页,课件共65页,创作于2023年2月操作优先级操作操作标记说明符号+-!~最高乘除*/%加减+-移位<<>>比较<><=>===位运算&~&|~|^^~逻辑&&||条件运算?:最低第25页,课件共65页,创作于2023年2月四、verilog示例4.1三位加法器的实现moduleadder(count,sum,a,b,cin);input[2:0]a,b;inputcin;outputcount;output[2:0]sum;assign{count,sum}=a+b+cin;endmodule第26页,课件共65页,创作于2023年2月四、verilog示例4.2比较器实现modulecompare(equal,a,b);outputequal;input[1:0]a,b;assignequal=(a==b)?1:0;

endmodule第27页,课件共65页,创作于2023年2月五、verilog中的数据类型Verilog有三种主要的数据类型:Nets

表示器件之间的物理连接,称为网络连接类型Register表示抽象的储存单元,称为寄存器/变量类型Parameter

表示运行时的常数,称为参数类型第28页,课件共65页,创作于2023年2月五、verilog中的数据类型Nets(网络连线):由模块或门驱动的连线。驱动端信号的改变会立刻传递到输出的连线上。例如:右图上,selb的改变,会自动地立刻影响或门的输出。netsabslselbselanslout第29页,课件共65页,创作于2023年2月五、verilog中的数据类型连接(Nets)类型变量的种类:在为不同工艺的基本元件建立库模型的时候,常常需要用不同的连接类型来与之对应,使其行为与实际器件一致。常见的有以下几种。

类型功能wire,tri对应于标准的互连线(缺省)supply1,supply2对应于电源线或接地线wor,trior对应于有多个驱动源的线或逻辑连接wand,triand对应于有多个驱动源的线与逻辑连接trireg对应于有电容存在能暂时存储电平的连接tri1,tri0对应于需要上拉或下拉的连接如果不明确地说明连接是何种类型,应该是指wire类型。第30页,课件共65页,创作于2023年2月五、verilog中的数据类型register型变量能保持其值,直到它被赋于新的值。register型变量常用于行为建模,产生测试的激励信号。

寄存器(register)类型变量常用行为语句结构来给寄存器类型的变量赋值。abslselbselansloutreg_areg_selreg_b第31页,课件共65页,创作于2023年2月五、verilog中的数据类型

寄存器(register)类型变量的数据类型寄存器类型变量共有四种数据类型:类型功能.reg无符号整数变量,可以选择不同的位宽。integer有符号整数变量,32位宽,算术运算可产生2的补码。real有符号的浮点数,双精度。time无符号整数变量,64位宽第32页,课件共65页,创作于2023年2月五、verilog中的数据类型取值0、低、伪、逻辑低、地、VSS、负插入01XZ0bufbufbufbufif11、高、真、逻辑高、电源、VDD、正插入X、不确定:逻辑冲突无法确定其逻辑值HiZ、高阻抗、三态、无驱动源第33页,课件共65页,创作于2023年2月五、verilog中的数据类型向量的申明wire[7:0]bus;//8为总线wire[31:0]busA,busB,busC;//3个32为总线reg[0:40]virtual_addr;//41位寄存器向量的选择reg[255:0]data1;//小端reg[0:255]data2;//大端byte=data1[31-:8];//开始位=31,宽度=8=>data[31:24]byte=data1[24+:8];//开始位=24,宽度=8=>data[31:24]byte=data2[31-:8];//开始位=31,宽度=8=>data[24:31]byte=data2[24+:8];//开始位=24,宽度=8=>data[24:31]第34页,课件共65页,创作于2023年2月五、verilog中的数据类型赋值格式<尺寸>‘<格式><数值>.尺寸就是占的位宽格式为h,d,b(表示十六进制,十进制以及二进制表示)数值就是赋值大小例:4'b111112'habc16'd255第35页,课件共65页,创作于2023年2月五、verilog中的数据类型如何选择正确的数据类型?输入口(input)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输出口(output)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输入/输出口(inout)只可以由网络连接驱动,但它本身只能驱动网络连接。如果信号变量是在过程块(initial块或always块)中被赋值的,必须把它声明为寄存器类型变量

第36页,课件共65页,创作于2023年2月五、verilog中的数据类型举例说明数据类型的选择moduletop;wirey;rega,b;DUTu1(y,a,b);initialbegina=0;b=0;#10a=1;….endendmodule模块DUT的边界输入口输出口输出/入口netnetnet/registernetnet/registernetinoutmoduleDUT(Y,A,B_);outputY;inputA,B:wireY,A,B;and(Y,A,B);endmodule第37页,课件共65页,创作于2023年2月五、verilog中的数据类型选择数据类型时常犯的错误在过程块中对变量赋值时,忘了把它定义为寄存器类型(reg)或已把它定义为连接类型了(wire)把实例的输出连接出去时,把它定义为寄存器类型了把模块的输入信号定义为寄存器类型了。这是经常犯的三个错误!!!第38页,课件共65页,创作于2023年2月五、verilog中的数据类型参数(parameters)类型常用参数来声明运行时的常数。可用字符串表示的任何地方,都可以用定义的参数来代替。参数是本地的,其定义只在本模块内有效。举例说明:parameterport_id=5;parametercache_line_width=256;parametersigned[15:0]WIDTH;

第39页,课件共65页,创作于2023年2月五、verilog中的数据类型

Verilog语言支持寄存器阵列的声明:举例说明:integerNUMS[7:0];//8个整型变量的寄存器阵列timet_vals[3:0];//4个时间变量的寄存器阵列数据类型为reg的阵列常称为存储器(即memory):reg[15:0]MEM[0:1023];//1Kx16位的存储器reg[7:0]PREP[‘hfffe:‘hffff];//2x8位的存储器可以用参数来表示存储器的大小:parameterwordsize=16;parametermemsize=1024;reg[wordsize-1:0]MEM3[memsize-1:0];第40页,课件共65页,创作于2023年2月六、行为建模学习要点always以及intial语句在行为建模中的使用阻塞和非阻塞过程赋值在行为建模中的时间控制机制电平敏感的时间控制机制条件指令if和else的使用多路选择casecasex和casez的使用循环指令whileforrepeatforever的使用顺序和并行语句的实现第41页,课件共65页,创作于2023年2月六、行为建模基本结构–两个关键字always和initialinitial在时间为0的时候开始执行,只是执行一次多个initial同时执行第42页,课件共65页,创作于2023年2月六、行为建模modulestimulus;regx,y,a,b,m;initial m=1'b0;initialbegin#5a=1'b1;#25b=1'b0;endinitialbegin#10x=1'b0;#25y=1'b1;endinitial #50$finish;endmodule第43页,课件共65页,创作于2023年2月六、行为建模基本结构–两个关键字always和initialalways在时间为0的时候开始执行,循环执行moduleclock_gen(outputregclock);initialclock=1'b0;always #10clock=~clock;initial#1000$finish;endmodule第44页,课件共65页,创作于2023年2月六、行为建模过程赋值–阻塞和非阻塞赋值阻塞赋值,(顺序执行)使用“=”例regx,y,z;reg[15:0]reg_a,reg_b;integercount;initialbeginx=0;y=1;z=1;count=0;//0reg_a=16'b0;reg_b=reg_a;//0#15reg_a[2]=1‘b1; //10个单位 #10reg_b[15:13]={x,y,z}//25count=count+1;//25单位后赋值end第45页,课件共65页,创作于2023年2月六、行为建模过程赋值–阻塞和非阻塞赋值非阻塞赋值,(并行执行)使用“<=”例regx,y,z;reg[15:0]reg_a,reg_b;integercount;initialbeginx=0;y=1;z=1;count=0;//0reg_a=16'b0;reg_b=reg_a;//0reg_a[2]<=#151‘b1; //10个单位 reg_b[15:13]<=#10{x,y,z}//10count=count+1;//0单位后赋值end第46页,课件共65页,创作于2023年2月使用非阻塞赋值方式进行赋值时,各个赋值语句同步执行;因此,通常在一个时钟沿对临时变量进行赋值,而在另一个时钟沿对其进行采样。六、行为建模下面的模块综合为触发器,其中采用了阻塞赋值方式:modulebloc(clk,a,b);inputclk,a;outputb;regb;regy;always@(posedgeclk)beginy=a;b=y;endendmodule下面的模块综合为两个触发器,其中采用了非阻塞赋值方式:modulenonbloc(clk,a,b);inputclk,a;outputb;regb;regy;always@(posedgeclk)beginy<=a;b<=y;endendmodule第47页,课件共65页,创作于2023年2月上面的两个例子的综合的结果不同,左边的例子使用了阻塞赋值方式,综合器将其综合为一个触发器。右边的例子使用了非阻塞赋值方式,综合器将其综合为两个触发器,y将出现在综合列表中,作为第二个触发器的输入。综合结果如下所示:六、行为建模abclkclkaby第48页,课件共65页,创作于2023年2月六、行为建模时间控制方式-延时和事件(DELAYandEVENT)延时:#+[时间]例:#10y=1;y=#5x+z;//xzat0,butyat5#(4:5:6)q=0;//最小,通常,最大第49页,课件共65页,创作于2023年2月六、行为建模时间控制方式-延时和事件(DELAYandEVENT)事件:符号@例:@(clock)q=d;@(posedgeclock)q=d;@(negedgeclock)q=d;q=@(posedgeclock)d;第50页,课件共65页,创作于2023年2月六、行为建模时间控制方式-延时和事件(DELAYandEVENT)事件:符号@(敏感信号1,…)例:always@(reset,clock,d)//电平敏感的异步resetbegin if(reset) q=1'b0;elseif(clock) q=d;endalways@(posedgeclk,negedgereset)//边缘触发D触发器,并下降沿resetif(!reset) q<=0;elseif(clock) q<=d;end第51页,课件共65页,创作于2023年2月六、行为建模时间控制方式-延时和事件(DELAYandEVENT)事件:符号@特殊符号@*,表示与之相关的所有信号always@(aorborcordoreorforgorhorporm)beginout1=a?b+c:d+e;out2=f?g+h:p+m;endalways@*beginout1=a?b+c:d+e;out2=f?g+h:p+m;end第52页,课件共65页,创作于2023年2月六、行为建模条件语句—if()elseif()else例1:if(!lock)buffer=data;if(enable)out=in;例2:if(number_queued<MAX_Q_DEPTH)begin data_queue=data; number_queued=number_queued+1;endelse$display("QueueFull.Tryagain");第53页,课件共65页,创作于2023年2月六、行为建模条件语句—if()elseif()else例3:if(alu_control==0) y=x+z;elseif(alu_control==1) y=x-z;elseif(alu_control==2) y=x*z;else $display("InvalidALUcontrolsignal");第54页,课件共65页,创作于2023年2月六、行为建模多路选择语句—case、endcasedefault例1:reg[1:0]alu_control;case(alu_control) 2'd0:y=x+z; 2'd1:y=x-z; 2'd2:y=x*z; default: $display("InvalidALUcontrolsignal");endcase第55页,课件共65页,创作于2023年2月六、行为建模多路选择语句—case、endcasedefault例2:4选一多路选择modulemux4_to_1(out,i0,i1,i2,i3,s1,s0);outputout;inputi0,i1,i2,i3;inputs1,s0;regout;always@(s1ors0ori0ori1ori2ori3)case({s1,s0})2'd0:out=i0;2'd1:out=i1;2'd2:out=i2;2'd3:out=i3;default:$display("Invalidcontrolsignals");endcaseendmodule第56页,课件共65页,创作于2023年2月六、行为建模循环语句—while、fo

温馨提示

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

评论

0/150

提交评论