资源描述
第四章第四章 常用常用Verilog语法之二语法之二o逻辑运算符逻辑运算符o关系运算符关系运算符o移位运算符移位运算符o位拼接运算符位拼接运算符o赋值语句赋值语句o结构语句结构语句7/15/202414.1 逻辑运算符逻辑运算符o&:逻辑与o|:逻辑或o!:逻辑非7/15/202424.1 逻辑运算符逻辑运算符7/15/202434.2 关系运算符关系运算符o,=o如果声明的关系是假(false),则返回值是0;如果声明的关系是真(true),则返回值是1。7/15/202444.2 优先级优先级o所有关系运算符优先级相同,关系运算符优先级低于算术运算符的优先级,!优先级高于算术运算符,&,|优先级低于关系运算符。o !算术运算符算术运算符关系运算符关系运算符&,|n ab&xy 等价于(ab)&(xy)n!a|ab 等价于(!a)|(ab)n asize-1 等价于a(size-1)7/15/202454.3 等式运算符等式运算符o逻辑等式运算符 n=,等于n!=,不等于对于逻辑等式运算符,若操作数中某些位为X和Z,结果为不定值X。oCase等式运算符。n=,等于n!=,不等于比较时对某些位的不定值不定值x和高阻值和高阻值z也进行比较,两也进行比较,两个操作数必须完全一致个操作数必须完全一致,其结果才是1,否则为0.7/15/202467/15/202474.3 等式运算符等式运算符4.3 等式运算符等式运算符o四个运算符优先级相同,高于&,|。a=b|x=y 等价于(a=b)|(x=y)7/15/202484.4 移位运算符移位运算符o,左移位运算符 a,右移位运算符 an,a右移n位 两种移位运算都用两种移位运算都用0来填补移出的空位来填补移出的空位7/15/202494.4 移位运算符移位运算符o注意变量位数的变化n右移不会导致位数变化n左移可能导致位数变化4b10011,5b10010;11,4b0100;4b10014,4b00007/15/2024104.5 位拼接运算符位拼接运算符oConcatation:,将两个或者多个信号的某些位拼接起来进行位运算操作n 信号1的某几位,信号2的某几位,信号n的某几位n a,b3:0,w,3b101,or a,b3,b2,b1,b0,w,1b1,1b0,1b1o在位拼接表达式中不允许存在没有指明位数的信号在位拼接表达式中不允许存在没有指明位数的信号7/15/2024114.5 位拼接运算符位拼接运算符o位拼接可以用重复法来简化表达式4w,等价于w,w,w,wo位拼接可以用嵌套的方式嵌套的方式来表达b,3a,b 等价于b,a,b,a,b,a,b7/15/2024124.6 缩减运算符缩减运算符o reduction operator是单目运算符单目运算符,有与(&)、与非(&)、或(|)、或非(|)、异或()、同或(,)运算,对单个操作数进行递推运算,运算结果是1位的二进制数例:reg3:0 B;reg C;C=&B;等价于 C=(B0&B1)&B2)&B3;p注意与位运算符的区别注意与位运算符的区别7/15/2024134.7 条件运算符条件运算符o条件表达式?表达式1:表达式2若条件表达式为真,选择表达式1;若条件表达式为假,选择表达式2.wire 2:0 Student=Marks 18?Grade_A:Grade_C;7/15/2024144.8 优先级别优先级别7/15/202415移位运算符移位运算符算术运算符算术运算符关系运算符关系运算符等式运算符等式运算符位运算符位运算符逻辑运算符逻辑运算符条件运算符条件运算符o注意下面运算的区别运算过程中的位宽问题运算过程中的位宽问题o有进位产生时,可能会导致运算结果出错。a,b均为16bit的reg类型变量 a+b1p a+b不产生进位时,结果正确p a+b产生进位时,仅仅保留低16bit的数据,进位位丢失,导致结果错误。p解决方法p将a+b赋值给17bit reg变量,然后移位p0+a+b1,0为32bit宽,不会丢失进位位,结果正确4.9 赋值语句和块语句赋值语句和块语句o块语句:用来将两条或多条语句组合在一起,使其在格式上看更像一条语句。n顺序块n并行块7/15/2024184.9 赋值语句和块语句赋值语句和块语句o 顺序块7/15/202419begin 语句1;语句2;语句n;end;begin:块名:块名 块内声明语句;块内声明语句;语句语句1;语句语句2;语句语句n;end;块名是该块的名字,一个标志名;块名是该块的名字,一个标志名;块内声明语句可以是参数声明语句、块内声明语句可以是参数声明语句、reg型变量声明语型变量声明语句、句、integer型变量声明语句和型变量声明语句和real型变量声明语句。型变量声明语句。4.9 赋值语句和块语句赋值语句和块语句o 顺序块n块内语句是按顺序执行的;n每条语句的延迟时间是相对于前一条语句的仿真时间而言的;n直到最后一条语句执行完,程序流程控制才跳出该语句块。7/15/2024207/15/2024214.9 赋值语句和块语句赋值语句和块语句o并行块并行块 fork fork:块名块名 语句语句1;块内声明语句;块内声明语句;语句语句2;语句语句1;语句语句2;语句语句n;join语句语句n;join7/15/2024224.9 赋值语句和块语句赋值语句和块语句4.9 赋值语句和块语句赋值语句和块语句o 并行块并行块n块内语句是同时并行地执行;块内语句是同时并行地执行;n每条语句的延迟时间是相对于每条语句的延迟时间是相对于程序流程控制进入程序流程控制进入到块内的仿真时间到块内的仿真时间而言的;而言的;n延迟时间是用来给赋值语句提供执行时序的;延迟时间是用来给赋值语句提供执行时序的;n当按时间时序排序在最后的一条语句执行完,或当按时间时序排序在最后的一条语句执行完,或一个一个disable语句执行时,程序流程控制才跳出语句执行时,程序流程控制才跳出该语句块。该语句块。7/15/2024234.9 赋值语句和块语句赋值语句和块语句o 并行块7/15/202424o顺序块顺序块4.9 赋值语句和块语句赋值语句和块语句4.9 赋值语句和块语句赋值语句和块语句o 起始时间和结束时间n 顺序块:起始时间就是第一条语句开始被执行的第一条语句开始被执行的时间时间,结束时间就是最后一条语句执行完的时间最后一条语句执行完的时间;n 并行块:起始时间对块内所有的语句是相同的,即程序流程控制进入该块的时间程序流程控制进入该块的时间,其结束时间是按时间排序在最后的语句执行结束的时间按时间排序在最后的语句执行结束的时间。n fork_join块内:各条语句不必按顺序给出。n块嵌套时:注意起始时间和结束时间。7/15/2024264.9 赋值语句和块语句赋值语句和块语句7/15/202427块语句的嵌套块语句的嵌套o块嵌套:顺序块和并行块混合在一起使用 initial begin x=1b0;fork#5 y=1b1;#10 z=x,y;join#20 w=y,x;end4.9 赋值语句和块语句赋值语句和块语句o 块名:将名字加在关键词块名:将名字加在关键词begin 或或 fork后面即后面即可。可。n可以在可以在块内定义局部变量块内定义局部变量parameter,reg,integer.,即只在块内使用的变量;,即只在块内使用的变量;n命名块是设计层次的一部分,命名块中声明的变量可以命名块是设计层次的一部分,命名块中声明的变量可以通过层次名引用进行访问通过层次名引用进行访问;n在在Verilog语言中,所有的变量都是静态的,即所有的语言中,所有的变量都是静态的,即所有的变量都只有一个唯一的存储地址,因此变量都只有一个唯一的存储地址,因此进入或跳出块并进入或跳出块并不影响存储在变量内的值不影响存储在变量内的值。n块名提供了一个在任何仿真时刻块名提供了一个在任何仿真时刻确认变量值确认变量值的方法的方法n命名块可以被禁用命名块可以被禁用(使用使用disable语句语句)7/15/202429o使用使用disable中止命名块执行中止命名块执行,disable也可也可以用来以用来从循环中退出从循环中退出、处理错误条件以及根据处理错误条件以及根据控制信号来控制某些代码段是否被执行控制信号来控制某些代码段是否被执行。o对块语句的禁用导致对块语句的禁用导致紧接在块后面的那条语句紧接在块后面的那条语句被执行。(与被执行。(与C中的中的break类似)类似)命名块的禁用命名块的禁用reg15:0 flag;integer i;/to be used to countinitialbeginflag=16b0010_0000_0000_0000;i=0;begin:block1while(i16)beginif(flagi)begin$display(Encountered a TRUE bit at element number%d,i);disable block1;endi=i+1;endendend4.9 赋值语句和块语句赋值语句和块语句o赋值语句:赋值语句:n非阻塞赋值方式非阻塞赋值方式(non_blocking)n阻塞赋值方式阻塞赋值方式(blocking)7/15/2024324.9 赋值语句和块语句赋值语句和块语句o非阻塞赋值方式非阻塞赋值方式(non_blocking):b=a;nb的值的值并不是立刻改变并不是立刻改变;n块结束后才完成赋值操作块结束后才完成赋值操作。7/15/202433o阻塞赋值方式阻塞赋值方式(blocking):b=a;nb的值在赋值语句执行完后的值在赋值语句执行完后立刻改变立刻改变;n赋值语句赋值语句执行完后,块才结束执行完后,块才结束。4.9 赋值语句和块语句赋值语句和块语句always(posedge clk)begin b=a;c=b;end7/15/2024344.9 赋值语句和块语句赋值语句和块语句always(posedge clk)begin b=a;c=b;end7/15/2024354.9 关键词关键词o在在verilog hdl中,所有的中,所有的关键词关键词是是事先定义事先定义好的确认符,用来组织语言结构好的确认符,用来组织语言结构。关键词用。关键词用小小写字母定义写字母定义。注意变量的定义不要与这些关键。注意变量的定义不要与这些关键词冲突。词冲突。7/15/202436
展开阅读全文