stssao 0 August 31, 2006 Posted August 31, 2006 · Report post Подскажите плиз как описать на vhdl такую схему: Quote Share this post Link to post Share on other sites More sharing options...
Postoroniy_V 0 August 31, 2006 Posted August 31, 2006 · Report post Подскажите плиз как описать на vhdl такую схему: ну типа что то в таком стиле DOUT0 <= DIN0 when ENABLE0='1' else DIN1 when ENABLE1 else 'Z'; p.s. народ ваще книжек не читает...кирдык Quote Share this post Link to post Share on other sites More sharing options...
stssao 0 August 31, 2006 Posted August 31, 2006 · Report post Postoroniy_V, Для двунаправленных шин у меня код наподобие вашего не работает. Нарисовал в схематике - получается. > p.s. народ ваще книжек не читает...кирдык Что конкретно посоветуете почитать по этому вопросу? Quote Share this post Link to post Share on other sites More sharing options...
Postoroniy_V 0 August 31, 2006 Posted August 31, 2006 · Report post Postoroniy_V, Для двунаправленных шин у меня код наподобие вашего не работает. Нарисовал в схематике - получается. > p.s. народ ваще книжек не читает...кирдык Что конкретно посоветуете почитать по этому вопросу? Ваш код в студию плиз! и что значит не пашет? посоветовать могу книжки :) всё тут Quote Share this post Link to post Share on other sites More sharing options...
stssao 0 August 31, 2006 Posted August 31, 2006 · Report post entity BTEST is port ( clk : inout std_logic; en_AB : in std_logic; en_AC : in std_logic; portA_io : in std_logic_vector (8 downto 0); portB_io : out std_logic_vector (8 downto 0); portC_io : out std_logic_vector (8 downto 0) ); end entity BTEST; architecture BEHAV of BTEST is begin process(clk) begin if en_AB='0' then portB_io <= portA_io; elsif en_AC='0' then portC_io <= portA_io; else portB_io <= (others => 'Z'); portC_io <= (others => 'Z'); end if; end process; end architecture BEHAV; Например этот код для однонаправленных шин работает, но если заменить определение портов на inout, то в симуляторе не вижу нормальной работы. Читал книжки - не нашёл примеров обьединения именно двух и более двунаправленных шин. Если знаете где конкретно написано по моему вопросу, то буду благодарен за ссылку. Quote Share this post Link to post Share on other sites More sharing options...
Very_hard 0 August 31, 2006 Posted August 31, 2006 · Report post Например этот код для однонаправленных шин работает Не знаю-не знаю... По моему, этот код не должен работать. Во всяком случае синтезируется из него хрен знает что... Почему процесс чувствителен к clk? Почему clk - inout? Но это - неважно... Для "однонаправленных" шин :) по-моему правильно процесс писать так: process(en_AB, en_AC, portA_io, ) begin if en_AB='0' then portB_io <= portA_io; else portB_io <= (others => 'Z'); end if; if en_AC='0' then portC_io <= portA_io; else portC_io <= (others => 'Z'); end if; end process; Quote Share this post Link to post Share on other sites More sharing options...
o-henry 0 August 31, 2006 Posted August 31, 2006 · Report post entity BTEST is port ( clk : inout std_logic; en_AB : in std_logic; en_AC : in std_logic; portA_io : in std_logic_vector (8 downto 0); portB_io : out std_logic_vector (8 downto 0); portC_io : out std_logic_vector (8 downto 0) ); end entity BTEST; architecture BEHAV of BTEST is begin process(clk) begin if en_AB='0' then portB_io <= portA_io; elsif en_AC='0' then portC_io <= portA_io; else portB_io <= (others => 'Z'); portC_io <= (others => 'Z'); end if; end process; end architecture BEHAV; У Вас в списке чувствительности процесса один сигнал - clk - это что за зверь? где он на приведенной схеме? Если у Вас асинхронный дизайн - уберите из списка чувствительности этот clk и добавьте в него ваши сигналы: portA_io, en_AB, en_AC Quote Share this post Link to post Share on other sites More sharing options...
stssao 0 August 31, 2006 Posted August 31, 2006 · Report post > Почему процесс чувствителен к clk? Почему clk - inout? Чтобы не загромождать вопрос большую часть кода пришлось выкусить. Вобщем там нужна привязка к внешнему клоку. > Для однонаправленных шин по-моему правильно процесс писать так: И всё-таки вопрос про двунаправленные шины... > У Вас в списке чувствительности процесса один сигнал - clk - это что за зверь? где он на > приведенной схеме? На схеме одна сигнальная линия, для иллюстрации как надо соединить шины. Как формируются сигналы разрешения портов с тремя состояниями вынесем за скобки. > Если у Вас асинхронный дизайн - уберите из списка чувствительности этот clk и добавьте в него > ваши сигналы: portA_io, en_AB, en_AC Схема синхронная, клок внешний. Изменение списка чувствительности ничего не изменило. зы: перед тем как задать вопрос я просмотрел книги+яндекс+гугль+comp.lang.vhdl Quote Share this post Link to post Share on other sites More sharing options...
sazh 11 August 31, 2006 Posted August 31, 2006 · Report post Для двунаправленных шин у меня код наподобие вашего не работает. Нарисовал в схематике - получается. > p.s. народ ваще книжек не читает...кирдык Что конкретно посоветуете почитать по этому вопросу? Да ничего читать не надо. Нарисовали в схематике. Сделайте File - Create/update и получите схему в VHDL Там 4 процесса получается. а по большому счету наверно надо реализовывать как АП6. Один вход - направление передачи. Второй вход - перевод двунаправленной шины в третье состояние. И вешайте эти АП6 друг на друга. Quote Share this post Link to post Share on other sites More sharing options...
stssao 0 August 31, 2006 Posted August 31, 2006 · Report post > Нарисовали в схематике. Сделайте File - Create/update и получите схему в VHDL Не знал, спасибо. С квартусом я пока на вы :) > Там 4 процесса получается. а по большому счету наверно надо реализовывать как АП6. > Один вход - направление передачи. Второй вход - перевод двунаправленной шины в третье > состояние. И вешайте эти АП6 друг на друга. Ну так я и сделал в схематике, но хотелось перенести это чудо на vhdl. Теперь всё ОК, вопрос снимается. Quote Share this post Link to post Share on other sites More sharing options...
Very_hard 0 August 31, 2006 Posted August 31, 2006 · Report post Интересно, в приведенной схематике, получается, есть возможность драйвить один выход сразу двумя сигналами(при условии, что разрешен выход для обоих)? Как-то неправильно это, имхо. Или я не прав? Я бы сделал как-нибудь так: process(en_AB, en_AC, portB_io, portC_io) begin if en_AB='1' and en_AC='0' then portA_io <= portB_io; elsif en_AB='0' and en_AC='1' then portA_io <= portC_io; else portA_io <= (others => 'Z'); end if; end process; process(en_C, portA_io) begin if en_C='0' then portC_io <= portA_io; else portC_io <= (others => 'Z'); end if; end process; process(en_B, portA_io) begin if en_B='0' then portB_io <= portA_io; else portB_io <= (others => 'Z'); end if; end process; Тут, правда, дополнительная логика есть, кроме буферов... Quote Share this post Link to post Share on other sites More sharing options...
Postoroniy_V 0 August 31, 2006 Posted August 31, 2006 · Report post Для двунаправленных шин у меня код наподобие вашего не работает. Нарисовал в схематике - получается. > p.s. народ ваще книжек не читает...кирдык Что конкретно посоветуете почитать по этому вопросу? Да ничего читать не надо. Нарисовали в схематике. Сделайте File - Create/update и получите схему в VHDL Там 4 процесса получается. а по большому счету наверно надо реализовывать как АП6. Один вход - направление передачи. Второй вход - перевод двунаправленной шины в третье состояние. И вешайте эти АП6 друг на друга. ага точно, читать ничего не надо! нафих? всегда можно в конфе спросить :blink: а если бы инета не было? и не понятно почему такая любовь к громоздким конструкциям? можно ведь так .... DOUT0 <= DIN0 when ENABLE0='1' else DIN1 when ENABLE1='1' else 'Z'; DIN0 <= DOUT0 when ENABLE2='1' else DIN1 when ENABLE3='1' else 'Z'; ..... и уж тем более не ясно почему она у вас "не пашет" :angry2: Quote Share this post Link to post Share on other sites More sharing options...
stssao 0 August 31, 2006 Posted August 31, 2006 · Report post 2Very_hard > Интересно, в приведенной схематике, получается, есть возможность драйвить один выход сразу > двумя сигналами(при условии, что разрешен выход для обоих)? Как-то неправильно это, имхо. > Или я не прав? Ага, прав. В схематике это состояние запрещается. 2Postoroniy_V > ага точно, читать ничего не надо! нафих? всегда можно в конфе спросить > а если бы инета не было? Я задал вопрос, ответ на который не нашёл. Мне ответили - надо реализовывать каждую линию отдельным процессом. Где это написано в ваших книжках, покажите? > и не понятно почему такая любовь к громоздким конструкциям? > можно ведь так > > DOUT0 <= DIN0 when ENABLE0='1' else DIN1 when ENABLE1='1' else 'Z'; > DIN0 <= DOUT0 when ENABLE2='1' else DIN1 when ENABLE3='1' else 'Z'; Если вы не возражаете, я проверю ваш вариант немного позже. Quote Share this post Link to post Share on other sites More sharing options...
Very_hard 0 August 31, 2006 Posted August 31, 2006 · Report post Ага, прав. В схематике это состояние запрещаетсяТак что, Ваша схематика все-таки не работает? В смысле не синтезируется? Quote Share this post Link to post Share on other sites More sharing options...
stssao 0 August 31, 2006 Posted August 31, 2006 (edited) · Report post В смысле в схематике предусмотрено - при попытке установить запрещённые комбинации соединения выходов все шины остаются в высокоимпедансном состоянии. Edited August 31, 2006 by zaratustra Quote Share this post Link to post Share on other sites More sharing options...