В чем разница между регистром и проводником в модуле verilog

В чем разница между регистром и проводкой? Когда мы должны использовать reg, и когда мы должны использовать провод в модуле verilog. Я также иногда заметил, что результат снова объявляется рег. Например, reg Q в D-flip-flop. Я читал это где-то - "Целевой вывод операторов процедурного присваивания должен быть типа данных reg". Что такое инструкции процедурного присваивания? Я натолкнулся на это, но не смог найти ясного объяснения.

Ответ 1

Провод:-

Провода используются для соединения различных элементов. Они могут рассматриваться как физические провода. Они могут быть прочитаны или назначены. В них не хранятся значения. Они должны управляться либо оператором непрерывного присваивания, либо портом модуля.

Reg: -

В отличие от их имени, регистры не обязательно соответствуют физическим регистрам. Они представляют элементы хранения данных в Verilog/SystemVerilog. Они сохраняют свое значение до тех пор, пока им не будет присвоено следующее значение (не через оператор присваивания). Они могут быть синтезированы в FF, защелку или комбинаторную схему. (Они не могут быть синтезируемыми !!!)

Провода и Regs присутствуют от периода Verilog. SystemVerilog добавил к ним новый тип данных, называемый логикой. Поэтому следующий вопрос - что это за логический тип данных и чем он отличается от нашего старого доброго провода/рег.

Логика: -

Как мы уже видели, тип данных reg немного ошибочен в Verilog. Добавление логического типа данных SystemVerilog заключается в устранении вышеуказанной путаницы. Идея заключается в том, чтобы иметь новый тип данных, называемый логикой, который, по крайней мере, не создает впечатление, что он является аппаратно синтезируемым. Тип данных логики не позволяет использовать несколько драйверов. Последнее присвоение выигрывает в случае нескольких назначений (что подразумевает отсутствие аппаратной эквивалентности). Типы данных Reg/Wire дают X, если несколько драйверов пытаются управлять ими с разными значениями. Тип данных логики просто присваивает последнее значение присваивания. Следующее отличие между reg/wire и логикой заключается в том, что логикой можно управлять как блоком назначения, выходом порта, так и внутри процедурного блока, подобного этому

  logic a;
    assign a = b ^ c;                   // wire style 
    always (c or d) a = c + d;          // reg style
    MyModule module(.out(a), .in(xyz)); // wire style

Ответ 2

Процедурные блоки ссылаются на always, always_ff, always_comb, always_latch, initial и т.д. Блоки. В то время как инструкции процедурного присваивания относятся к присвоению значений регистру, целому числу и т.д., Но не к проводам (сетям).

wire элементы должны постоянно управляться чем-то и не могут сохранять значение. В дальнейшем им присваиваются значения с использованием операторов контировки.

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

reg могут использоваться как выходные данные в декларации фактического модуля. Но элементы reg не могут быть подключены к выходному порту экземпляра модуля.

Таким образом, рег может вести провод как RHS оператора assign. С другой стороны, провод может управлять регистром как RHS процедурного блока.

Чтобы получить четкое представление об объявлении reg или wire, см. Изображение ниже:

enter image description here

Таким образом, всякий раз, когда выводя последовательную логику, в которой хранится/хранится некоторое значение, объявляйте, что переменная/порт как reg. Здесь Q является reg внутри модуля, но при создании этого модуля внутри некоторого другого модуля этот порт должен быть подключен к wire.

Помните, что wire может вывести только комбинационную логику, тогда как reg может вывести либо комбинационную, либо последовательную логику.

Блог Dave - хороший источник для подробной информации. Для получения дополнительной информации см. Синтез разницы и ссылки Verilog wire-reg.

Ответ 3

Простая разница между регистром и проводником, рег используется в комбинационной или последовательной цепи в verilog, а провод используется в комбинационной схеме

reg используется для хранения значения, но провод постоянно управляется некоторыми вещами, и провод подключается к outport при инициализации модуля, но reg не подключен

Ответ 4

Как заявлено здесь:

Наиболее часто используется сеть является провод, так что позволяет использовать его, чтобы понять сеть лучше.

Подумайте о проводе от вашего дома, это что-то, что соединяет два электрических компонента. Правильно? Теперь скажите мне, что произойдет, если я сломаю провод? Соединение будет потеряно (путь с высоким импедансом 'bz). Это именно то, как сеть синтезируется в аппаратном обеспечении - соединение между двумя воротами, позволяющее непрерывное назначение. Сети не могут не сохранить значение (за исключением трирега, который может иметь емкостное состояние, когда при разрыве соединения оно застрянет на последнем присвоенном значении)

Посмотрите этот простой код Verilog, используя провод (сеть):

module net_example (
   input wire a,
   input wire b
);

wire net;
assign net = a ? 1'b1 : (b ? 1'b0 : 1'bx);

endmodule

Синтезированное оборудование: enter image description here

Итак, я надеюсь, что это было легко понять, сети. Давайте посмотрим на рег сейчас. Позвольте мне начать с того, что объявление чего-либо с типом reg не всегда означает, что оно будет синтезировано как регистр (элемент хранения). Цитируя из того, что Verilog LRM (2005) раздел 4.7 говорит о рег,

Поскольку регистр содержит значение между присваиваниями, его можно использовать для моделирования аппаратных регистров. Чувствительные к краям (т.е. Триггеры) и чувствительные к уровню (т.е. Сбрасываемые и прозрачные защелки) элементы памяти могут быть смоделированы. Reg не обязательно должен представлять аппаратный элемент хранения, потому что он также может использоваться для представления комбинаторной логики.

Сосредоточьтесь на слове "можно" в вышеупомянутом тексте. В отличие от net, reg способен хранить значение, что делает его пригодным для хранения значений. И именно поэтому он "может" использоваться как элемент хранения. Давайте углубимся в некоторый код Verilog.

Verilog-код с использованием reg для создания элемента хранения:

module net_reg (
   input wire a,
   input wire b
);

reg register;

always @(*) begin
   if (a) register = 1'b1;
   else if (b) register = 1'b0;
end

endmodule

Так как я не кодировал, каким должно быть значение регистра, когда a == 0 и b == 0, поэтому регистр содержит предыдущее значение (см. Красную линию, которую я сделал для отображения обратной связи), делая его элементом памяти.

Синтезированное оборудование: enter image description here

Если я просто добавлю строку, чтобы указать значение по умолчанию для регистрации в вышеупомянутом коде, я предоставил значение для регистрации всех комбинаций a и b. Следовательно, нет необходимости держать какое-либо значение. Таким образом, хотя я объявил регистр как reg, он будет синтезирован как провод, а не как элемент хранения.

module net_reg (
   input wire a,
   input wire b
);

reg register;

always @(*) begin
   register = 1'b0;
   if (a) register = 1'b1;
   else if (b) register = 1'b0;
end

endmodule

Синтезированное оборудование: enter image description here Итак, основной вывод здесь заключается в том, что регистр не всегда синтезируется как элемент хранения.