verilog教程(5)——控制语句-Anlogic-安路社区-FPGA CPLD-ChipDebug

verilog教程(5)——控制语句

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
请登录后发表评论

    没有回复内容