2013-05-17 2 views
1

Я работаю над школьным проектом VGA, который я буду синтезировать на FPGA. Я работаю с Xilinx и использую Verilog как HDL. В проекте говорится, что я должен генерировать фиксированное количество частиц, отображать их на экране и, используя клавиатуру, мне придется управлять окружающей средой для этих частиц (например, ветер, гравитация и т. Д.).Создание нескольких строк для компиляции в Verilog

я могу генерировать одну частицу с размером 1 пиксель (размер не имеет значения) с помощью:

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

С помощью этого:

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)); 

будут созданы три частицы.

Как я могу, например, генерировать 100 (или более) частиц без необходимости писать 100 строк кода?

ответ

6

Вы можете использовать цикл «для», чтобы сгенерировать это. Вот очень простой пример:

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 

Для того, чтобы применить это к вашему делу, вы, возможно, потребуется перейти от использования part1x, part2x и т.д., чтобы с помощью одной большой «массив» и вычислять смещения к нему на основе i.

Надеюсь, это поможет. Удачи!

+0

я вижу. Большое вам спасибо за ваше время и помощь, господин. Лазаренко. –

+0

Следующий вопрос: поскольку у меня есть 100 частиц, как я пишу 'assign red = (p1 || p2 || p3 || ... || border)? 3'b111: 3'b000;' –

+0

@AnandWu: Not конечно, если я правильно понял вопрос. Не могли бы вы подробнее рассказать? Или даже создать отдельный вопрос? Благодарю. –

Смежные вопросы