题目描述
在某个module中包含了很多相似的连续赋值语句,请使用generata…for语句编写代码,替代该语句,要求不能改变原module的功能。
module template_module(
input [7:0] data_in,
output [7:0] data_out
);
assign data_out [0] = data_in [7];
assign data_out [1] = data_in [6];
assign data_out [2] = data_in [5];
assign data_out [3] = data_in [4];
assign data_out [4] = data_in [3];
assign data_out [5] = data_in [2];
assign data_out [6] = data_in [1];
assign data_out [7] = data_in [0];
endmodule
这一题挺简单的,主要是重新复习一下generate的用法
`timescale 1ns/1ns
module gen_for_module(
input [7:0] data_in,
output [7:0] data_out
);
generate
genvar i;
for(i = 0;i < 8;i =i+1)
begin : ggg
assign data_out[i] = data_in[7-i];
end
endgenerate
endmodule
generate
可以对module、reg、assign、always、task等语句或者模块进行复制
必须使用genvar申明一个循环变量; begin 后需要加标签(即复制的部分的标签);必须在begin end里进行循环、复制。
endgenerate
重点:
1、常见的用法包括generate-for、generate-case和generate-if 三种语句。
2、关键:generate语句可以方便地重复实例化模块!
3、针对generate-for语句,循环变量i
必须使用genvar
声明。并且在for
循环的赋值必须使用assgin
或者always
完成。(一开始没有写assign 就导致了错误)
//模块的重复使用见例题