Перейти к содержанию
    

Так мне уже не понятно, почему des00 так не сделал?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так мне уже не понятно, почему des00 так не сделал?

Чтобы сделать выводы, наверно нужно иметь представление о проекте целиком.

Ну и интеллектуальные возможности разработчика тоже влияние имеют.

Вот я и спросил о коллективном мышлении. Где эта золотая середина.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так мне уже не понятно, почему des00 так не сделал?

В своем коде, перенесите in в модуль и транзитом передайте наружу. Суть бага в том, что wor поддерживается ква, но только в том случае явного присвоения к цепи через assign, если присвоение идет через port map, то ква считает это нарушением. В таком случае у wor появляется много драйверов, что не правильно с точки зрения ква (!!!!). Т.е. мало того, что фича не поддерживается(несмотря на заявления в хелпе), так и еще в разъяснении ошибки написан полный бред (wor и был разработан под множество драйверов).

 

А в смысле коллективного творчества, допустимо ли такое описание (наглядность изложения и т.д.).

Этот хак как раз и родился как коллективное творчество %). Целью было удобство описания и легкая расширяемость. Добавление слейва не составляет труда, инсталлируешь модуль и подключаешь его к сигналам шины. И не нужны никакие арбитры, явные мультиплексоры и т.д. и т.п., ква всё делает сам, за счет преобразования "софтового z состояния" в мультиплексоры. Но при переносе на другую платформу возможны проблемы %)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В своем коде, перенесите in в модуль и транзитом передайте наружу. Суть бага в том, что wor поддерживается ква

прошу прощения, а разве проводная логика для синтеза в ПЛИС поддерживается вообще? я думал, она была придумана для низкоуровневого моделирования, а не для логического дизайна. по-крайне мере я бы её явно запретил, а то какой-то inferred logic получается (противоречие принципу WYSIWYG)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

прошу прощения, а разве проводная логика для синтеза в ПЛИС поддерживается вообще?

а почему бы и нет ? не вижу проблем с синтезом wor/wand/tri0/tri1. Кроме того в хелпе квартуса эти фичи отмечены как supported

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а почему бы и нет ? не вижу проблем с синтезом wor/wand/tri0/tri1. Кроме того в хелпе квартуса эти фичи отмечены как supported

Проблема в том, что внутри ПЛИС, как вы понимаете, нет подтягивающих резисторов, выходов с тремя состояниями, выходов с открытым коллектором. А без этого wor/wand/tri не сделать. Это все заменяется логическими схемами, мультиплексорами. Вот так оно и supported. А в выходном пине ни логики, ни мультиплексора не сделаешь. Вот и нет проводной логики в портах. Разве что снаружи объединить выводы :-) Так что меня этот "глюк" не удивляет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблема в том, что внутри ПЛИС, как вы понимаете, нет подтягивающих резисторов, выходов с тремя состояниями, выходов с открытым коллектором. А без этого wor/wand/tri не сделать.

Нет позвольте, про wire/tri ваши слова еще можно принять (да и квартус говорит об этом же), но для wor/wand/tri0/tri1 это ни к месту. Обратимся к стандарту IEEE 1364-2001 -> 3.7 Net types -> 3.7.2 Wired nets

The wor and trior nets shall create wired or configurations, such that when any of the drivers is 1, the resulting value of the net is 1. The wand and triand nets shall create wired and configurations, such that if any driver is 0, the value of the net is 0.The net types wor and trior shall be identical in their syntax and functionality. The net types wand and triand shall be identical in their syntax and functionality.

в стандарте ни слова нет о тех вещах что вы привели. Не вижу никаких проблем с поддержкой синтеза wired or/and. Это просто широкий OR или широкий AND. Идем дальше 12.3 Ports -> 12.3.9 Port connection rules

Each port connection shall be a continuous assignment of source to sink, where one connected item shall be a signal source and the other shall be a signal sink. The assignment shall be a continuous assignment from

source to sink for input or output ports.

тут явное указание того, что assign и port connection одинаковы. Поэтому между ними не должно быть никакой разницы. Поэтому, то что происходит с wor/wand в квартусе есть чистой воды нарушение требований стандарта, программистский баг, незамеченный тестерами.

 

ЗЫ. Так альтера мне и не дает войти в саппорт, чтобы написать им гневное письмо о наличии ламеров в тестерах %(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не вижу никаких проблем с поддержкой синтеза wired or/and. Это просто широкий OR или широкий AND.

Посмотрите на картинку, где я показал результат работы. Написано WideOr. А не wired or. Мягко говоря, Altera подтасовала понятия. Это не одно и то же, хотя функцию выполняют одну. Wired Or на стандартных логических микросхемах можно было собрать, используя логику с открытым коллектором (стоком), прицепив их несколько на один провод, и присобачив туда же подтягивающий резистор. (Не помню, правда, реального примера за свою практику, обходился обычными логическими микросхемами. Как и большинство других разработчиков, я думаю.) Внутри имеющихся ПЛИС это невозможно, там нет ни wor, ни trior. А стандарт - он же универсальный, предусмотрел такую возможность. Если появится ПЛИС, в которой будут элементы с тремя состояниями, там все будет реализовано по-честному. Вот тогда-то шины будет просто делать! Эх!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите на картинку, где я показал результат работы. Написано WideOr. А не wired or. Мягко говоря, Altera подтасовала понятия.

А теперь главное. IEEE 1364-2001 -> 3.7 Net types -> 3.7.2 Wired nets -> Table 4—Truth table for wand and triand nets и Table 5—Truth table for wor and trior nets

post-3453-1282006389_thumb.png

Покажите с использованием этих таблиц, возможную неоднозначность того, что может происходить в wor/wand цепях? И неоднозначность синтеза данных конструкций.

Это не одно и то же, хотя функцию выполняют одну....

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

Если появится ПЛИС, в которой будут элементы с тремя состояниями, там все будет реализовано по-честному. Вот тогда-то шины будет просто делать! Эх!

давно появились, virtex2/spartan2, но развития не получили

 

ЗЫ. И еще раз напомню, баг заключается в том, что в ква назначение через assign и через port map для wor/wand/tri0/tr1 неэквивалентны. Что является нарушением стандарта. Претензий по тому, как он синтезирует эти типы нет.

 

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

Вы описываете монтажное И. Монтажное ИЛИ делается по другому %)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Покажите с использованием этих таблиц, возможную неоднозначность того, что может происходить в wor/wand цепях? И неоднозначность синтеза данных конструкций.

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

Разве я говорил про неоднозначность? Я говорю о невозможности физически реализовать wor|wand внутри ПЛИС. Это не философское рассуждение, а констатация факта. И то что в ПЛИС они заменяются обычными or|and с использованием логических элементов, меня не удивляет, скорее, радует. Также, как то, что элементы с z-состоянием заменяются мультиплексорами.

И то, что это невозможно сделать на выводах, меня не беспокоит. Чего и вам желаю :)

давно появились, virtex2/spartan2, но развития не получили

Жаль, что не получили. Хотя мне кажется, что с быстродействием таких элементов не так хорошо, как у обычных.

ЗЫ. И еще раз напомню, баг заключается в том, что в ква назначение через assign и через port map для wor/wand/tri0/tr1 неэквивалентны. Что является нарушением стандарта. Претензий по тому, как он синтезирует эти типы нет.

Т.е. "к...ы" они, что не написали этого в документации? Ну что ж - "к...ы"! :)

Вы описываете монтажное И. Монтажное ИЛИ делается по другому %)

Верно. Я потом заметил, но решил, что на суть вопроса это не влият.

 

Upd. В Handbook на Quartus 9.1 из 2454 страниц wired in/or, wor/wand не упоминаются вообще.

В Help Quartus 9.0 написано только:

Wired Nets (wor, wand,trior, and triand Nets) Supported

Все остальное - наши с вами фантазии. Не вижу предмета для спора.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот такой код у меня (Quartus 9.0 без SP) работает:

module Test2_wor (input logic [6:0] in, output wor out);
  generate
    genvar i;
    for (i = 0; i <= 6; i++) begin : wor_gen
      assign out = in[i];
    end : wor_gen
  endgenerate
endmodule

Фактически - SUB_FIRST из первого поста.

??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Монтажное ИЛИ - удобно для развитого тестбенча.

Вот пример разрешающая функция помогла мне иммитировать в I2С ACK

 

--WIRE OR zero
library ieee;
use ieee.std_logic_1164.all;

package wire is
  function RES_FUNC(DATA:in std_logic_vector)
    return std_logic;
    subtype RESOLVED_STD is RES_FUNC std_logic;
end;

package body wire is
  function RES_FUNC(DATA:in std_logic_vector)
    return std_logic is

  begin
    for I in DATA'range loop
        if DATA(I)='0' then
            return '0';
        end if;
    end loop;
        return '1';
  end;
end wire; 
-------- в коде
use work.wire.all;

   signal xxxx_s    : RESOLVED_STD;--wire

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Монтажное ИЛИ - удобно для развитого тестбенча.

Вот пример разрешающая функция помогла мне иммитировать в I2С ACK

На VHDL своя разрешающая функция в данном случае не нужна. Тестбенч должен выдавать на шину уровень std_logic.'H', имитируя подтяжку, а все узлы(включая и тестовый) - либо 'Z', либо '0'. В приёмниках преобразовать входной сигнал с помощью TO_X01() сразу после входного пина, чтобы превратить 'H' в '1'.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...