verilog中主要有 if 语句、case语句、for 语句、while语句,由于for并不是所有FPGA开发工具都能综合,而while语句在硬件上并不需要,因此这两个都不讲,有兴趣的自己查看语法书。
条件语句
if 语句的语法如下:
if (condition1) true_statement1 ;
else if (condition2) true_statement2 ;
else if (condition3) true_statement3 ;
else default_statement ;
如果对condition_1 求值的结果为个非零值 ,那么true_statement1 被执 ,如果condition_1 的值为0 、 x 或z ,那么true_statement1 不执行。如果存在一个else 分支,那么这个分支(default_statement )被执行。
条件语句用关键字 if 和 else 来声明,条件表达式必须在圆括号中。
if(Sum < 60)
begin
Grade = C;
Total_C = Total _c + 1;
end
else if(Sum < 75)
begin
Grade = B;
Total_B = Total_B + 1;
end
else
begin
Grade = A;
Total_A = Total_A + 1;
end
注意条件表达式必须总是被括起来,如果使用if – if – else 格式,那么可能会有二义性。
书写建议:
1、条件表达式需用括号括起来。
2、若为if – if 语句,请使用块语句 begin — end :
if(C l k) begin
if(R e s e t)
Q = 0;
else
Q = D;
end
以上两点建议是为了使代码更加清晰,防止出错。
3、对if 语句,除非在时序逻辑中, if 语句需要有else 语句。若没有缺省语句,设计将产生一个锁存器, 锁存器在FPGA设计中有诸多的弊端 ,比如更浪费资源,对毛刺敏感,无法进行静态时序分析等。
case 语句
case语句的语法如下:
case(case_expr)
condition1 : true_statement1 ;
condition2 : true_statement2 ;
……
default : default_statement ;
endcase
case 语句首先对条件表达式case_expr 求值,然后依次对各分支项求值并进行比较,第一个与条件表达式值相匹配的分支中的语句被执行。可以在1 个分支中定义多个分支项;这些值不需要互斥。缺省分支覆盖所有没有被分支表达式覆盖的其他分支。
示例如下,这是一个7段数码管的译码模块。
case (HEX)
4'b0001 : LED = 7'b1111001; // 1
4'b0010 : LED = 7'b0100100; // 2
4'b0011 : LED = 7'b0110000; // 3
4'b0100 : LED = 7'b0011001; // 4
4'b0101 : LED = 7'b0010010; // 5
4'b0110 : LED = 7'b0000010; // 6
4'b0111 : LED = 7'b1111000; // 7
4'b1000 : LED = 7'b0000000; // 8
4'b1001 : LED = 7'b0010000; // 9
4'b1010 : LED = 7'b0001000; // A
4'b1011 : LED = 7'b0000011; // B
4'b1100 : LED = 7'b1000110; // C
4'b1101 : LED = 7'b0100001; // D
4'b1110 : LED = 7'b0000110; // E
4'b1111 : LED = 7'b0001110; // F
default :LED = 7'b1000000; // 0
endcase
没有回复内容