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

Переключение входов I2S на плис

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

Линии SDA и SCL подтянуты к питанию, т.е линия постоянно в лог. 1.

Все SLAVE устройства "висящие" на этих линиях находятся Z состоянии и подключены по типу "монтажное И".

Читаю кучу мануалов, но просветления не наступило. Как правильно описать пин в Quartuse для реализации подключения по схеме "монтажное И", да ещё и с Z состоянием.

Вопросов как описать Z состояние у меня нет. Пугает то, что ПЛИС для выдачи в линию лог. нуля, должна "придавить" эту линию к земле. Что по сути будет короткое замыкание...

 

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


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

Приветствую!

...

Вопросов как описать Z состояние у меня нет. Пугает то, что ПЛИС для выдачи в линию лог. нуля, должна "придавить" эту линию к земле. Что по сути будет короткое замыкание...

С какой это стати КЗ?

assign SDA = (sda_oe_n==1'b0) ?  1'b0 : 1'bz;

Тоесть пин либо в Z (висит в воздухе) либо в 0. К VCC никогда не подключается, вот поэтому и нужны внешние резисторы на VCC.

 

Успехов! Rob.

 

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


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

Я бы даже сказал что внешние резисторы как раз и делают чтобы не было КЗ. Линию не подключают к питанию напрямую, а подключают через резистор на нем и будет все падать, когда слейв затянет линию в 0, и никакого КЗ.

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


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

Приветствую!

 

С какой это стати КЗ?

assign SDA = (sda_oe_n==1'b0) ?  1'b0 : 1'bz;

Тоесть пин либо в Z (висит в воздухе) либо в 0. К VCC никогда не подключается, вот поэтому и нужны внешние резисторы на VCC.

 

Успехов! Rob.

Ну кончено ! Как я мог забыть ! :biggrin: У нас же ток пойдет от источника, через подтягивающие резисторы, через токоограничивающий резистор на макетной плате, в пин, а затем в землю. И таким образом линия линия станет нулём. Хм... Вроде логично.

Возник вопрос тогда, как правильнее моделировать на VHDL линию подтянутую к питанию ?

Написал модуль тестбенча, которые генерирует сигналы SDI и SCL (по сути написал Master'a выдающий нужные мне значения). Соответственно если мастер присваивает линиям SDI и SCL лог. 1, а Slave присваивает им лог.0 я получаю закономерные X при моделировании, поскольку так устроена разрешающая функция в VHDL для типа STD_LOGIC.

Присваивать этим линиям значение слабой единицы, т.е "Н" - то-же не самая лучшая идея. Поскольку Slave устройство в итоге вместо нормальных данных (единицы и нули) принимает значения H.

И в итоге регистр вместо байта B"1111_1111" содержит B"HHHH_HHHH".

Думаю, что правильнее либо писать собственную функцию разрешения. Либо функцию, которая из "H" значения делает лог единицу. Как бы вы смоделировали это ?

Изменено пользователем Flip-fl0p

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


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

а чего бы не поставить туда логическое И, которым данная схема и является изначально?

 

 

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


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

а чего бы не поставить туда логическое И, которым данная схема и является изначально?

К сожалению не совсем понял Вас...

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


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

Приветствую!

 

Думаю, что правильнее либо писать собственную функцию разрешения. Либо функцию, которая из "H" значения делает лог единицу. Как бы вы смоделировали это ?

 

Library UNISIM;
use UNISIM.vcomponents.all;
-- PULLUP: I/O Pullup
-- Xilinx HDL Libraries Guide, version 2014.1
PULLUP_inst : PULLUP
port map (
  O => O -- 1-bit output: Pullup output (connect directly to top-level port)
);

 

Удачи! Rob.

 

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


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

К сожалению не совсем понял Вас...

 

я бы писал драйвер I2C который выдает на выход 1 и 0, а не 0 и Z. Потом уже в топовом модуле я бы 1 и 0 развел бы на внешнюю ногу правильно.

А симулил работу именно драйвера, объединяя их выходы по И, если надо несколько

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


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

Хочу задать наводящий вопрос: коллеги, вы в курсе что I2C и I2S - разные интерфейсы?

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


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

Хочу задать наводящий вопрос: коллеги, вы в курсе что I2C и I2S - разные интерфейсы?

Теперь в курсе :smile3046:

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


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

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

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

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

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

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

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

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

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

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