присвоение нескольких операторов if в последовательном блоке always - PullRequest
1 голос
/ 09 мая 2020

Допустим, у меня есть два всегда блока:

always @(posedge clk) begin
  if (rst) a <= 0;
  else begin
     if (condition_one) a <= 1;
  end
end

always @(posedge clk) begin
  if (rst) b <= 0;
  else begin
     if (condition_two) b <= 1;
  end
end

Какая будет разница, если я объединю их в один всегда блок, как показано ниже?

always @(posedge clk) begin
  if (rst) begin
     a <= 0;
     b <= 0;
  end else begin
     if (condition_one) a <= 1;
     if (condition_two) b <= 1;
  end
end

А если у меня есть другие больше переменных, таких как c, d, e, et c, в дополнение к a & b, будет ли один всегда блокироваться с слишком большой задержкой для обработки всех этих параллельных независимых операторов if? Разве вообще безопаснее всегда разделять их параллельно блоками?

Спасибо!

1 Ответ

0 голосов
/ 09 мая 2020

Оба образца кода должны моделироваться одинаково, независимо от того, сколько переменных вы добавляете.

Что касается вашего вопроса о задержках обработки, моделирование должно занимать одинаковое количество времени для выполнения в обоих случаях. Поскольку код Verilog компилируется, оба образца кода должны быть скомпилированы в одно и то же изображение.

Возможно, будет проще понять и поддерживать код, если вы используете отдельные блоки always, особенно при увеличении количества переменных . Для небольшого количества переменных, таких как ваш пример, подойдет любая.

...