书签 分享 收藏 举报 版权申诉 / 117
上传文档赚钱

类型第10章Verilog操作符课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:3860552
  • 上传时间:2022-10-19
  • 格式:PPT
  • 页数:117
  • 大小:743.51KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《第10章Verilog操作符课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    10 Verilog 操作 课件
    资源描述:

    1、第第1010章章 Verilog操作符操作符学习内容:学习内容:熟悉熟悉Verilog语言的操作符语言的操作符操作符类型操作符类型下表以优先级顺序列出了下表以优先级顺序列出了Verilog操作符。注意操作符。注意“与与”操作符的优先级总是比相操作符的优先级总是比相同类型的同类型的“或或”操作符高。本章将对每个操作符用一个例子作出解释。操作符高。本章将对每个操作符用一个例子作出解释。操作符类型操作符类型符号符号连接及复制操作符一元操作符算术操作符逻辑移位操作符关系操作符相等操作符按位操作符逻辑操作符条件操作符 !&|*/%+-=!=!=&|&|?:最高最高最低最低优先级优先级Verilog中的大

    2、小中的大小(size)与符号与符号Verilog根据表达式中变量的长度对表达式的值自动地进行调整。根据表达式中变量的长度对表达式的值自动地进行调整。Verilog自动截断或扩展赋值语句中右边的值以适应左边变量的长度。自动截断或扩展赋值语句中右边的值以适应左边变量的长度。当一个负数赋值给无符号变量如当一个负数赋值给无符号变量如reg时,时,Verilog自动完成二进制补码计算自动完成二进制补码计算module sign_size;reg 3:0 a,b;reg 15:0 c;initial begin a=-1;/a是无符号数,因此是无符号数,因此其值为其值为1111 b=8;c=8;/b=c=

    3、1000#10 b=b+a;/结果结果10111截断截断,b=0111#10 c=c+a;/c=10111 endendmodule算术操作符算术操作符module arithops();parameter five=5;integer ans,int;reg 3:0 rega,regb;reg 3:0 num;initial begin rega=3;regb=4b1010;int=-3;/int=11111111_1101 end initial fork#10 ans=five*int;/ans=-15#20 ans=(int+5)/2;/ans=1#30 ans=five/int;/a

    4、ns=-1#40 num=rega+regb;/num=1101#50 num=rega+1;/num=0100#60 num=int;/num=1101#70 num=regb%rega;/num=1#80$finish;joinendmodule+加加-减减*乘乘/除除%模模 将负数赋值给将负数赋值给reg或其它无符号变量或其它无符号变量使用使用2的补码算术。的补码算术。如果操作数的某一位是如果操作数的某一位是x或或z,则结,则结果为果为x 在整数除法中,余数舍弃在整数除法中,余数舍弃 模运算中使用第一个操作数的符号模运算中使用第一个操作数的符号注意integer和reg类型在算术运算时的

    5、差别。integer是有符号数,而reg是无符号数。按位操作符按位操作符module bitwise();reg 3:0 rega,regb,regc;reg 3:0 num;initial begin rega=4b1001;regb=4b1010;regc=4b11x0;end initial fork#10 num=rega&0;/num=0000#20 num=rega®b;/num=1000#30 num=rega|regb;/num=1011#40 num=regb®c;/num=10 x0#50 num=regb|regc;/num=1110#60$finish;jo

    6、inendmodulenot&and|orxor xnor xnor 按位操作符对矢量中相对应位运算。按位操作符对矢量中相对应位运算。regb=4b1 0 1 0 regc=4b1 x 1 0num=regb®c=1 0 1 0;位值为位值为x时不一定产生时不一定产生x结果。如结果。如#50时时的的or计算。计算。当两个操作数位数不同时,位数少的操作数零扩展到相同位数。a=4b1011;b=8b01010011;c=a|b;/a零扩展为零扩展为 8b00001011逻辑操作符逻辑操作符module logical();parameter five=5;reg ans;reg 3:0 re

    7、ga,regb,regc;initial begin rega=4b0011;/逻辑值逻辑值为为“1”regb=4b10 xz;/逻辑值为逻辑值为“1”regc=4b0z0 x;/逻辑值为逻辑值为“x”end initial fork#10 ans=rega&0;/ans=0#20 ans=rega|0;/ans=1#30 ans=rega&five;/ans=1#40 ans=regb®a;/ans=1#50 ans=regc|0;/ans=x#60$finish;joinendmodule!not&and|or 逻辑操作符的结果为一位逻辑操作符的结果为一位1,0或或x。逻辑操作符只对

    8、逻辑值运算。逻辑操作符只对逻辑值运算。如操作数为全如操作数为全0,则其逻辑值为,则其逻辑值为false如操作数有一位为如操作数有一位为1,则其逻辑值为,则其逻辑值为true若操作数若操作数只只包含包含0、x、z,则逻辑值为,则逻辑值为x逻辑反操作符将操作数的逻辑值取逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全反。例如,若操作数为全0,则其逻,则其逻辑值为辑值为0,逻辑反操作值为,逻辑反操作值为1。逻辑反与位反的对比逻辑反与位反的对比module negation();reg 3:0 rega,regb;reg 3:0 bit;reg log;initial begin rega=4b1

    9、011;regb=4b0000;end initial fork#10 bit=rega;/num=0100#20 bit=regb;/num=1111#30 log=!rega;/num=0#40 log=!regb;/num=1#50$finish;joinendmodule!logical not 逻辑反逻辑反 bit-wise not 位反位反 逻辑反的结果为一位逻辑反的结果为一位1,0或或x。位反的结果与操作数的位数相同位反的结果与操作数的位数相同逻辑反操作符将操作数的逻辑值取逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全反。例如,若操作数为全0,则其逻,则其逻辑值为辑值为0,

    10、逻辑反操作值为,逻辑反操作值为1。一元归约操作符一元归约操作符module reduction();reg val;reg 3:0 rega,regb;initial begin rega=4b0100;regb=4b1111;end initial fork#10 val=®a;/val=0#20 val=|rega;/val=1#30 val=®b;/val=1#40 val=|regb;/val=1#50 val=rega;/val=1#60 val=regb;/val=0#70 val=|rega;/(nor)val=0#80 val=®a;/(nand)val=1#

    11、90 val=rega®b;/val=1$finish;joinendmodule&and|orxor xnor xnor 归约操作符的操作数只有一个。归约操作符的操作数只有一个。对操作数的所有位进行位操作。对操作数的所有位进行位操作。结果只有一位,可以是结果只有一位,可以是0,1,X。移位操作符移位操作符module shift();reg 9:0 num,num1;reg 7:0 rega,regb;initial rega=8b00001100;initial fork#10 num=rega 5;/num=01_1000_0000#10 regb =rega 5;/regb=10

    12、00_0000#20 num 3;/num=00_0000_0001#20 regb 3;/regb=0000_0001#30 num=10b11_1111_0000;#40 rega=num 2;/rega=1100_0000#40 num1=num 2;/num1=11_1100_0000#50 rega 2;/rega=1111_1100#50 num1 2;/num1=00_1111_1100#60$finish;joinendmodule逻辑右移逻辑左移 移位操作符对其左边的操作数进行移位操作符对其左边的操作数进行向左或向右的位移位操作。向左或向右的位移位操作。第二个操作数(移位位数

    13、)是无符第二个操作数(移位位数)是无符号数号数若第二个操作数是若第二个操作数是x或或z则结果为则结果为x在赋值语句中,如果右边在赋值语句中,如果右边(RHS)的结果的结果:位宽大于左边,则把最高位截去位宽大于左边,则把最高位截去位宽小于左边,则零扩展位宽小于左边,则零扩展 将左边的操作数右移右边操将左边的操作数右移右边操作数指定的位数作数指定的位数左移先补后移左移先补后移右移先移后补右移先移后补建议:表达式左右位数一致建议:表达式左右位数一致关系操作符关系操作符module relationals();reg 3:0 rega,regb,regc;reg val;initial begin r

    14、ega=4b0011;regb=4b1010;regc=4b0 x10;end initial fork#10 val=regc rega;/val=x#20 val=regb=rega;/val=1#40 val=regb regc;/val=1#50$finish;joinendmodule大于=大于等于大于等于regcrega和和regc的的关系取决于关系取决于x相等操作符相等操作符 赋值操作符,将等式右边表达式的值拷贝到左边。赋值操作符,将等式右边表达式的值拷贝到左边。注意逻辑等与注意逻辑等与case等的差别等的差别=逻辑等逻辑等=01xz010 xx101xxxxxxxzxxxx c

    15、ase等等=01xz0100010100 x0010z00012b1x=2b0 x 值为值为0,因为不相等,因为不相等2b1x=2b1x 值为值为x,因为可能不,因为可能不相等,也可能相等相等,也可能相等2b1x=2b0 x 值为值为0,因为不相同,因为不相同2b1x=2b1x 值为值为1,因为相同,因为相同a=2b1x;b=2b1x;if(a=b)$display(a is equal to b);else$display(a is not equal to b);a=2b1x;b=2b1x;if(a=b)$display(a is identical to b);else$display(

    16、a is not identical to b);Case等只能用于行为描述,不能用于RTL描述。相等操作符相等操作符 逻辑等逻辑等 逻辑不等逻辑不等=!=module equalities1();reg 3:0 rega,regb,regc;reg val;initial begin rega=4b0011;regb=4b1010;regc=4b1x10;end initial fork#10 val=rega=regb;/val=0#20 val=rega!=regc;/val=1#30 val=regb!=regc;/val=x#40 val=regc=regc;/val=x#50$fi

    17、nish;joinendmodule 其结果是其结果是1b1、1b0或或1bx。如果左边及右边为确定值并且如果左边及右边为确定值并且相等,则结果为相等,则结果为1。如果左边及右边为确定值并且如果左边及右边为确定值并且不相等,则结果为不相等,则结果为0。如果左边及右边有值不能确定如果左边及右边有值不能确定的位,但值确定的位相等,则结的位,但值确定的位相等,则结果为果为x。!=的结果与的结果与=相反相反值确定是指所有的位为值确定是指所有的位为0或或1。不确定值是有值为不确定值是有值为x或或z的位。的位。相等操作符相等操作符 相同相同(case等等)不相同不相同(case不等不等)=!=module

    18、 equalities2();reg 3:0 rega,regb,regc;reg val;initial begin rega=4b0011;regb=4b1010;regc=4b1x10;end initial fork#10 val=rega=regb;/val=0#20 val=rega!=regc;/val=1#30 val=regb=regc;/val=0#40 val=regc=regc;/val=1#50$finish;joinendmodule 其结果是其结果是1b1、1b0或或1bx。如果左边及右边的值相同(包如果左边及右边的值相同(包括括x、z),则结果为,则结果为1。如

    19、果左边及右边的值不相同,如果左边及右边的值不相同,则结果为则结果为0。!=的结果与的结果与=相反相反综合工具不支持综合工具不支持条件操作符条件操作符 条件条件?:module likebufif(in,en,out);input in;input en;output out;assign out=(en=1)?in:bz;endmodulemodule like4to1(a,b,c,d,sel,out);input a,b,c,d;input 1:0 sel;output out;assign out=sel=2b00?a:sel=2b01?b:sel=2b10?c:d;endmodule如果

    20、条件值为如果条件值为x或或z,则结果可能为,则结果可能为x或或z条件操作符条件操作符条件操作符的语法为:条件操作符的语法为:=?:registger=condition?true_value:false_value;其意思是:其意思是:if condition is TRUE,then LHS=true_expression,else LHS=false_expression每个条件操作符必须有三个参数,缺少任何一个都会产生错误。每个条件操作符必须有三个参数,缺少任何一个都会产生错误。最后一个操作数作为缺省值。最后一个操作数作为缺省值。上式中,若上式中,若condition为真则为真则regi

    21、ster等于等于true_value;若;若condition为假则为假则register等等于于false_value。一个很有意思的地方是,如果条件值不确定,且。一个很有意思的地方是,如果条件值不确定,且true_value和和false_value不相等,则输出不确定值。不相等,则输出不确定值。例如:例如:assign out=(sel=0)?a:b;若若sel为为0则则out=a;若;若sel为为1则则out=b。如果。如果sel为为x或或z,若,若a=b=0,则,则out=0;若;若ab,则,则out值不确定。值不确定。级联操作符级联操作符 级联级联 可以从不同的矢量中选择位并用可以

    22、从不同的矢量中选择位并用它们组成一个新的矢量。它们组成一个新的矢量。用于位的重组和矢量构造用于位的重组和矢量构造module concatenation;reg 7:0 rega,regb,regc,regd;reg 7:0 new;initial begin rega=8b0000_0011;regb=8b0000_0100;regc=8b0001_1000;regd=8b1110_0000;end initial fork#10 new=regc 4:3,regd 7:5,regb 2,rega 1:0;/new=8b11111111#20$finish;joinendmodule在级联和

    23、复制时,必须指定位数,在级联和复制时,必须指定位数,否则将产生错误。否则将产生错误。下面是类似错误的例子:下面是类似错误的例子:a7:0=4 b10;b7:0=2 5;c3:0=3 b011,b0;级联时不限定操作数的数目。在级联时不限定操作数的数目。在操作符符号操作符符号 中,用逗号将操中,用逗号将操作数分开。例如作数分开。例如:A,B,C,D复制复制 复制复制 复制一个变量或在复制一个变量或在 中的值中的值module replicate();reg 3:0 rega;reg 1:0 regb,regc;reg 7:0 bus;initial begin rega=4b1001;regb=

    24、2b11;regc=2b00;end initial fork#10 bus=4 regb;/bus=11111111 /regb is replicated 4 times.#20 bus=2 regb,2 regc;/bus=11110000.regc and regb are each /replicated,and the resulting vectors /are concatenated together#30 bus=4 rega1,rega;/bus=00001001.rega is sign-extended#40$finish;joinendmodule前两个前两个 符号

    25、之间的正整数指定符号之间的正整数指定复制次数。复制次数。复习复习解答解答1、进行进行1的补码操作,将矢量中的每一位取反的补码操作,将矢量中的每一位取反 !将一个操作数归约为一位!将一个操作数归约为一位true或或false结果结果2、&将操作数从低到高的对应位的进行与操作将操作数从低到高的对应位的进行与操作&将每个操作数归约为一位将每个操作数归约为一位true或或false,然后对归约结果进行与操作,然后对归约结果进行与操作3、要复制的操作数必须指定位数,例如、要复制的操作数必须指定位数,例如 3b1是非法的,因此是非法的,因此b1没有指定位数。而没有指定位数。而31b1是合法的是合法的1、和

    26、!有什么不同?和!有什么不同?2、&和和&有什么不同?有什么不同?3、用复制操作符复制一个数据时,对数据有什么要求?、用复制操作符复制一个数据时,对数据有什么要求?问题:问题:第第11 11章章 行为建模行为建模学习内容:学习内容:行为建模的基本概念行为建模的基本概念Verilog中高级编程语言结构中高级编程语言结构如何使用连续赋值如何使用连续赋值RTLRTL描述方式是行为描述方式的子集。在本章中的综合部描述方式是行为描述方式的子集。在本章中的综合部分将详细介绍哪些行为级结构同样可以用于分将详细介绍哪些行为级结构同样可以用于RTLRTL描述。描述。注:行为描述行为描述行为级描述是对系统的高抽象

    27、级描述。在这个抽象级,注重的是整个系行为级描述是对系统的高抽象级描述。在这个抽象级,注重的是整个系统的功能而不是实现。统的功能而不是实现。Verilog有高级编程语言结构用于行为描述,包括:有高级编程语言结构用于行为描述,包括:wait,while,if then,case和和foreverVerilog的行为建模是用一系列以高级编程语言编写的并行的、动态的过的行为建模是用一系列以高级编程语言编写的并行的、动态的过程块来描述系统的工作。程块来描述系统的工作。在每一个时钟上升沿,在每一个时钟上升沿,若若ClrClr不是低电平,不是低电平,置置Q Q为为D D值,值,置置QbQb为为D D值的反值

    28、的反DFF无论何时无论何时ClrClr变低变低 置置Q Q为为0 0,置置QbQb为为1 1过程过程(procedural)块块过程块是行为模型的基础。过程块是行为模型的基础。过程块有两种:过程块有两种:initial块,只能执行一次块,只能执行一次always块,循环执行块,循环执行过程块中有下列部件过程块中有下列部件过程赋值语句:在描述过程块中的数据流过程赋值语句:在描述过程块中的数据流高级结构(循环,条件语句):描述块的功能高级结构(循环,条件语句):描述块的功能时序控制:控制块的执行及块中的语句。时序控制:控制块的执行及块中的语句。过程赋值过程赋值(procedural assignm

    29、ent)在过程块中的赋值称为过程赋值。在过程块中的赋值称为过程赋值。在过程赋值语句中表达式在过程赋值语句中表达式左边左边的信号必须是的信号必须是寄存器类型寄存器类型(如(如reg类型)类型)在过程赋值语句等式在过程赋值语句等式右边右边可以是任何有效的表达式,可以是任何有效的表达式,数据类型也没有限制数据类型也没有限制。如果一个信号没有声明则如果一个信号没有声明则缺省为缺省为wire类型类型。使用过程赋值语句给。使用过程赋值语句给wire赋值会产赋值会产生错误。生错误。module adder(out,a,b,cin);input a,b,cin;output 1:0 out;wire a,b,

    30、cin;reg half_sum;reg 1:0 out;always(a or b or cin)begin half_sum=a b cin;/OK half_carry=a&b|a&!b&cin|!a&b&cin;/ERROR!out=half_carry,half_ sum;endendmodulehalf_carryhalf_carry没有声明没有声明过程时序控制过程时序控制在过程块中可以说明过程时序。过程时序控制有三类:在过程块中可以说明过程时序。过程时序控制有三类:简单延时简单延时(#delay):延迟指定时间步后执行:延迟指定时间步后执行边沿敏感边沿敏感的时序控制:的时序控制:

    31、()在信号发生翻转后执行。在信号发生翻转后执行。可以说明信号有效沿是上升沿可以说明信号有效沿是上升沿(posedge)还是下降沿还是下降沿(negedge)。可以用关键字可以用关键字or指定多个参数。指定多个参数。电平敏感电平敏感的时序控制:的时序控制:wait()直至直至expr值为真时(非零)才执行。值为真时(非零)才执行。若若expr已经为真则立即执行。已经为真则立即执行。module wait_test;reg clk,waito,edgeo;initial begininitial begin clk=0;edgeo=0;waito=0;endalways#10 clk=clk;al

    32、ways(clk)#2 edgeo=edgeo;always wait(clk)#2 waito=waito;endmodule简单延时简单延时在在test bench中使用简单延时(中使用简单延时(#延时)施加激励,或在行为模型中模拟延时)施加激励,或在行为模型中模拟实际延时。实际延时。module muxtwo(out,a,b,sl);input a,b,sl;output out;reg out;always(sl or a or b)if(!sl)#10 out=a;/从从a a到到outout延时延时1010个时间单位个时间单位 else#12 out=b;/从从b b到到outou

    33、t延时延时1212个时间单位个时间单位endmodule在简单延时中可以使用模块参数在简单延时中可以使用模块参数parameter:module clock_gen(clk);output clk;reg clk;parameter cycle=20;initial clk=0;always#(cycle/2)clk=clk;endmodule边沿敏感时序边沿敏感时序时序控制时序控制可以用在可以用在RTL级或行为级组合逻辑或时序逻辑描述中。可级或行为级组合逻辑或时序逻辑描述中。可以用关键字以用关键字posedge和和negedge限定信号敏感边沿。敏感表中可以有多个限定信号敏感边沿。敏感表中可

    34、以有多个信号,用关键字信号,用关键字or连接。连接。module reg_ adder(out,a,b,clk);input clk;input 2:0 a,b;output 3:0 out;reg 3:0 out;reg 3:0 sum;always(a or b)/若若a或或b发生任何变化,执行发生任何变化,执行#5 sum=a+b;always(negedge clk)/在在clk下降沿执行下降沿执行 out=sum;endmodule注注:事件控制符:事件控制符or和位或操作符和位或操作符|及逻辑或操作符及逻辑或操作符|没有任何关系。没有任何关系。wait语句语句wait用于行为级代码

    35、中电平敏感的时序控制。用于行为级代码中电平敏感的时序控制。下面下面 的输出锁存的加法器的行为描述中,使用了用关键字的输出锁存的加法器的行为描述中,使用了用关键字or的边沿敏的边沿敏感时序以及用感时序以及用wait语句描述的电平敏感时序。语句描述的电平敏感时序。module latch_adder(out,a,b,enable);input enable;input 2:0 a,b;output 3:0 out;reg 3:0 out;always(a or b)begin wait(!enable)/当当enable为低电平时执行加为低电平时执行加法法 out=a+b;endendmodule

    36、注注:综合工具还不支持:综合工具还不支持wait语句。语句。命名事件命名事件(named event)在行为代码中定义一个命名事件可以触发一个活动。命名事件不可综合。在行为代码中定义一个命名事件可以触发一个活动。命名事件不可综合。module add_mult(out,a,b);input 2:0 a,b;output 3:0 out;reg 3:0 out;/*define events*event add,mult;always(a or b)if(a b)-add;/*trigger event*else -mult;/*trigger event*/*respond to an eve

    37、nt trigger*always(add)out=a+b;/*respond to an event trigger*always(mult)out=a*b;endmodule在例子中,事件在例子中,事件add和和mult不是端口,但定不是端口,但定义为事件,它们没有对应的硬件实现。义为事件,它们没有对应的硬件实现。是一种数据类型,能在过程块中触发一个是一种数据类型,能在过程块中触发一个使能。使能。在引用前必须声明在引用前必须声明 没有持续时间,也不具有任何值没有持续时间,也不具有任何值 只能在过程块中触发一个事件。只能在过程块中触发一个事件。-操作符用来触发命名事件。操作符用来触发命名事件

    38、。a大于大于b,事件,事件add被触发,控制传递到等待被触发,控制传递到等待add的的always块。块。如果如果a小于或等于小于或等于b,事件,事件mult被触发,控制被触发,控制被传送到等待被传送到等待mult的的always块。块。行为描述举例行为描述举例在上面的例子中发生下面顺序的事件:在上面的例子中发生下面顺序的事件:1.等待等待set=1,忽略时刻,忽略时刻10的的clk的的posedge。2.等待下一个等待下一个clk的的posedge,它将在时刻,它将在时刻30发生。发生。3.等待等待3个时间单位,在时刻个时间单位,在时刻33(30+3)置)置q=1。4.等待等待10个时间单位

    39、,在时刻个时间单位,在时刻43(33+10)置)置q=0。5.等待在时刻等待在时刻48发生的发生的set=0。6.等待在时刻等待在时刻70发生且与发生且与clk的上升沿同时发生的的上升沿同时发生的set=1。7.等待下一个上升沿。时刻等待下一个上升沿。时刻70的边沿被忽略,因为到达该语句时时间已经过去了,的边沿被忽略,因为到达该语句时时间已经过去了,如例子所示,如例子所示,clk=1。重要内容重要内容:在实际硬件设计中,事件:在实际硬件设计中,事件6应该被视为一个竞争(应该被视为一个竞争(race condition)。在仿)。在仿真过程中,值的确定倚赖于顺序,所以是不可预测的。这是不推荐的建

    40、模类型。真过程中,值的确定倚赖于顺序,所以是不可预测的。这是不推荐的建模类型。always wait(set)begin (posedge clk)#3 q=1;#10 q=0;wait(!set);end竞争RTL描述举例描述举例module dff(q,qb,d,clk);output q,qb;input d,clk;reg q,qb;always(posedge clk)begin q=d;qb=d;endendmodule下面的RTL例子中只使用单个边沿敏感时序控制。块语句块语句块语句用来将多个语句组织在一起,使得他们在语法上如同一个语句。块语句用来将多个语句组织在一起,使得他们在语

    41、法上如同一个语句。块语句分为两类:块语句分为两类:顺序块:语句置于关键字顺序块:语句置于关键字begin和和end之间,块中的语句以顺序方式执行。之间,块中的语句以顺序方式执行。并行块:关键字并行块:关键字fork和和join之间的是并行块语句,块中的语句并行执行。之间的是并行块语句,块中的语句并行执行。Fork和和join语句常用于语句常用于test bench描述。这是因为可以一起给出矢量及描述。这是因为可以一起给出矢量及其绝对时间,而不必描述所有先前事件的时间。其绝对时间,而不必描述所有先前事件的时间。块语句(续)块语句(续)在顺序块中,语句一条接一条地计算执行。在顺序块中,语句一条接一

    42、条地计算执行。在并行块中,所有语句在各自的延迟之后立即计算执行。在并行块中,所有语句在各自的延迟之后立即计算执行。begin#5 a=3;#5 a=5;#5 a=4;endfork#5 a=3;#15 a=4;#10 a=5;join上面的两个例子在功能上是等价的。上面的两个例子在功能上是等价的。Fork-join例子里的赋值故意打乱顺序是例子里的赋值故意打乱顺序是为了强调顺序是没有关系的。为了强调顺序是没有关系的。注意注意fork-join块是典型的不可综合语句,并且在一些仿真器时效率较差。块是典型的不可综合语句,并且在一些仿真器时效率较差。延迟赋值语句延迟赋值语句begin temp=b;

    43、(posedge clk)a=temp;enda=(posedge clk)b;语法:语法:LHS=RHS;时序控制延迟的是赋值而不是右边表达式的计算。时序控制延迟的是赋值而不是右边表达式的计算。在延迟赋值语句中在延迟赋值语句中RHS表达式的值都有一个隐含的临时存储。表达式的值都有一个隐含的临时存储。可以用来简单精确地模拟寄存器交换和移位。可以用来简单精确地模拟寄存器交换和移位。等价语句等价语句LHS:Left-hand-sideRHS:Right-hand-side延迟赋值语句延迟赋值语句begin a=#5 b;b=#5 a;#10$diplay(a,b);endfork a=#5 b;b

    44、=#5 a;#10$diplay(a,b);join在左边的例子中,在左边的例子中,b的值被立即采样(时刻的值被立即采样(时刻0),这个值在时刻),这个值在时刻5赋给赋给a。a的值的值在时刻在时刻5被采样,这个值在时刻被采样,这个值在时刻10赋给赋给b。注意,另一个过程块可能在时刻注意,另一个过程块可能在时刻0到时刻到时刻5之间影响之间影响b的值,或在时刻的值,或在时刻5到时到时刻刻10之间影响之间影响a的值。的值。在右边的例子中,在右边的例子中,b和和a的值被立即采样(时刻的值被立即采样(时刻0),保存的值在时刻),保存的值在时刻5被赋值被赋值给他们各自的目标。这是一个安全传输。给他们各自的

    45、目标。这是一个安全传输。注意,另一个过程块可以在时刻注意,另一个过程块可以在时刻0到时刻到时刻5之间影响之间影响a和和b的值。的值。并行语句在同一时间步发生,但由仿真器在另外一个时间执行。并行语句在同一时间步发生,但由仿真器在另外一个时间执行。在下面的每个例子中,在下面的每个例子中,a和和b的值什么时候被采样?的值什么时候被采样?在下面的每个例子中,什么时候给在下面的每个例子中,什么时候给a和和b赋值?赋值?b值拷贝到a然后回传a和b值安全交换非阻塞过程赋值非阻塞过程赋值module swap_vals;reg a,b,clk;initial begin a=0;b=1;clk=0;end a

    46、lways#5 clk=clk;always(posedge clk)begin a=b;/非阻塞过程非阻塞过程赋值赋值 b=a;/交换交换a和和b值值 endendmodule阻塞过程赋值执行完成后再执行在顺序块内下一条语句。阻塞过程赋值执行完成后再执行在顺序块内下一条语句。非阻塞赋值不阻塞过程流,仿真器读入一条赋值语句并对它进行调度之后,就非阻塞赋值不阻塞过程流,仿真器读入一条赋值语句并对它进行调度之后,就可以处理下一条赋值语句。可以处理下一条赋值语句。若过程块中的所有赋值都是非阻塞的,赋值按两步进行:若过程块中的所有赋值都是非阻塞的,赋值按两步进行:1.仿真器计算所有仿真器计算所有RHS

    47、表达式的值,保存结果,并进行调度在时序控制指表达式的值,保存结果,并进行调度在时序控制指定时间的赋值。定时间的赋值。2.在经过相应的延迟后,仿真器通过将保存的值赋给在经过相应的延迟后,仿真器通过将保存的值赋给LHS表达式完成赋值。表达式完成赋值。阻塞过程赋值阻塞过程赋值非阻塞过程赋值非阻塞过程赋值过程赋值有两类过程赋值有两类非阻塞过程赋值(续)非阻塞过程赋值(续)module non_block1;reg a,b,c,d,e,f;initial begin/blocking assignments a=#10 1;/time 10 b=#2 0;/time 12 c=#4 1;/time 16

    48、 end initial begin/non-blocking assignments d=#10 1;/time 10 e=#2 0;/time 2 f=#4 1;/time 4 end initial begin$monitor($time,a=%b b=%b c=%b d=%b e=%b f=%b,a,b,c,d,e,f);#100$finish;endendmodule输出结果:输出结果:0 a=x b=x c=x d=x e=x f=x 2 a=x b=x c=x d=x e=0 f=x 4 a=x b=x c=x d=x e=0 f=110 a=1 b=x c=x d=1 e=0

    49、f=112 a=1 b=0 c=x d=1 e=0 f=116 a=1 b=0 c=1 d=1 e=0 f=1阻塞与非阻塞赋值语句行为差别举例阻塞与非阻塞赋值语句行为差别举例1非阻塞过程赋值(续)非阻塞过程赋值(续)阻塞与非阻塞赋值语句行为差别举例阻塞与非阻塞赋值语句行为差别举例2module pipeMult(product,mPlier,mCand,go,clock);input go,clock;input 7:0 mPlier,mCand;output 15:0 product;reg 15:0 product;always(posedge go)product=repeat(4)(p

    50、osedge clock)mPlier*mCand;endmodulemodule pipeMult(product,mPlier,mCand,go,clock);input go,clock;input 7:0 mPlier,mCand;output 15:0 product;reg 15:0 product;always(posedge go)product=repeat(4)(posedge clock)mPlier*mCand;endmodule非阻塞过程赋值(续)非阻塞过程赋值(续)阻塞与非阻塞赋值语句行为差别举例阻塞与非阻塞赋值语句行为差别举例2波形波形非阻塞非阻塞阻塞阻塞非阻塞过

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:第10章Verilog操作符课件.ppt
    链接地址:https://www.163wenku.com/p-3860552.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库