verilog中的while的用法和例子

while 循环语句实现的是一种“条件循环” ,只有在指定的循环条件为真时才会重复执行
循环体,如果表达式条件在开始不为真(包括假、x 以及 z) ,那么过程语句将永远不会被执
行。while 循环的语法为:
while (循环执行条件表达式) begin
    语句块
end
在上述格式中, “循环执行条件表达式”代表了循环体得到继续重复执行时必须满足的
条件,通常是一个逻辑表达式。在每一次执行循环体之前,都需要对这个表达式是否成立进
行判断。 “语句块”代表了被重复执行的部分,可以为单句或多句。
While 语句在执行时,首先判断循环执行条件表达式是否为真,如果真,执行后面的语
句块, 然后再重新判断循环执行条件表达式是否为真, 为真的话, 再执行一遍后面的语句块,
如此不断,直到条件表达式不为真。因此,在执行语句中,必须有改变循环执行条件表达式
的值的语句,否则循环就变成死循环。

module mult_8b_while(
   a, b, q
    );
  
  parameter bsize = 8;
  input  [bsize-1 : 0] a, b;

  output [2*bsize-1 : 0] q;
  
  reg [2*bsize-1 : 0] q, a_t;
  reg [bsize-1 : 0] b_t;
  reg [bsize-1 : 0] cnt;
  
  always @(a or b) begin
     q = 0;
   a_t = a;
   b_t = b;
   cnt = bsize;
   
   while(cnt > 0) begin
      if (b_t[0]) begin
       q = q + a_t;    
    end
    else begin
       q = q;
    end
    cnt = cnt - 1;
    a_t = a_t << 1;
    b_t = b_t >> 1; 
   end
  end
 
endmodule

 

 

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Verilog,没有像C语言的while循环那样的语法结构。Verilog主要使用的是always和for循环来控制组合逻辑和时序逻辑的执行。 always语句用于表示组合逻辑。它的语法格式如下: ``` always @ (sensitivity_list) begin // 组合逻辑代码 end ``` 其,sensitivity_list是敏感信号列表,表示如果列表的任意一个信号变化,就会触发always语句的组合逻辑代码执行。在组合逻辑代码,可以使用if语句来实现条件判断,从而实现类似while循环的逻辑。 例如,下面的Verilog代码使用always语句和if语句实现了一个类似于while循环的逻辑,将输入信号data_in的所有奇数位取反,并输出到data_out: ``` reg [7:0] data_in; wire [7:0] data_out; always @ (data_in) begin for (i = 0; i < 8; i = i + 2) begin if (data_in[i]) begin data_out[i] = ~data_in[i]; end else begin data_out[i] = data_in[i]; end end end ``` 在这个例子,always语句的sensitivity_list为data_in,表示当data_in的任意一位变化时,就执行always语句的组合逻辑代码。在组合逻辑代码,使用了for循环来遍历data_in的所有奇数位,并使用if语句来判断是否需要取反。最终的结果存储在data_out。 需要注意的是,由于Verilog是一种硬件描述语言,其执行方式与C语言等高级编程语言有很大的不同。因此,在Verilog实现类似while循环的逻辑时,需要特别注意不同编程语言之间的差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值