Verilog HDL硬件描述语言_第1页
Verilog HDL硬件描述语言_第2页
Verilog HDL硬件描述语言_第3页
Verilog HDL硬件描述语言_第4页
Verilog HDL硬件描述语言_第5页
已阅读5页,还剩120页未读 继续免费阅读

下载本文档

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

文档简介

1、三、 Verilog HDL硬件描述语言大规模可编程器件技术大规模可编程器件技术课程安排课程安排一、可编程逻辑器件基础一、可编程逻辑器件基础二、数字系统设计方法二、数字系统设计方法三、三、Verilog HDL硬件描述语言硬件描述语言四、开发软件介绍四、开发软件介绍五、应用实验五、应用实验六、考核方式六、考核方式三、三、Verilog HDL硬件描述语言硬件描述语言1. Verilog HDL概述概述2. Verilog HDL建模概述建模概述3. Verilog HDL基本语法基本语法4. Verilog HDL的顺序执行与并发执行的顺序执行与并发执行5.条件语句使用要点条件语句使用要点6.

2、设计的可综合性设计的可综合性7.基本电路的基本电路的verilog描述描述-组合电路组合电路1.Verilog HDL概述概述1.1什么是什么是Verilog HDL?VerilogVerilog HDL(VerilogHDL(Verilog Hardware Hardware DiscriptionDiscription Language) Language)一种硬件描述语言,用于从算法级、门级到开关级的多一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。种抽象设计层次的数字系统建模。可以对硬件的并发执行过程进行建模可以对硬件的并发执行过程进行建模1.Verilo

3、g HDL概述概述1.2 Verilog的历史的历史19831983年由年由Gateway Design AutomationGateway Design Automation公司公司( (后被后被CadenceCadence收购收购) )首创首创19901990年,年,CadenceCadence公司成立公司成立OVI(OpenOVI(Open VerilogVerilog International)International)组织来推广组织来推广VerilogVerilog HDL HDL19951995年,年,IEEEIEEE制定了制定了VerilogVerilog HDL HDL标准

4、,即标准,即IEEE Std IEEE Std 1364 19951364 1995(Verilog-1995Verilog-1995)20012001年,年,IEEE 1364-2001(Verilog-2001IEEE 1364-2001(Verilog-2001)获得通过)获得通过1.Verilog HDL概述概述1.3 Verilog与与VHDL均为硬件描述语言,应用都很普遍均为硬件描述语言,应用都很普遍VHDLVHDL由美国国防部高级研究计划署开发由美国国防部高级研究计划署开发两者的区别:两者的区别:VHDLVHDL侧重于系统级描述,从而更多的为系统级设计人侧重于系统级描述,从而更多

5、的为系统级设计人员所采用员所采用VerilogVerilog侧重于电路级描述,从而更多的为电路级设侧重于电路级描述,从而更多的为电路级设计人员所采用计人员所采用1.Verilog HDL概述概述1.4 Verilog HDL与与 C语言语言C C语言:计算机程序设计语言,顺序执行语言:计算机程序设计语言,顺序执行VerilogVerilog HDL HDL:语法与:语法与C C语言接近,硬件描述语言,语言接近,硬件描述语言,对硬对硬件的并发执行过程进行建模件的并发执行过程进行建模利用利用VerilogVerilog HDL HDL编程时,要时刻记得编程时,要时刻记得VerilogVerilog

6、 HDL HDL是硬是硬件语言,要将件语言,要将VerilogVerilog HDL HDL与硬件电路对应起来与硬件电路对应起来1.Verilog HDL概述概述1.5 四种抽象层次四种抽象层次行为或算法级行为或算法级: :VerilogVerilog所支持的最高抽象层次。设计者只注重所支持的最高抽象层次。设计者只注重其实现的算法,不用关心其具体的硬件实现细节。与其实现的算法,不用关心其具体的硬件实现细节。与C C语言编语言编程类似。程类似。数据流级数据流级:通过描述数据流在寄存器间如何传输以及如何处理:通过描述数据流在寄存器间如何传输以及如何处理这些数据来对设计进行建模。这些数据来对设计进行

7、建模。门级门级: :从组成电路的逻辑门及其相互之间的互连关系的角度来从组成电路的逻辑门及其相互之间的互连关系的角度来设计模块。类似于使用门级逻辑简图来完成设计。设计模块。类似于使用门级逻辑简图来完成设计。开关级开关级: :VerilogVerilog所支持的最低抽象层。通过使用开关、存储节所支持的最低抽象层。通过使用开关、存储节点及其互连关系来设计模块。点及其互连关系来设计模块。术语术语RTL级级(寄存器传输级寄存器传输级):通常指能够被逻辑综合工具接受的行为级和数据通常指能够被逻辑综合工具接受的行为级和数据流级的混合描述流级的混合描述在一个模块中可以混合使用多个抽象层次在一个模块中可以混合使

8、用多个抽象层次2.Verilog HDL建模概述建模概述数字电路数字电路= =线线+ +器件器件线:器件管教之间的物理连接线:器件管教之间的物理连接器件:组合逻辑(如与或非门等)和时序逻辑器件器件:组合逻辑(如与或非门等)和时序逻辑器件(如寄存器、锁存器、(如寄存器、锁存器、RAMRAM等)等)VerilogVerilog HDL HDL建模:使用建模:使用HDLHDL语言对数字电路的两种基语言对数字电路的两种基本要素的特性及相互之间的关系进行描述。本要素的特性及相互之间的关系进行描述。2.1 建模建模2.Verilog HDL建模概述建模概述是是VerilogVerilog的基本描述单元,用

9、于描述某个设计的功能的基本描述单元,用于描述某个设计的功能或结构及其与其他模块通信的外部端口或结构及其与其他模块通信的外部端口概念上可等同一个器件,如通用器件(与门、三态门概念上可等同一个器件,如通用器件(与门、三态门等)或通用宏单元(计数器、等)或通用宏单元(计数器、ALUALU、CPUCPU)等。)等。模块可被另一个模块调用模块可被另一个模块调用一个电路设计可由多个模块组合而成。一个电路设计可由多个模块组合而成。2.2 模块(模块(module)2.Verilog HDL建模概述建模概述例例1.1.加法器加法器2.2 模块(模块(module)简单实例简单实例module adder (a

10、, b, cin, cout, sum); input 2:0 a; input 2:0 b; input cin; output cout; output 2:0 sum; assign cout,sum = a +b + cin;endmodule2.Verilog HDL建模概述建模概述例例2.2.比较器比较器2.2 模块(模块(module)简单实例简单实例module compare (equal,a,b); input 1:0 a,b; / declare the input signal ; output equal ; / declare the output signal;

11、assign equal = (a = b) ? 1:0 ; /* if a = b , output 1, otherwise 0;*/endmodule2.Verilog HDL建模概述建模概述例例3.3.三态门驱动器三态门驱动器2.2 模块(模块(module)简单实例简单实例module mytri (din, d_en, d_out); input din; input d_en; output d_out; / - Enter your statements here - / assign d_out = d_en ? din :bz;endmodulemodule trist (

12、din, d_en, d_out); input din; input d_en; output d_out; / - statements here - / mytri u_mytri(din,d_en,d_out);endmodule2.Verilog HDL建模概述建模概述模块内容位于模块内容位于module和和endmodule两个语句之间两个语句之间模块包括模块包括接口描述接口描述部分和部分和逻辑功能描述逻辑功能描述部分。可与实际器件部分。可与实际器件相类比相类比每个模块要进行端口定义,并说明输入、输出口,然后对模每个模块要进行端口定义,并说明输入、输出口,然后对模块的功能进行逻辑描

13、述(测试模块例外)块的功能进行逻辑描述(测试模块例外)书写格式自由,一行可以写几个语句,一个语句可以分几行书写格式自由,一行可以写几个语句,一个语句可以分几行写。写。除除endmodule与局外,每个语句后面需要有分号表示该语句与局外,每个语句后面需要有分号表示该语句结束结束2.3 模块的结构模块的结构2.Verilog HDL建模概述建模概述2.4 模块语法模块语法module module_name (port1,port2, .) ;/ D e c l a r a t i o n s :input, output, inout,reg, wire, parameter,function,

14、 task, . . ./S t a t e m e n t s :Initial statementAlways statementModule instantiationGate instantiationContinuous assignmentendmodule2.Verilog HDL建模概述建模概述一个模块用一个文件一个模块用一个文件模块名与文件名要同名模块名与文件名要同名一行一句语句一行一句语句信号方向按输入、输出、双向顺序描述信号方向按输入、输出、双向顺序描述尽量采用参数化,提高设计的重用尽量采用参数化,提高设计的重用2.5 书写语法建议书写语法建议2.Verilog HDL建

15、模概述建模概述信号在电路中传输会有传播延时,如线延时、器件延时等信号在电路中传输会有传播延时,如线延时、器件延时等时延就是对延时特性的时延就是对延时特性的HDL描述描述所有时延都必须根据时间单位进行定义,定义方式为在文件所有时延都必须根据时间单位进行定义,定义方式为在文件头添加如下语句:头添加如下语句: 是是Verilog HDL提供的预编译处理命令,提供的预编译处理命令,1ns表示时表示时间单位是间单位是1ns,100ps表示时间精度是表示时间精度是100ps。2.6 时延时延2.Verilog HDL建模概述建模概述表示表示B信号在信号在2个时间单位后得到个时间单位后得到A信号的值。信号的

16、值。2.6 时延时延时延举例时延举例assign #2 B = A;2.Verilog HDL建模概述建模概述结构化描述方式结构化描述方式数据流描述方式数据流描述方式行为描述方式行为描述方式2.7 三种建模方式三种建模方式2.Verilog HDL建模概述建模概述通过对电路结构的描述来建模,即通过对器件的调用通过对电路结构的描述来建模,即通过对器件的调用(HDL概念称为概念称为“例化例化”),并使用线来连接各器件),并使用线来连接各器件的描述方式的描述方式器件包括:器件包括:Verilog的内置门(如与门的内置门(如与门and,异或门,异或门xor等),也可以是用户的一个设计等),也可以是用户

17、的一个设计反映了一个设计的层次结构反映了一个设计的层次结构2.7 三种建模方式三种建模方式结构化描述方式结构化描述方式2.Verilog HDL建模概述建模概述2.7 三种建模方式三种建模方式结构化描述方式例结构化描述方式例1:一位全加器:一位全加器module FA_struct (A,B,Cin,Sum,Cout); input A; input B; input Cin; output Sum; output Cout; wire S1, T1, T2; /-statements-/ xor X1 (S1, A, B); xor X2 (Sum, S1, Cin); and A1 (T1

18、, S1, Cin); and A2 (T2, A, B); or O1 (Cout, T1, T2);endmodule2.Verilog HDL建模概述建模概述1.两个异或门、两个与门、一个或门两个异或门、两个与门、一个或门2.S1、T1、T2是门与门之间的连线是门与门之间的连线3.纯结构的建模方式纯结构的建模方式4.Xor、and、or为为Verilog内置的门器件内置的门器件xor表明调用一个内置的异或门,器表明调用一个内置的异或门,器件名称件名称xor,代码实例化名,代码实例化名X1;括号;括号内的内的S1,A,B表明该器件管脚的实表明该器件管脚的实际连接线的名称,其中际连接线的名称

19、,其中A、B是输入,是输入,S1是输出。其他相同是输出。其他相同一一位位全全加加器器代代码码2.Verilog HDL建模概述建模概述结构化描述方式例结构化描述方式例2:两位全加器:两位全加器两位全加器结构示意框图两位全加器结构示意框图module Four_bit_FA (FA, FB, FCin, FSum, FCout ) ; parameter SIZE = 2; input SIZE:1 FA; input SIZE:1 FB; input FCin; output SIZE:1 FSum; output FCout; wire FTemp; FA_struct FA1( .A (F

20、A1), .B (FB1), .Cin (FCin) , .Sum (FSum1), .Cout (Ftemp) ); 2.Verilog HDL建模概述建模概述两两位位全全加加器器代代码码注意:注意:.A(FA1)的含义的含义 FA_struct FA2( .A (FA2), .B (FB2), .Cin (FTemp) , .Sum (FSum2), .Cout (FCout ) ); endmodule通过对数据流在设计中的具体行为的描述来建模通过对数据流在设计中的具体行为的描述来建模使用使用连续赋值语句连续赋值语句。借助于借助于Verilog提供的一些运算符,如按位逻辑运算,逻辑与提供

21、的一些运算符,如按位逻辑运算,逻辑与(&),逻辑或(),逻辑或(|)等)等assign #delay net_name = expression;如: assign #2 A = B;2.Verilog HDL建模概述建模概述2.7 三种建模方式三种建模方式数据流描述方式数据流描述方式2.Verilog HDL建模概述2.7 三种建模方式三种建模方式数据流描述方式例数据流描述方式例1:一位全加器:一位全加器timescale 1ns/100ps module FA_flow(A,B,Cin,Sum,Cout) input A,B,Cin; output Sum, Cout; wire

22、S1,T1,T2; assign # 2 S1 = A B; assign # 2 Sum = S1 Cin; assign # 2 T1 = S1 & Cin; assign # 2 T2 = A & B ; assign # 2 Cout = T1 | T2; endmodule2.Verilog HDL建模概述一一位位全全加加器器代代码码 注意:注意:各各assign语句之间是并行执行语句之间是并行执行的,即各语句的执行与语句之的,即各语句的执行与语句之间的顺序无关。间的顺序无关。 如上,当如上,当A有变化时,有变化时,S1、T2将同时变化,将同时变化,S1的变化又会的变

23、化又会造成造成Sum和和T1的同时变化。的同时变化。2.Verilog HDL建模概述采用对信号行为级的描述(不是结构级的描述)的方法来采用对信号行为级的描述(不是结构级的描述)的方法来建模建模一般采用一般采用initial块语句或块语句或always块语句块语句通常采用行为级的运算符如加法(通常采用行为级的运算符如加法(+),减法(),减法(-)运算符)运算符等等2.7 三种建模方式三种建模方式行为描述方式行为描述方式module FA_behav1(A, B, Cin, Sum, Cout ); input A,B,Cin; output Sum,Cout; reg Sum, Cout;

24、reg T1,T2; always ( A or B or Cin ) begin Sum = (A B) Cin ; T1 = (A B) & Cin; T2 = A & B ; Cout = T1| T2; end endmodule2.Verilog HDL建模概述建模概述行为描述方式例行为描述方式例1:一位全加器行为建模一位全加器行为建模注意注意:只有寄存器类型的信号才可以只有寄存器类型的信号才可以在在always和和initial语句中进行赋语句中进行赋值,类型定义通过值,类型定义通过reg语句实现语句实现always语句一直重复执行,由语句一直重复执行,由敏感表中的

25、变量触发敏感表中的变量触发在在begin和和end之间的语句顺序之间的语句顺序执行,属于串行语句执行,属于串行语句module FA_behav2(A, B, Cin, Sum, Cout ); input A,B,Cin; output Sum,Cout; reg Sum, Cout; always ( A or B or Cin ) begin Cout ,Sum = A + B + Cin ; end endmodule2.Verilog HDL建模概述建模概述行为描述方式例行为描述方式例2:一位全加器行为建模一位全加器行为建模采用更高级(更趋于行为级)的描述方式,即直接采用采用更高级(

26、更趋于行为级)的描述方式,即直接采用“+”来描来描述加法述加法Cout , Sun表述将两个信号拼接成一个宽度更长的信号。表述将两个信号拼接成一个宽度更长的信号。2.Verilog HDL建模概述建模概述实际设计中往往是多种设计模式的混合。实际设计中往往是多种设计模式的混合。一般,对顶层设计采用结构描述方式;对底层模块,可采一般,对顶层设计采用结构描述方式;对底层模块,可采用数据流、行为级或两者的结合用数据流、行为级或两者的结合如上面的两位全加器,对顶层模块(如上面的两位全加器,对顶层模块(Four_bit_FA)采用)采用结构描述方式进行结构描述方式进行“例化例化”,对底层模块,对底层模块(

27、FA)可采用结构可采用结构描述、数据流描述或行为描述。描述、数据流描述或行为描述。2.7 三种建模方式三种建模方式混合设计描述混合设计描述3.Verilog HDL基本语法基本语法标识符标识符注释注释格式格式数字值集合数字值集合数据类型数据类型运算符和表达式运算符和表达式条件语句条件语句Case语句语句Verilog HDL基本语法基本语法标识符标识符注释注释格式格式数字值集合数字值集合数据类型数据类型运算符和表达式运算符和表达式条件语句条件语句Case语句语句标识符标识符定义:标识符(定义:标识符(identifier)用于定义模块名、端口名、)用于定义模块名、端口名、信号等。信号等。可以是

28、一组可以是一组字母、数字、字母、数字、$符号和符号和_(下划线下划线)符号符号的组的组合,但标识符的合,但标识符的第一个字符必须是字母或者下划线第一个字符必须是字母或者下划线。另外,另外,标识符区分大小写标识符区分大小写。例:例:Count COUNT /与与Count不同不同 R56_68 FIVE$关键字,关键字,Verilog中的保留字。注意:只有小写的关键中的保留字。注意:只有小写的关键字才是保留字字才是保留字书写规范建议书写规范建议用有意义的有效的名字,如用有意义的有效的名字,如Sum、CPU_addr等等用下划线区分词用下划线区分词采用一些前缀或后缀,采用一些前缀或后缀, 时钟采用

29、时钟采用Clk前缀:前缀:Clk_50,Clk_CPU 低电平采用低电平采用_n后缀:后缀:Enable_n统一一定的缩写,如全局复位信号统一一定的缩写,如全局复位信号Rst同一信号在不同层次保持一致性,如同一时钟信号同一信号在不同层次保持一致性,如同一时钟信号必须在各模块中保持一致必须在各模块中保持一致自定义的标识符不能与保留字同名自定义的标识符不能与保留字同名参数采用大写,如参数采用大写,如SIZEVerilog HDL基本语法基本语法标识符标识符注释注释格式格式数字值集合数字值集合数据类型数据类型运算符和表达式运算符和表达式条件语句条件语句Case语句语句Verilog中有两种注释的方式

30、,一种是一中有两种注释的方式,一种是一“/*”符号开始,符号开始,以以“*/”符号结束,在两个符号之间的语句都是注释语符号结束,在两个符号之间的语句都是注释语句,因此可以扩展到多行。如句,因此可以扩展到多行。如:以上以上n各语句都是注释语句各语句都是注释语句另一种是以另一种是以“/”开头的语句,它表示以开头的语句,它表示以/开始到本行开始到本行的结束都属于注释语句的结束都属于注释语句注释注释/* statement1, statement2, . statementn */Verilog HDL基本语法基本语法标识符标识符注释注释格式格式数字值集合数字值集合数据类型数据类型运算符和表达式运算符

31、和表达式条件语句条件语句Case语句语句格式格式Verilog HDL是区分大小写的,即大小写不同的标识是区分大小写的,即大小写不同的标识符是不同的符是不同的Verilog书写格式自由,一条语句可多行书写;一行可书写格式自由,一条语句可多行书写;一行可写多个语句写多个语句空白(新行、制表符、空格)没有特殊意义空白(新行、制表符、空格)没有特殊意义如如 与与 是一样的是一样的input A; input Binput A;input B;书写规范建议书写规范建议一个语句一行一个语句一行采用空四格的采用空四格的TAB键进行缩进键进行缩进Verilog HDL基本语法基本语法标识符标识符注释注释格式

32、格式数字值集合数字值集合数据类型数据类型运算符和表达式运算符和表达式条件语句条件语句Case语句语句数字值集合数字值集合值的集合值的集合常量(整型、实型、字符型)常量(整型、实型、字符型)变量变量值集合值集合四种基本的值类型四种基本的值类型0:逻辑:逻辑0或或“假假”1:逻辑:逻辑1或或“真真”X:未知值:未知值Z:高阻:高阻四种值得解释内置于语言中四种值得解释内置于语言中与门的输入或表达式中的与门的输入或表达式中的“z”的值通常解释为的值通常解释为“x”X值与值与z值不区分大小写,及值不区分大小写,及0 x1z和和0X1Z相同相同常量常量整型、实型、字符串型整型、实型、字符串型下划线符号下划

33、线符号“_”可随意用在整数或实数中,用来提高可随意用在整数或实数中,用来提高易读性。注:易读性。注:下划线不能作为首字符下划线不能作为首字符。整型书写格式:简单的十进制数格式;基数格式整型书写格式:简单的十进制数格式;基数格式字符串型:双引号内的字符系列。字符串型:双引号内的字符系列。整型整型-简单的十进制格式简单的十进制格式带有一个可选的带有一个可选的“+”或或“-”操作符的数字序列操作符的数字序列例如:例如:32 十进制数十进制数32-15 十进制数十进制数-15整型整型-基数表示法(一)基数表示法(一)格式:格式:sizebase valueSize定义以位计的常量的位长;定义以位计的常

34、量的位长;base为为o或或O(表示八进(表示八进制),制),b或或B(表示二进制),(表示二进制),d或或D(表示十进制),(表示十进制),h或或H(表示十六进制)之一;(表示十六进制)之一;value是基于是基于base的值的数的值的数字序列。值字序列。值x和和z以及十六进制中的以及十六进制中的a到到f不区分大小写不区分大小写整型整型-基数表示法(二)基数表示法(二)合法例子:合法例子:非法例子:非法例子:5o37 /5位常量,值为八进制数37(和5b11111等效)4 d2 /4位常量,值十进制数2(和4b0010等效)4 b1x_01 /4位常量,各位的状态依次为1x_017 hx /

35、7位常量,每位的状态均为未知(和7bxxxxxxx等效)4 hz /4位常量, 每位的状态均为高阻(和4bzzzz等效)8 h 2A /位长和单引号之间以及基数和数字之间允许出现空格3 b 001 /非法:和基数b之间不允许出现空格(2+3) b10 /非法:位长不能为表达式4 d-4 /非法:数值不能为负,符号应放在最左边注意:注意:x(或(或z)在十六进制中代表)在十六进制中代表4位位x(或(或z),在八进制),在八进制中代表中代表3位位x(或(或z),在二进制中代表),在二进制中代表1位位x(或(或z)。)。整型数的长度定义是可选的,如没有定义长度,数的长度整型数的长度定义是可选的,如没

36、有定义长度,数的长度为相应值中定义的位数,如:为相应值中定义的位数,如:如果定义的长度比常量制定的长度长,通常在左边填如果定义的长度比常量制定的长度长,通常在左边填0补位。补位。但是如果数最左边一位为但是如果数最左边一位为“x”或或“z”,就相应地用,就相应地用x或或z在左在左边补位。如:边补位。如:如果长度定义的要小,最左边的位相应地被截断。如:如果长度定义的要小,最左边的位相应地被截断。如:o 721 /9位八进制数h AF /8位十六进制数整型整型-基数表示法(三)基数表示法(三)10b10 /左边填0占位,等价于10b000000001010bx0 x1 /左边填X占位,等价于10bx

37、xxxxxx0 x13b1001_0011 /与3b011等价5H0FF /与5H1F等价字符串型字符串型双引号内的字符序列。字符串不能分成多行书写。双引号内的字符序列。字符串不能分成多行书写。例:例:整数型常量是可以综合的,而实数型和字符串型常量都是整数型常量是可以综合的,而实数型和字符串型常量都是不可综合的不可综合的INTERNAL ERRORthis is an example for Verilog HDLVerilog HDL基本语法基本语法标识符标识符注释注释格式格式数字值集合数字值集合数据类型数据类型运算符和表达式运算符和表达式条件语句条件语句Case语句语句数据类型数据类型线网

38、类型(线网类型(net type)寄存器类型(寄存器类型(reg type)数据类型数据类型-线网类型(线网类型(net type)常用常用wire定义定义用于对结构化器件之间的物理连线建模用于对结构化器件之间的物理连线建模代表物理连接线,不存储逻辑值,必须由器件驱动,通常代表物理连接线,不存储逻辑值,必须由器件驱动,通常由由assign进行赋值,如:进行赋值,如:当一个当一个wire类型的信号没有被驱动时,缺省值为类型的信号没有被驱动时,缺省值为z(高阻)(高阻)信号非有定义数据类型时,缺省为信号非有定义数据类型时,缺省为wire类型类型语法:语法:assign A = B C;wire m

39、sb:lsb wire1, wire2, . , wireN;数据类型数据类型-寄存器类型(寄存器类型(reg type)reg是最常用的寄存器类型,用于对存储单元的描述,如是最常用的寄存器类型,用于对存储单元的描述,如D触发器,触发器,ROM。在某种触发机制下分配一个值,在分配下一个值之前保留在某种触发机制下分配一个值,在分配下一个值之前保留原值原值reg类型的变量,不一定是存储单元,如在类型的变量,不一定是存储单元,如在always语句中进语句中进行描述的必须用行描述的必须用reg类型的变量。类型的变量。语法:语法:例:例:reg msb:lsb reg1, reg2, . , regN;

40、reg 3:0 Sat; /Sat为4位寄存器类型信号reg Cnt; /1位寄存器类型reg1:32 Kisp, pisp, lisp; /3个32位寄存器类型信号数据类型数据类型-寄存器类型(寄存器类型(reg type)建模举例:建模举例:用寄存器类型构建两位的用寄存器类型构建两位的D触发器:触发器:用寄存器数组类型来建立存储器的模型,如对用寄存器数组类型来建立存储器的模型,如对2个个8位的位的RAM建模如下:建模如下:存储单元必须一个一个地赋值存储单元必须一个一个地赋值reg 1:0 Dout;.always(posedge clk) Dout 大于大于=不小于不小于45 /结果为Fa

41、lse(0);52=b01110; /等价于b01000=b01110;结果为假(0)Data = b11x0;Addr = b11x0;Data = Addr /比较结果不定,也就是说值为x运算符运算符-逻辑运算符(一)逻辑运算符(一)包括:包括:&逻辑与逻辑与|逻辑或逻辑或! 逻辑非逻辑非语法:(表达式语法:(表达式1) 逻辑运算符逻辑运算符 (表达式(表达式2)运算结果为运算结果为0或或1,例:,例:Crd=b0; /0为假Dgs=b1; /1为真Crd&Dgs /结果为0(假)Crd|Dgs /结果为1(真)!Dgs /结果为0(假)运算符运算符-逻辑运算符(二)逻辑运

42、算符(二)逻辑与(逻辑与(&)的真值表:)的真值表:逻辑或(逻辑或(|)的真值表:)的真值表:运算符运算符-按位逻辑运算符(一)按位逻辑运算符(一)包括:包括:一元非,相当于非门运算一元非,相当于非门运算& 二元与,相当于与门运算二元与,相当于与门运算|二元或,相当于或门运算二元或,相当于或门运算二元异或,相当于异或门运算二元异或,相当于异或门运算, 二元异或非,即同或,相当于同或门运算二元异或非,即同或,相当于同或门运算在输入操作数的对应位上按位操作,产生向量结果。在输入操作数的对应位上按位操作,产生向量结果。运算符运算符-按位逻辑运算符(二)按位逻辑运算符(二)按位逻辑运算

43、符真值表:按位逻辑运算符真值表:运算符运算符-按位逻辑运算符(三)按位逻辑运算符(三)例:例:如果操作数长度不相等,长度较小的操作数在最左端填如果操作数长度不相等,长度较小的操作数在最左端填0补位。例如:补位。例如:A = b0110;B = b0100;A|B /结果为b0110A&B /结果为b0100b0110b10000/与下式的操作相同b00110b10000/结果为:b10110运算符运算符-条件运算符条件运算符根据条件表达式的值选择表达式根据条件表达式的值选择表达式语法:语法:cond_expr ? expr1 : expr2;如果如果cond_expr为真(为真(1),

44、选项),选项expr1,如果,如果cond_expr为为假(假(0),选择),选择expr2.如果如果cond_expr为为x或或z,结果是按以,结果是按以下逻辑下逻辑expr1和和expr2按位操作的值:按位操作的值:0与与0得得1,1与与1得得1,其余情况为其余情况为x例:例:wire 2:0 Student = Marks18 ? Grade_A : Grade_C;/计算表达式Marks18,如果为真,Grade_Aa赋值给Stuent;/如果为假,Grade_c赋值给Student运算符运算符-连接运算符连接运算符将小表达式合并形成大表达式将小表达式合并形成大表达式语法:语法:exp

45、r1, expr2, , exprN例:例:wire 7:0 Dbus;assign Dbus7:4 = Dbus0, Dbus1, Dbus2, Dbus3;/以反转的顺序将低端4位赋给高端4位assign Dbus = Dbus3:0, Dbus7:4;/高4位与低4位交换运算符:移位运算符运算符:移位运算符 右移位运算符右移位运算符语法:语法:an 或或 a2的值为的值为5b00110 Ab) begin out1=int1; out2=int2; endelse begin out1=int2; out2=int1; end说明:说明:4.允许一定形式的表达式简写,例如:允许一定形式的

46、表达式简写,例如:5.if语句的嵌套语句的嵌套注意注意if和和else的配对关系,的配对关系,else总是与它上面最近的总是与它上面最近的if配对。配对。if(expression) 等同于 if(expression = 1)if(!expression) 等同于 if(expression != 1)if(condition_1) if(condition_2) procedural_statement_1; else procedural_statement_2;else if(condition_3) procedural_statement_3; else procedural_st

47、atement_4;例例2:if(condition_1) begin if(condition_2) procedural_statement_1; endelse procedural_statement_2;可以用可以用begin、end块语句来确定配对关系。块语句来确定配对关系。例例1:if(condition_1) begin if(condition_2) procedural_statement_1; else procedural_statement_2; end例:模为例:模为60的的8421BCD码加法计数器码加法计数器BCD码码4位,位,0-9有进位输入,结果加有进位输入

48、,结果加1输出,计数满输出,计数满60之后产生一之后产生一个进位输出个进位输出Verilog HDL基本语法基本语法标识符标识符注释注释格式格式数字值集合数字值集合数据类型数据类型运算符运算符If_else语句语句Case语句语句case语句语句多分支选择语句多分支选择语句三种形式:三种形式:1.case(表达式)(表达式) endcase2.casez(表达式)(表达式) endcase3. casex(表达式)(表达式) endcase语法:语法:case(case_expr) case_item_expr_1 : procedural_statement_1; case_item_exp

49、r_2 : procedural_statement_2; . . . case_item_expr_m : procedural_statement_m; default:procedural_statement_n;endcase说明:说明:1.case括号中的表达式称为括号中的表达式称为控制表达式控制表达式,分支项中的表达式,分支项中的表达式称为称为分支表达式分支表达式。2.当控制表达式的值与分支表达式的值项相等时,就执行分当控制表达式的值与分支表达式的值项相等时,就执行分支表达式后面的语句;如果所有的分支表达式的值都没有支表达式后面的语句;如果所有的分支表达式的值都没有与控制表达式的值

50、相匹配,就执行与控制表达式的值相匹配,就执行default后面的语句后面的语句3.default项可有可无,一个项可有可无,一个case语句只能有一个语句只能有一个default项项4.每个分支表达式的值必须互不相同,否则会出现矛盾。每个分支表达式的值必须互不相同,否则会出现矛盾。5.所有表达式值的位宽必须相等。所有表达式值的位宽必须相等。6.case、casez、casex的区别,的区别,case为全等比较,为全等比较,casez对表达对表达式中出现式中出现z的相应位不予比较,的相应位不予比较,casex对表达式中出现对表达式中出现x、z的相应位均不予比较,见真值表的相应位均不予比较,见真值

51、表例:例:BCD码七段数码显示译码器码七段数码显示译码器三种建模方式详解三种建模方式详解结构建模结构建模数据流建模数据流建模行为建模行为建模三种建模方式详解三种建模方式详解结构建模结构建模数据流建模数据流建模行为建模行为建模结构建模(一)结构建模(一)描述语句主要是实例化语句描述语句主要是实例化语句实例化的对象主要是实例化的对象主要是PLD厂家提供的宏单元和设计者厂家提供的宏单元和设计者已有的设计已有的设计结构建模(二)结构建模(二)实例化语句实例化语句语法:语法:module_name instance_name ( port_associations);端口关联可通过位置或名称关联,但两者

52、不能混用端口关联可通过位置或名称关联,但两者不能混用通过位置关联通过位置关联(port_expr1, port_expr2, , port_exprn);通过名称关联通过名称关联(.PortName(portexpr1), .PortName(port_expr2), .PortName(port_exprn);结构建模(二)结构建模(二)实例化语句实例化语句例:例:module and_ins(DO,D1,D2); input D1,D2; output DO; wire T1,T2; /采用位置关联,T1对应输出端口,D1、D2对应两个输入端口 and A1(T1,D1,D2); /采用名

53、称关联,C是test模块的端口,与信号T2相连 test O1( .C(T2), .A(D1), .B(D2); assign DO=T1T2; endmodule结构建模(二)结构建模(二)实例化语句实例化语句说明:说明:port_expr可以是一下任何类型可以是一下任何类型标识符,标识符,reg或或wire。如,上例中的。如,上例中的T3为为wire型型位选项则。如,位选项则。如,.c(D0),c端口接到端口接到D信号的第信号的第0位位部分选择。如,部分选择。如,.Bus(Din5:4)上述类型的合并。如,上述类型的合并。如,.Addr(A1, A21:0)表达式(只适用于输入端口),如,

54、表达式(只适用于输入端口),如,.A(wire Zire=0)建议:尽量采用名称关联建议:尽量采用名称关联结构建模(二)结构建模(二)实例化语句实例化语句端口悬空的处理:实例化时,可能有些管教没有用到,可在端口悬空的处理:实例化时,可能有些管教没有用到,可在映射中采用空白处理。映射中采用空白处理。对输入管教悬空,则该管教输入为高阻对输入管教悬空,则该管教输入为高阻Z,输入管教被悬空,输入管教被悬空,该输出管教废弃不用。该输出管教废弃不用。DFF d1 ( .Q(QS), .Qbar ( ), .Data (D) , .Preset ( ), / 该管脚悬空 .Clock (CK); /名称对应

55、方式。三种建模方式详解三种建模方式详解结构建模结构建模数据流建模数据流建模行为建模行为建模数据流建模(一)数据流建模(一)主要描述方式为持续性赋值语句主要描述方式为持续性赋值语句数据流建模(二)数据流建模(二)持续性赋值语句持续性赋值语句也称连续赋值语句(也称连续赋值语句(continuous assignment)对线网类型变量赋值对线网类型变量赋值语法:语法:主要用于组合逻辑的建模主要用于组合逻辑的建模执行过程:只要右边表达式任一个变量有变化,表执行过程:只要右边表达式任一个变量有变化,表达式立即被计算,计算的结果立即赋给左边信号达式立即被计算,计算的结果立即赋给左边信号为并行执行语句,与

56、书写顺序无关为并行执行语句,与书写顺序无关assign net_type = expression;数据流建模(二)数据流建模(二)持续性赋值语句持续性赋值语句举例:举例:wire 3:0 Z, Preset, Clear; /线网说明assign Z = Preset & Clear; /连续赋值语句wire Cout, C i n ;wire 3:0 Sum, A, B;. . .assign Cout, Sum = A + B + Cin;assign Mux = (S = = 3)? D : bz;三种建模方式详解三种建模方式详解结构建模结构建模数据流建模数据流建模行为建模行为

57、建模行为建模行为建模通过对设计的行为的描述来实现对设计建模通过对设计的行为的描述来实现对设计建模一般采用过程语句(一般采用过程语句(initial语句和语句和always语句)语句)行为建模行为建模initial语句语句语法语法1:initial 语句语句1;语法语法2:只执行一次只执行一次常用于产生激励信号或寄存器变量的初始化常用于产生激励信号或寄存器变量的初始化常用于仿真中的初始化常用于仿真中的初始化initial begin statement1; statement2; . . . statementn; end行为建模行为建模initial语句语句例:用例:用initial语句产生激

58、励信号语句产生激励信号timescale 1ns/1nsmodule test; reg A,B,C; wire D; initial begin A=0;B=1;c=0; #50 A=1;B=0; #50 A=0;C=1; #50 B=1; #50 B=0;C=0; end and3 t1(D,A,B,C); endmodule行为建模行为建模always语句语句语法语法1:always 时序控制时序控制 语句语句1;语法语法2:always语句不断重复执行,即一直检测时序控制条件,一旦语句不断重复执行,即一直检测时序控制条件,一旦满足,其后的语句被执行一次满足,其后的语句被执行一次alwa

59、ys 时序控制 begin statement1; statement2; . statementn; end行为建模行为建模always语句语句例:例:时序控制通常为敏感信号表达式,当表达式中变量的值改变时序控制通常为敏感信号表达式,当表达式中变量的值改变时,其后的语句被执行一次,多个表达式之间用时,其后的语句被执行一次,多个表达式之间用“or”连接,连接,此时的语法为:此时的语法为:敏感信号一般为两种类型:边沿敏感型和电平敏感型,两者敏感信号一般为两种类型:边沿敏感型和电平敏感型,两者一般不要在一个一般不要在一个always语句中同时使用语句中同时使用 always #5 areg = a

60、reg; always (敏感信号表达式) begin n条语句; end行为建模行为建模always语句语句边沿触发的边沿触发的always常常描述时序行为,综合后生成的电路为常常描述时序行为,综合后生成的电路为寄存器加门级组合逻辑寄存器加门级组合逻辑电平触发的电平触发的always常常描述组合逻辑行为,综合后生成的电常常描述组合逻辑行为,综合后生成的电路为门级组合逻辑或带锁存器的组合逻辑路为门级组合逻辑或带锁存器的组合逻辑例:例:always (posedge clk or posedge clr) /两个敏感信号都是边沿型always (A or B) /两个敏感信号都是电平敏感型always (posedge clk or clr) /不建议使用,两种敏感类型不要

温馨提示

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

评论

0/150

提交评论