




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第第3章章 Verilog 基本语法基本语法23.1 Verilog HDL基本模块说明基本模块说明3.2 Verilog HDL中的词汇约定中的词汇约定3.3 Verilog HDL 数据类型数据类型3.4 Verilog HDL 运算符运算符主要内容主要内容: :33.1 Verilog HDL基本模块说明基本模块说明umodule能够表示:能够表示:u物理块,物理块,如如IC或或ASIC单元单元u逻辑块,逻辑块,如一个如一个CPU设计的设计的ALU部分部分u整个系统整个系统u每一个模块的描述从关键词每一个模块的描述从关键词module开始,有一个名称(如开始,有一个名称(如SN74LS
2、74,DFF,ALU等等),由关键词等等),由关键词endmodule结束。结束。module是层次是层次化设计的基本化设计的基本构件构件逻辑描述放在逻辑描述放在module内部内部4 Verilog 模块模块(module)结构基本要素结构基本要素知识点:知识点:3.1.1 端口信息端口信息3.1.2 输入输入/ /输出说明输出说明3.1.3 逻辑功能描述逻辑功能描述53.1.1 端口信息端口信息1,端口在模,端口在模块名字后的块名字后的括号中列出括号中列出3,端口可以说,端口可以说明为明为input, , output及及inout2,端口等价于硬,端口等价于硬件的引脚件的引脚( (pin
3、) )u模块通过端口与外部通信模块通过端口与外部通信6Verilog 模块的结构由在模块的结构由在module和和endmodule 关键词之间的四个主要部分组成:关键词之间的四个主要部分组成: - 1. 端口信息:端口信息: module combination(a, b, c, d ); - 2. 输入输入/输出说明输出说明 : input a, b, c ; output d ; -/ 输入输入/输出端口信号类型声明,缺省为输出端口信号类型声明,缺省为wire型型 : - 3. 内部信号:内部信号: wire x; - 4. 功能定义:功能定义: assign d = a | x ; a
4、ssign x = ( b & c ); endmodule 3.1.2 端口说明端口说明73.1.3 逻辑功能描述逻辑功能描述module mux2to1 (out, a, b, sel); input a, b, sel; output out; wire out; assign out=(sel)?b:a;endmodule两路选择器的两路选择器的RTL级描述级描述1:8两路选择器的两路选择器的RTL级描述级描述2:module mux2to1 (out, a, b, sel); input a, b, sel; output out; reg out;always ( sel
5、or a or b) if (! sel) out = a; else out = b;endmodule9u1. 端口信息端口信息u2. 输入输入/输出说明输出说明u3. 逻辑功能描述(逻辑功能描述(实例化实现功能描述实例化实现功能描述)实例化实例化( (module instances):):10module mux2to1 (out, a, b, sl); input a, b, sl; output out; not u1 (nsl, sl ); and u2 (sela, a, nsl); and u3 (selb, b, sl); or u4 (out, sela, selb);e
6、ndmodule两路选择器的门级描述两路选择器的门级描述- -实例化:实例化:11u请在下面的空格中填入适当的符号请在下面的空格中填入适当的符号 使其成为右图的使其成为右图的Verilog 模块模块 : module block1(a, b, , , ); input , , ; d, ; assign d = a | ( b & c) ; assign e = ( b & c ); _练习练习: :编写编写Verilog HDL模块模块abcde12 module block1(a, b, c, d, e ); input a, b, c; output d, e ; ass
7、ign d = a | ( b & c) ; assign e = ( b & c ); endmodule 练习答案练习答案:编写编写Verilog HDL模块模块abcde133.2 Verilog HDL中的词汇约定中的词汇约定知识点:知识点:u3.2.1 术语及定义术语及定义u3.2.2 空白符和注释空白符和注释u3.2.3 Verilog采用的四值逻辑系统采用的四值逻辑系统u3.2.4 整数常量和实数常量整数常量和实数常量u3.2.5 字符串字符串u3.2.6 标识符标识符u3.2.7 系统任务及函数系统任务及函数u3.2.8 编译指导编译指导 u3.2.9 文本包含
8、文本包含u3.2.10 文本替换文本替换143.2.1 术语及定义术语及定义1.空白符:空白符:空格、空格、tabs及换行及换行2. 标志符标志符(Identifier):Verilog中对象中对象(如模块或信号如模块或信号)的名字的名字3.LSB:最低有效位最低有效位(Lease significant bit)4.MSB:最高有效位最高有效位(Most significant bit)153.2.2 空白符和注释空白符和注释module MUX2_1 (out, a, b, sel); / Port declarations output out; input sel; / control
9、 input input b, a; /* data inputs */ wire sel_, a1, b1; /*The netlist logic selects input ”a” when sel = 0 and it selects ”b” when sel = 1. */ not not1 (sel_, sel); and and1 (a1, a, sel_); and and2 (b1, b, sel); or or1 (out, a1, b1);endmodule格式自由格式自由使用空白符提高可读性及代码组使用空白符提高可读性及代码组织。织。Verilog忽略空白符除非用于忽略
10、空白符除非用于分开其它的语言标记。分开其它的语言标记。多行注释,在多行注释,在/ /* * * */ /内内单行注释单行注释到行末结束到行末结束163.2.3 Verilog采用的四值逻辑系统采用的四值逻辑系统0, Low, False, Logic Low, Ground,VSS, Negative Assertion1, High, True, Logic High, Power,VDD, VCC, Positive AssertionX Unknown: Occurs at Logical Which Cannot be Resolved ConflictZ, High Impedanc
11、e, Tri- Stated,Disabled Driver (Unknown)173.2.4 整数常量和实数常量整数常量和实数常量 Verilog中,常量中,常量(literals)可是整数也可以是实数。可是整数也可以是实数。1.整数的大小可以定义也可以不定义。整数表示为:整数的大小可以定义也可以不定义。整数表示为: 其中其中 size :位数大小,由十进制数表示的位数位数大小,由十进制数表示的位数(bit) 表示。表示。缺省为缺省为32位位 base:数基,可为数基,可为2(b)、8(o)、10(d)、 16(h)进制。缺省为进制。缺省为10进制进制 value:是所选数基内任意有效数字,
12、包括是所选数基内任意有效数字,包括 X、Z。2.实数常量可以用十进制或科学表示法表示。实数常量可以用十进制或科学表示法表示。1812 unsized decimal (zero- extended to 32 bits)h83a unsized hexadecimal (zero- extended to 32 bits)8b1100 0001 8-bit binary16hff01 16-bit hexadecimal 32bz01x Z-extended to 32 bits3b1010 1101 3-bit number, truncated to 3b1016.3 decimal no
13、tation32e- 4 scientific notation for 0.00324.1E3 scientific notation for 4100整数与实数常量例子整数与实数常量例子19整数和实数常量小结整数和实数常量小结u整数的大小可以定义也可以不定义。整数表示为:整数的大小可以定义也可以不定义。整数表示为:u数字中(数字中(_ )忽略,便于查看)忽略,便于查看u没有定义大小没有定义大小(size)整数缺省为整数缺省为32位位 /*特别注意特别注意*/u缺省数基为十进制缺省数基为十进制u数基数基(base)和数字和数字(16进制进制)中的字母无大小写之分中的字母无大小写之分u当数值当
14、数值value大于指定的大小时,截去高位。如大于指定的大小时,截去高位。如 2b1101表示的是表示的是2b01u实数常量实数常量u实数可用科学表示法或十进制表示实数可用科学表示法或十进制表示u科学表示法表示方式:科学表示法表示方式: , 表示:表示: 尾数尾数10指数指数203.2.5 字符串(字符串(string)(了解了解)u字符串要在一行中用双引号括起来,也就是不能跨行。字符串要在一行中用双引号括起来,也就是不能跨行。u字符串中可以使用一些转义字符串中可以使用一些转义(escape)符,如符,如t n 可以使用一些格式符可以使用一些格式符(如如%b)在仿真时产生格式化输出:在仿真时产生
15、格式化输出: ”This is a normal string” ”This string has a t tab and ends with a new linen” ”This string formats a value: val = %b”Verilog中,字符串大多用于显示信息的命令中。中,字符串大多用于显示信息的命令中。(只用在测只用在测试中!试中!)21 格式符格式符%h%o%d%b%c%s%thexoctdecbinACSIIstringtime转义符转义符tn”tab换行换行反斜杠反斜杠双引号双引号ASCII representation of above格式符格式符%0d表
16、示没有前导表示没有前导0的十进制数的十进制数223.2.6 标识符标识符(identifiers) (重点重点)u标识符是用户在描述时给标识符是用户在描述时给Verilog对象(电路模块、信号等)起的名字对象(电路模块、信号等)起的名字u标识符必须以字母标识符必须以字母(a-z, A-Z)或或( _ )开头,后面可以是字母、数字、开头,后面可以是字母、数字、( $ )或或( _ )。u最长可以是最长可以是1023个字符个字符u标识符区分大小写,标识符区分大小写,sel和和SEL是不同的标识符是不同的标识符u例如:例如:module MUX2_1 (out, a, b, sel);output
17、out;input a, b, sel; wire sel_, a1, b1; not not1 (sel_, sel); and and1 (a1, a, sel_); and and2 (b1, b, sel); or or1 (out, a1, b1);endmoduleVerilog标识符标识符23u有效标识符举例:有效标识符举例: shift_reg_a busa_index _bus3u无效标识符举例无效标识符举例: 34net / 开头不是字母或开头不是字母或“_” a*b_net / 包含了非字母或数字,包含了非字母或数字, “$” “_” n238 /包含了非字母或数字,包含
18、了非字母或数字, “$” “_”uVerilog区分大小写,所有区分大小写,所有Verilog关键词如关键词如module、endmodule等都使用小写字母。等都使用小写字母。243.2.7 系统任务及函数系统任务及函数(了解了解)使用方式:使用方式:$u$符号指示这是系统任务和函数符号指示这是系统任务和函数u系统函数有很多,如:系统函数有很多,如:u返回当前仿真时间返回当前仿真时间$timeu显示显示/监视信号值监视信号值($display, $monitor)u停止仿真停止仿真$stopu结束仿真结束仿真$finish 如:如: $monitor($time, “a = %b, b =
19、%h”, a, b); 当信号当信号a或或b的值发生变化时,系统任务的值发生变化时,系统任务$monitor显显示当前仿真时间,信号示当前仿真时间,信号a值值(二进制格式二进制格式), 信号信号b值(值(16进制格式)。进制格式)。253.2.8 编译指导编译指导 (了解了解)u( )符号说明一个编译指导符号说明一个编译指导u这些编译指导使仿真编译器进行一些特殊的操作这些编译指导使仿真编译器进行一些特殊的操作u编译指导一直保持有效直到被覆盖或解除编译指导一直保持有效直到被覆盖或解除263.2.9 文本包含文本包含include (了解了解)u 编译指导编译指导include在当前内容中插入一个
20、文件在当前内容中插入一个文件 格式:格式: include “”如如include global.vinclude parts/count. vinclude ././library/mux. v”u include可用于:可用于: include保存在文件中的全局的或经常用到的一些定义,如文本宏保存在文件中的全局的或经常用到的一些定义,如文本宏 在模块内部在模块内部include一些任务(一些任务(tasks),提高代码的可维护性。,提高代码的可维护性。可以是相对路可以是相对路径或绝对路径径或绝对路径273.2.10 文本替换文本替换define (了解了解)编译指导编译指导define提供
21、了一种简单的文本替换的功能提供了一种简单的文本替换的功能 define 在编译时在编译时替换替换。可提高描述的可读性。可提高描述的可读性。define not_delay #1define and_delay #2define or_delay #1module MUX2_1 (out, a, b, sel);output out;input a, b, sel;wire sel_, a1, b1;not not_delay not1( sel_, sel);and and_delay and1( a1, a, sel_);and and_delay and2( b1, b, sel);or
22、or_delay or1( out, a1, b1);endmodule定义定义not_delay使用使用not_delay28 文本替换文本替换 (了解了解)u解除定义的宏,使用解除定义的宏,使用 undef macro_nameu使用编译指导使用编译指导define,可以,可以u提高描述的可读性提高描述的可读性u定义全局设计参数,如延时和矢量的位数。这些参定义全局设计参数,如延时和矢量的位数。这些参数可以定义在同一位置。这样,当要修改设计配置数可以定义在同一位置。这样,当要修改设计配置时,只需要在一个地方修改。时,只需要在一个地方修改。u定义定义Verilog命令的简写形式命令的简写形式
23、define vectors_ file /usr1/chrisz/library/vectors define results_ file / usr1/chrisz/library/resultsu可以将可以将define放在一个文件中,与其它文件一起编译。放在一个文件中,与其它文件一起编译。293.3 Verilog HDL 数据类型数据类型知识点:知识点:3.3.1 线网类型线网类型3.3.2 寄存器类型寄存器类型3.3.3 参数参数3.3.4 位选择位选择3.3.5 总结总结303.3 Verilog HDL 数据类型数据类型Verilog HDL 有两大类数据类型。有两大类数据类型
24、。1. 线网类型线网类型(net type): 表示表示Verilog结构化元件间的物理连结构化元件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门线。它的值由驱动元件的值决定,例如连续赋值或门的输出。如果没有驱动元件连接到线网,线网的缺省的输出。如果没有驱动元件连接到线网,线网的缺省值为值为z。2. 寄存器类型寄存器类型(register type):表示一个抽象的数据存储单表示一个抽象的数据存储单元,它只能在元,它只能在always语句和语句和initial语句等过程语句中被语句等过程语句中被赋值,并且它的值从一个赋值到另一个赋值被保存下赋值,并且它的值从一个赋值到另一个赋值被保存
25、下来。寄存器类型的变量具有来。寄存器类型的变量具有x的缺省值。的缺省值。313.3.1 net(线网)型(线网)型net需要被持续的驱动,驱动它的可以是门和模块。需要被持续的驱动,驱动它的可以是门和模块。当当net驱动器的值发驱动器的值发生变化时,生变化时, 新值被传送到新值被传送到net上。上。在下例中,线网在下例中,线网out由由or门驱动。当门驱动。当or门的输入信号置位时将传输到线门的输入信号置位时将传输到线网网net上。上。32netnet类的类型(线网)类的类型(线网)u 有多种有多种net类型用于设计类型用于设计(design-specific)建模和工艺建模和工艺(techno
26、logy-specific)建模建模u 没有声明的没有声明的net的缺省类型为的缺省类型为 1 位位(标量标量)wire类型。但这个缺省类型可由类型。但这个缺省类型可由下面的编译指导改变:下面的编译指导改变: default_nettype net类型类型功功 能能wire, trisupply1, supply0wor, triorwand, triandtriregtri1, tri0标准内部连接线标准内部连接线(缺省缺省)电源和地电源和地多驱动源线或多驱动源线或多驱动源线与多驱动源线与能保存电荷的能保存电荷的net无驱动时上拉无驱动时上拉/下拉下拉综合编译器综合编译器不支持的不支持的ne
27、t类型类型33 线网数据类型线网数据类型可综合的线网数据类型包含下述:可综合的线网数据类型包含下述: wire Wor wand tri supply0 supply1 最常用的是最常用的是wire!34简单的线网类型说明语法为:简单的线网类型说明语法为: net_kind msb : lsb net1, . . , netN; 解释:解释:1. net_kind 是上述线网类型的一种;是上述线网类型的一种; 2. msb和和lsb 是用于定义线网范围的常量是用于定义线网范围的常量 表达式,如果没有定义,缺省为表达式,如果没有定义,缺省为1位。位。例例1:wire rst, data; /1位
28、的复位线和数据线。位的复位线和数据线。例例2: wire 2:0 Addr1 ; /Addr1是是3位地址线位地址线 wire 3:1 Addr2; /Addr2是是3位地址线位地址线 线网数据类型线网数据类型- -使用语法使用语法35 线网型变量使用举例线网型变量使用举例module mux2to1 (out, a, b, sel); input a, b, sel; output out; wire out; assign out=(sel)?b:a;/input a, b, sel没声明信号类型,缺省为没声明信号类型,缺省为wire型型endmodule例如:两路选择器的例如:两路选择器
29、的RTL级描述级描述363.3.2 寄存器的类型寄存器的类型u寄存器类有四种数据类型寄存器类有四种数据类型寄存器类型寄存器类型 功能功能reg 是最常用的寄存器类型是最常用的寄存器类型 ,无符号型。无符号型。integer 32位位有符号有符号整数变量,算术操作产生二进制补码形式整数变量,算术操作产生二进制补码形式 。 的结果。通常用作不会由硬件实现的的数据处理。的结果。通常用作不会由硬件实现的的数据处理。real 双精度的带符号浮点变量,用法与双精度的带符号浮点变量,用法与integer相同。相同。time 64位无符号整数变量,用于位无符号整数变量,用于仿真时间仿真时间的保存与处理。的保存
30、与处理。realtime 与与real内容一致,但可以内容一致,但可以用作实数仿真时间用作实数仿真时间的保存的保存 与处理。与处理。37 寄存器类型寄存器类型reg-reg-使用语法使用语法 reg是寄存器数据类型最常见的数据类型。是寄存器数据类型最常见的数据类型。 使用语法形式如下:使用语法形式如下: reg msb: lsb reg1,. . . ,regN; msb和和lsb 定义了范围,并且均为常数值表达式;如果没有定义了范围,并且均为常数值表达式;如果没有定义范围,缺省值为定义范围,缺省值为1位寄存器。位寄存器。 例例1: reg 3:0 counter1 ; /4 位寄存器。位寄存
31、器。 例例2: reg counter2 ; / 1位寄存器。位寄存器。 例例3: reg 31:0 data_buffer1 ; reg 32:1 data_buffer2 ;38 常见的寄存器类型:常见的寄存器类型: Integer integer A, B, C ; /三个整数型寄存器。三个整数型寄存器。 说明:说明: 1. 与与reg不同,不同,integer可以表示可以表示有符号数有符号数,并且算术操作符,并且算术操作符提供提供2的补码运算结果。的补码运算结果。 2. 同时,如上例定义的同时,如上例定义的A,B,C变量它们分别是变量它们分别是32位(位( 32-bit )的寄存器变量
32、。的寄存器变量。 39 寄存器型变量使用举例寄存器型变量使用举例module mux2to1 (out, a, b, sel); input a, b, sel; output out; reg out;always ( sel or a or b) if (! sel) out = a; else out = b;/input a, b, sel没声明信号类型,缺省为没声明信号类型,缺省为wire型型endmodule例如:两路选择器的例如:两路选择器的RTL级描述级描述40 如何给模块端口信号选择正确的数据类型?如何给模块端口信号选择正确的数据类型?module top(A,B,Y );i
33、nput A,B; output Y; reg A1,B1;/wire? wire Y1; /reg? /对于信号对于信号Y,A,B呢?呢? DUT u1 (Y1, A1, B1) ; DUT u2 (Y, A, B) ;endmodulemodule DUT (O, in1, in2); output O; input in1, in2; wire in1, in2; reg O; always (in1 or in2) O=in1+in2; endmodule输入端口(如右图输入端口(如右图in1、in2信号)只信号)只能是能是net;但;但输入输入端口可以由端口可以由net/regist
34、er驱动驱动输出端口输出端口( 如如O )可可以是以是net/register类类型,但型,但输出端口只输出端口只能驱动能驱动net若若in1、in2说明为说明为reg则会产生错误。则会产生错误。in1in2OABY或者:或者:wire O;assign O=in1+in2; 41 练习练习- -选择数据类型时常犯的错误选择数据类型时常犯的错误修改前:修改前:module example(o1, o2, a, b,c,d); input a, b,c,d; output o1, o2; reg c, d; reg o2; and u1(o2, c, d); always (a or b) if
35、 (a) o1 = b; else o1 = 0;endmodule修改后:修改后:module example(o1, o2, a, b, c, d); input a, b, c, d; output o1, o2;/ reg c, d;/ reg o2 reg o1; and u1(o2, c, d); always (a or b) if (a) o1 = b; else o1 = 0;endmoduleexample.v或者换成:或者换成:always (c or d)o2=c&d; 或者换成:或者换成:assign o2=c&d; 423.3.3 参数参数 参数是一
36、个常量。参数是一个常量。 u参数定义的语法:参数定义的语法: parameter ;如:如: parameter WIDTH = 8h20; parameter BYTE =4h8; 43 参数(参数(parameters)-parameters)-使用举例使用举例module mod1( out, in1, in2); . . . . . . parameter WORD_WIDTH = 8; . . . . . . wire WORD_WIDTH-1: 0 in1; / A wire declaration using parameter . . . . . .endmoduleu例: 4
37、4 参数(参数(parameters)parameters)使用注意事项使用注意事项u 1. 推荐:推荐:一般定义参数等常量名称用大写,变量名称用小写!一般定义参数等常量名称用大写,变量名称用小写!u 2. 可一次定义多个参数,用逗号隔开。可一次定义多个参数,用逗号隔开。 如:如: parameter WORD_WIDTH = 32, ADDR_WIDTH = 8; 等同于:等同于: parameter WORD_WIDTH = 32; parameter ADDR_WIDTH = 8;45 (parameters)使用注意事项使用注意事项(cont.)u 3. 3. 参数的定义是局部的参数的
38、定义是局部的,只在,只在当前模块当前模块中有效。中有效。 如:在工程如:在工程Multi-CPU中一个中一个文件文件a.v中定义中定义 parameter WORD_WIDTH = = 32; 在同一工程另一个在同一工程另一个文件文件b.v中定义中定义 parameter WORD_WIDTH = 8; 是可以的。是可以的。/但是如果这样,项目比较复杂时,容易混淆但是如果这样,项目比较复杂时,容易混淆WORD_WIDTHWORD_WIDTH的值,不的值,不建议这样使用,可以声明成两个不同名称的参数来处理这种情建议这样使用,可以声明成两个不同名称的参数来处理这种情况。况。46 参数(参数(par
39、ameters)使用注意事项使用注意事项(cont.)u !注意与!注意与define 的异同的异同 如在文件如在文件sram_control.v中,定义有:中,定义有: define ADDR_WIDTH 12 define DATA_WIDTH 32 module example2( clk,rst,addr_in,data_in,data_out); input DATA_WIDTH-1: 0 data_in; input ADDR_WIDTH -1: 0 addr_in; output DATA_WIDTH-1: 0 data_out; wire DATA_WIDTH-1: 0 dat
40、a_in; wire ADDR_WIDTH -1: 0 addr_in; reg DATA_WIDTH-1: 0 data_out; parameter MEMORY_DEPTH = 1024; . . .endmodule47u 或在文件或在文件cpu_param.v中定义:中定义: define ADDR_WIDTH 12 define DATA_WIDTH 32 然后在文件然后在文件sram_control.v中如下使用:中如下使用: include cpu_param.v module example2( clk,rst,addr_in,data_in,data_out); input
41、 DATA_WIDTH-1: 0 data_in; input ADDR_WIDTH -1: 0 addr_in; output DATA_WIDTH-1: 0 data_out; wire DATA_WIDTH-1: 0 data_in; wire ADDR_WIDTH -1: 0 addr_in; reg DATA_WIDTH-1: 0 data_out; parameter MEMORY_DEPTH = 1024; . . .endmodule483.3.4 位选择位选择位选择从向量中抽取特定的位。位选择从向量中抽取特定的位。 reg 31:0 Breg; wire 31:0 Bwire
42、; . . . Breg=Bwire; 或者或者 . . . Breg31:16= Bwire15:0; Breg15:0= Bwire31:16;49 整数不能作为位向量访问。整数不能作为位向量访问。 例如定义了:例如定义了:integer B; 对于上面的整数对于上面的整数B的说明,的说明,B6和和B20:10是非法的。是非法的。 解决办法:解决办法: 一种截取位值的方法是将整数赋值给一般的一种截取位值的方法是将整数赋值给一般的reg类型变量,然后从类型变量,然后从中选取相应的位,如:中选取相应的位,如: integer Bint; reg 31:0 Breg; / /由于由于Bint6和
43、和Bint20:10是不允许的。是不允许的。 Breg = Bint; / 或或 Breg = Bint; /*现在,现在,Breg6和和Breg20:10是允许的,并且所取具体值,是整是允许的,并且所取具体值,是整数数Bint 相应的位值。相应的位值。*/ 位选择注意事项位选择注意事项503.3.5 Verilog模块中常见信号类型模块中常见信号类型-总结总结u 两种主要的信号类型:两种主要的信号类型: - 寄存器类型:代表寄存器类型:代表 reg 在在always 等过程块中被赋值的信号,往往代表触发器,但不一定等过程块中被赋值的信号,往往代表触发器,但不一定是触发器。是触发器。(时序逻辑
44、电路中常常被综合为(时序逻辑电路中常常被综合为D触发器触发器 ; 纯组合逻辑电路中被综合为连线)纯组合逻辑电路中被综合为连线) - 连线类型:代表连线类型:代表 wire 用用 assign 关键词指定连续关键词指定连续/持续赋值所描述的组合逻辑的信号或持续赋值所描述的组合逻辑的信号或连线。连线。51 Verilog中中reg与与wire的不同点的不同点u用寄存器用寄存器 (reg)类型变量生成组合逻辑举例:类型变量生成组合逻辑举例: module rw1( a, b, out1, out2 ) ; input a, b; output out1, out2; reg out1; wire o
45、ut2; assign out2 = a ; always (b) out1 = b;endmodule aout2BUFFbINVout152 Verilog中中reg与与wire的不同点的不同点u用寄存器用寄存器 ( reg )类型变量生成触发器的例子:类型变量生成触发器的例子:module rw2( clk, d, out1, out2 ) ; input clk, d; output out1, out2; reg out1; wire out2; assign out2 =d & out1; always (posedge clk) out1 (大于)(大于) =(不小于)(
46、不小于)=(不大于)(不大于)关系操作符的结果为真(关系操作符的结果为真( 1 b1)或假()或假( 1 b0)或)或1 bx。613.4.5 相等操作符(掌握)相等操作符(掌握) 逻辑等逻辑等 逻辑不等逻辑不等=! =module equalities_test; reg 3: 0 rega, regb, regc; reg val; initial begin rega = 4b0011; regb = 4b1010; regc = 4b1x10; #10 val = (rega = regb); / val = 0 #20 val = (rega != regc); / val = 1
47、#30 val =(regb != regc); / val = x #50 $finish; endendmodule 其结果是其结果是1b1、1b0或或1bx。 如果左边及右边为确定值,并如果左边及右边为确定值,并且相等,则结果为且相等,则结果为1。 如果左边及右边为确定值,并如果左边及右边为确定值,并且不相等,则结果为且不相等,则结果为0。 如果左边及右边有值不能确定如果左边及右边有值不能确定的位,但值确定的位相等,则的位,但值确定的位相等,则结果为结果为x。!=的结果与的结果与= =相反相反值确定是指所有的位为值确定是指所有的位为0或或1。不确定值是有值为不确定值是有值为x或或z的位。
48、的位。=! =62 相等操作符(了解)相等操作符(了解) 相同相同(case等等) 不相同不相同(case不等不等)=!=module equalities2_test; reg 3: 0 rega, regb, regc; reg val; initial begin rega = 4b0011; regb = 4b1010; regc = 4b1x10; #10 val = (rega = regb) ; / val = 0 #20 val =( rega != regc); / val = 1 #30 val =(regb = regc); / val = 0 #50 $finish;
49、end endmodule 其结果是其结果是1b1、1b0或或1bx。 如果左边及右边的值相同如果左边及右边的值相同(包括(包括x、z),则结果为,则结果为1。如果左边及右边的值不相同,如果左边及右边的值不相同,则结果为则结果为0。!=的结果与的结果与 = 相反相反综合工具不支综合工具不支持!持!,也就是说没有也就是说没有相应的电路来对应这种操作相应的电路来对应这种操作符。符。=!=633.4.6 条件操作符条件操作符 条件操作符的语法为:条件操作符的语法为: = ? :;其意思是:其意思是:if condition is TRUE, then LHS=true_expression, else LHS = false_expression每个条件操作符必须有三个参数,缺少任何一个都会产生错每个条件操作符必须有三个参数,缺少任何一个都会产生错误。最后一个操作数作为缺省值。误。最后一个操作数作为缺省值。例如:例如:assign out = (sel = 0) ? a : b;若若sel为为0则则ou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 马路护栏面试题及答案
- 金融专接本试题及答案
- 三桥叉车考试试题及答案
- 北京网络知识培训课件
- 铣床考试试题及答案
- 化学氧气考试题及答案
- 视网膜脱离考试题及答案
- 一次函数试题及答案
- 校内外玩耍安全知识培训课件
- 2025年达州市水利发展有限责任公司招聘考试笔试试题(含答案)
- 2025总公司授权分公司签订合同的示范文本
- 2025年医师定期考核法律法规试题及答案
- 学堂在线 大学计算机基础 章节测试答案
- 县域共配仓农村物流配送成本控制报告
- 二级实验室生物安全管理手册
- 2025年新演员签约协议书
- 上海金山区卫生系统招聘考试(护理学专业知识)题含答案2024年
- 2025届安徽省A10联盟高三上学期开学考-物理试题(含答案)
- 全国“安康杯”职工安全健康意识与应急技能知识竞赛试卷附答案
- 基孔肯雅热防控技术指南(2025年版)试题及答案
- 护理实践指南手术室废物管理
评论
0/150
提交评论