硬件描述语言及其程序设计方法_第1页
硬件描述语言及其程序设计方法_第2页
硬件描述语言及其程序设计方法_第3页
硬件描述语言及其程序设计方法_第4页
硬件描述语言及其程序设计方法_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、第讲硬件描述语言及其程序设计方法第1页,共34页。目目 录录qSOC设计概述设计概述q可编程逻辑器件可编程逻辑器件 q硬件描述语言及其程序设计方法硬件描述语言及其程序设计方法 qSOC的设计基本工具和方法的设计基本工具和方法qSOC设计实例设计实例第2页,共34页。Verilog HDL 简介简介qVerilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。抽象设计层次的数字系统建模。qVerilog HDL语言具有下述描述能力:语言具有下述描述能力:设计的行为特性设计的行为特性设计的数据流特性设计的

2、数据流特性设计的结构组成设计的结构组成包含响应监控和设计验证方面的时延和波形产生机制。包含响应监控和设计验证方面的时延和波形产生机制。qVerilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。仿真器进行验证。第3页,共34页。Verilog HDL 简介简介qVerilog HDL硬件描述语言的主要能力:硬件描述语言的主要能力:基本逻辑门,例如基本逻辑门,例如and、or和和nand等都内置在语言

3、中。等都内置在语言中。用户定义原语(用户定义原语(UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。以是时序逻辑原语。开关级基本结构模型,例如开关级基本结构模型,例如pmos和和nmos等也被内置在语言中。等也被内置在语言中。提供显式语言结构指定设计中端口到端口的时延及路径时延和设计的时序检查。提供显式语言结构指定设计中端口到端口的时延及路径时延和设计的时序检查。可采用三种不同方式或混合方式对设计建模。这些方式包括:可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式行为描述方式使用过程化结构建

4、模;使用过程化结构建模;数据流方式数据流方式使用连续赋值语句方式建模;使用连续赋值语句方式建模;结构化方式结构化方式使用门和模块实例语句描述建模。使用门和模块实例语句描述建模。第4页,共34页。Verilog HDL 简介简介qVerilog HDL硬件描述语言的主要能力(续):硬件描述语言的主要能力(续):Verilog HDL中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。件间的物理连线,而寄存器类型表示抽象的数据存储元件。能够描述层次设计,可使用模块实例结构描述

5、任何层次。能够描述层次设计,可使用模块实例结构描述任何层次。设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。Verilog HDL不再是某些公司的专有语言而是不再是某些公司的专有语言而是IEEE标准。标准。人和机器都可以阅读人和机器都可以阅读Verilog语言,因此它可以作为语言,因此它可以作为EDA的工具和设计者之的工具和设计者之间的交互语言。间的交互语言。第5页,共34页。Verilog HDL 简介简介qVerilog HDL硬件描述语言的主要能力(续):硬件描述语言的主要能力(续):Verilog HDL语

6、言的描述能力能够通过使用编程语言接口(语言的描述能力能够通过使用编程语言接口(PLI)机制进一)机制进一步扩展。步扩展。PLI是允许外部函数访问是允许外部函数访问Verilog模块内信息、允许设计者与模拟器模块内信息、允许设计者与模拟器交互的例程集合。交互的例程集合。设计能够在多个层次上加以描述,从开关级、门级、寄存器传输级(设计能够在多个层次上加以描述,从开关级、门级、寄存器传输级(RTL)到算法级,包括进程和队列级。到算法级,包括进程和队列级。能够使用内置开关级原语在开关级对设计完整建模。能够使用内置开关级原语在开关级对设计完整建模。同一语言可用于生成模拟激励和指定测试的验证约束条件,例如

7、输入值的指定。同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。Verilog HDL能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。监控和显示。第6页,共34页。Verilog HDL 简介简介qVerilog HDL硬件描述语言的主要能力(续):硬件描述语言的主要能力(续):在行为级描述中,在行为级描述中,Verilog HDL不仅能够在不仅能够在RTL级上进行设计描述,而且能够在体系级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。结构级描述及其算法级行为上进行设计描

8、述。能够使用门和模块实例化语句在结构级进行结构描述。能够使用门和模块实例化语句在结构级进行结构描述。Verilog HDL还具有内置逻辑函数,例如还具有内置逻辑函数,例如&(按位与按位与)和和 | (按位或按位或)。对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。可以显式地对并发和定时进行建模。可以显式地对并发和定时进行建模。提供强有力的文件读写能力。提供强有力的文件读写能力。语言在特定情况下是非确定的,即在不同的模拟器上模型可以产生不同的结果;语言在特定情况下是非确定的,即在不同的模拟器上

9、模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。例如,事件队列上的事件顺序在标准中没有定义。第7页,共34页。Verilog程序的结构程序的结构q模块是模块是Verilog的基本描述单位,用于描述某个设计的功能或的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。结构及其与其他模块通信的外部端口。q一个设计的结构可使用开关级原语、门级原语和用户一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述;定义的原语方式描述;q设计的数据流行为使用连续赋值语句进行描述;设计的数据流行为使用连续赋值语句进行描述;q时序行为使用过程结构描述。时序行为使用

10、过程结构描述。q一个模块可以在另一个模块中使用。一个模块可以在另一个模块中使用。第8页,共34页。Verilog程序的结构程序的结构qVerilog程序由关键词程序由关键词module和和endmodule进行定义进行定义qVerilog HDL 大小写敏感大小写敏感 port declarationsdata type declarationsfunctionalitytiming specificationendmodulemodule name (port_list);第9页,共34页。Verilog程序的组成部分程序的组成部分这这5个组件的排个组件的排列顺序是任意列顺序是任意的,可以选

11、择的,可以选择其中的一个或其中的一个或几个组件构成几个组件构成一个一个Verilog程程序。序。endmodulemodule Name,port list, port declarations(if ports present)parameters(optional),),Declarations of wires, regs and other variablesData flow statements( assign )Always and initial blocks,All behavioral statements go in these blocks.Instantiation

12、of lower level modulesTasks and functions第10页,共34页。时延时延qVerilog HDL模型中的所有时延都根据单位定义。模型中的所有时延都根据单位定义。q下面是带时延的连续赋值语句实例:下面是带时延的连续赋值语句实例: assign #2 Sum = A B; #2指指2个时间单位。个时间单位。q如果没有说明时延时间单位,如果没有说明时延时间单位,Verilog HDL模拟器会指定模拟器会指定一个缺省时间单位。一个缺省时间单位。qIEEE Verilog HDL标准中没有规定缺省时间单位。标准中没有规定缺省时间单位。第11页,共34页。数据流描述数

13、据流描述q一般使用连续赋值一般使用连续赋值assign语句描述,主要语句描述,主要用于组合逻辑电路建模。用于组合逻辑电路建模。module mux2_1(out1, a, b, sel) ; output out1; input a, b; input sel;assign out1=(sel & b) | (sel & a);endmodulemodule mux2_1(out1, a, b, sel) ; output out1; input a, b; input sel;assign out1= sel ? b : a;endmodule第12页,共34页。行为描述行为

14、描述q一般使用一般使用Initial或或Always语句描述,可以语句描述,可以对组合、时序逻辑电路建模。对组合、时序逻辑电路建模。module mux2_1(out1, a, b, sel) ; output out1; input a, b; input sel;always (sel or a or b)begin case (sel) 1b0 : out1 = a; 1b1 : out1 = b; endcaseendendmodulemodule mux2_1(out1, a, b, sel) ; output out1; input a, b; input sel;always (

15、sel or a or b)begin if (sel) out1 = b; else out1 = a;endendmodule第13页,共34页。结构描述结构描述q一般使用一般使用内部元件(内部元件(Primitive)、自定义的下层模块对电路进、自定义的下层模块对电路进行描述。主要用于层次化设计中。行描述。主要用于层次化设计中。module mux2_1(out1,a,b,sel); output out1; input a,b,sel; not (sel_, sel);and (a1, a, sel_);and (b1, b, sel_);or (out1, a1, b1);endmo

16、dule第14页,共34页。混合设计描述混合设计描述q结构结构和和行为行为描述方式可以自由混合。模块描述中可以包含实例化描述方式可以自由混合。模块描述中可以包含实例化的门、模块实例化语句、连续赋值语句以及的门、模块实例化语句、连续赋值语句以及a l w a y s语句和语句和i n i t i a l语句的混合。它们之间可以相互包含。语句的混合。它们之间可以相互包含。q来自来自a l w a y s语句和语句和i n i t i a l语句(语句(切记只有寄存器类型数据可切记只有寄存器类型数据可以在这两种语句中赋值以在这两种语句中赋值)的值能够驱动门或开关。)的值能够驱动门或开关。q而来自于门

17、或连续赋值语句(而来自于门或连续赋值语句(只能驱动线网只能驱动线网)的值能够反过来用)的值能够反过来用于触发于触发a l w a y s语句和语句和i n i t i a l语句。语句。第15页,共34页。混合设计描述混合设计描述q实例:混合设计方式的实例:混合设计方式的1位全加器位全加器module FA_Mix(A,B,Cin,Sum,Cout); input A,B,Cin; output Sum,Cout; reg Cout; reg T1,T2,T3; wire S1;xor X1(S1,A,B); /门实例语句门实例语句always (A or B or Cin) /always

18、语句语句begin T1 = A & B; T2 = A & Cin; T3 = B & Cin; Cout = (T1 | T2) | T3;endassign Sum = S1 Cin; /连续赋值语句连续赋值语句endmodule 第16页,共34页。Verilog 基础知识基础知识q间隔符:空格、间隔符:空格、TAB键、换行符及换页符键、换行符及换页符q注释注释单行注释用单行注释用/标志起头和回车符结尾标志起头和回车符结尾多行注释用多行注释用/*标志起头和标志起头和*/标志结尾标志结尾q标识符标识符可以是任意一组字母、数字、可以是任意一组字母、数字、$符号和符号

19、和_(下划线下划线)符号的组合;符号的组合;必须是由字母或下划线开头,长度小于必须是由字母或下划线开头,长度小于1024字符;字符;转义标识符以反斜杠转义标识符以反斜杠“”开头,以空白符结尾的任何字符序列;开头,以空白符结尾的任何字符序列;标识符区分大、小写。标识符区分大、小写。q关键词:关键词:Verilog HDL 内部已使用的词,关键词都是小写。内部已使用的词,关键词都是小写。q格式:区分大小写。自由格式,即结构可以跨越多行编写。格式:区分大小写。自由格式,即结构可以跨越多行编写。第17页,共34页。Verilog 基础知识基础知识q系统任务和函数系统任务和函数以以$字符开始的标识符表示

20、系统任务或系统函数;字符开始的标识符表示系统任务或系统函数;任务提供了一种封装行为的机制,任务可以返回任务提供了一种封装行为的机制,任务可以返回0个或多个值;个或多个值;函数除只能返回一个值以外与任务相同;函数除只能返回一个值以外与任务相同;函数在函数在0时刻执行,即不允许延迟,而任务可以带有延迟。时刻执行,即不允许延迟,而任务可以带有延迟。q编译指令:以编译指令:以(反引号反引号)开始的某些标识符开始的某些标识符define和和undef,ifdef、else和和 endif,default_nettypeinclude,resetall,timescaleunconneted_drive和

21、和nounconnected_drivecelldefine和和endcelldefine第18页,共34页。Verilog 基础知识基础知识q四种基本的值四种基本的值0:逻辑:逻辑0或或“假假”1:逻辑:逻辑1或或“真真”x:未知:未知z:高阻:高阻q三类常量三类常量整型数:简单的十进制格式,基数格式(整型数:简单的十进制格式,基数格式(5O37,4B1x_01)实数:十进制计数法,科学计数法实数:十进制计数法,科学计数法字符串:字符串是双引号的字符序列,字符串不能分成多行书写字符串:字符串是双引号的字符序列,字符串不能分成多行书写q参数参数参数是一个常量,经常用于定义时延和变量的宽度。参数

22、是一个常量,经常用于定义时延和变量的宽度。信号等级信号等级信信 号号 强强 度度关关 键键 字字7Supply Drivesupply0supply16Strong Drivestrong0strong15Pull Drivepull0pull14Large Capacitancelarge3Weak Driveweak0weak12Medium Capacitancemedium1Small Capacitancesmall0Hi Impedance (no drive)highz0highz1第19页,共34页。Verilog 基础知识基础知识q数据类型数据类型线网类型。线网类型。net

23、type表示表示Verilog结构化元件间的物理连线。结构化元件间的物理连线。它的值由驱动元件的值决定;如果没有驱动元件连接到线它的值由驱动元件的值决定;如果没有驱动元件连接到线网,线网的缺省值为网,线网的缺省值为z。寄存器类型。寄存器类型。register type表示一个抽象的数据存储单元,它只能表示一个抽象的数据存储单元,它只能在在always语句和语句和initial语句中被赋值,并且它的值从一个赋值语句中被赋值,并且它的值从一个赋值到另一个赋值被保存下来。寄存器类型的变量具有到另一个赋值被保存下来。寄存器类型的变量具有x的缺省的缺省值。值。第20页,共34页。Verilog 基础知识

24、基础知识qNets数据类型:表示元件之间的结构化连接数据类型:表示元件之间的结构化连接wire和和tri线网:是最常见的线网类型。线网:是最常见的线网类型。wor和和trior线网:如果某个驱动源为线网:如果某个驱动源为1,那么线网的值也为,那么线网的值也为1。wand和和triand线网:如果某个驱动源为线网:如果某个驱动源为0,那么线网的值为,那么线网的值为0。trireg线网:此线网存储数值(类似于寄存器),并且用于电容节点的建模。线网:此线网存储数值(类似于寄存器),并且用于电容节点的建模。tri0和和tri1线网:这类线网可用于线逻辑的建模,即线网有多于一个驱动线网:这类线网可用于线

25、逻辑的建模,即线网有多于一个驱动源。源。supply0和和supply1线网:线网:supply0用于对用于对“地地”建模,即低电平建模,即低电平0;supply1用于对用于对电源建模,即高电平电源建模,即高电平1。第21页,共34页。Verilog 基础知识基础知识qRegister数据类型:在程序块中作变量用,对信号赋值需要用该数据数据类型:在程序块中作变量用,对信号赋值需要用该数据类型,赋值时用关键字类型,赋值时用关键字initial或或always开始。开始。reg寄存器类型:是最常见的数据类型寄存器类型:是最常见的数据类型.integer寄存器类型:整数寄存器包含整数值,可以作为普通

26、寄存器使用,寄存器类型:整数寄存器包含整数值,可以作为普通寄存器使用,典型应用为高层次行为建模。典型应用为高层次行为建模。time类型:用于存储和处理时间。类型:用于存储和处理时间。real和和realtime类型:实数寄存器(或实数时间寄存器)。类型:实数寄存器(或实数时间寄存器)。第22页,共34页。Verilog 表达式表达式q操作数操作数常数,参数,线网,寄存器,位选择,部分选择,存储器单元,函数调用。常数,参数,线网,寄存器,位选择,部分选择,存储器单元,函数调用。q标量线网:标量线网:线宽只有一条的连线,位数只有一位的寄存器。线宽只有一条的连线,位数只有一位的寄存器。q向量线网:向

27、量线网:线宽大于一条的连线,位数大于一位的寄存器。线宽大于一条的连线,位数大于一位的寄存器。q向量线网可选用关键词向量线网可选用关键词scalared或或vectored定义。如果一个线网定义时定义。如果一个线网定义时使用了关键词使用了关键词vectored,那么就不允许位选择和部分选择该线网。,那么就不允许位选择和部分选择该线网。换句话说,必须对线网整体赋值。换句话说,必须对线网整体赋值。q存储器的表示(存储器的表示(Memory):存储器是一个寄存器数组。:存储器是一个寄存器数组。q宏文本替换(宏文本替换(define):):define指令用于文本替换,它很像指令用于文本替换,它很像C语

28、言中的语言中的#define 指令,如:指令,如:define MAX_BUS_SIZE 32第23页,共34页。Verilog 表达式表达式q运算符(运算符(9类)类)算术运算符:算术运算符: +、-、*、/、%位运算符:位运算符: 、&、|、缩位运算符(单目):缩位运算符(单目): &、&、|、|、逻辑运算符:逻辑运算符: !、&、|关系运算符(双目):关系运算符(双目): 、=相等与全等运算符:相等与全等运算符: =、!=、=、!=逻辑移位运算符:逻辑移位运算符: 连接运算符:连接运算符: 条件运算符:条件运算符: ?:第24页,共34页。门电平模型化门电

29、平模型化q在在Verilog HDL语言中已预定义了门级原型语言中已预定义了门级原型 and n-input AND gate nand n-input NAND bate or n-input OR gate nor n-input NOR gate xor n-input exclusive OR gate xnor n-input exclusive NOR gate buf n-output buffer not n-output inverter bufif0 tri-state buffer; Io enable bufif1 tri-state buffer; hi enable

30、 notif0 tri-state inverter; Io enable notif1 tri-state inverter; hi enable第25页,共34页。门电平模型化门电平模型化q在在Verilog HDL语言中已预定义了单向和双向的晶体管级语言中已预定义了单向和双向的晶体管级原型原型Pmos uni-directional PMOS switch rpmos resistive PMOS switchnmos uni-directional NMOS switch rnmos resistive NMOS switchcmos uni-directional CMOS swit

31、ch rcmos resistive CMOS switch pullup pullup resistor tran bi-directional pass transistor rtran resistive pass transistor tranif0 bi-directional trnasistor;Io enable rtranif resistive transitor; Io enable tranif1 bi-directional transistor;hi enable rtranif1 resistive transistor; hi enable pulldow pu

32、lldown resistor第26页,共34页。用户定义的原语用户定义的原语qUDP的定义的定义primitive UDP_name (OutputName, List_of_inputs) Output_declaration List_of_input_declarations Reg_declaration Initial_statement table List_of_tabel_entries endtableendprimitive第27页,共34页。用户定义的原语用户定义的原语q在组合电路在组合电路UDP中,表规定了不同的输入组合和相对应的输出中,表规定了不同的输入组合和相对应

33、的输出值。值。q在时序电路在时序电路UDP中,使用中,使用1位寄存器描述内部状态。该寄存器的值是位寄存器描述内部状态。该寄存器的值是时序电路时序电路UDP的输出值。共有两种不同类型的时序的输出值。共有两种不同类型的时序 电路电路UDP:模拟电平触发行为模拟电平触发行为模拟边沿触发行为模拟边沿触发行为q时序电路时序电路UDP使用寄存器当前值和输入值决定寄存器的下一状使用寄存器当前值和输入值决定寄存器的下一状态(和后继的输出)。态(和后继的输出)。第28页,共34页。Verilog 程序设计程序设计qif-else 条件语句条件语句qcase 语句语句qfor循环语句循环语句 if (条件表达式条

34、件表达式) 块语句块语句1else if (条件表达式条件表达式2) 块语句块语句2else if (条件表达式条件表达式n) 块语句块语句nelse 块语句块语句n+1case (敏感表达式敏感表达式) 值值1: 块语句块语句1 值值2: 块语句块语句2 值值n: 块语句块语句n default:块语句:块语句n+1endcasefor (表达式表达式1;表达式;表达式2;表达式;表达式3)块语句)块语句第29页,共34页。Verilog 程序设计程序设计q赋值语句赋值语句q阻塞型过程赋值阻塞型过程赋值赋值算符赋值算符“” :前一条语句没有完成赋值过程之前,后面的语句不可:前一条语句没有完成

35、赋值过程之前,后面的语句不可能被执行。能被执行。q非阻塞型过程赋值非阻塞型过程赋值赋值算符赋值算符“” :一条非阻塞型赋值语句的执行,并不会影响块中其它语句的:一条非阻塞型赋值语句的执行,并不会影响块中其它语句的执行。执行。q连续赋值语句连续赋值语句只要输入端操作数的值发生变化,该语句就重新计算并刷新赋值结果。用关键词只要输入端操作数的值发生变化,该语句就重新计算并刷新赋值结果。用关键词assign来区分。来区分。基本形式:基本形式:;外部模式:外部模式: ;内部模式:内部模式: ;定时控制分为两类:定时控制分为两类:延时控制延时控制 事件控制事件控制 (事件控制敏感表)事件控制敏感表)第30页,共34页。Verilog 程序设计程序设计q任务(任务(task)q函数(函数(function) q任务和函数结构之间的差异:任务和函数结构之间的差异:一个任务块可以含有一个任务块可以含有时间控制结构时间控制结构,而函数块则没有;而函数块则没有;一个任务块可以有一个任务块可以有输入和输出输入和输出,而,而函数块必须有至少一个输入,没函数块必须有至少一个输入,没有任何输出;有任何输出;任务块的引发是通过任务块的引发是通过一条语句一条语句,而函,而函数块只有当它被引用在一个数块只有当它被引用在一个表达式表达

温馨提示

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

评论

0/150

提交评论