生成要在Verilog中编译的多行

Ana*_* Wu 1 verilog

我正在开发一个VGA学校项目,我将在FPGA上进行综合.我正在使用Xilinx并使用Verilog作为HDL.该项目说我必须生成固定数量的粒子,在屏幕上显示它们,并且通过使用键盘,我将必须控制这些粒子的环境(如风,重力等).

我可以通过使用以下方法生成一个大小为1像素的粒子(大小并不重要):

  wire p1 =(posx>=part1x[13:4] && posx<=(part1x[13:4]+1) && posy>=part1y[12:4] && posy<=(part1y[12:4]+1));
Run Code Online (Sandbox Code Playgroud)

通过使用这个:

wire p1 =(posx>=part1x[13:4] && posx<=(part1x[13:4]+1) && posy>=part1y[12:4] && posy<=(part1y[12:4]+1));
wire p2 =(posx>=part2x[13:4] && posx<=(part2x[13:4]+2) && posy>=part2y[12:4] && posy<=(part2y[12:4]+2));
wire p3 =(posx>=part3x[13:4] && posx<=(part3x[13:4]+3) && posy>=part3y[12:4] && posy<=(part3y[12:4]+3));
Run Code Online (Sandbox Code Playgroud)

将创建三个粒子.

例如,如何在不编写100行代码的情况下生成100个(或更多)粒子?

小智 6

您可以使用"for"循环来生成它.这是一个非常简单的例子:

wire input[100];
wire output[100];
// ...
genvar i; 
generate 
  for (i = 0; i < 100; i = i+1)  begin
    assign output[i] = ~input[i];
  end  
endgenerate  
Run Code Online (Sandbox Code Playgroud)

为了这个应用到你的情况,你可能需要使用切换part1x,part2x基于等偏移,使用一个大的"阵",并计算出它i.

希望能帮助到你.祝好运!