最近在写贪吃蛇程序时遇到了一个问题,贪吃蛇的每节参数必须全部定义,相当于一个结构体,里面有坐标和方向,当我想把贪吃蛇的长度从2节变为多节时,遇到了一个很大的问题,虽然后面每节的代码和前面的近似,但是代码量巨大,一个一个复制会非常麻烦,于是经过查资料后,发现generate语句是个不错的东西。
在body结构体中,每次移动
body1_x <= head_x;
body1_y <= head_y;
body2_x <= body1_x;
body2_y <= body1_y;
......
当长度变到15后代码变得很庞大,再加上还有别的参数需要修改,使得代码很难维护。
具体就是这样
//body2
always@(posedge clk)
begin
if(rst)
begin
body2_x <= 7'd1;
body2_y <= 7'd1;
body2_dir <= 2'd3;
end
else if(sec_sig == 1'b1) //移动信号
begin
body2_x <= body1_x;
body2_y <= body1_y;
body2_dir <= body1_dir;
end
else
begin
body2_x <= body2_x;
body2_y <= body2_y;
body2_dir <= body2_dir
end
//body3
always@(posedge clk)
begin
if(rst)
begin
body3_x <= 7'd1;
body3_y <= 7'd1;
body3_dir <= 2'd3;
end