brucemax 0 13 сентября, 2011 Опубликовано 13 сентября, 2011 · Жалоба Подскажите начинающему.. вот написал я прогу на VHDL.. демультиплексор на 64 выхода.. а как делается так что бы эти все выводы были с открытым стоком? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
brucemax 0 13 сентября, 2011 Опубликовано 13 сентября, 2011 · Жалоба library IEEE; use IEEE.STD_LOGIC_1164.ALL; --use IEEE.numeric_std.ALL; --use IEEE.STD_LOGIC_unsigned.ALL; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --use IEEE.NUMERIC_STD.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity demultipleksor is generic (N : natural := 6); port ( x: in std_logic_vector(N-1 downto 0); En: in std_logic; w : in std_logic; y : out std_logic_vector(2**N-1 downto 0)); end demultipleksor; architecture Behavioral of demultipleksor is signal i : integer range 0 to 2**N-1; function bin_to_int (signal x : std_logic_vector (N-1 downto 0)) return integer is variable sum : integer := 0; begin for i in 0 to N-1 loop if (x(i) = '1' ) then sum := sum + 2**(i); else null; END IF; end loop; return sum; end bin_to_int; function outputS ( constant M : natural; signal j : integer range 0 to 2**N-1 ; signal w : std_logic) return std_logic_vector is variable z : std_logic_vector(2**N-1 downto 0); begin for k in 0 to 2**M-1 loop if ( (k = j) and (w='0') ) then z(k) := '0'; else z(k) := '1'; end if; end loop; return z; end outputS; begin process (x,En,w) begin if (En='1') then i <= bin_to_int(x); y <= outputS(N,i,w); else y<=(others=>'1'); end if; end process; end Behavioral; --Pracue использовать предпологается XA2C128.. написано что выводы поддерживают открытый сток.. вопрос.. так как это активируется.. или это уже по умолчанию? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
V_G 11 13 сентября, 2011 Опубликовано 13 сентября, 2011 · Жалоба В смысле чтобы так наружу выходили? Найдите буфер с 1 входом, 1 выходом и отдельным входом разрешения. Информационный сигнал подавайте на вход разрешения, а на вход буфера - постоянно 0. Тогда при разрешающем сигнале у вас на выходе 0, а при запрещающем - 3-е состояние. Это если ваша ПЛИС сама не поддерживает выходы с открытым стоком (я не такой глубокий спец, и подобных тонкостей не знаю). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
faa 4 13 сентября, 2011 Опубликовано 13 сентября, 2011 (изменено) · Жалоба .. вот написал я прогу на VHDL.. :bb-offtopic: На VHDL описывают "железо". Даже в день программистов. Изменено 13 сентября, 2011 пользователем faa Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
brucemax 0 14 сентября, 2011 Опубликовано 14 сентября, 2011 · Жалоба :bb-offtopic: На VHDL описывают "железо". Даже в день программистов. Ок.. написал я прогу на VHDL описывающую железо.. легче стало?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 14 сентября, 2011 Опубликовано 14 сентября, 2011 · Жалоба Ок.. написал я прогу на VHDL описывающую железо.. легче стало?) Это ещё хуже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
brucemax 0 14 сентября, 2011 Опубликовано 14 сентября, 2011 · Жалоба В смысле чтобы так наружу выходили? Найдите буфер с 1 входом, 1 выходом и отдельным входом разрешения. Информационный сигнал подавайте на вход разрешения, а на вход буфера - постоянно 0. Тогда при разрешающем сигнале у вас на выходе 0, а при запрещающем - 3-е состояние. Это если ваша ПЛИС сама не поддерживает выходы с открытым стоком (я не такой глубокий спец, и подобных тонкостей не знаю). да.. наружу.. хорошая рекомендация.. спасибо. Вот только моя плис именнно поддерживает этот открытый сток. Если брать ваше решение.. то мне для начала нужно синтезировать из моего VHDL описания элемент в Shematic .. и там уже добавить буферы. А вот если копаться только в коде.. вот нашёл на одном из форумов: Переползаю с VHDL на SV. Хочу юзать открытый коллектор. В VHDL для этих целей завел себе пакетик и горя не знал: library IEEE; use IEEE.STD_LOGIC_1164.all; PACKAGE open_collector_package is function resolved_open_collector ( s: std_ulogic_vector ) return std_ulogic; subtype open_collector is resolved_open_collector std_ulogic; type open_collector_vector is array (natural range <>) of open_collector; function pullup (sgnl: std_logic) return std_logic; end open_collector_package; PACKAGE BODY open_collector_package is function pullup (sgnl: std_logic) return std_logic is begin case sgnl is when 'U' => return '1'; when 'X' => return 'Z'; when '0' => return 'Z'; when '1' => return '1'; when 'Z' => return '1'; when 'W' => return 'Z'; when 'L' => return 'Z'; when 'H' => return 'Z'; when '-' => return 'Z'; end case; end pullup; type opencollector_table is array (std_ulogic, std_ulogic) of std_ulogic; constant resolution_opencollector_table : opencollector_table := ( ----------------------------------------------------------- --|U X 0 1 Z W L H - | | ----------------------------------------------------------- ( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U | ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X | ( 'U', 'X', '0', '0', '0', '0', '0', '0', 'X' ), -- | 0 | ( 'U', 'X', '0', '1', '1', '1', '1', '1', 'X' ), -- | 1 | ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z | ( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W | ( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L | ( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H | ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- | - | ); function resolved_open_collector ( s: std_ulogic_vector ) return std_ulogic is variable result :std_ulogic := 'Z'; begin if (s'length = 1) then return s(s'low); else for i in s'range loop result := resolution_opencollector_table(result, s(i)); end loop; end if; return result; end resolved_open_collector; end open_collector_package; Это ещё хуже. А как надо??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 14 сентября, 2011 Опубликовано 14 сентября, 2011 · Жалоба Вот только моя плис именнно поддерживает этот открытый сток. Значит, не будет его имитировать на буфере с третьим состоянием. И зачем графический редактор, на языке описания аппаратуры будет тоже самое entity opndr is port( di : in std_logic; do : out std_logic ); end entity; architecture behavioral of opndr is begin with di select do <= '0' when '1', 'Z' when others; end behavioral; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim 0 14 сентября, 2011 Опубликовано 14 сентября, 2011 · Жалоба Переползаю с VHDL на SV. Хочу юзать открытый коллектор. В VHDL для этих целей завел себе пакетик и горя не знал: Это Вы меня процитировали :) Только если Вам нужен синтезируемый код, пакетик этот бесполезен. Используйте внешние элементы с открытым коллектором/стоком или соответствующим образом сконфигурируйте нужные пины целевой ПЛИС. Первое, имхо, предпочтительнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
brucemax 0 14 сентября, 2011 Опубликовано 14 сентября, 2011 · Жалоба Значит, не будет его имитировать на буфере с третьим состоянием. И зачем графический редактор, на языке описания аппаратуры будет тоже самое entity opndr is port( di : in std_logic; do : out std_logic ); end entity; architecture behavioral of opndr is begin with di select do <= '0' when '1', 'Z' when others; end behavioral; Прежде всего спасибо, что ответили. А теперь по делу: в гиде по Xilinx написано: The OPEN_DRAIN constraint applies to Coolrunner™-II devices only. CoolRunner-II outputs can be configured to drive the primary macrocell output function as an open-drain output signal on the pin. The OPEN_DRAIN constraint applies to non 3- state (always active) outputs in the design. The output structure is configured as open- drain so that a one state on the output signal in the design produces a high-Z on the device pin instead of a driven High voltage. То есть.. в чём суть? Если я использую CoolRunnner2 то для того, чтобы у меня выходы были с открытым стоком надо соответственно описывать это в коде... как вы показали выше.. или достаточно где-нибудь в настройках проекта указать, что тип выхода с открытым стоком...??? Вообщем там ещё есть вариант с атрибутом.. http://www.xilinx.com/itp/xilinx4/data/doc...o6.html#1015676 Так как же делать.. научите неуча)) И ещё маленький вопрос как к ГУРУ.. есть ли возможность моделировать схемы с ПЛИС.. например как большинство пикконтроллеров в Proteus.. нарисовал схемку.. прошил тот же ПИК.. и посмотрел что как.. или конечный результат работты схемы можно только на реальном макете лицезреть? Это Вы меня процитировали :) Только если Вам нужен синтезируемый код, пакетик этот бесполезен. Используйте внешние элементы с открытым коллектором/стоком или соответствующим образом сконфигурируйте нужные пины целевой ПЛИС. Первое, имхо, предпочтительнее. Да.. точно вас..) Я так понял, что сконфигкурировать в коде нужные пины чтобы они были с ОС можно для любой ПЛИС.. тогда в чём преимущества CoolRunner2 ?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kaps 0 14 сентября, 2011 Опубликовано 14 сентября, 2011 · Жалоба И ещё маленький вопрос как к ГУРУ.. есть ли возможность моделировать схемы с ПЛИС.. например как большинство пикконтроллеров в Proteus.. нарисовал схемку.. прошил тот же ПИК.. и посмотрел что как.. или конечный результат работты схемы можно только на реальном макете лицезреть? В Xilinx ISE есть симмулятор. Можно проверить как функциональное поведение проектируемой схемы так и близко к реальному (с задержками на каждом элементе). Все зависит от того, на каком этапе компиляции Вы остановились. Если Вы сделали Place&Route то будете симулировать близко к оригиналу. Если не дошли - функциональное тестирование. The OPEN_DRAIN constraint applies to Coolrunner™-II devices only. CoolRunner-II outputs can be configured to drive the primary macrocell output function as an open-drain output signal on the pin. The OPEN_DRAIN constraint applies to non 3- state (always active) outputs in the design. The output structure is configured as open- drain so that a one state on the output signal in the design produces a high-Z on the device pin instead of a driven High voltage. Вы сами ответили на свой вопрос. :) установите номера выходам мультиплексора в файле *.ucf и там же опишите их как open-drain. При компиляции, если мне память не изменяет, этот файл подхватится и constraints применятся. Возможно, его придется переименовать так же, как и имя проекта. Файл должен находиться в корне папки с проектом. Или проще, приатачте файл к проекту (правой кнопкой в ProjectManagere -> Add file). Вроде так. Все по памяти, возможно где-то неточность, но в принципе идея такая... :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim 0 14 сентября, 2011 Опубликовано 14 сентября, 2011 · Жалоба Если я использую CoolRunnner2 то для того, чтобы у меня выходы были с открытым стоком надо соответственно описывать это в коде... как вы показали выше.. или достаточно где-нибудь в настройках проекта указать, что тип выхода с открытым стоком...??? Описывать в коде, как показали выше, а также в файле ограничений (*.ucf) (там, где номера пинов назначаются) нужно объяснить трассировщику, чтобы нужные пины конфигурировались с открытым стоком. Синтаксис смотрите в Language Templates в ISE(Web Pack). Впрочем, вот: # OPEN_DRAIN indicates that an output buffer will be configured as open-drain. NET mysignal OPEN_DRAIN; # Families: CR-II # # Applies to non-tristate output or to tristate output in which the data # the input to output buffer is dangling or driven by constant 0 (GND). Я так понял, что сконфигкурировать в коде нужные пины чтобы они были с ОС можно для любой ПЛИС.. тогда в чём преимущества CoolRunner2 ?? Нет, далеко не для любой. Именно для CR-II - можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
brucemax 0 14 сентября, 2011 Опубликовано 14 сентября, 2011 · Жалоба В Xilinx ISE есть симмулятор. Можно проверить как функциональное поведение проектируемой схемы так и близко к реальному (с задержками на каждом элементе). Все зависит от того, на каком этапе компиляции Вы остановились. Если Вы сделали Place&Route то будете симулировать близко к оригиналу. Если не дошли - функциональное тестирование. Про встроенный симулятор я знаю.. (сам я ModelSim использую).. я про моделирование не только плис.. а самой схемы, где используетс ПЛИС) И ещё.. тот же Xilinx пишет: Before using OPEN_DRAIN, declare it with the following syntax: attribute OPEN_DRAIN: string; After OPEN_DRAIN has been declared, specify the VHDL constraint as follows: attribute OPEN_DRAIN of signal_name : signal is "TRUE"; Так может просто в тексте кода в архтектуре написать: ... attribute OPEN_DRAIN: string; attribute OPEN_DRAIN of y : signal is "TRUE"; ... Оно даже прокомпилилось) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kaps 0 14 сентября, 2011 Опубликовано 14 сентября, 2011 · Жалоба Про встроенный симулятор я знаю.. (сам я ModelSim использую).. я про моделирование не только плис.. а самой схемы, где используетс ПЛИС) Когда-то, во времена мамонтов, я еще использовал OrCAD v7.2 и там рисовал схемки и клеил к ним ПЛИС. Так вот, при симуляции, OrCAD сам подгружал компилятор Altera, получал описание скомпиленой схемы в EDIF файле и симулировал мне всю схему с ПЛИС. Не вижу причин, что через 12 лет все стало хуже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
brucemax 0 14 сентября, 2011 Опубликовано 14 сентября, 2011 (изменено) · Жалоба Описывать в коде, как показали выше, а также в файле ограничений (*.ucf) (там, где номера пинов назначаются) нужно объяснить трассировщику, чтобы нужные пины конфигурировались с открытым стоком. Синтаксис смотрите в Language Templates в ISE(Web Pack). Впрочем, вот: # OPEN_DRAIN indicates that an output buffer will be configured as open-drain. NET mysignal OPEN_DRAIN; # Families: CR-II # # Applies to non-tristate output or to tristate output in which the data # the input to output buffer is dangling or driven by constant 0 (GND). Простите за дотошность. В итоге мой код будет выглядеть так????: library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity demultipleksor is generic (N : natural := 6); port ( x: in std_logic_vector(N-1 downto 0); En: in std_logic; w : in std_logic; y : out std_logic_vector(2**N-1 downto 0)); end demultipleksor; architecture Behavioral of demultipleksor is signal i : integer range 0 to 2**N-1; function bin_to_int (signal x : std_logic_vector (N-1 downto 0)) return integer is variable sum : integer := 0; begin for i in 0 to N-1 loop if (x(i) = '1' ) then sum := sum + 2**(i); else null; END IF; end loop; return sum; end bin_to_int; function outputS ( constant M : natural; signal j : integer range 0 to 2**N-1 ; signal w : std_logic) return std_logic_vector is variable z : std_logic_vector(2**N-1 downto 0); begin for k in 0 to 2**M-1 loop if ( (k = j) and (w='0') ) then z(k) := '0'; else z(k) := 'Z'; -------ВОТ end if; end loop; return z; end outputS; begin process (x,En,w) begin if (En='1') then i <= bin_to_int(x); y <= outputS(N,i,w); else y<=(others=>'Z'); ----и ВОТ end if; end process; end Behavioral; --Pracue Плюс добавленный файл *.ucf в котором: OPEN_DRAIN indicates that an output buffer will be configured as open-drain. NET y(0) OPEN_DRAIN; ... NET y(63) OPEN_DRAIN; # Families: CR-II # # Applies to non-tristate output or to tristate output in which the data # the input to output buffer is dangling or driven by constant 0 (GND). Изменено 14 сентября, 2011 пользователем brucemax Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться