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

上传人:本田雅阁 文档编号:2546922 上传时间:2019-04-06 格式:PPT 页数:117 大小:743.51KB
返回 下载 相关 举报
第10章Verilog操作符ppt课件.ppt_第1页
第1页 / 共117页
第10章Verilog操作符ppt课件.ppt_第2页
第2页 / 共117页
第10章Verilog操作符ppt课件.ppt_第3页
第3页 / 共117页
亲,该文档总共117页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第10章Verilog操作符ppt课件.ppt》由会员分享,可在线阅读,更多相关《第10章Verilog操作符ppt课件.ppt(117页珍藏版)》请在三一文库上搜索。

1、第10章 Verilog操作符,学习内容: 熟悉Verilog语言的操作符,操作符类型,下表以优先级顺序列出了Verilog操作符。注意“与”操作符的优先级总是比相同类型的“或”操作符高。本章将对每个操作符用一个例子作出解释。,最高,最低,优先级,Verilog中的大小(size)与符号,Verilog根据表达式中变量的长度对表达式的值自动地进行调整。 Verilog自动截断或扩展赋值语句中右边的值以适应左边变量的长度。 当一个负数赋值给无符号变量如reg时,Verilog自动完成二进制补码计算,module sign_size; reg 3:0 a, b; reg 15:0 c; initi

2、al begin a = -1; / a是无符号数,因此其值为1111 b = 8; c= 8; / b = c = 1000 #10 b = b + a; / 结果10111截断, b = 0111 #10 c = c + a; / c = 10111 end endmodule,算术操作符,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 = 111

3、11111_1101 end initial fork #10 ans = five * int; / ans = -15 #20 ans = (int + 5)/ 2; / ans = 1 #30 ans = five/ int; / ans = -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; join endmodule,+ 加 - 减 * 乘 /

4、除 % 模,将负数赋值给reg或其它无符号变量使用2的补码算术。 如果操作数的某一位是x或z,则结果为x 在整数除法中,余数舍弃 模运算中使用第一个操作数的符号,注意integer和reg类型在算术运算时的差别。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 join endmodul

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

6、n rega = 4b0011; /逻辑值为“1” regb = 4b10xz; /逻辑值为“1” regc = 4b0z0x; /逻辑值为“x” end initial fork #10 ans = rega join endmodule,! not & and | or,逻辑操作符的结果为一位1,0或x。 逻辑操作符只对逻辑值运算。 如操作数为全0,则其逻辑值为false 如操作数有一位为1,则其逻辑值为true 若操作数只包含0、x、z,则逻辑值为x,逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全0,则其逻辑值为0,逻辑反操作值为1。,逻辑反与位反的对比,module negati

7、on(); reg 3: 0 rega, regb; reg 3: 0 bit; reg log; initial begin rega = 4b1011; 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; join endmodule,! logical not 逻辑反 bit-wise not 位反,逻辑反的结果为一位1,0或x。

8、 位反的结果与操作数的位数相同,逻辑反操作符将操作数的逻辑值取反。例如,若操作数为全0,则其逻辑值为0,逻辑反操作值为1。,一元归约操作符,module reduction(); reg val; reg 3: 0 rega, regb; initial begin rega = 4b0100; regb = 4b1111; end initial fork #10 val = join endmodule,& and | or xor xnor xnor,归约操作符的操作数只有一个。 对操作数的所有位进行位操作。 结果只有一位,可以是0, 1, X。,移位操作符,module shift (

9、); reg 9: 0 num, num1; reg 7: 0 rega, regb; initial rega = 8b00001100; initial fork #10 num 3; / num = 00_0000_0001 #20 regb 3 ; / regb = 0000_0001 #30 num 2; /rega = 1111_1100 #50 num1 2;/num1=00_1111_1100 #60 $finish; join endmodule, 逻辑右移 逻辑左移,移位操作符对其左边的操作数进行向左或向右的位移位操作。 第二个操作数(移位位数)是无符号数 若第二个操作数是

10、x或z则结果为x,在赋值语句中,如果右边(RHS)的结果: 位宽大于左边,则把最高位截去 位宽小于左边,则零扩展, 将左边的操作数右移右边操作数指定的位数,左移先补后移 右移先移后补,建议:表达式左右位数一致,关系操作符,module relationals (); reg 3: 0 rega, regb, regc; reg val; initial begin rega = 4b0011; regb = 4b1010; regc = 4b0x10; end initial fork #10 val = regc rega ; / val = x #20 val = regb = rega

11、; / val = 1 #40 val = regb regc ; / val = 1 #50 $finish; join endmodule, 大于 = 大于等于 = 小于等于,其结果是1b1、1b0或1bx。,无论x为何值,regbregc,rega和regc的关系取决于x,相等操作符,赋值操作符,将等式右边表达式的值拷贝到左边。,注意逻辑等与 case等的差别,=,逻辑等,= =,case等,= = =,2b1x=2b0x 值为0,因为不相等 2b1x=2b1x 值为x,因为可能不相等,也可能相等,2b1x=2b0x 值为0,因为不相同 2b1x=2b1x 值为1,因为相同,a = 2b

12、1x; 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(“ a is not identical to b“);,Case等只能用于行为描述,不能用于RTL描述。,相等操作符,逻辑等 逻辑不等,= ! =,module equalities1(); reg 3: 0 rega, regb, regc; reg

13、 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 $finish; join endmodule,其结果是1b1、1b0或1bx。 如果左边及右边为确定值并且相等,则结果为1。 如果左边及右边为确定值并且不相

14、等,则结果为0。 如果左边及右边有值不能确定的位,但值确定的位相等,则结果为x。 !=的结果与= =相反,值确定是指所有的位为0或1。不确定值是有值为x或z的位。,相等操作符,相同(case等) 不相同(case不等),= ! =,module 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 !

15、= regc; / val = 1 #30 val = regb = regc; / val = 0 #40 val = regc = regc; / val = 1 #50 $finish; join endmodule,其结果是1b1、1b0或1bx。 如果左边及右边的值相同(包括x、z),则结果为1。 如果左边及右边的值不相同,则结果为0。 !=的结果与 = 相反,综合工具不支持,条件操作符,条件,?:,module likebufif( in, en, out); input in; input en; output out; assign out = (en = 1) ? in :

16、bz; endmodule module 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,如果条件值为x或z,则结果可能为x或z,条件操作符,条件操作符的语法为: = ? :,registger = condition ? true_value:false_value;,其意思是:if condition is TRUE, then

17、LHS=true_expression, else LHS = false_expression,每个条件操作符必须有三个参数,缺少任何一个都会产生错误。 最后一个操作数作为缺省值。,上式中,若condition为真则register等于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 =

18、b =0,则out = 0;若ab,则out值不确定。,级联操作符,级联, ,可以从不同的矢量中选择位并用它们组成一个新的矢量。 用于位的重组和矢量构造,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, reg

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

20、1; regb = 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 s

21、ign-extended #40 $finish; join endmodule,前两个 符号之间的正整数指定复制次数。,复习,第11章 行为建模,学习内容: 行为建模的基本概念 Verilog中高级编程语言结构 如何使用连续赋值,行为描述,行为级描述是对系统的高抽象级描述。在这个抽象级,注重的是整个系统的功能而不是实现。 Verilog有高级编程语言结构用于行为描述,包括: wait, while, if then, case和forever Verilog的行为建模是用一系列以高级编程语言编写的并行的、动态的过程块来描述系统的工作。,过程(procedural)块,过程块是行为模型的基础。

22、 过程块有两种: initial块,只能执行一次 always块,循环执行 过程块中有下列部件 过程赋值语句:在描述过程块中的数据流 高级结构(循环,条件语句):描述块的功能 时序控制:控制块的执行及块中的语句。,过程赋值(procedural assignment),在过程块中的赋值称为过程赋值。 在过程赋值语句中表达式左边的信号必须是寄存器类型(如reg类型) 在过程赋值语句等式右边可以是任何有效的表达式,数据类型也没有限制。 如果一个信号没有声明则缺省为wire类型。使用过程赋值语句给wire赋值会产生错误。,module adder (out, a, b, cin); input a,

23、 b, cin; output 1:0 out; wire a, b, cin; reg half_sum; reg 1: 0 out; always ( a or b or cin) begin half_sum = a b cin ; / OK half_carry = a end endmodule,half_carry没有声明,过程时序控制,在过程块中可以说明过程时序。过程时序控制有三类: 简单延时(#delay):延迟指定时间步后执行 边沿敏感的时序控制:() 在信号发生翻转后执行。 可以说明信号有效沿是上升沿(posedge)还是下降沿(negedge)。 可以用关键字or指定多个

24、参数。 电平敏感的时序控制:wait() 直至expr值为真时(非零)才执行。 若expr已经为真则立即执行。,module wait_test; reg clk, waito, edgeo; initial begin initial begin clk = 0;edgeo=0;waito=0;end always #10 clk = clk; always (clk) #2 edgeo = edgeo; always wait(clk) #2 waito = waito; endmodule,简单延时,在test bench中使用简单延时(#延时)施加激励,或在行为模型中模拟实际延时。,m

25、odule 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到out延时10个时间单位 else #12 out = b; /从b到out延时12个时间单位 endmodule,在简单延时中可以使用模块参数parameter: module clock_gen (clk); output clk; reg clk; parameter cycle = 20; initial clk = 0; always #(cycle/

26、2) clk = clk; endmodule,边沿敏感时序,时序控制可以用在RTL级或行为级组合逻辑或时序逻辑描述中。可以用关键字posedge和negedge限定信号敏感边沿。敏感表中可以有多个信号,用关键字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下降

27、沿执行 out = sum; endmodule,注:事件控制符or和位或操作符|及逻辑或操作符|没有任何关系。,wait语句,wait用于行为级代码中电平敏感的时序控制。 下面 的输出锁存的加法器的行为描述中,使用了用关键字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为低电平时执行加法

28、 out = a + b; end endmodule,注:综合工具还不支持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 * / * res

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

30、到等待mult的always块。,行为描述举例,在上面的例子中发生下面顺序的事件: 等待set=1,忽略时刻10的clk的posedge。 等待下一个clk的posedge,它将在时刻30发生。 等待3个时间单位,在时刻33(30+3)置q=1。 等待10个时间单位,在时刻43(33+10)置q=0。 等待在时刻48发生的set=0。 等待在时刻70发生且与clk的上升沿同时发生的set=1。 等待下一个上升沿。时刻70的边沿被忽略,因为到达该语句时时间已经过去了,如例子所示,clk=1。 重要内容:在实际硬件设计中,事件6应该被视为一个竞争(race condition)。在仿真过程中,值的

31、确定倚赖于顺序,所以是不可预测的。这是不推荐的建模类型。,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; end endmodule,下面的RTL例子中只使用单个边沿敏感时序控制。,块语句,块语句用来将多个语句组织在一起,使得他们在语法上如同一个语句

32、。 块语句分为两类: 顺序块:语句置于关键字begin和end之间,块中的语句以顺序方式执行。 并行块:关键字fork和join之间的是并行块语句,块中的语句并行执行。,Fork和join语句常用于test bench描述。这是因为可以一起给出矢量及其绝对时间,而不必描述所有先前事件的时间。,块语句(续),在顺序块中,语句一条接一条地计算执行。 在并行块中,所有语句在各自的延迟之后立即计算执行。,begin #5 a = 3; #5 a = 5; #5 a = 4; end,fork #5 a = 3; #15 a = 4; #10 a = 5; join,上面的两个例子在功能上是等价的。Fo

33、rk-join例子里的赋值故意打乱顺序是为了强调顺序是没有关系的。 注意fork-join块是典型的不可综合语句,并且在一些仿真器时效率较差。,延迟赋值语句,begin temp= b; (posedge clk) a = temp; end,a = ( posedge clk) b;,语法: LHS = RHS; 时序控制延迟的是赋值而不是右边表达式的计算。 在延迟赋值语句中RHS表达式的值都有一个隐含的临时存储。 可以用来简单精确地模拟寄存器交换和移位。,等价语句,LHS: Left-hand-side RHS: Right-hand-side,延迟赋值语句,begin a = #5 b;

34、 b = #5 a; #10 $diplay(a, b); end,fork a = #5 b; b = #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被赋值给他们各自的目标。这是一个安全传输。 注意,另一个过程块可以在时刻0到时刻5之间影响a和b的值。,并行语句在同一时间步发生,但由仿真器在另外一个时间执行。 在

35、下面的每个例子中,a和b的值什么时候被采样? 在下面的每个例子中,什么时候给a和b赋值?,b值拷贝到a然后回传,a和b值安全交换,非阻塞过程赋值,module swap_vals; reg a, b, clk; initial begin a = 0; b = 1; clk = 0; end always #5 clk = clk; always ( posedge clk) begin a = b; / 非阻塞过程赋值 b = a; / 交换a和b值 end endmodule,阻塞过程赋值执行完成后再执行在顺序块内下一条语句。 非阻塞赋值不阻塞过程流,仿真器读入一条赋值语句并对它进行调度之

36、后,就可以处理下一条赋值语句。 若过程块中的所有赋值都是非阻塞的,赋值按两步进行: 仿真器计算所有RHS表达式的值,保存结果,并进行调度在时序控制指定时间的赋值。 在经过相应的延迟后,仿真器通过将保存的值赋给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 end initial

37、 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; end endmodule,输出结果: 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

38、= x d= x e= 0 f = 1 10 a= 1 b= x c= x d= 1 e= 0 f = 1 12 a= 1 b= 0 c= x d= 1 e= 0 f = 1 16 a= 1 b= 0 c= 1 d= 1 e= 0 f = 1,阻塞与非阻塞赋值语句行为差别举例1,非阻塞过程赋值(续),阻塞与非阻塞赋值语句行为差别举例2,module pipeMult(product, mPlier, mCand, go, clock); input go, clock; input 7:0 mPlier, mCand; output 15:0 product; reg 15:0 product

39、; always (posedge go) product = repeat (4) (posedge clock) mPlier * mCand; endmodule,module 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

40、,非阻塞过程赋值(续),阻塞与非阻塞赋值语句行为差别举例2波形,非阻塞,阻塞,非阻塞过程赋值(续),阻塞与非阻塞赋值语句行为差别举例3,DFF,同步复位DFF,同步置位DFF,非阻塞过程赋值(续),举例4:非阻塞赋值语句中延时在左边和右边的差别,module exchange; reg3:0 a, b; initial begin a=1; b=4; #2 a=3; b=2; #20 $finish; end initial $monitor($time, “t%ht%h“, a, b); initial begin #5 a = b; #5 b = a; end endmodule,modu

41、le exchange; reg3:0 a, b; initial begin a=1; b=4; #2 a=3; b=2; #20 $finish; end initial $monitor($time, “t%ht%h“, a, b); initial begin a = #5 b; b = #5 a; end endmodule,time a b 0 1 4 2 3 2 5 4 1,time a b 0 1 4 2 3 2 5 2 2,条件语句(if分支语句),可以多层嵌套。在嵌套if序列中,else和前面最近的if相关。 为提高可读性及确保正确关联,使用beginend块语句指定其作用

42、域。,always #20 if (index 0) / 开始外层 if if (rega regb) / 开始内层第一层 if result = rega; else result = 0; / 结束内层第一层 if else if (index = 0) begin $display(“ Note : Index is zero“); result = regb; end else $display(“ Note : Index is negative“);,if 和 if-else 语句:,描述方式: if (表达式) begin end else begin end,条件语句(case

43、分支语句),case语句:,在Verilog中重复说明case项是合法的,因为Verilog的case语句只执行第一个符合项。,条件语句-case语句,case语句是测试表达式与另外一系列表达式分支是否匹配的一个多路条件语句。,Case语句进行逐位比较以求完全匹配(包括x和z)。 Default语句可选,在没有任何条件成立时执行。此时如果未说明default,Verilog不执行任何动作。 多个default语句是非法的。,重要内容: 使用default语句是一个很好的编程习惯,特别是用于检测x和z。 Casez和casex为case语句的变体,允许比较无关(dont-care)值。 case

44、表达式或case项中的任何位为无关值时,在比较过程中该位不予考虑。 在casez语句中,? 和 z 被当作无关值。 在casex语句中,?,z 和 x 被当作无关值。,case , :赋值语句或空语句; , :赋值语句或空语句; default:赋值语句或空语句;,case语法:,循环(looping)语句,有四种循环语句: repeat:将一块语句循环执行确定次数。 repeat (次数表达式) while:在条件表达式为真时一直循环执行 while (条件表达式) forever:重复执行直到仿真结束 forever for:在执行过程中对变量进行计算和判断,在条件满足时执行 for(赋初

45、值;条件表达式;计算) ,循环(looping)语句-repeat,repeat:将一块语句循环执行确定次数。 repeat (次数表达式) 语句,为什么要说明一个shift_opb变量?,循环(looping)语句,while:只要表达式为真(不为0),则重复执行一条语句(或语句块),. reg clk; initial begin clk = 0; forever begin #10 clk = 1; #10 clk = 0; end end .,循环(looping)语句,forever:一直执行到仿真结束 forever应该是过程块中最后一条语句。其后的语句将永远不会执行。 forev

46、er语句不可综合,通常用于test bench描述。,这种行为描述方式可以非常灵活的描述时钟,可以控制时钟的开始时间及周期占空比。仿真效率也高。,循环(looping)语句,for:只要条件为真就一直执行 条件表达式若是简单的与0比较通常处理得更快一些。但综合工具可能不支持与0的比较。,行为级零延时循环,当事件队列中所有事件结束后仿真器向前推进。但在零延时循环中,事件在同一时间片不断加入,使仿真器停滞后那个时片。 在下面的例子中,对事件进行了仿真但仿真时间不会推进。当always块和forever块中没有时序控制时就会发生这种事情。,module comparator( out, in1, i

47、n2); output 1: 0 out; input 7: 0 in1, in2; reg 1: 0 out; always if (in1 = in2) out = 2b00; else if (in1 in2) out = 2b01; else out = 2b10; initial #10 $finish; endmodule,持续赋值(continuous assignment),可以用持续赋值语句描述组合逻辑,代替用门及其连接描述方式。 持续赋值在过程块外部使用。 持续赋值用于net驱动。 持续赋值只能在等式左边有一个简单延时说明。 只限于在表达式左边用#delay形式 持续赋值可

48、以是显式或隐含的。 语法: #delay strength = ;,wire out; assign out = a / 隐含,持续赋值(continuous assignment)(续),持续赋值的例子,持续赋值(continuous assignment)(续),隐含或显式赋值 给任何net类型赋值 给矢量net的位或部分赋值 设置延时 设置强度 用级联同时给几个net类变量赋值 使用条件操作符 使用用户定义的函数的返回值 可以是任意表达式,包括常数表达式,in的值赋给o1,但其每位赋值的强度及延迟可能不同。如果o1是一个标量(scalar)信号,则其延迟和前面的条件缓冲器上的门延迟相同。对向量线网(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1