verilog写题笔记--用generate.for语句简化
使用generate…for语句简化代码
https://www.nowcoder.com/practice/618cb8d16a2c4e87b9e305f6659efe40
	这个题的主要目的是考察Verilog语句中的 generate---for循环结构。
	首先generate---for结构和普通的for结构并没有什么本质的差别。它两最后综合出来的逻辑图也是相同的,但我在这里还是推荐将所有的循环结构都写成generate--for结构,因为generate--for是手册中比较新的写法,可能会有利于编译。
	generate---for的结构如下:
genvar i; //这是必须有的结构,用来声明循环变量i
generate
    for(i=0;i<8;i=i+1)     //这是for循环的基本结构
    begin:any_name     //在for循环中,必须存在begin-end,即使只有一个语句。
                //any_name可以是任何名字,但必须存在。generate本质是将for循环打包成一个子模块,所以必须有一个名字来命名这个for模块
              循环语句1;        //循环语句中也可以加入always@、assign等模块,组合或者时序逻辑都可以。
             循环语句2;
              ...
         
        end  endgenerate                    //在最后要加endgenerate关键词
generate本质就是将一部分语句打包成一个小模块,所以它像endmodule一样存在endgenerate关键词。只不过generate经常与for进行连用,所以就造成了工程上将generate-for看成了一个固定句式了。将数据翻转是generate---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:bit_reverse assign data_out[i] = data_in[7-i]; end endgenerate endmodule
verilog写题笔记 文章被收录于专栏
 写Verilog题目的一些笔记备忘
查看23道真题和解析