Разница типов данных SystemVerilog (reg, logic, bit)
в systemverilog существуют различные типы данных, которые можно использовать следующим образом:
reg [31:0] data;
logic [31:0] data;
bit [31:0] data;
чем они отличаются друг от друга?
5 ответов
reg
и wire
были исходными типами. Провода постоянно назначаются, а правила оцениваются в определенных точках, преимущество здесь заключается в том, что симулятор делает оптимизацию.
wire w_data;
assign w_data = y;
// Same function as above using reg
reg r_data;
always @*
r_data = y ;
распространенной ошибкой при изучении Verilog является предположение, что тип A reg подразумевает регистр в аппаратном обеспечении. Более ранняя оптимизация для симулятора может быть выполнена в контексте его использования.
появляется logic
которое можно использовать вместо провода и рег.
logic w_data;
assign w_data = y;
// Same function as above using reg
logic r_data;
always @*
r_data = y ;
тип bit
и byte
также были созданы, которые могут содержать только 2 состояния 0 или 1 Без x или z. byte
подразумевает bit [7:0]
. Использование этих типов предлагает небольшое улучшение скорости, но я бы рекомендовал не использовать их в RTL, поскольку ваша проверка может пропустить неинициализированные значения или критические сбросы.
использование bit
и byte
было бы более распространено в компонентах testbench, но может привести к проблемам в случае необходимости управлять x для стимулирования данных коррупция и восстановление.
обновление
во время написания я был под впечатлением, что logic
не может использоваться для tristate, я не могу найти оригинальную бумагу, на которой я основывал это. До дальнейших обновлений, комментариев или изменений я отменяю свое утверждение, что логика не может быть использована для создания трех строк.
на tri
добавлен тип для явного определения строки трех состояний. Он основан на свойствах wire
, logic
основано на свойствах reg
.
tri t_data;
assign t_data = (drive) ? y : 1'bz ;
Если вам больше не нужно поддерживать обратную совместимость Verilog, я бы рекомендовал переключиться на использование logic
и tri
. Используя logic
СПИД ре-факторинг и и tri
отражает намерение дизайна линии tristate.
название
reg
оказалось ошибкой, потому что существование регистров вместо этого выводится на основе того, как выполняются назначения. Благодаря этому, использованиеreg
по сути deprecated в пользуlogic
, который на самом деле тот же тип.logic
- это 1-битный 4-государственный тип данных-
bit
1-бит, тип данных 2-state который может сымитировать более быстро чемlogic
- если
logic
также объявлен какwire
, он имеет дополнительную возможность поддержки нескольких драйверов. Обратите внимание, что по умолчаниюwire
эквивалентноwire logic
. - в общем,"сетки" (например,
wire
иtri
) наиболее подходят для проектирования шин связи.
практически для RTL обычно не имеет значения, объявляете ли вы с reg
или logic
, или wire
. Однако, если вам нужно сделать явное объявление типа 4-state (в отличие от когда вы не), вы обычно должны выбрать logic
так как это то, что подразумевается языком.
похожие статьи:
поскольку я не могу добавить комментарий, я должен написать то, что выглядит как новый ответ, но не является. Вздох!
@e19293001, @Morgan,logic
определяет переменную 4 состояний в отличие от bit
, и, следовательно, a logic
переменная может использоваться для хранения 1'bz
таким образом, следующий код действителен и компилируется:
logic t_data;
assign t_data = (drive) ? y : 1'bz ;
но я согласен, что отразить намерение дизайна tri
вместо logic
в этих случаях (хотя я должен сказать, что не вижу людей, использующих tri
вместо из logic
/wire
слишком часто).
логический тип данных не позволяет использовать несколько драйверов. Последнее назначение выигрывает в случае множественного назначения .Тип данных Reg / Wire дает X, если несколько драйверов пытаются управлять ими с различным значением. Тип данных Logic просто назначает последнее значение назначения.
reg и логика точно такие же. Эти типы данных появляются внутри всегда или начальных блоков и хранят значения, т. е. всегда @(a) b
провод как раз просто соединения и потребность непрерывно управляться. Я согласен, что они могут вести себя одинаково, как упоминал @Morgan, но их можно представить как кусок жесткого провода, значение которого изменяет только значение на другом конце или источник изменяется.