for循环的用法

文章详细介绍了Verilog中for循环的两种主要用法:always块内的for循环和generate-for-endgenerate结构。always-for适用于组合逻辑的迭代操作,而generate-for则用于生成多个独立的实例块,尤其在物理结构随参数变化的模块中。两者的综合结果可能不同,但在相同结果的情况下,always-for的仿真速度更快。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        Verilog for循环语句是在verilog中提供的一种非常有用的控制结构。它允许开发人员根据指定的条件执行代码块多次,从而大大提高了编程的效率。for循环语句可以用来实现以下基本功能:

                ①重复执行特定的语句或语句块;

                ②在满足特定条件时跳出循环;

                ③根据指定的步长迭代循环变量。

1.always-for用法

        注意点:

                ①always块的for循环的变量定义为integer类型;

                ②当always块为时序逻辑时,块内的第一行必须是异步复位。

        举例如下:

module test(
    output reg [8:0] sumx,
    input      [4:0] x
);

integer i;                //循环变量定义为integer

always@(*) begin
    sumx = 1 ;            //初始化     
    for(i=0; i<3; i=i+1)
        sumx = sumx + x ; //组合逻辑中输出赋值给自己,因有初始化不会产生latch
    end
endmodule

                仿真结果:令x=3,则sumx=10。

                综合结果:

  •                         for循环n次代表有n个相似的电路模块存在;
  •                         代码上的“循环反馈”结构在阻塞赋值时代表前后有关联且为组合逻辑;
  •                         综合结果既不是一个加法器循环三次(C语言),也不是三个并联的加法器(generate-for-endgenerate),而是三个加法器串联。

在这里插入图片描述

2.(generate)-for-always/assign/module例化-(endgenerate)用法

        注意点:

                ①可以省略generate-endgenerate,但是综合后电路与省略前一样;

                ②always块的for循环的变量要定义为genvar型。

        举例:

reg [data_width-1:0] in3_reg [depth-1:0];

genvar k;
generate
    for(k=0;k<depth;k=k+1) begin:generate_case
        always@(posedge clk or negedge rst_n) begin
            if(!rst_n)
                in3_reg[k] <= 0;
			else
				in3_reg[k] <= in3+k;
			end
		end
endgenerate

3.总结

        3.1.循环体

                always-for只会存在一个实例块,因为for循环在always的内部;适合迭代操作如结果累加等;

                generate-for-endgenerate会根据迭代的次数生成对应的多个实例块,且各自独立。

        3.2.必须使用generate-for-endgenerate的情况

                因为生成的是多个实例块,故适用于物理结构随循环变量参数变化的模块;

                在循环/条件分支的语句中需要调用module

        3.3.物理结构

                当两种方式的写法综合结果相同时,always-for的仿真速度更快。  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值