版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、三、 Verilog HDL硬件描述语言,大规模可编程器件技术,课程安排,一、可编程逻辑器件基础 二、数字系统设计方法 三、Verilog HDL硬件描述语言 四、开发软件介绍 五、应用实验 六、考核方式,三、Verilog HDL硬件描述语言,1. Verilog HDL概述 2. Verilog HDL建模概述 3. Verilog HDL基本语法 4. Verilog HDL的顺序执行与并发执行 5.条件语句使用要点 6.设计的可综合性 7.基本电路的verilog描述-组合电路,1.Verilog HDL概述,1.1什么是Verilog HDL?,Verilog HDL(Verilog
2、 Hardware Discription Language) 一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。 可以对硬件的并发执行过程进行建模,1.Verilog HDL概述,1.2 Verilog的历史,1983年由Gateway Design Automation公司(后被Cadence收购)首创 1990年,Cadence公司成立OVI(Open Verilog International)组织来推广Verilog HDL 1995年,IEEE制定了Verilog HDL标准,即IEEE Std 1364 1995(Verilog-1995) 2001年
3、,IEEE 1364-2001(Verilog-2001)获得通过,1.Verilog HDL概述,1.3 Verilog与VHDL,均为硬件描述语言,应用都很普遍 VHDL由美国国防部高级研究计划署开发 两者的区别: VHDL侧重于系统级描述,从而更多的为系统级设计人员所采用 Verilog侧重于电路级描述,从而更多的为电路级设计人员所采用,1.Verilog HDL概述,1.4 Verilog HDL与 C语言,C语言:计算机程序设计语言,顺序执行 Verilog HDL:语法与C语言接近,硬件描述语言,对硬件的并发执行过程进行建模 利用Verilog HDL编程时,要时刻记得Verilo
4、g HDL是硬件语言,要将Verilog HDL与硬件电路对应起来,1.Verilog HDL概述,1.5 四种抽象层次,行为或算法级:Verilog所支持的最高抽象层次。设计者只注重其实现的算法,不用关心其具体的硬件实现细节。与C语言编程类似。 数据流级:通过描述数据流在寄存器间如何传输以及如何处理这些数据来对设计进行建模。 门级:从组成电路的逻辑门及其相互之间的互连关系的角度来设计模块。类似于使用门级逻辑简图来完成设计。 开关级:Verilog所支持的最低抽象层。通过使用开关、存储节点及其互连关系来设计模块。 术语RTL级(寄存器传输级):通常指能够被逻辑综合工具接受的行为级和数据流级的混
5、合描述,在一个模块中可以混合使用多个抽象层次,2.Verilog HDL建模概述,数字电路=线+器件 线:器件管教之间的物理连接 器件:组合逻辑(如与或非门等)和时序逻辑器件(如寄存器、锁存器、RAM等) Verilog HDL建模:使用HDL语言对数字电路的两种基本要素的特性及相互之间的关系进行描述。,2.1 建模,2.Verilog HDL建模概述,是Verilog的基本描述单元,用于描述某个设计的功能或结构及其与其他模块通信的外部端口 概念上可等同一个器件,如通用器件(与门、三态门等)或通用宏单元(计数器、ALU、CPU)等。 模块可被另一个模块调用 一个电路设计可由多个模块组合而成。,
6、2.2 模块(module),2.Verilog HDL建模概述,例1.加法器,2.2 模块(module),简单实例,module adder (a, 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; endmodule,2.Verilog HDL建模概述,例2.比较器,2.2 模块(module),简单实例,module compare (equal,a,b); input 1:0 a,b; / declare
7、 the input signal ; output equal ; / declare the output signal; assign equal = (a = b) ? 1:0 ; /* if a = b , output 1, otherwise 0;*/ endmodule,2.Verilog HDL建模概述,例3.三态门驱动器,2.2 模块(module),简单实例,module mytri (din, d_en, d_out); input din; input d_en; output d_out; / - Enter your statements here - / ass
8、ign d_out = d_en ? din :bz; endmodule,module trist (din, d_en, d_out); input din; input d_en; output d_out; / - statements here - / mytri u_mytri(din,d_en,d_out); endmodule,2.Verilog HDL建模概述,模块内容位于module和endmodule两个语句之间 模块包括接口描述部分和逻辑功能描述部分。可与实际器件相类比 每个模块要进行端口定义,并说明输入、输出口,然后对模块的功能进行逻辑描述(测试模块例外) 书写格式自
9、由,一行可以写几个语句,一个语句可以分几行写。 除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, task, . . . /S t a t e m e n t s : Initial statement Always statement Module instantia
10、tion Gate instantiation Continuous assignment endmodule,2.Verilog HDL建模概述,一个模块用一个文件 模块名与文件名要同名 一行一句语句 信号方向按输入、输出、双向顺序描述 尽量采用参数化,提高设计的重用,2.5 书写语法建议,2.Verilog HDL建模概述,信号在电路中传输会有传播延时,如线延时、器件延时等 时延就是对延时特性的HDL描述 所有时延都必须根据时间单位进行定义,定义方式为在文件头添加如下语句: 是Verilog HDL提供的预编译处理命令,1ns表示时间单位是1ns,100ps表示时间精度是100ps。,2.
11、6 时延,2.Verilog HDL建模概述,表示B信号在2个时间单位后得到A信号的值。,2.6 时延,时延举例,assign #2 B = A;,2.Verilog HDL建模概述,结构化描述方式 数据流描述方式 行为描述方式,2.7 三种建模方式,2.Verilog HDL建模概述,通过对电路结构的描述来建模,即通过对器件的调用(HDL概念称为“例化”),并使用线来连接各器件的描述方式 器件包括:Verilog的内置门(如与门and,异或门xor等),也可以是用户的一个设计 反映了一个设计的层次结构,2.7 三种建模方式,结构化描述方式,2.Verilog HDL建模概述,2.7 三种建模
12、方式,结构化描述方式例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, S1, Cin); and A2 (T2, A, B); or O1 (Cout, T1, T2); endmodule,2.Verilog HDL建模概述,1.两个异或门、两个与门、一个或门 2.S1、T1
13、、T2是门与门之间的连线 3.纯结构的建模方式 4.Xor、and、or为Verilog内置的门器件,xor表明调用一个内置的异或门,器件名称xor,代码实例化名X1;括号内的S1,A,B表明该器件管脚的实际连接线的名称,其中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
14、 FCin; output SIZE:1 FSum; output FCout; wire FTemp; FA_struct FA1( .A (FA1), .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,assign #delay net_name = exp
15、ression; 如: assign #2 A = B;,2.Verilog HDL建模概述,通过对数据流在设计中的具体行为的描述来建模 使用连续赋值语句。 借助于Verilog提供的一些运算符,如按位逻辑运算,逻辑与( output Sum, Cout; wire S1,T1,T2; assign # 2 S1 = A B; assign # 2 Sum = S1 Cin; assign # 2 T1 = S1 endmodule,2.Verilog HDL建模概述,一 位 全 加 器 代 码,注意: 各assign语句之间是并行执行的,即各语句的执行与语句之间的顺序无关。 如上,当A有变化
16、时,S1、T2将同时变化,S1的变化又会造成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; reg T1,T2; always ( A or B or Cin ) begin Sum = (A B) Cin ;
17、T1 = (A B) end endmodule,2.Verilog HDL建模概述,行为描述方式例1:一位全加器行为建模,注意: 只有寄存器类型的信号才可以在always和initial语句中进行赋值,类型定义通过reg语句实现 always语句一直重复执行,由敏感表中的变量触发 在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 =
18、A + B + Cin ; end endmodule,2.Verilog HDL建模概述,行为描述方式例2:一位全加器行为建模,采用更高级(更趋于行为级)的描述方式,即直接采用“+”来描述加法 Cout , Sun表述将两个信号拼接成一个宽度更长的信号。,2.Verilog HDL建模概述,实际设计中往往是多种设计模式的混合。 一般,对顶层设计采用结构描述方式;对底层模块,可采用数据流、行为级或两者的结合 如上面的两位全加器,对顶层模块(Four_bit_FA)采用结构描述方式进行“例化”,对底层模块(FA)可采用结构描述、数据流描述或行为描述。,2.7 三种建模方式,混合设计描述,3.Ve
19、rilog HDL基本语法,标识符 注释 格式 数字值集合 数据类型 运算符和表达式 条件语句 Case语句,Verilog HDL基本语法,标识符 注释 格式 数字值集合 数据类型 运算符和表达式 条件语句 Case语句,标识符,定义:标识符(identifier)用于定义模块名、端口名、信号等。 可以是一组字母、数字、$符号和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符区分大小写。 例:Count COUNT /与Count不同 R56_68 FIVE$ 关键字,Verilog中的保留字。注意:只有小写的关键字才是保留字,书写规范建议,用有意义的有效的名字
20、,如Sum、CPU_addr等 用下划线区分词 采用一些前缀或后缀, 时钟采用Clk前缀:Clk_50,Clk_CPU 低电平采用_n后缀:Enable_n 统一一定的缩写,如全局复位信号Rst 同一信号在不同层次保持一致性,如同一时钟信号必须在各模块中保持一致 自定义的标识符不能与保留字同名 参数采用大写,如SIZE,Verilog HDL基本语法,标识符 注释 格式 数字值集合 数据类型 运算符和表达式 条件语句 Case语句,注释,Verilog中有两种注释的方式,一种是一“/*”符号开始,以“*/”符号结束,在两个符号之间的语句都是注释语句,因此可以扩展到多行。如: 以上n各语句都是注
21、释语句 另一种是以“/”开头的语句,它表示以/开始到本行的结束都属于注释语句,/* statement1, statement2, . statementn */,Verilog HDL基本语法,标识符 注释 格式 数字值集合 数据类型 运算符和表达式 条件语句 Case语句,格式,Verilog HDL是区分大小写的,即大小写不同的标识符是不同的 Verilog书写格式自由,一条语句可多行书写;一行可写多个语句 空白(新行、制表符、空格)没有特殊意义 如 与 是一样的,input A; input B,input A; input B;,书写规范建议,一个语句一行 采用空四格的TAB键进行缩
22、进,Verilog HDL基本语法,标识符 注释 格式 数字值集合 数据类型 运算符和表达式 条件语句 Case语句,数字值集合,值的集合 常量(整型、实型、字符型) 变量,值集合,四种基本的值类型 0:逻辑0或“假” 1:逻辑1或“真” X:未知值 Z:高阻 四种值得解释内置于语言中 与门的输入或表达式中的“z”的值通常解释为“x” X值与z值不区分大小写,及0 x1z和0X1Z相同,常量,整型、实型、字符串型 下划线符号“_”可随意用在整数或实数中,用来提高易读性。注:下划线不能作为首字符。 整型书写格式:简单的十进制数格式;基数格式 字符串型:双引号内的字符系列。,整型-简单的十进制格式
23、,带有一个可选的“+”或“-”操作符的数字序列 例如: 32 十进制数32 -15 十进制数-15,整型-基数表示法(一),格式:sizebase value Size定义以位计的常量的位长;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
24、_01 7 hx /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)。 整型数的长度定义是可选的,如没有定义长度,数的长度为相应值中定义的位数,如: 如果定义的长度比常量制定的长度长,通常在左边填0补位。
25、但是如果数最左边一位为“x”或“z”,就相应地用x或z在左边补位。如: 如果长度定义的要小,最左边的位相应地被截断。如:,o 721 /9位八进制数 h AF /8位十六进制数,整型-基数表示法(三),10b10 /左边填0占位,等价于10b0000000010 10bx0 x1 /左边填X占位,等价于10bxxxxxxx0 x1,3b1001_0011 /与3b011等价 5H0FF /与5H1F等价,字符串型,双引号内的字符序列。字符串不能分成多行书写。 例: 整数型常量是可以综合的,而实数型和字符串型常量都是不可综合的,INTERNAL ERROR this is an example
26、for Verilog HDL,Verilog HDL基本语法,标识符 注释 格式 数字值集合 数据类型 运算符和表达式 条件语句 Case语句,数据类型,线网类型(net type) 寄存器类型(reg type),数据类型-线网类型(net type),常用wire定义 用于对结构化器件之间的物理连线建模 代表物理连接线,不存储逻辑值,必须由器件驱动,通常由assign进行赋值,如: 当一个wire类型的信号没有被驱动时,缺省值为z(高阻) 信号非有定义数据类型时,缺省为wire类型 语法:,assign A = B C;,wire msb:lsb wire1, wire2, . , wi
27、reN;,数据类型-寄存器类型(reg type),reg是最常用的寄存器类型,用于对存储单元的描述,如D触发器,ROM。 在某种触发机制下分配一个值,在分配下一个值之前保留原值 reg类型的变量,不一定是存储单元,如在always语句中进行描述的必须用reg类型的变量。 语法: 例:,reg msb:lsb reg1, reg2, . , regN;,reg 3:0 Sat; /Sat为4位寄存器类型信号 reg Cnt; /1位寄存器类型 reg1:32 Kisp, pisp, lisp; /3个32位寄存器类型信号,数据类型-寄存器类型(reg type),建模举例: 用寄存器类型构建两
28、位的D触发器: 用寄存器数组类型来建立存储器的模型,如对2个8位的RAM建模如下: 存储单元必须一个一个地赋值,reg 1:0 Dout; . always(posedge clk) Dout = Din; .,reg7:0 Mem0:1; Mem0 = h55; Mem1 = haa;,Verilog HDL基本语法,标识符 注释 格式 数字值集合 数据类型 运算符 条件语句 Case语句,运算符,关系运算符 算术运算符 逻辑运算符 按位逻辑运算符 条件运算符 连接运算符 移位运算符,运算符-算术运算符,常用算术运算符: 加法(二元运算符):“+” 减法(二元运算符):“-” 乘法(二元运算
29、符):“*” 除法(二元运算符):“/” 求余(二元运算符):“%”,运算符-关系运算符(一),包括: 大于 =不小于 =不大于 =等于 =全等 !=不等 !=不全等 结果为True(1)或False(0)。如果操作数中有一位为x或z,那么结果为x,运算符-关系运算符(二),例: 如果操作数长度不同,长度较短的操作数在左方填0补齐。例: 逻辑相等与不等的比较中,只要一个操作数含有x或z,比较结果为未知(x)。如:,2345 /结果为False(0); 528hxFF /结果为x,b1000=b01110; /等价于b01000=b01110;结果为假(0),Data = b11x0; Addr
30、 = b11x0; Data = Addr /比较结果不定,也就是说值为x,运算符-逻辑运算符(一),包括: /0为假 Dgs=b1; /1为真 Crd B = b0100; A|B /结果为b0110 A 如果cond_expr为真(1),选项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赋值给Stue
31、nt; /如果为假,Grade_c赋值给Student,运算符-连接运算符,将小表达式合并形成大表达式 语法:expr1, 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 A2的值为5b00100,Verilog HDL基本语法,标识符 注释 格式 数字值集合 数据类型 运算符 If_el
32、se语句 Case语句,If_else语句,用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。 三种形式:,If_else语句的三种形式,(1): if(condition) procedural_statement; (2): if(condition) procedural_statement_1; /语句1 else procedural_statement_2; /语句2 (3): if(condition_1) procedural_statement_1; /语句1 else if(condition_2) procedural_statement_
33、2; /语句2 . . . else if(condition_m) procedural_statement_m; /语句m else procedural_statement_n; /语句n,说明:,1.if语句后面都有表达式,一般为逻辑表达式或关系表达式。0、x、z按“假”处理,1按“真”处理。 2.注意分号的使用,if、else合起来是一条语句,else不能单独使用 3.if、else后面如果有多个操作语句,必须用begin和end关键字包含起来组成为一个复合语句,例,if(ab) begin out1=int1; out2=int2; end else begin out1=int2
34、; out2=int1; end,说明:,4.允许一定形式的表达式简写,例如: 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 pro
35、cedural_statement_4;,例2:,if(condition_1) begin if(condition_2) procedural_statement_1; end else 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 有进位输入,结果加1输出,计数满60之后产生一个进
36、位输出,Verilog HDL基本语法,标识符 注释 格式 数字值集合 数据类型 运算符 If_else语句 Case语句,case语句,多分支选择语句 三种形式: 1.case(表达式) endcase 2.casez(表达式) endcase 3. casex(表达式) endcase 语法:,case(case_expr) case_item_expr_1 : procedural_statement_1; case_item_expr_2 : procedural_statement_2; . . . case_item_expr_m : procedural_statement_m;
37、 default:procedural_statement_n; endcase,说明:,1.case括号中的表达式称为控制表达式,分支项中的表达式称为分支表达式。 2.当控制表达式的值与分支表达式的值项相等时,就执行分支表达式后面的语句;如果所有的分支表达式的值都没有与控制表达式的值相匹配,就执行default后面的语句 3.default项可有可无,一个case语句只能有一个default项 4.每个分支表达式的值必须互不相同,否则会出现矛盾。 5.所有表达式值的位宽必须相等。 6.case、casez、casex的区别,case为全等比较,casez对表达式中出现z的相应位不予比较,ca
38、sex对表达式中出现x、z的相应位均不予比较,见真值表,例:BCD码七段数码显示译码器,三种建模方式详解,结构建模 数据流建模 行为建模,三种建模方式详解,结构建模 数据流建模 行为建模,结构建模(一),描述语句主要是实例化语句 实例化的对象主要是PLD厂家提供的宏单元和设计者已有的设计,结构建模(二)实例化语句,语法: module_name instance_name ( port_associations); 端口关联可通过位置或名称关联,但两者不能混用 通过位置关联 (port_expr1, port_expr2, , port_exprn); 通过名称关联 (.PortName(po
39、rtexpr1), .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); /采用名称关联,C是test模块的端口,与信号T2相连 test O1( .C(T2), .A(D1), .B(D2); assign DO=T1T2; endmodule,结构建模(二)实例化语句,说明:port_expr可以是一下
40、任何类型 标识符,reg或wire。如,上例中的T3为wire型 位选项则。如,.c(D0),c端口接到D信号的第0位 部分选择。如,.Bus(Din5:4) 上述类型的合并。如,.Addr(A1, A21:0) 表达式(只适用于输入端口),如,.A(wire Zire=0) 建议:尽量采用名称关联,结构建模(二)实例化语句,端口悬空的处理:实例化时,可能有些管教没有用到,可在映射中采用空白处理。 对输入管教悬空,则该管教输入为高阻Z,输入管教被悬空,该输出管教废弃不用。,DFF d1 ( .Q(QS), .Qbar ( ), .Data (D) , .Preset ( ), / 该管脚悬空
41、.Clock (CK) ); /名称对应方式。,三种建模方式详解,结构建模 数据流建模 行为建模,数据流建模(一),主要描述方式为持续性赋值语句,数据流建模(二)持续性赋值语句,也称连续赋值语句(continuous assignment) 对线网类型变量赋值 语法: 主要用于组合逻辑的建模 执行过程:只要右边表达式任一个变量有变化,表达式立即被计算,计算的结果立即赋给左边信号 为并行执行语句,与书写顺序无关,assign net_type = expression;,数据流建模(二)持续性赋值语句,举例:,wire 3:0 Z, Preset, Clear; /线网说明 assign Z =
42、 Preset ,三种建模方式详解,结构建模 数据流建模 行为建模,行为建模,通过对设计的行为的描述来实现对设计建模 一般采用过程语句(initial语句和always语句),行为建模initial语句,语法1:initial 语句1; 语法2: 只执行一次 常用于产生激励信号或寄存器变量的初始化 常用于仿真中的初始化,initial begin statement1; statement2; . . . statementn; end,行为建模initial语句,例:用initial语句产生激励信号,timescale 1ns/1ns module test; reg A,B,C; wire
43、 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语句不断重复执行,即一直检测时序控制条件,一旦满足,其后的语句被执行一次,always 时序控制 begin statement1; statement2; . statementn; end,行为建模always语句,例: 时序控制通常为敏感信号表达式,当表达式中变量的值改变时,其后的
44、语句被执行一次,多个表达式之间用“or”连接,此时的语法为: 敏感信号一般为两种类型:边沿敏感型和电平敏感型,两者一般不要在一个always语句中同时使用,always #5 areg = areg;,always (敏感信号表达式) begin n条语句; end,行为建模always语句,边沿触发的always常常描述时序行为,综合后生成的电路为寄存器加门级组合逻辑 电平触发的always常常描述组合逻辑行为,综合后生成的电路为门级组合逻辑或带锁存器的组合逻辑 例:,always (posedge clk or posedge clr) /两个敏感信号都是边沿型 always (A or
45、B) /两个敏感信号都是电平敏感型 always (posedge clk or clr) /不建议使用,两种敏感类型不要同时使用,行为建模posedge和negedge关键字,对时序电路的建模(时序电路由时钟边沿触发) posedge表示上升沿;negedge表示下降沿 注意同步、异步控制信号的描述方法,行为建模posedge和negedge关键字,例1:同步置位、同步清零的计数器,module cout(out,data,load,reset,clk); input7:0 data; input load,clk,reset; output7:0 out; reg7:0 out; alwa
46、ys (posedge clk) /clk上升沿触发 begin if(!reset) out = 8h00; /同步清零,低电平有效 else if(load) out = data; /同步置位,高电平有效 else out = out+1; /上升沿计数 end endmodule,行为建模posedge和negedge关键字,上例中,敏感信号表达式中没有列出输入信号,load和reset,因为它们为同步控制信号,在时钟的上升沿才检测这些信号,行为建模posedge和negedge关键字,例2:异步控制信号的描述方式,always (posedge clk or posedge clea
47、r) begin if(clear) 语句1; /clear信号上升沿到来时,clear为高电平, else /执行语句1,即高电平清零有效 语句2; /否则,在时钟的上升沿执行语句2; end always (posedge clk or negedge clear) begin if(!clear) 语句1; /低电平有效清零 else 语句2; end,行为建模posedge和negedge关键字,注意块内的逻辑描述要与敏感信号表达式信号中的有效电平一致,如下错误的描述:,always(posedge clk or negedge clear) begin if(clear) /矛盾,应
48、改为:if(!clear) out = 0; else out = in; end,其他语法,赋值语句 持续性赋值与过程赋值 阻塞赋值与非阻塞赋值 参数定义:parameter 编译预处理 宏定义define 文件包含处理include 时间尺度timescale,其他语法,赋值语句 持续性赋值与过程赋值 阻塞赋值与非阻塞赋值 参数定义:parameter 编译预处理 宏定义define 文件包含处理include 时间尺度timescale,赋值语句,持续性赋值语句(continuous assignment),主要用于对wire型变量赋值,用于数据流建模 过程赋值语句(procedural
49、 assignment),多用于对reg型变量赋值,用于行为建模。包括阻塞赋值(blocking assignment)和非阻塞赋值(non-blocking assignment)两种。,赋值语句持续型赋值语句,例:2选1多路选择器,module MUX2_1(out,a,b,sel); input a,b,sel; output out; assign out = (sel=0)?a:b; /持续型赋值,如果sel为0,则out=a,否则,out=b endmodule,赋值语句过程赋值语句,非阻塞(non-blocking)赋值方式 赋值符号为“=”,如:b=a; 非阻塞赋值在整个过程块
50、结束时才完成赋值操作,即b的值并不是立即就改变的 阻塞(blocking)赋值方式 赋值符号为“=”,如:b=a; 语句结束时立即完成赋值操作,即b的值在该条件语句结束后立即改变 同一个块语句中,如果有多个阻塞赋值语句,那么前面的赋值操作没完成之前,后面的语句就不能被执行,仿佛被阻塞(blocking)了一样。,赋值语句阻塞赋值与非阻塞赋值,always内阻塞赋值与非阻塞赋值的问题 例1:非阻塞赋值 例2:阻塞赋值,module non_block(c,b,a,clk); input clk,a; output b,c; reg b,c; always (posedge clk) begin b = a; c = b; end endmodule,module block(c,b,a,clk); input clk,a; output b,c; reg b,c; always (posedge clk) begin b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年新疆维吾尔自治区吐鲁番市高职单招职业技能考试题库带答案详解
- 2025年云南省有色地质局三一〇队下属企业招聘备考题库及答案详解(易错题)
- 未来五年有釉细炻砖行业市场营销创新战略制定与实施分析研究报告
- 2026年内蒙古自治区通辽市高职单招综合素质考试题库有答案详解
- 2025年某三甲医院口腔医技助理招聘备考题库有答案详解
- 2025年安宁市医疗机构招聘编外聘用人员22人备考题库(含答案详解)
- 2026年南京交通职业技术学院单招综合素质考试题库带答案详解
- 2026年甘肃交通职业技术学院单招综合素质考试题库有答案详解
- 2026年广东省肇庆市高职单招职业技能考试题库与答案详解
- 中国人民人寿股份有限公司2026届校园招聘400人备考题库附答案详解
- 给孩子讲大数据
- 2025年江苏电子信息职业学院单招职业技能考试题库及参考答案详解完整
- 2025年江苏农林职业技术学院单招职业技能测试题库完整参考答案详解
- 2025年泰国驾校中文题库及答案
- GB/T 46194-2025道路车辆信息安全工程
- 医院行政岗笔试试题及答案
- 干部人事档案政策讲解
- 跨境电商跨境电商产品开发方案
- 自卸车安全教育培训课件
- 2025年徐州市中考生物试题卷(含答案及解析)
- 深圳爆破证考试试题及答案
评论
0/150
提交评论