文档库 最新最全的文档下载
当前位置:文档库 › CASE在VHDL和VERILOG中运用的注意点

CASE在VHDL和VERILOG中运用的注意点

CASE在VHDL和VERILOG中运用的注意点

在VHDL中,CASE的语法如下: CASE 表达式 IS WHEN 值1 => 顺序语句1; WHEN 值2 => 顺序语句2;…… WHEN OTHERS => 顺序语句n; END CASE;

1. CASE的各分支语句无优先级,这是同if..else组合的嵌套语句的区别,if..else嵌套语句是有优先级的。

2. 各个分支的值须互斥,不能含有相同的分支值。

3. WHEN OTHERS值最好写上,以避免产生不必要的锁存。

在Verilog中,case的语法如下:

case(控制表达式)

分支值1:begin 一条或者多条语句 end

分支值2:begin 一条或者多条语句 end

…..

default: begin 一条或者多条语句 end

endcase

1. case的各分支语句无优先级,这是同if..else组合的嵌套语句的区别,if..else嵌套语句是有优先级的。

2. 各个分支的值须互斥,不能含有相同的分支值

3. default最好写上,以避免产生不必要的锁存。

VBA中的Select Case语句

Select Case语句也是条件语句之一,而且是功能最强大的条件语句。它主要用于多条件判断,而且其条件设置灵活、方便,在工作中使用频率极高。本节介绍Select Case语句的语法及应用案例. Select Case语句的语法如下: Select Case testexpression [Case expressionlist-n [statements-n]] ... [Case Else [elsestatements]] End Select Select Case语句包括四部分,每部分详细含义如表38-1所示。 在以上语法列表中,省略号代表可以使用多个条件。只要有一个Case就需要有一个statements-n,表示条件及符合条件时的执行条件。 其中elsestatements表示不符合指定条件时的执行语句,是可选参数。可以忽略elsestatements,也可以执行一条或者一组语句,为了让程序能够处理一些不可预见的情况,尽量使用elsestatements语句处理不符合条件时该如何回应。 在Select Case的多个参数中,最复杂的是expressionlist-n部分,它有多种表达形式,包括:lExpression——直接声明一个条件值,例如5 lexpression To expression——声明一个条件的范围,例如5-10 lIs comparisonoperator——声明一种比较方式,例如is >5 下面的实例可以展示参数中expressionlist-n部分的多种表达形式。 实例1:多条件时间判断 根据当前的时间判断是上午、中午,还是下午、晚上、午夜。 要求中条件比较多,使IF…Then…需要多层嵌套,而Select Case语句会更简单。代码如下:___________________________________________________ Sub 时间() Dim Tim As Byte, msg As String

switch case用法示例

C语言——switch case语句 switch语句的语法如下(switch,case和default是关键字): switch ( 表达式) { case 常量表达式1 :语句1;break; case 常量表达式2 :语句2;break; …… case 常量表达式n :语句n;break; default:语句n+1;break; } 说明: break退出{ } case后面只能跟一个值(加冒号:),而不能是一个表达式 switch(表达式) 后面没有;(分号) { }前后没有;(分号) switch语句规则 case标签必须是常量表达式(constant Expression) 只能针对基本数据类型使用switch,这些类型包括int、char等。对于其他类型,则必须使用if语句。 case 标签后不能是浮点型数据(如1.0 ) case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值。 不要问为什么,C就这规定!我们只需要了解规则,学会应用即可! 猜想原因:浮点型数据不是准确的数据,在机器中只能表示出一个近似值,如:0.1 在机器中存的是0.09999612.... 也可能是0.09999723.... 根据精度不同,数据来源不同,其值是个不确定的数据,因此,不能用CASE来定位 简单例题1:

#include void main(void) { int i=5; switch(i) { case 1: printf("%d",i); break; case 2+3: printf("%d",3); break; default : printf("%d",i); } } //程序运行效果是输出:3 经典例题2: #include void main(void) { switch('A') { case 'A': printf("A\n"); break; case 'B': printf("%d",3); break; default : printf("%d",7); } } //程序运行效果是输出:A 经典例题3: #include void main(void) { int i=5; switch(5) {

Verilog可综合与不可综合语句汇总

1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。 (2)所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,delays,UDP,wait。 (3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。 建立可综合模型的原则 要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点:(1)不使用initial。 (2)不使用#10。 (3)不使用循环次数不确定的循环语句,如forever、while等。 (4)不使用用户自定义原语(UDP元件)。 (5)尽量使用同步方式设计电路。 (6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。 (7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。 (8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。 (9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。 (10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。

case语句

复习: 输入三个数a,b,c,输出最大数(分别用不嵌套if 和嵌套的if语句) (提问) 4.4 Case语句 [例4-4-1] 某服装公司为了推销产品,采取这样的批发销售方案:凡订购超过100 套的,每套定价为50元,否则每套价格为80元。编程由键盘输入订购套数,输出应付款的金额数。 解:设X为订购套数,Y为付款金额,则: Var x,y: integer; Begin Write('X=') ;Readln(x) ; if x >100 then y:=50*X else y:=80*X; Writeln('y=',y) ; Readln End. 如果有多种(两种或两种以上)选择,常用情况语句编程。 将前面[例]改成用如下方法来处理。根据题意,付款计算可分为两种情况: ①Y=50*X (X>100) ②Y=80*X (X<=100) 显然,情况①与②的选择取决于X值。假设用N表示“情况值”,暂且先让N =2; 如果X>100则N=1;(此题中N的值只是1或2,且取决于X值) Var X,Y,N: integer; Begin Write('X=') ;readln(x) ;n:=2;{ 先让n=2 } if X>100 then n:=1;{如果X>100则n=1 } Case n of { 关于情况处理} 1: Y:=50*X; 2: Y:=80*X; end; Writeln('Y=',Y) ; Readln End. 程序中的Case─end 语句为情况语句,是多路分支控制,一般格式为:

格式一: case 表达式of 情况常量表1:语句1; 情况常量表2:语句2; …… 情况常量表n:语句n; end; 格式一:执行情况语句时,先计算Case后面表达式的值,然后根据该值在情况常量表中的“对应安排”,选择其对应的语句执行,执行完所选择语句后就结束Case语句;如果常量表中没有一个与表达式值对应的语句,则什么也不做就结束本Case语句。 格式二: Case 表达式of 情况常量表1: 语句1; 情况常量表2: 语句2; …… 情况常量表n: 语句n; else 语句n+1 end; 格式二:这种格式的前面部分是相同的,所不同的是:如果常量表中没有一个与表达式值对应的语句,则执行与else对应的语句,然后结束Case语句。 case语句在使用时有几点要注意: 1. end与case对应;标号与语句之间用“:”分隔;else与语句之间不用分隔符。2.表达式的类型通常是整型或字符型。所以表达式经常会用到mod、div运算和trunc、round等函数。 3.情况常量表必须是一个或几个常量,常量间用“,”间隔,其类型与表达式的类型一致。常量间的顺序可以是任意的。也就是说可以多个标号对应同一条语句。 4. 语句可以是多个语句,但必须用语句括号(begin……end)括起即复合语句。 5. case语句也可以嵌套 [例4-4-2] 对某产品征收税金,在产值1万元以上征收税5%;在1万元以下但在5000元以上的征收税3%;在5000元以下但在1000元以上征收税2%;1000元以下的免收税。编程计算该产品的收税金额。 解:设x为产值,tax为税金,用P表示情况常量各值,以题意中每1000元为情况分界: P=0: tax=0 (x<1000 ) P=1,2,3,4: tax=x*0.02 (1000<=x<5000 ) P=5,6,7,8,9: tax=x*0.03 (5000 10000 ) 这里的P是“情况”值,用产值x除以1000的整数值作为P,如果P>10也归入P=10的情况。Pascal语言用P=trunc(x/1000)取整计算, Var x,p : integer; Tax : real;

case的两种表现方式和使用

CASE语句 在某些方面,CASE语句是几种不同语句的一种等价物,这些语句来自你之前学过的语言。在过程化的编程语言中,下面的语句与CASE的功能相似: Switch: C、C++、C#、Delphi Select Case:Visual Basic Do Case:Xbase Evaluate:COBOL 我可以肯定还有其他语句,它们来自我多年前以这种或那种形式使用的语言。在许多方面,在T-SQL中使用CASE语句的最大缺陷是置换运算符而不是流控制语句。 书写CASE语句的方法不止一种:可以使用输入表达式或布尔表达式。第一种选择是可以使用一个输入表达式,将它与每一个WHEN子句中使用的值进行比较。SQL Server将其视为简单CASE: 1.CASE 2.WHEN THEN 3.[...n] 4.[ELSE ] 5.END 第二种选择是为每个WHEN子句提供一个表达式(计算结果为TRUE/FALSE)。文档将其视为搜索CASE: 1.CASE 2.WHEN THEN 3.[...n] 4.[ELSE ] 5.END 或许CASE最大的好处是可以在SELECT语句里"内联"地(即,作为完整的部分)使用它。这一功能绝对是非常强大的。 1. 简单CASE 简单CASE使用一个可以得到布尔值结果的表达式。下面看一个例子: https://www.wendangku.net/doc/c510029475.html,E AdventureWorks2008; 2.GO 3. 4.SELECT TOP 10 SalesOrderID, SalesOrderID % 10 AS 'Last Digit', Position = 5.CASE SalesOrderID % 10 6.WHEN 1 THEN 'First' 7.WHEN 2 THEN 'Second' 8.WHEN 3 THEN 'Third'

verilog不可被综合的语句

verilog 不可综合语句总结汇总 2009-04-20 18:37 (1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter。 (2)所有综合工具都不支持的结构:time,defparam,$finish,fork,join,initial,delays,UDP,wait。 (3)有些工具支持有些工具不支持的结构:casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。 建立可综合模型的原则 要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点: (1)不使用initial。 (2)不使用#10。 (3)不使用循环次数不确定的循环语句,如forever、while等。 (4)不使用用户自定义原语(UDP元件)。 (5)尽量使用同步方式设计电路。 (6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。 (7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。 (8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。 (9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。 (10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。 (11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。 (12)避免混合使用上升沿和下降沿触发的触发器。 (13)同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。 (14)避免在case语句的分支项中使用x值或z值。 不可综合verilog语句2009-04-14 19:33

switch语句的用法

C语言switch语句的用法详解 C语言还提供了另一种用于多分支选择的switch语句,其一般形式为: switch(表达式){ case 常量表达式1: 语句1; case 常量表达式2: 语句2; … case 常量表达式n: 语句n; default: 语句n+1; } 其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case 后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。 【例4-9】 1.#include 2.int main(void){ 3.int a; 4.printf("input integer number: "); 5.scanf("%d",&a); 6.switch(a){ 7.case1:printf("Monday\n"); 8.case2:printf("Tuesday\n"); 9.case3:printf("Wednesday\n"); 10.case4:printf("Thursday\n"); 11.case5:printf("Friday\n");

12.case6:printf("Saturday\n"); 13.case7:printf("Sunday\n"); 14.default:printf("error\n"); 15.} 16.return0; 17.} 本程序是要求输入一个数字,输出一个英文单词。但是当输入3之后,却执行了case3以及以后的所有语句,输出了Wednesday 及以后的所有单词。这当然是不希望的。为什么会出现这种情况呢?这恰恰反应了switch语句的一个特点。在switch语句中,“case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case 语句的情况。这是与前面介绍的if语句完全不同的,应特别注意。 为了避免上述情况,C语言还提供了一种break语句,专用于跳出switch语句,break 语句只有关键字break,没有参数。在后面还将详细介绍。修改例题的程序,在每一case语句之后增加break 语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。 【例4-10】 1.#include 2.int main(void){ 3.int a; 4.printf("input integer number: "); 5.scanf("%d",&a); 6.switch(a){ 7.case1:printf("Monday\n");break;

case语句 四选一

module mux4_to_1case (out,i0,i1,i2,i3,s1,s0); output out; input i0,i1,i2,i3,s1,s0; reg out; always@(i0 or i1 or i2 or i3 or s1 or s0) case({s1,s0}) 2'd0:out =i0; 2'd1:out =i1; 2'd2:out =i2; 2'd3:out =i3; endcase endmodule module case4_1; reg IN0,IN1,IN2,IN3; reg S1,S0; wire OUTPUT; mux4_to_1case m1(OUTPUT,IN0,IN1,IN2,IN3,S1,S0); initial begin IN0 =1;IN1 = 0;IN2 = 1;IN3 = 0; #0 $display("IN0=%b,IN1=%b,IN2=%b,IN3=%b\n",IN0,IN1,IN2,IN3); S1=0; S0=0; #1 $display("S1=%b,S0=%b,OUTPUT=%b\n",S1,S0,OUTPUT); S1=0; S0=1; #1 $display("S1=%b,S0=%b,OUTPUT=%b\n",S1,S0,OUTPUT); S1=1; S0=0; #1 $display("S1=%b,S0=%b,OUTPUT=%b\n",S1,S0,OUTPUT); S1=1; S0=1; #1 $display("S1=%b,S0=%b,OUTPUT=%b\n",S1,S0,OUTPUT); end endmodule

do case 语句

6、表RSDA.DBF结构为:姓名(C,6);性别(C,2),年龄(N,2),出生日期(D,8)。判断表中是否有"李明",查询此人的性别及年龄,确定参加运动会的项目。 SET TALK OFF USE RSDA ***********SPACE********** 【?】 FOR 姓名= "李明" ***********SPACE********** IF .NOT. 【?】 DO CASE CASE 性别= "男" ?"请参加爬山比赛" CASE 年龄<=50 ? "请参加投篮比赛" CASE 年龄<=60 ? "请参加老年迪斯科比赛" ***********SPACE********** 【?】 ELSE ? "查无此人" BROWSE ENDIF USE SET TALK ON RETURN 『答案』: 1 LOCATE 或 LOCA 或 LOCATE★ALL 2 EOF() 3 ENDCASE 或 ENDC 13、对表XSDB.DBF中的计算机和英语都大于等于90分以上的学生奖学金进行调整:法律系学生奖学金增加12元、英语系学生奖学金增加15元、中文系学生奖学金增加18元,其他系学生奖学金增加20元。请在【】处添上适当的内容,使程序完整。 USE XSDB ***********SPACE********** 【?】 DO WHILE FOUN() DO CASE CASE 系别="法律" ZJ=12 CASE 系别="英语" ZJ=15 CASE 系别="中文" ZJ=18 ***********SPACE********** 【?】 ZJ=20 ENDCASE

switch语句的用法

if语句处理两个分支,处理多个分支时需使用if-else-if结构,但如果分支较多,则嵌套的if语句层就越多,程序不但庞大而且理解也比较困难.因此,C语言又提供了一个专门用于处理多分支结构的条件选择语句,称为switch语句,又称开关语句.使用switch语句直接处理多个分支(当然包括两个分支).其一般形式为: 引用 switch(表达式) { case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; …… case 常量表达式n: 语句n; break; default: 语句n+1; break; } switch语句的执行流程是:首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句就退出switch语句;若圆括号中表达式的值与所有case后面的常量表达式都不等,则执行default后面的语句n+1,然后退出switch语句,程序流程转向开关语句的下一个语句.如下程序,可以根据输入的考试成绩的等级,输出百分制分数段: 引用 switch(grade) { case 'A': /*注意,这里是冒号:并不是分号;*/ printf("85-100\n");

break; /*每一个case语句后都要跟一个break用来退出switch 语句*/ case 'B': /*每一个case后的常量表达式必须是不同的值以保证 分支的唯一性*/ printf("70-84\n"); break; case 'C': printf("60-69\n"); break; case 'D': printf("<60\n"); break; default: printf("error!\n"); } (2) 如果在case后面包含多条执行语句时,也不需要像if语句那样加大括号,进入某个case后,会自动顺序执行本case后面的所有执行语句.如: 引用 { case 'A': if(grade<=100) printf("85-100\n"); else printf("error\n"); break; …… (3) default总是放在最后,这时default后不需要break语句.并且,default 部分也不是必须的,如果没有这一部分,当switch后面圆括号中表达式的值与所有case后面的常量表达式的值都不相等时,则不执行任何一个分支直接退出switch语句.此时,switch语句相当于一个空语句.例如,将上面例子中switch 语句中的default部分去掉,则当输入的字符不是"A","B","C"或"D"时,此switch语句中的任何一条语句也不被执行. (4) 在switch-case语句中,多个case可以共用一条执行语句,如:

可综合的Verilog语句

可综合Verilog语句 ?一: 综合就是从采用Verilog HDL 语言描述的寄存器传输级电路模型构造出门级网表的过程.产生门级网表之后,逻辑优化器读入网表并以用户指定的面积和定时约束为目标优化网表. ?二. 设计流程中的综合 ?Verilog HDL允许用户在不同的抽象层次上对电路进行建模,这些层次从门级、寄存器传输级、行为级直至算法级。因此,同一电路就可以有多种不同的描述方式,但不是每一中描述都是可综合的。事实上,Verilog HDL 原本被设计成一种仿真语言,而不时一种综合语言。结果导致Verilog HDL 中很多结构没有相应的硬件可以对应,例如系统调用$display.同样也不存在用于寄存器传输级综合的Verilog HDL 标准子集.?正是由于存在这些问题,不同的综合系统所支持的Verilog HDL 综合子集是不同的.由于Verilog HDL 中不存在单个的对象来表示锁存器或触发器,所以每一种综合系统都会提供不同的机制以实现锁存器或触发器的建模.因此各种综合系统都定义了自己的Verilog HDL 可综合子集以及自己的建模方式. ?使用Verilog HDL 以不同的方式描述了同一电路.某综合系统支持对方式A和方式B的综合,但可能不支持对方式C的综合,这意味着综合模型在不同的综合系统之间通常是不可移植的. ?这一局限性使设计者不仅需要理解Verilog HDL ,而且必须理解特定综合系统的建模方式, 才能编写出可综合的模型.可综合的数据类型?1.网线数据类型: ?Wire,wor,wand,tri,supply0,supply1 ?2.寄存器数据类型: ?Reg,integer ?Time,real:不能综合. ?3.常量: ?整型. ?实型和字符串型不能综合.可综合的运算符?1.逻辑运算符能直接映射成硬件中的基本逻辑门. ?2.算术运算符 ?3.关系运算符: ?能综合的有:>,<,<=,>=. ?4.相等性算符: ?能够综合的有:==和!=. ?不能综合:===和!==(有些工具按==和!=综合). ?5.移位运算符: ?<<和>>,移位腾出的位都补0. 多个时钟的可综合情况 ?1.多个时钟的情况:对变量的赋值不能受多个时钟控制 例如: ? module multclk(clk1,clk2,addclk,and,rstn,subclr,subn,dsadd,dssub);

SQL中Case语句用法

SQL中Case语句用法讨论 Case具有两种格式。简单Case函数和Case搜索函数。 --简单Case函数 CASE sex WHEN'1'THEN'男' WHEN'2'THEN'女' ELSE'其他'END --Case搜索函数 CASE WHEN sex = '1'THEN'男' WHEN sex = '2'THEN'女' ELSE'其他'END 这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。 还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case 部分将会被自动忽略。 --比如说,下面这段SQL,你永远无法得到“第二类”这个结果 CASE WHEN col_1 IN ( 'a', 'b') THEN'第一类' WHEN col_1 IN ('a') THEN'第二类' ELSE'其他'END 下面我们来看一下,使用Case函数都能做些什么事情。 一,已知数据按照另外一种方式进行分组,分析。 有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key) 国家(country) 人口(population) 中国600 美国100 加拿大100 英国200 法国300 日本250 德国200 墨西哥50 印度250 根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。 洲人口

亚洲1100 北美洲250 其他700 想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。 如果使用Case函数,SQL代码如下: SELECT SUM(population), CASE country WHEN'中国'THEN'亚洲' WHEN'印度'THEN'亚洲' WHEN'日本'THEN'亚洲' WHEN'美国'THEN'北美洲' WHEN'加拿大'THEN'北美洲' WHEN'墨西哥'THEN'北美洲' ELSE'其他'END FROM Table_A GROUP BY CASE country WHEN'中国'THEN'亚洲' WHEN'印度'THEN'亚洲' WHEN'日本'THEN'亚洲' WHEN'美国'THEN'北美洲' WHEN'加拿大'THEN'北美洲' WHEN'墨西哥'THEN'北美洲' ELSE'其他'END; 同样的,我们也可以用这个方法来判断工资的等级,并统计每一等级的人数。SQL 代码如下; SELECT CASE WHEN salary <= 500 THEN'1' WHEN salary > 500 AND salary <= 600 THEN'2' WHEN salary > 600 AND salary <= 800 THEN'3' WHEN salary > 800 AND salary <= 1000 THEN'4' ELSE NULL END salary_class, COUNT(*) FROM Table_A GROUP BY CASE WHEN salary <= 500 THEN'1' WHEN salary > 500 AND salary <= 600 THEN'2' WHEN salary > 600 AND salary <= 800 THEN'3' WHEN salary > 800 AND salary <= 1000 THEN'4'

IF和CASE语句的区别

区别:IF语句和CASE语句相比,case语句的可读性较好,它把条件中所有可能出现的情况全部列出来了,可执行条件一目了然。而且CASE语句的执行过程不像IF语句那样又一个逐项条件顺序比较的过程。CASE语句中条件句的次序是不重要的,它的执行过程更接近于并行方式。一般情况下,对相同的逻辑功能综合后,用CASE语句描述的电路比用IF语法描述的电路好用更多的硬件资源。不但如此,对于某些逻辑功能,用CASE语句将无语描述,只能用IF语句来描述。因为IF-THEN-ELSIF语句具有条件相与的功能和自动将逻辑值“-”包括进去的功能(逻辑值“-”有利于逻辑的化简);而CASE语句只有条件相或的功能。 IF语句中至少应有一个条件句,条件句必须有BOOLEAN表达式构成。 IF条件句THEN ——第一种IF语句,用于门阀控制(判断IF后条件句是否为真,为真则执行顺序语句,直到“END IF”完成全部IF语句执行。为伪则跳过顺序语句,直接结束IF语句的执行。) 顺序语句; END IF; IF条件句THEN ——第二种IF语句,用于二选一控制(当所测条件为FALSE,并不直接结束条件语句的执行,而是转向ELSE以下的另一段顺序语句继续执行。具有条件分支的功能,通过测定所设条件的真伪已决定执行哪一组顺序语句,在执行玩其中一组语句后,再结束IF语句。) 顺序语句; ELSE 顺序语句; END IF; IF 条件句THEN ——第三种IF语句,用于多选择控制(通过关键词ELSIF设定多个判定条件,从而是顺序语句的执行分支可以超过两个。) 顺序语句; ELSE 条件句THEN 顺序语句; … ELSE 顺序语句; END IF; IF语句中至少应有一个条件句,条件句必须有BOOLEAN表达式构成。 CASE语句以一个多值表达式为条件式,根据条件式的不同取值选择多项顺序语句中的一项执行,实现多路分支,故适用于两路或多路分支判断结构。

Oracle CASE条件语句

Oracle CASE条件语句 从Oracle9i后,在PL/SQL中也可以像其他的编程语言一样使用CASE语句,CASE语句的执行方式与IF语句相似。通常情况下,CASE语句从关键字CASE开始,后面跟着一个选择器,它通常是一个变量。接下来是WHEN子句,它将根据选择器的值执行不同的PL/SQL语句。 CASE语句共有两种形式。第一种形式是获取一个选择器值,然后将其与每个WHEN 子句进行比较。其语法形式如下: case when then pl/sql_statement1; when then pl/sql_statement2; …… when < expressionN> then pl/sql_statement n; [ else pl/sql_statement n+1;] end; 另一种形式是不使用选择器,而是判断每个WHEN子句中的条件。这种CASE语句的语法结构如下: case when expression 1 then pl/sql_statement1; when expression 2 then pl/sql_statement2; …… when expression N then pl/sql_statement n; [ else pl/sql_statement n+1;] end; 虽然CASE语句的作用与IF..ELSIF..ELSE..END IF语句相同,都可以实现多项选择,但是CASE语句可以以一种更简洁的表示法实现该功能。当执行CASE语句时,系统将根据选择器的值查找与此相匹配的WHEN常量,当找到一个匹配的WHEN常量时,就会执行与该WHEN常量相关的子句。如果没有与选择器相匹配的WHEN常量,那么就执行ELSE子句。 例如,下面的示例演示了CASE语句的使用: SQL> set serveroutput on SQL> declare 2 i number:=0; 3 begin 4 while i< 5 loop 5 case i 6 when 0 then 7 dbms_output.put_line('i is zero'); 8 when 1 then 9 dbms_output.put_line('i is one'); 10 when 2 then 11 dbms_output.put_line('i is two');

Verilog中的一些语法和技巧

1、. 2、. 3、Reg型的数据类型默认初始值为X。reg型数据可以赋正值也可以赋负值,但 是当一个reg型数据是一个表达式的操作数的时候,他的值被当做无符号数及正值。 4、在数据类型中?和Z均表示高阻态。 5、Reg型只表示被定义的信号将用在“always”模块内,并不是说reg型一定 是寄存器或触发器的输出。虽然reg型信号常常是寄存器或触发器的输出但是并不一定总是这样。 6、Verilog语言中没有多维数组的存在。Memory型数据类型是通过扩展reg型 数据的弟子和范围来生成的。其格式如下reg[n-1:0]存储器名[m-1:0]; 7、在除法和取余的运算中结果的符号和第一个操作数的符号位是相同的。 8、不同长度的数据进行运算:两个长度不同的数据进行位运算时,系统会自动 地将两者按有端对齐,位数少的操作数会在相应的高位用0填满以便连个操作数安慰进行操作。 9、= = =与!= = =和= =与!= =的区别:后者称为逻辑等是运算符,其结果是 2个操作数的值决定的。由于操作书中某些位可能不定值x和高阻态z结果可能是不定值x。而 = = =和!= = =运算符对操作数的比较时对某些位的高阻态z和不定值x也进行比较,两个操作数必须完全一致,其结果才是1,否则是0. 10、非阻塞和阻塞赋值方式:非阻塞赋值方式(如a<=b)上面语句所赋得变 量值不能立即被下面语句所用,(2)快结束后才能完成这次赋值操作 3在编写克综合的时序逻辑模块时这是最常用的赋值方法。阻塞赋值(如a=b)赋值语句执行完后,块才结束 2 b的值在赋值语句完成后立即执行 3在时序逻辑使用中,可能产生意想不到的结果。 11、模块的描述方式:(RTL为寄存器传输级描述) “(1)数据流描述方式:数据流行描述主要用来描述组合功能,具体用“assign”连续赋值语句来实现。分为两种a、显式连续赋值语句;

Do case 语句

Do case 语句 语法格式 Do case Case 条件1 <语句序列1> Case 条件2 <语句序列2> …… Case 条件n <语句序列n> [otherwise <语句序列n+1>] Endcase 后续语句 注意:1. 2. 3. 循环结构 语法格式 Do while <条件> <语句序列> Enddo 后续语句

1+2+3+…+100 引进s , i s=0 i=1 s=s+i i=i+1 Loop 语句返回 Exit 语句退出 Do while <条件> <语句1> <语句2> exit <语句3> <语句4> Enddo 后续语句 For语句 For <循环变量>=<初值> to <终值> [step <步长>] 循环体 Endfor 后续语句 注意:1. 2.步长为1 为正也可负 3. 循环次数=(终值-初值)/步长+1

水仙花数 100---999 153= 1^3+5^3+3^3 110 针对表循环 全局变量public x 本模块上级模块下级模块私有变量private y 本模块下级模块 局部变量local z 本模块 3.1数据库 一、建立数据库 1.菜单 2.项目管理器 3.命令create database 数据库名称 二、使用数据库 1.菜单 2.项目管理器 3.命令open database 数据库名称 三、修改数据库 Modify database 数据库名称

四、设置当前数据库 1.数据库下拉列表框 2.命令set database to 数据库名称 五、删除数据库 1.项目管理器 2.命令delete database 数据库名称先关闭close database 3.2建立数据库表 一、建立表 1.菜单 2.项目管理器 3.命令create 二、修改表 1.菜单 2.项目管理器 3.命令modify structure 3.3表的基本操作 一、浏览记录browse 二、增加记录 1.append 2.insert

case的用法

CASE语句例子解释: 一、简单case 表达式 case测试表达式 when简单表达式1 then结果表达式1 when简单表达式2 then结果表达式2 when简单表达式3 then结果表达式3 else结果表达式n end 说明:测试表达式可以是一个常数、字段名、函数或子查询,各个简单表达式中不包含比较运算符,它们给出被比较的表达式或值,其数据类型必须与测试表达式的数据类型相同,或者可以自动转换为测试表达式的数据类型。 CASE表达式的执行过程为: ①计算测试表达式,然后按指定顺序对每个WHEN子句的简单表达式 进行计算。 ②如果某个简单表达式与测试表达式相匹配,则返回与第一个取值 为TRUE的WHEN相对应的结果表达式的值。 ③如果所有简单表达式都不与测试表达式相匹配,则当指定ELSE子 句时,将返回ELSE中指定的结果表达式的值,若没有指定ELSE子句,则返回NULL值。 例: ㈠、declare@a int,@answer char(10)

set@answer=10 set@answer=case@a when 1 then'A' when 2 then'B' when 3 then'C' when 4 then'D' when 5 then'E' ELSE'others' end print'is'+@answer 结果:is others ㈡、declare@a int,@answer char(10) set@answer=10 set@a=5 set@answer=case@a when 1 then'A' when 2 then'B' when 3 then'C' when 4 then'D' when 5 then'E' ELSE'others' end print'is'+@answer 则结果为:isE 二、搜索case 表达式 case when布尔表达式1 then结果表达式1 when布尔表达式2 then结果表达式2

verilog中可综合和不可综合语句概述

Verilog 中可综合及不可综合语句概述Verilog 硬件描述语言有很完整的语法结构和系统,类似高级语言,这些语法结构的应用给我们的设计描述带来很多方便。但是,我们知道,Verilog 是描述硬件电路的,它是建立在硬件电路的基础上的。有些语法结构是不能与实际硬件电路对应起来的,也就是说我们在把一个语言描述的程序映射成实际硬件电路中的结构时是不能实现的。下面就是我多年工作经验总结出来的大部分综合工具支持或不支持的verilog 语法结构。 一.用verilog 建立可综合模型的原则 要保证Verilog HDL赋值语句的可综合性,在建模时应注意以下要点: (1)不使用initial 。 (2)不使用#10。 (3)不使用循环次数不确定的循环语句,如forever、while 等。 (4)不使用用户自定义原语(UDP元件)。 (5)尽量使用同步方式设计电路。 (6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。 (7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。 (8)所有的内部寄存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。 (9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。 (10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。

(11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。 ( 12)避免混合使用上升沿和下降沿触发的触发器。 ( 13)同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。 (14)避免在case语句的分支项中使用x值或z值。 二.不可综合verilog 语句 1 、initial 只能在testbench中使用,不能综合。(我用ISE9.1综合时,有的简单的initial 也可以综合,不知道为什么) 2、events event 在同步test bench 时更有用,不能综合。 3、real 不支持real 数据类型的综合。 4、time 不支持time 数据类型的综合。 5、force 和release 不支持force禾口release的综合。 6、assign 禾口deassign 不支持对reg数据类型的assign或deassign进行综合,支持对wire数据类型的assign或deassign进行综合。 7、fork join

相关文档