《数字电路应用精品文稿.ppt》由会员分享,可在线阅读,更多相关《数字电路应用精品文稿.ppt(65页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数字电路应用第1页,本讲稿共65页装药系统的模块装药系统的模块课程任务:在实验箱上,通过VHDL语言实现罐装系统。第2页,本讲稿共65页实验箱介绍第3页,本讲稿共65页课程的主要内容课程的主要内容数字系统设计的基本概念和方法Verilog语言要素以及语法Verilog语言开发环境的使用组合逻辑电路的Verilog实现时序逻辑电路的Verilog实现FPGA(CPLD)的开发过程,程序的调试和下载第4页,本讲稿共65页课程安排课程安排共有6次课第一次课:讲授内容讲授内容:主要了解数字系统设计的基本概念和方法,并介绍Verilog的基本语法,掌握QuartusII软件的基本使用;。实验内容实验内容
2、:使用Verilog语言在课内做七段译码器的软件仿真实验。第5页,本讲稿共65页课程安排课程安排第二次课:讲授内容讲授内容:时序逻辑电路的Verilog实现,Verilog的数据流建模。实验内容实验内容:使用Verilog语言在课内设计BCD码的加法器,并做软件仿真实验。第6页,本讲稿共65页课程安排课程安排第三次课:讲授内容讲授内容:Verilog中任务和函数的学习。实验内容实验内容:使用VHDL语言在课内设计同步计数器,并做软件仿真实验。第7页,本讲稿共65页课程安排课程安排第四次课:实验内容实验内容:比较器,优先编码器,和码制转换实验。第8页,本讲稿共65页课程安排课程安排第五次课:讲授
3、内容讲授内容:实验箱的硬件组成 以及使用方法;FPGA引脚的分配,程序的下载等。实验内容实验内容:完成装药系统各个分立模块的调试,补充未完成的模块,并在实验箱上调试通过。第9页,本讲稿共65页课程安排课程安排第六次课:实验内容实验内容:完成装药系统顶层的设计,并组合各个分立模块为一个完整的系统,在实验箱上调试通过。第10页,本讲稿共65页Verilog语法概要第11页,本讲稿共65页一、Verilog的建模方式由顶向下由底向上等级方式等级方式第12页,本讲稿共65页罐装系统示意图第13页,本讲稿共65页Verilog可以实现的建模方式行为算法级建模数据流建模门级建模开关级建模第14页,本讲稿共
4、65页二、Verilog的基本语法结构模块声明,端口说明(参数说明)endmodule任务与函数Wire 和 reg 变量声明底层模块的实例化always 以及 initial语句,行为建模数据流建模第15页,本讲稿共65页示例 1(与门操作)module addgate(a,b,out);input a,b;output out;assign out=a&b;endmodule第16页,本讲稿共65页三、数据流建模连续赋值语句assign 例子:assign addr15:0=addr1_bits15:0 addr2_bits15:0;assign out=i1&i2;第17页,本讲稿共65
5、页数据流建模位操作符号位操作符号 NOT&AND|OR EXOR&nand|或非 异或非第18页,本讲稿共65页例:多路选择器 4选1module mux4_to_1(out,i0,i1,i2,i3,s1,s0);output out;input i0,i1,i2,i3;input s1,s0;out=(s1&s0&i0)|(s1&s0&i1)|(s1&s0&i2)|(s1&s0&i3);endmodule 第19页,本讲稿共65页数据流建模算术操作*乘/除+加-减%取模*指数运算第20页,本讲稿共65页例4位全加器module fulladd4(sum,c_out,a,b,c_in);out
6、put 3:0 sum;output c_out;input3:0 a,b;input c_in;assign c_out,sum=a+b+c_in;endmodule第21页,本讲稿共65页其他操作=Equal to!=Not equalGreater than=Greater than or equal&AND|OR 第22页,本讲稿共65页其他操作Shift rightShift left+Add-Subtract*Multiply/Divide%Modulus 第23页,本讲稿共65页数据流建模时延#assign#10 out=in1&in2;第24页,本讲稿共65页操作优先级操作操作
7、标记说明符号+-!最高乘除*/%加减+-移位比较=位运算&|逻辑&|条件运算?:最低第25页,本讲稿共65页四、verilog示例4.1三位加法器的实现module adder(count,sum,a,b,cin);input 2:0 a,b;input cin;output count;output 2:0 sum;assign count,sum=a+b+cin;endmodule第26页,本讲稿共65页四、verilog示例4.2比较器实现module compare(equal,a,b);output equal;input 1:0 a,b;assign equal=(a=b)?1:0
8、;endmodule第27页,本讲稿共65页五、verilog中的数据类型Verilog 有三种主要的数据类型:有三种主要的数据类型:Nets 表示器件之间的物理连接,称为网络连接类型Register 表示抽象的储存单元,称为寄存器/变量类型Parameter 表示运行时的常数,称为参数类型第28页,本讲稿共65页五、verilog中的数据类型Nets(网络连线):由模块或门驱动的连线。驱动端信号的改变会立刻传递到输出的连线上。例如:右图上,selb的改变,会自动地立刻影响或门的输出。netsabslselbselanslout第29页,本讲稿共65页五、verilog中的数据类型连接(连接(
9、Nets)类型变量的种类:类型变量的种类:在为不同工艺的基本元件建立库模型的时候,常常需要用不同的连接类型来与之对应,使其行为与实际器件一致。常见的有以下几种。类型 功能 wire,tri 对应于标准的互连线(缺省)supply1,supply2 对应于电源线或接地线 wor,trior 对应于有多个驱动源的线或逻辑连接 wand,triand 对应于有多个驱动源的线与逻辑连接 trireg 对应于有电容存在能暂时存储电平的连接 tri1,tri0 对应于需要上拉或下拉的连接如果不明确地说明连接是何种类型,应该是指 wire 类型。第30页,本讲稿共65页五、verilog中的数据类型regi
10、ster 型变量能保持其值,直到它被赋于新的值。register 型变量常用于行为建模,产生测试的激励信号。寄存器(寄存器(register)类型变量)类型变量常用行为语句结构来给寄存器类型的变量赋值。abslselbselansloutreg_areg_selreg_b第31页,本讲稿共65页五、verilog中的数据类型 寄存器(寄存器(register)类型变量的数据类型)类型变量的数据类型 寄存器类型变量共有四种数据类型:类型 功能 .reg 无符号整数变量,可以选择不同的位宽。integer 有符号整数变量,32位宽,算术运算可产生2的补码。real 有符号的浮点数,双精度。time
11、 无符号整数变量,64位宽第32页,本讲稿共65页五、verilog中的数据类型取值0 0、低、伪、逻辑低、地、低、伪、逻辑低、地、VSS、负插入、负插入01XZ0bufbufbufbufif11 1、高、真、逻辑高、电源、高、真、逻辑高、电源、VDD、正插入、正插入X X、不确定:逻辑冲突无法确定其逻辑值、不确定:逻辑冲突无法确定其逻辑值HiZHiZ、高阻抗、三态、无驱动源、高阻抗、三态、无驱动源 第33页,本讲稿共65页五、verilog中的数据类型向量的申明wire 7:0 bus;/8为总线 wire 31:0 busA,busB,busC;/3 个32为总线reg 0:40 virt
12、ual_addr;/41位寄存器 向量的选择reg 255:0 data1;/小端reg 0:255 data2;/大端byte=data131-:8;/开始位=31,宽度=8=data31:24 byte=data124+:8;/开始位=24,宽度=8=data31:24 byte=data231-:8;/开始位=31,宽度=8=data24:31 byte=data224+:8;/开始位=24,宽度=8=data24:31 第34页,本讲稿共65页五、verilog中的数据类型赋值 格式 .尺寸就是占的位宽格式为 h,d,b(表示十六进制,十进制以及二进制表示)数值就是赋值大小例:4b11
13、11 12habc 16d255第35页,本讲稿共65页五、verilog中的数据类型 如何选择正确的数据类型?如何选择正确的数据类型?输入口(input)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输出口(output)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输入/输出口(inout)只可以由网络连接驱动,但它本身只能驱动网络连接。如果信号变量是在过程块(initial块 或 always块)中被赋值的,必须把它声明为寄存器类型变量 第36页,本讲稿共65页五、verilog中的数据类型举例说明数据类型的选择举例说明数据类型的选择module top;wire y;r
14、eg a,b;DUT u1(y,a,b);initial begin a=0;b=0;#10 a=1;.endendmodule 模块DUT的边界输入口输出口输出/入口netnetnet/registernetnet/registernetinoutmodule DUT(Y,A,B_);output Y;input A,B:wire Y,A,B;and(Y,A,B);endmodule第37页,本讲稿共65页五、verilog中的数据类型 选择数据类型时常犯的错误选择数据类型时常犯的错误在过程块中对变量赋值时,忘了把它定义为寄存器在过程块中对变量赋值时,忘了把它定义为寄存器 类型(类型(reg
15、reg)或已把它定义为连接类型了()或已把它定义为连接类型了(wirewire)把实例的输出连接出去时,把它定义为寄存器类型了把实例的输出连接出去时,把它定义为寄存器类型了把模块的输入信号定义为寄存器类型了。把模块的输入信号定义为寄存器类型了。这是经常犯的三个错误!这是经常犯的三个错误!第38页,本讲稿共65页五、verilog中的数据类型 参数(参数(parameters)类型)类型常用参数来声明运行时的常数。可用字符串表示的任何地方,都可以用定义的参数来代替。参数是本地的,其定义只在本模块内有效。举例说明:举例说明:parameter port_id=5;parameter cache_l
16、ine_width=256;parameter signed 15:0 WIDTH;第39页,本讲稿共65页五、verilog中的数据类型 Verilog 语言支持寄存器阵列的声明语言支持寄存器阵列的声明:举例说明:举例说明:integer NUMS 7:0;/8个整型变量的寄存器阵列time t_vals 3:0;/4个时间变量的寄存器阵列数据类型为 reg 的阵列常称为存储器(即 memory):reg 15:0 MEM 0:1023;/1K x 16 位的存储器reg 7:0 PREP hfffe:hffff;/2 x 8 位的存储器可以用参数来表示存储器的大小:parameter wo
17、rdsize=16;parameter memsize=1024;reg wordsize-1:0 MEM3memsize-1:0;第40页,本讲稿共65页六、行为建模学习要点always 以及 intial语句在行为建模中的使用阻塞和非阻塞过程赋值在行为建模中的时间控制机制电平敏感的时间控制机制条件指令if 和 else的使用多路选择 case casex和casez的使用循环指令 while for repeat forever的使用顺序和并行语句的实现第41页,本讲稿共65页六、行为建模基本结构 两个关键字always 和 initial initial 在时间为0的时候开始执行,只是执
18、行一次多个initial同时执行第42页,本讲稿共65页六、行为建模module stimulus;reg x,y,a,b,m;initial m=1b0;initial begin#5 a=1b1;#25 b=1b0;end initial begin#10 x=1b0;#25 y=1b1;end initial#50$finish;endmodule 第43页,本讲稿共65页六、行为建模基本结构 两个关键字always 和 initial always 在时间为0的时候开始执行,循环执行module clock_gen(output reg clock);initial clock=1b0
19、;always#10 clock=clock;initial#1000$finish;endmodule 第44页,本讲稿共65页六、行为建模过程赋值 阻塞和非阻塞赋值阻塞赋值,(顺序执行)使用“=”例reg x,y,z;reg 15:0 reg_a,reg_b;integer count;initial begin x=0;y=1;z=1;count=0;/0 reg_a=16b0;reg_b=reg_a;/0#15 reg_a2=1b1;/10个单位#10 reg_b15:13=x,y,z /25count=count+1;/25单位后赋值end第45页,本讲稿共65页六、行为建模过程赋值
20、 阻塞和非阻塞赋值非阻塞赋值,(并行执行)使用“=”例reg x,y,z;reg 15:0 reg_a,reg_b;integer count;initial begin x=0;y=1;z=1;count=0;/0 reg_a=16b0;reg_b=reg_a;/0reg_a2=#15 1b1;/10个单位reg_b15:13=#10 x,y,z /10count=count+1;/0单位后赋值end第46页,本讲稿共65页 使用非阻塞赋值方式进行赋值时,各个赋值语句同步执行;因此,通常在一个时钟沿对临时变量进行赋值,而在另一个时钟沿对其进行采样。六、行为建模下面的模块综合为触发器,其中采用
21、了阻塞赋值方式:module bloc(clk,a,b);input clk,a;output b;reg b;reg y;always(posedge clk)begin y=a;b=y;endendmodule下面的模块综合为两个触发器,其中采用了非阻塞赋值方式:module nonbloc(clk,a,b);input clk,a;output b;reg b;reg y;always(posedge clk)begin y=a;b=y;endendmodule第47页,本讲稿共65页 上面的两个例子的综合的结果不同,左边的例子使用了阻塞赋值方式,综合器将其综合为一个触发器。右边的例子使
22、用了非阻塞赋值方式,综合器将其综合为两个触发器,y 将出现在综合列表中,作为第二个触发器的输入。综合结果如下所示:六、行为建模a ab bclkclkclkclka ab by y第48页,本讲稿共65页六、行为建模时间控制方式-延时和事件(DELAY and EVENT)延时:#+时间例:#10 y=1;y=#5 x+z;/x z at 0,but y at 5#(4:5:6)q=0;/最小,通常,最大第49页,本讲稿共65页六、行为建模时间控制方式-延时和事件(DELAY and EVENT)事件:符号例:(clock)q=d;(posedge clock)q=d;(negedge clo
23、ck)q=d;q=(posedge clock)d;第50页,本讲稿共65页六、行为建模时间控制方式-延时和事件(DELAY and EVENT)事件:符号(敏感信号敏感信号1,)例:always(reset,clock,d)/电平敏感的异步resetbegin if(reset)q=1b0;else if(clock)q=d;end always(posedge clk,negedge reset)/边缘触发D触发器,并下降沿resetif(!reset)q=0;else if(clock)q=d;end第51页,本讲稿共65页六、行为建模时间控制方式-延时和事件(DELAY and EVE
24、NT)事件:符号特殊符号*,表示与之相关的所有信号always(a or b or c or d or e or f or g or h or p or m)begin out1=a?b+c:d+e;out2=f?g+h:p+m;end always*begin out1=a?b+c:d+e;out2=f?g+h:p+m;end 第52页,本讲稿共65页六、行为建模条件语句if()else if()else例1:if(!lock)buffer=data;if(enable)out=in;例2:if(number_queued MAX_Q_DEPTH)begin data_queue=data;
25、number_queued=number_queued+1;end else$display(Queue Full.Try again);第53页,本讲稿共65页六、行为建模条件语句if()else if()else例3:if(alu_control=0)y=x+z;else if(alu_control=1)y=x-z;else if(alu_control=2)y=x*z;else$display(Invalid ALU control signal);第54页,本讲稿共65页六、行为建模多路选择语句case、endcase default例1:reg 1:0 alu_control;ca
26、se(alu_control)2d0:y=x+z;2d1:y=x-z;2d2:y=x*z;default:$display(Invalid ALU control signal);endcase 第55页,本讲稿共65页六、行为建模多路选择语句case、endcase default例2:4选一多路选择module mux4_to_1(out,i0,i1,i2,i3,s1,s0);output out;input i0,i1,i2,i3;input s1,s0;reg out;always(s1 or s0 or i0 or i1 or i2 or i3)case(s1,s0)2d0:out=
27、i0;2d1:out=i1;2d2:out=i2;2d3:out=i3;default:$display(Invalid control signals);endcase endmodule 第56页,本讲稿共65页六、行为建模循环语句while、for、repeat、forever例1:while(count 128)begin count=count+1;end 例2:for(i=1;i 32;i=i+2)statei=1;第57页,本讲稿共65页六、行为建模循环语句while、for、repeat、forever例3:integer count;initialbegin count=0;
28、repeat(128)begin count=count+1;end end 第58页,本讲稿共65页六、行为建模循环语句while、for、repeat、forever例4:reg clock;reg x,y;initial forever(posedge clock)x=y;第59页,本讲稿共65页六、行为建模顺序块和并行块顺序块:执行顺序为顺序执行例1:reg x,y;reg 1:0 z,w;initialbegin x=1b0;/0#5 y=1b1;/5#10 z=x,y;/15#20 w=y,x;/35end第60页,本讲稿共65页六、行为建模顺序块和并行块并行块:执行顺序为同时执行
29、例2:reg x,y;reg 1:0 z,w;initialfork x=1b0;/0#5 y=1b1;/5#10 z=x,y;/10#20 w=y,x;/20join第61页,本讲稿共65页六、一些例子4位计数器module counter(Q,clock,clear);output 3:0 Q;input clock,clear;reg 3:0 Q;aways(posedge clear or negedge clock)beginif(clear)Q=4d0;elseQ=Q+1;endendmodule第62页,本讲稿共65页实验时间第63页,本讲稿共65页七、任务与函数第64页,本讲稿共65页八、实例化第65页,本讲稿共65页