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题目的一些笔记备忘