循环语句(Verilog HDL)

循环语句

VerilogHDL中提供了4种循环语句,可用于控制语句的执行次数,分别为:

Ø  for 循环:执行给定的循环次数;

Ø  while 循环:执行语句直到某个条件不满足;

Ø  repeat 循环:连续执行语句N次;

Ø  forever 循环:连续执行某条语句。

其中,for、while是可综合的,但循环的次数需要在编译之前就确定,动态改变循环次数的语句则是不可综合的;repeat语句在有些工具中可综合,有些不可综合;forever语句是不可综合的,常用于产生各类仿真激励。

 

1.    repeat语句

repeat循环语句执行指定的循环次数,如果循环计数表达式的值不确定,即为x或z时,那么循环次数按0处理。Repeat循环语句的语法为:

repeat(循环次数表达式)

       begin

              语句块;

       end

       其中,“循环次数表达式”用于制定循环次数,可以是一个整数、变量或数值表达式。如果是变量或数值表达式,其数值只在第一次循环时得到计算,从而得以事先确定循环次数;“语句块”为重复执行的循环体。在可综合设计中,“循环次数表达式”必须在程序编译过程中保持不变。

例1:利用repeat语句统计输入数据中所包含零比特的个数

module count_zeros_repeat(

   input [7:0] number,

   output reg [3:0] Count

   );

        reg[3:0] Count_aux ;

        integeri ;

        always@ (number)

                 begin

                         Count_aux= 4'b0000 ;

                         i= 0 ;

                         repeat(8)

                                  begin

                                          if(!number[i])

                                                  Count_aux= Count_aux + 1 ;

                                          i= i + 1;

                                  end

                         Count= Count_aux ;

                 end

endmodule

 

2.    while语句

while循环语句实现的是一种“条件循环”,只有在指定的循环条件为真时才会重复执行循环体,如果表达式在开始时不为真(包括假,x以及z)时,过程语句将永远不会被执行。while循环的语法为:

while(循环执行条件表达式)

      begin

             语句块;

      end

 

例2:利用while语句统计输入数据中所包含零比特的个数

module count_zeros_while(

   input [7:0] number,

   output reg [3:0] Count

   );

        reg[3:0] Count_aux;

        integeri ;

        always@ (number)

                 begin

                         i= 0;

                         Count_aux= 4'b0000;

                         while(i< 8)

                                  begin

                                          if(!number[i])

                                                  Count_aux= Count_aux + 1;

                                          i= i + 1;

                                  end

                         Count= Count_aux ;

                 end

endmodule

3.    for语句

和while循环语句一样,for循环语句实现的是一种“条件循环”。其语法结构如下:

for(表达式1表达式2表达式3

      语句块;

for循环语句中最简单的应用形式是很容易理解的,其形式为:

for(循环变量赋初值;循环执行条件;循环变量增值)

      循环体语句的语句块;

例3:利用for语句统计输入数据中所包含零比特的个数

module count_zeros_for(

   input [7:0] number,

   output reg [2:0] Count

   );

        reg[2:0] Count_aux;

        integeri ;

        always@(number)

                 begin

                         Count_aux= 3'b000;

                         for(i= 0; i < 8; i = i + 1)

                                  begin

                                          if(!number[i])

                                                  Count_aux= Count_aux + 1 ;

                                  end

                         Count= Count_aux ;

                 end

endmodule

4.    相互转换

在应用时,repeat、while和for语句三者之间是可以相互转换的,如对一个简单的五次循环,分别用repeat、while & for 书写。

for(i = 0 ; i < 5 ; i = i + 1)

       begin

              循环体;

       end

 

repeat(5)

       begin

              循环体;

       end

 

i = 0 ;

while(i < 5)

       begin

              循环体

              i= i + 1 ;

       end

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值