2013-04-08 5 views
0

Вопросов:Когда использовать какие типы

  1. Есть ли еще наши правила "супертип" в signed и unsigned чем std_logic_vector (относительно моего дела)?

  2. Можно ли определить ввод как (подтип) целого или лучше определить его как битвектор? (Существуют ли какие-либо проблемы с подходом Integer)

  3. Когда следует использовать разрешенную или неразрешенную логику для входов/выходов от объекта?

    • Решено для водителей автобусов (из-за «водителей с высоким Z»), в противном случае неразрешено?
    • Всегда решен таким образом шина может управляться/использоваться в качестве входных данных (это кажется неправильным, потому что, когда я использовал бы нерешенной тогда?)

Фактический случай:

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

Определение объекта будет:

entity comparisonDynWidth is 
    generic(
     width  : positive; 
     min_width : positive; 
      -- when the tools suport vhdl2008 enough 
      -- reason for both signed/unsigned => std_logic inputs 
     --function compareFunc (x: in std_logic_vector; y: in std_logic_vector) return std_logic 
    ); 
    port (
     left, right : in std_logic_vector(width-1 downto 0); 
     widthControl: in natural range 0 to width-min_width; 
     result  : out std_logic/std_ulogic ?? 
    ); 

Я выбрал std_logic_vector в качестве входных данных, так как я хочу, чтобы она выглядела порты, как общий less than компаратор, а также, для которых знаковости вопросов и которые могут иметь signed и unsigned входов , , так как мне легче определить ширину как целое число, которое я сделал.

ответ

1

Есть ли еще наши правила «супертипом» в подписанных и неподписанных чем std_logic_vector (относительно моего дела)?

Не уверен, что вы имеете в виду, но у вас нет выбора - signed и unsigned определены в стандарте.

Это нормально для определения входного сигнала, как (подтипа) Integer или лучше, чтобы определить его как bitvector?(Существуют ли какие-либо проблемы с целым числом )

Целочисленные числа будут отмечать ошибки, если вы выходите за пределы их диапазона. векторы (signed и unsigned) обернут вокруг. Что является «правильным», зависит от того, что вы хотите, и от того, как вы относитесь к кодированию явного переноса, если вы хотите его с целыми числами.

Когда следует использовать разрешенную или неразрешенную логику для входов/выходов от объекта?

Если вы придерживаетесь:

  • только с использованием разрешенных типов для портов верхнего уровня ввода-вывода (т.е. фактические штырей устройства)
  • используя неразрешенные типы внутренних

вас будут способны ловить ошибки с участием нескольких драйверов на сигнале с подробным сообщением об ошибке во время разработки. Это может быть предпочтительнее преследовать X s в ваших сигналах во время моделирования.

В наши дни внутри большинства технологий нет внутренних шин с тремя состояниями, поэтому у вас не может быть нескольких драйверов, поэтому нет необходимости в разрешенных сигналах внутри устройства. IO-контакты (почти?) Всегда имеют триразрядные драйверы, поэтому использование разрешенного типа подходит, а вождение «Z» можно использовать для вывода такого поведения.

+0

Я не совсем уверен в том, что тент входит в третью часть вопроса, давайте предположим, что я хочу реализовать открытый дренаж, вы говорите мне, что это невозможно в большинстве технологий? Как я могу реализовать шину, если я не могу Tristate драйверов, и если мне нужно, чтобы решена правильная логика? – ted

+0

Если вы хотите открыть сток, то это будет на верхнем уровне порта ввода-вывода, и использование разрешенного типа вполне нормально и ожидается там. –

1
  1. std_logic_vector является хорошим выбором в вашем случае (и в большинстве случаев в сущности, так как она представляет собой аппаратное положение лучше ... например, с использованием «U» и «Z» и так далее)

  2. Использование целого числа в объекте в порядке, если оно не является объектом верхнего уровня. в объектах верхнего уровня рекомендуется использовать std_logic (_vector).

  3. большинство инструментов сообщают о ситуации с несколькими драйверами в любом случае ... использование разрешенных типов, таким образом, нормально.

+0

1. Каким образом «U» представляет собой аппаратное обеспечение? и 3. Большинство симуляторов не сообщают о нескольких драйверах, они просто имитируют то, что вы написали. Синтезаторы сообщают об этом (среди миллионов других сообщений), но я обычно трачу гораздо больше времени на симуляцию, чем синтезировать, поэтому к тому времени уже немного поздно :) –

+0

«U» не определено и означает, что сигнал не управляется ... К сожалению, не все в аппаратных средствах определено как «0» или «1» ;-) – baldyHDL

+0

В основном я согласен с вами (3). тем не менее, запуск синтеза время от времени даже во время вашего процесса моделирования рекомендуется в любом случае ... например. чтобы избавиться от миллионов предупреждений на раннем этапе ;-) – baldyHDL

Смежные вопросы