首页 > 其他分享 >verilog语法:for与generate...for

verilog语法:for与generate...for

时间:2023-05-03 10:22:05浏览次数:41  
标签:... begin always generate ii verilog data reg

1 for循环

  1. for循环必须在always块内使用,对应的always块内的变量需声明为reg类型。
  2. verilog的for和C语言的for的不同点:C语言的for里面的语句是串行执行,而verilog的for内的语句是并行执行的。例如下面的移位寄存器案例。
integer i;
always @ (posedge clk)
begin
    data_reg[0] <= data_in;
    for(i = 0; i < 4; i = i+1) begin
        data_reg[i+1] <= data_reg[i];
    end
end

其等效实现方式为:

always @ (posedge clk)
begin
    data_reg[0] <= data_in;
    data_reg[1] <= data_reg[0];
    data_reg[2] <= data_reg[1];
    data_reg[3] <= data_reg[2];
    data_reg[4] <= data_reg[3];
end

generate...for

genvar i;
generate for(i=0;表达式2;表达式3)
begin :起个名字
    ...;
end
endgenerate

作用上:和for是一样的;

区别:

(1)generate for的循环变量必须用genvar声明,for的变量可以用reg、integer整数等多种类型声明;

(2)for只能用在always块里面,generate for可以做assign赋值,用always块话always写在generate for里;

(3)generate for后面必须给这个循环起一个名字,for不需要;

(4)generate for还可以用于例化模块;

`timescale 1ns/1ns

module gen_for_module(
    input [7:0] data_in,
    output [7:0] data_out
);

    // 2. for,必须写在always块里
    integer i;
    reg [7:0] dout_reg;
    always @ (*) begin
        for(i = 0; i < 8; i = i+1) begin
            dout_reg[i] = data_in[7-i];
        end
    end

    assign data_out = dout_reg;

endmodule
`timescale 1ns/1ns

module gen_for_module(
    input [7:0] data_in,
    output [7:0] data_out
);

    //必须使用genvar声明循环变量
    genvar ii;
    generate for(ii = 0; ii < 8; ii = ii+1)
        begin : aaa_i
            assign data_out[ii] = data_in[7-ii];
        end
    endgenerate

endmodule

标签:...,begin,always,generate,ii,verilog,data,reg
From: https://www.cnblogs.com/foghorn/p/17368740.html

相关文章

  • 调研了下 AI 作曲,顺便做了期视频...快进来听歌!
    文|白鹡鸰编|小轶视频|白鹡鸰嗨,大家好!这里是卖萌屋,我是白鹡鸰。今天和大家聊聊人工智能作曲。人工智能在音乐领域的应用已经非常常见了,像听歌识曲、曲风分类、自动扒谱等等,而利用机器来替代人类作曲?这显然也不是新想法了。核心问题只在于:现在这个任务被做到了什么程度?用的......
  • 2023-05-01:给你一个整数 n , 请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1
    2023-05-01:给你一个整数n,请你在无限的整数序列[1,2,3,4,5,6,7,8,9,10,11,...]中找出并返回第n位上的数字。1<=n<=2^31-1。输入:n=11输出:0解释:第11位数字在序列1,2,3,4,5,6,7,8,9,10,11,...里是0,它是10的一部分。答案2023-05-01:该......
  • 2023-05-01:给你一个整数 n , 请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1
    2023-05-01:给你一个整数n,请你在无限的整数序列[1,2,3,4,5,6,7,8,9,10,11,...]中找出并返回第n位上的数字。1<=n<=2^31-1。输入:n=11输出:0解释:第11位数字在序列1,2,3,4,5,6,7,8,9,10,11,...里是0,它是10的一部分。答案2023-05-01:......
  • 【System Verilog】初步学习笔记
    1、SV基本语法、分层验证平台、数据类型、task&function、oop(封装,继承,多态)、随机化、线程、组件内部通信(event,semaphores,mailboxes)等见https://www.cnblogs.com/xh13dream/tag/systemverilog/2、coverage:       3、assertion: ......
  • 供大家参考的qt-UI项目(持续整理...)
    QtFluentDesign-main(推荐指数:⭐⭐⭐⭐⭐)原始界面: 应用了Fluent风格:Navigation-Bar-Office-Style-Tab-Bar-master(推荐指数:⭐⭐)侧边栏展开:侧边栏折叠:qt-material-widgets-master(推荐指数:⭐⭐⭐) qt-UI-masterandQSSHub-masteran......
  • SystemVerilog for Design Edition 2 Chapter 2
    SystemVerilogforDesignEdition2Chapter2SystemVerilogDeclarationSpacesVerilogonlyhaslimitedplacesinwhichdesignerscandeclarevariablesandotherdesigninformation.SystemVerilogextendsVerilog’sdeclarationspacesinseveralways.These......
  • SystemVerilog for Design Edition 2 Catalog
    SystemVerilogforDesignEdition2CatalogPart10:The2022WilsonResearchGroupFunctionalVerificationStudy-VerificationHorizons(siemens.com)SynthesizableSystemVerilog:BustingtheMyththatSystemVerilogisonlyforVerification(sutherland-......
  • SystemVerilog for Design Edition 2 Chapter 1
    SystemVerilogforDesignEdition2Chapter1IntroductiontoSystemVerilog:ThischapterprovidesanoverviewofSystemVerilog.Thetopicspresentedinthischapterinclude:•TheoriginsofSystemVerilog•TechnicaldonationsthatwentintoSystemVerilog......
  • [FireDAC][Phys]-330. Cannot generate update query. Update table undefined.
    在正式的查询SQL前,用了临时表存储查询条件,数据正常加载,结果编辑、保存时报错了代码是老早前写,现在看,其实完全可以直接用存储过程的结果,也不用中间再转一次,这个异常也就可以避过去了 ......
  • 卧薪尝胆...卧薪尝胆...忍...
    卧薪尝胆...卧薪尝胆...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍...忍.......