题解 | #使用generate…for语句简化代码#

使用generate…for语句简化代码

http://www.nowcoder.com/practice/618cb8d16a2c4e87b9e305f6659efe40

目录

generate语句

generate语句是verilog-2001添加的新语法,也被叫做生成语句,包括generate-for(循环生成语句)、generate-case(条件生成语句)和generate-if(条件生成语句)三种语句。
generate语句可以方便地重复实例化模块或者条件性实例化模块,这也是该语句的核心用法,如:

genvar i;
generate
  	for (i=0; i < 8; i=i+1) begin
		myModule insModule (.a(a[i]), .b(b[i]), .c(c[i]));
	end
endgenerate

重复赋值问题,如本题,其实使用常规的for循环就可以解决。

代码

`timescale 1ns/1ns
module gen_for_module( 
    input [7:0] data_in,
    output [7:0] data_out
);

    genvar i;
    generate
        for(i = 0 ; i < 8; i = i + 1) begin
            assign data_out[i] = data_in[7-i];
        end
    endgenerate
endmodule

简析

需要注意的是,generate-for语句的循环变量i必须使用genvar声明。此外,for循环的赋值必须使用assgin或者always完成,不可以像C/C++那样直接赋值。错误示例如下:

    genvar i;
    generate
        for(i = 0 ; i < 8; i = i + 1) begin
            data_out[i] = data_in[7-i];    // 错误示例!!
        end
    endgenerate
Verilog篇题解 文章被收录于专栏

本人对牛客网verilog篇题目一些理解

全部评论
误人子弟 generate for begin后面的名字是必须要有的,之后仿真器会通过这个标识来生成结构
点赞 回复 分享
发布于 2023-08-06 22:34 广东

相关推荐

我是小红是我:学校换成中南
点赞 评论 收藏
分享
7 1 评论
分享
牛客网
牛客企业服务