что это за команда в Verilog - PullRequest
       99

что это за команда в Verilog

0 голосов
/ 18 октября 2018

Я новичок в verilog, и я читал несколько кодов онлайн.Я наткнулся на следующую строку кода и не понял, что именно это означает

wr_ptr_reg <= {ADDR_WIDTH + 1{1'b0}};

Буду признателен, если кто-нибудь сможет объяснить, что это означает

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

1'b0 описывает двоичное нулевое значение шириной 1 бит.<n>{<value>} дает битовый вектор, образованный объединением n копий битового вектора value.В этом случае он создает битовый вектор, содержащий ADDR_WIDTH + 1 копий 0 битов.ADDR_WIDTH будет ранее объявленным параметром, представляющим некоторое постоянное значение (вероятно, сохраненное как integer, который в основном является 32-битным вектором).Тогда вы сохраняете ноль до wr_ptr_reg.<= обозначает неблокирующее назначение.Это в основном означает, что его значение не будет обновлено, пока не закончится остальная часть текущего блока.Вы можете обрабатывать все неблокирующие назначения в блоке так, как если бы они происходили одновременно с окончанием блока.

Было бы намного понятнее добавить скобки:

wr_ptr_reg <= {(ADDR_WIDTH + 1){1'b0}};
0 голосов
/ 18 октября 2018

{..} является оператором конкатенации.{ count { vector } } означает сцепление vector count раз.

В этом случае вектор представляет собой один бит, который повторяется ADDR_WIDTH + 1 раз.Таким образом, вы получите вектор, состоящий из (ADDR_WIDTH + 1) нулей.

Это еще один пример: { 4 { 3'b101} } равен 12'b101101101101

Таким образом, вы устанавливаете wr_ptr_reg на все нули (при условии, что wr_ptr_reg состоит из ADDR_WIDTH + 1 бит)

...