使用generate…for语句简化代码
这个题就是简单地把数据倒着再赋值给一个新的值。
在某个module中包含了很多相似的连续赋值语句,请使用generata…for语句编写代码,替代该语句,要求不能改变原module的功能。
使用Verilog HDL实现以上功能并编写testbench验证。
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
`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: a_i
assign data_out[i] = data_in [7-i];
end
endgenerate
endmodule
这个题已经规定了使用的语法。所以必须是这样。
在实际应用中,我们当然可以像这样写,也可以比较简便地写法:
举个例子:
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
addr <= 8'b0;
end
else begin
addr <= add_wdata[15:8];
end
end
这种是直接把某一个数据的多少位赋值给另一个数据。这样写比较简单。