给定一个 100 位输入向量 [99:0],反转其位排序。
一开始我自己选择的是always@(*)-for的写法,但是始终仿真结果不对;于是,我在网上查到了第二种方法,是使用的循环生成语句;实际上不用生成语句,也是可以实现的,我找到错误原因,跟语法没有关系,是逻辑上多写了一个~;
但是这道题让我发现,我对for循环和循环生成generate-for循环的语法掌握得不好,于是我看了其他博主的文章,有了更深一步的理解。
下面用了三种方法实现这个题目。
module top_module(
input [99:0] in,
output [99:0] out
);
//由于这道题目的模块I/O说明里面没有clk时钟信号的输入,所以这个题目不需要用到clk
//也就是说用组合逻辑完成,与时序逻辑没有关系
// integer i; //【方法一:always@(*)-for】
// always@(*)
// begin
// for(i=0;i<=99;i=i+1)
// out[i] = in[99-i]; //一开始报错是因为错误的写成了out[i] = ~in[99-i];
// end
// genvar i; //【方法二:generate for-assign】
// generate
// for(i=0; i<=99; i++)
// begin: looper
// assign out[i]=in[99-i];
// end
// endgenerate
genvar i;//【方法三:generate for-always@(*)】
generate
for(i=0;i<=99;i=i+1)
begin:lopper
always@(*)
begin
out[i] = in[99-i];
end
end
endgenerate//不要忘记endgenerate
endmodule