Разница типов данных 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, но их можно представить как кусок жесткого провода, значение которого изменяет только значение на другом конце или источник изменяется.