для проекта колледжа нам нужно сделать SPACE INVADERS похожим на игру в verilog с использованием FPGA.В рамках игры нам нужно создать матрицу «монстров», которыми мы управляем, как мы можем это сделать?
У нас есть модуль VGA, который мы отправляем предпочтениям и координатам RGB через модуль Bitmap.Мы хотим создать матрицу путем дублирования одного объекта на несколько объектов, которые перемещаются вместе как один, но мы можем управлять ими по отдельности (можем дать любому из них разный цвет, включить и т. Д.)
Мы добавляем create_matrixмодуль, который нам нужно изменить, чтобы отобразить полную матрицу (мы можем и, вероятно, должны использовать операции div и mod, однако мы не знаем, как).Теперь отображается только один.
module create_matrix (
input logic clk,
input logic resetN,
input logic [10:0] pixelX,// current VGA pixel
input logic [10:0] pixelY,
input logic [10:0] topLeftX, //position on the screen
input logic [10:0] topLeftY,
input logic enable,
output logic [10:0] offsetX,// offset inside bracket from top left position
output logic [10:0] offsetY,
output logic drawingRequest, // indicates pixel inside the bracket
output logic [7:0] RGBout //optional color output for mux
);
parameter int OBJECT_WIDTH_X=100;
parameter int OBJECT_HEIGHT_Y=100;
parameter logic [7:0] OBJECT_COLOR=8'b11111111;
localparam logic [7:0] TRANSPARENT_ENCODING = 8'hFF ;// bitmap representation for a transparent pixel
int rightX ; //coordinates of the sides
int bottomY ;
logic insideBracket ;
// Calculate object right & bottom boundaries
assign rightX = (topLeftX + OBJECT_WIDTH_X);
assign bottomY = (topLeftY + OBJECT_HEIGHT_Y);
always_ff@(posedge clk or negedge resetN)
begin
if(!resetN) begin
RGBout <= 8'b0;
drawingRequest <= 1'b0;
end
else begin
insideBracket = ( (pixelX >= topLeftX) && (pixelX < rightX)
&& (pixelY >= topLeftY) && (pixelY < bottomY) ) ;
if (insideBracket && enable==1'b1) // test if it is inside the rectangle
begin
RGBout <= OBJECT_COLOR ; // colors table
drawingRequest <= 1'b1 ;
offsetX <= (pixelX - topLeftX); //calculate relative offsets from top left corner
offsetY <= (pixelY - topLeftY);
end
else begin
RGBout <= TRANSPARENT_ENCODING ; // so it will not be displayed
drawingRequest <= 1'b0 ;// transparent color
offsetX <= 0; //no offset
offsetY <= 0; //no offset
end
end
end
endmodule
Большое спасибо за помощь