24C512 это ивасевые микрухи (I2C). У них вроде протокол другой.
А ПЛИС альтеровские или может Xilinx или еще какие?
Вид для печати
Народ, вопрос по Кактусу. Можно ли настроить его чтобы он в отчетах показывал как он преобразует исходный текст в логическое представление, т.е. его логический синтез. Вот в Мах Plus в файле с расширением rpt это можно увидеть.
А как бы в Кактусе такое провернуть.
А то заткнулся на одной вещи, понять не могу во что он ее синтезирует.
Спрошу и я: возможно ли у Cyclone II включить On-Chip Termination (встроенный последовательный резистор) для выхода типа Open Drain?
Так, мой вопрос остался без ответа, попробуем по другому.
Я попытался переложить интерфейс SD карты, написанный на vhdl Keeper на AHDL.
Но нифига не работает зараза и не врублюсь почему.
Может кто незамутненным взглядом найдет ошибку.
Вот мой кусок кода
Почему то cчетчик SD_count доходя до 8 не останавливается и продолжает считать.Код:------------------------------------------------------------------------------------
-- Интерфейс SD карты, работает на частоте 14МГц
------------------------------------------------------------------------------------
-- Порт xx57h = 01010111b
------------------------------------------------------------------------------------
CS_57 = CA[7] # !CA[6] # CA[5] # !CA[4] # CSx7 # IO_ENABLE;
SD_start_sync.d = !CS_57;
SD_start_sync.clk = CLK_14MHZ;
-----------------------------------------------------------------------------------
-- Счетчик
------------------------------------------------------------------------------------
SD_count_en = SD_count[0].q # SD_count[1].q # SD_count[2].q # !SD_count[3].q;
SD_count[].clk = !CLK_14MHZ;
SD_count[0].clrn = !SD_start_sync.q;
SD_count[1].prn = !SD_start_sync.q;
SD_count[2].prn = !SD_start_sync.q;
SD_count[3].prn = !SD_start_sync.q;
IF SD_count_en ==1 THEN
SD_count[].d = SD_count[].q+1;
END IF;
------------------------------------------------------------------------------------
-- Входной сдвигающий регистр
------------------------------------------------------------------------------------
SD_shift_in[].clk = CLK_14MHZ;
IF SD_count[3].q ==0 THEN
SD_shift_in[].d = (SD_shift_in[7-1..0].q,SD_MISO);
END IF;
------------------------------------------------------------------------------------
-- Выходной сдвигающий регистр = xx57h = 01010111b
------------------------------------------------------------------------------------
WR_57 = CS_57 # C_WR;
SD_shift_out[].clk = !CLK_14MHZ;
IF WR_57 ==0 THEN
SD_shift_out[].d = CD[];
ELSIF SD_count[3].q ==0 THEN
SD_shift_out[].d = (SD_shift_out[7-1..0].q,VCC);
END IF;
-----------------------------------------------------------------------------------
-- Вывод данных в SD
------------------------------------------------------------------------------------
SD_MOSI = SD_shift_out[7].q;
------------------------------------------------------------------------------------
-- Выходная частота SD
------------------------------------------------------------------------------------
SD_SCK = CLK_14MHZ & !SD_count[3].q;
------------------------------------------------------------------------------------
-- Процесс записи в порт управления SD карты = xx77h = 01110111b
------------------------------------------------------------------------------------
WR_77 = CA[7] # !CA[6] # !CA[5] # !CA[4] # CSx7 # IO_WR;
SD_rule_r.d = CD[1];
SD_rule_r.clk = WR_77;
SD_rule_r.prn = C_RESET;
SD_CS = SD_rule_r.q;
А вот исходный вариант на vhdl
Код:library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity SPI is
port(
--INPUTS
DI : in std_logic_vector(7 downto 0);
CLC : in std_logic;
START : in std_logic;
MISO : in std_logic;
WR_EN : in std_logic;
--OUTPUTS
DO : out std_logic_vector(7 downto 0);
SCK : out std_logic;
MOSI : out std_logic
);
end;
architecture spi_rtl of SPI is
signal COUNTER : std_logic_vector(3 downto 0);
signal SHIFT_IN : std_logic_vector(7 downto 0);
signal SHIFT_OUT : std_logic_vector(7 downto 0);
signal COUNTER_EN : std_logic;
signal START_SYNC : std_logic;
begin
SCK <= CLC and not COUNTER(3);
DO <= SHIFT_IN;
MOSI <= SHIFT_OUT(7);
COUNTER_EN <= not COUNTER(3) or COUNTER(2) or COUNTER(1) or COUNTER(0);
process(CLC)
begin
if CLC'event and CLC = '1' then
START_SYNC <= START;
end if;
end process;
process(CLC,COUNTER(3))
begin
if CLC'event and CLC = '1' then
if COUNTER(3) = '0' then
SHIFT_IN <= SHIFT_IN(6 downto 0)&MISO;
end if;
end if;
end process;
process(CLC,WR_EN,COUNTER(3))
begin
if CLC'event and CLC = '0' then
if WR_EN = '1' then
SHIFT_OUT <= DI;
else
if COUNTER(3) = '0' then
SHIFT_OUT(7 downto 0) <= SHIFT_OUT(6 downto 0)&'1';
end if;
end if;
end if;
end process;
process(CLC,START_SYNC,COUNTER_EN)
begin
if START_SYNC = '1' then
COUNTER <= "1110";
else
if CLC'event and CLC = '0' then
if COUNTER_EN = '1' then
COUNTER <= COUNTER+"0001";
end if;
end if;
end if;
end process;
end spi_rtl;
А объясни как в твоем языке происходит инкремент счетчика - в VHDL коде там в последней секции он инкрементится
а в твоем куске он только присваивается но никаких движняков именно по изменению, я в коде не вижу. Может конечно в AHDL есть какое то автоинкрементирование - но я в этом сомневаюсь.Код:if CLC'event and CLC = '0' then
if COUNTER_EN = '1' then
COUNTER <= COUNTER+"0001";
---------- Post added at 09:51 ---------- Previous post was at 09:29 ----------
Ага тормозю - нашел!
твой код :
попробуй переписать как :Код:IF SD_count_en ==1 THEN
SD_count[].d = SD_count[].q+1;
Синтаксис я мог нарушить ( не знаю его ) но идея думаю ясна.Код:IF SD_count_en ==1 THEN
IF SD_count[].d == 7 THEN SD_count[].d=0;
ELSE
SD_count[].d = SD_count[].q+1;
Это если должно считать 8 раз от 0 до 7.
И вопросы по .d и .q не понятно - почему разная разрядность до и после присваивания (SD_count[].d = SD_count[].q+1). если я правильно врубаюсь - это дабл и квад ? По идее оно должно быть одинаковым. А приведение сделать потом, типа and 7 если надо только 3 разряда. Но вообще - желательно просто ввести условие дополнительное а операнды делать равными по ширине. для данного случая - 4 бита.
В смысле разная разрядность.
Счетчик в данном примере основан на D триггерах, у которых
.d - это D-вход,
.q - это выход
[] тоже самое что и [3..0] - тоесть применительно ко всем разрядам
А запись SD_count[].d = SD_count[].q+1 равносильна записи в VHDL как SD_count = SD_count+1
Ух как все интересно .
Я не увидел что это обращение к полям структуры.
Теперь понятно. Но вопросы - остаются.
И все таки попробуйте ввести проверку о которой я написал - если код равен 7 на выходе тригера при необходимости увеличить счетчик - присваивать входу значение 0. А то я так и не понял - было ли это сделано или нет.
Откопал у себя в завалах старенький даташит на CPLD MAX3000A. Там внятно расписан часто возникающий вопрос о совместимости любимых народом EPM3032, 3064, 3128 с пятивольтовым окружением. Раздел Output Configuration.
В упрощенном переводе с ангельского - чипы полностью толерантны к пятивольтовым входным сигналам, танцы с бубном не требуются. Выходные сигналы (при питании ядра 3.3вольт) - вполне укладываются для подключения к пятивольтовой логике. В общем, ничего нового, просто для закрепления информации :)
a Mick то куда пропал ? Одолел интересно или нет? Вернее даже добавил сброс счетчика при переходе через 7 или оставил переполняться?
Глупый вопрос, чем в основном отличается Altera от Xilix? Хочу сделать IDE контроллер для XT, часть или всю логику упрятать в ПЛИС. Паять буду на макетке, поэтому корпус PPLC44 (или больший по размеру PPLC) предпочтителен.
Так же неплохо, что бы питалось все от 5 вольт, ну или хотя бы TTL уровни были с 5в толерантными. Но тогда придется помимо ПЛИС ставить еще буферы на IDE?
С наскоку мне, в принципе, понравилась EPM3032ALC44-10 . Шьется вроде программатором из "проводков". Quantus (или как там его) опять таки халявный, позволяет схемы рисовать...
С другой стороны вот эти ребята сначала (v1) делали на 44ногой XC9536 пяти вольтовой, но буферы вынесли на плату. А потом взяли (v2) и упаковали все в 100 ногую XC9572XL трех вольтовую. И вроде пашет у них все. Вот я и в раздумьях, это пашет потому что Xilix, или пашет просто, не важно Xilix или Altera?
1. Софты Xilinx-а тормозные, я предпочитаю Альтеру.
2. 5В толерант только лапы, питание все равно должно быть 3.3В. Вопреки тому, что у некоторых выбегалл они работают на 5В, они гарантированно убиваются при прошивании на этой напруге.
3. Для дизайна рекомендую использовать МАХ II, например ЕРМ240 ибо ЕРМ3ххх это уже старье.
Tronix был вроде фришный контроллер IDE для ISA кем то нашим произведенный. Сейчас поищу - если что - добавлю ссылку в этот пост.
наш не нашел но первый линк это http://dangerousprototypes.com/docs/...isk_controller
А что скажите про EPM7064SLC44-10(N) ? Думаю взять на пробу ее... Это серия MAX 7000. В даташите есть оговорка, что MultiIO 5V не доступно в PPLC 44 корпусе. Но она же все равно толерантна к 5V TTL? Или нет?
Или не выеживаться, и взять самое простое - EPM3032ALC44-10?
2e.
Купил и то и то. Начну пожалуй с 7000 серии. Чем шить?
Этим, например.
Да ну не, у меня ж есть LPT и DOS/Win 98/Win XP. Зачем мне с китая заказывать и ждать месяц эту погремушку? Такая хреновина на 555АП5 разве не подойдет?
http://read.pudn.com/downloads114/do...eblastermv.gif
Подойдет конечно, я сам таким пользовался. Но на новом компе у меня нету лпт, например.
от нетерпения довелось шить даже таким
http://ic.pics.livejournal.com/texas...5_original.gif
все таки проще (безопаснее ) байтбластер на 74245 собирать - схема была в альтеровском даташите( в каком именно не помню но по моему чтото про прошивку чипов).
P.S.
Так - сорри - не увидел - Tronix уже дал его схему выше :)
Хорошо, сделаем на 555АП5. У меня не хватает пинов :( Как можно заюзать пины, которые для программирования нужны? Отключить JTAG в настройках Device? Если я их использую, смогу я потом прошиться то по новой или уже все, досвидос?
http://habrastorage.org/files/8b6/a8...c03a7095ee.png
2 пина не хватает :(
Tronix, думаю reset можно проинвертировать и внешними элементами. он же в прошиве не используется?
Точно, это я просто из двух один не смог вычесть. Затупил, бывает -)
Но все-таки интересно, можно ли юзать пины
а) Ded. input (dedicated input?), Global Clock
б) Пины для программирования TDI/TMS/TDO/TCK
?
Вот вариант А - это ваще для чего надо? Пытался на них повесить output - ругается при компиляции:
Цитата:
Error: Node "RESET" assigned to PIN_2 is a dedicated input pin, but you cannot assign an output/bidir pin, input register, or macrocell to a dedicated input pin
У меня была мамка с ЛПТ 3.3В. С нее я использовал джтаг без 245. Но в общем случае - преобразователь уровней ставить обязательно.
Да ну, really? :)
Global Clock - только вход. У него есть своя особенность, "сетка" его магистралей проходит по всему кристаллу, поэтому его настоятельно рекомендуют использовать как вход тактовой, которая используется для большей части проекта. Время прохождения сигнала - минимально, синхронность работы получается лучше, чем использовать обычный вход и гнать тактовый сигнал через ячейки/магистрали.
Если в проекте используется, к примеру, сигнал записи в кучу триггеров-регистров, то это применение будет самое то.
Но вполне можно использовать и как самый обычный вход.
Аналогично используется и Glоbal Reset.
Использовать пины JTAG - дело личное, но... лучше не трогать. Один хрен, потом понадобится что-то поправить, а поезд уехал. Перешить чип пятью проводками не удастся.
буфер ставят чтобы не спалить LPT,
пины JTAG даже в голову не приходило использовать. Кстати, на приведенной схеме дешифраторы 74.... рекомендую заменить на одну мегафункцию decoder, это и Altera рекомендует. Работать будет быстрее, меньше места займет на кристалле, и схема будет красивее выглядеть
Тут лучше бы ответил Микка_А, но он сюда почти не заходит.
При отключенных пинах ISP чипы можно перешить с помощью параллельного программатора. Они есть, как правило, у дилеров, торгующих плисами. В Питере такой программатор есть у "ЭФО", например. Более точно суть я описать не могу, не знаю...
Схем в инете не валяется, можно сделать вывод, что там или всё жутко сложно, или не менее жутко секретно. В общем, нафиг....
---------- Post added at 10:28 ---------- Previous post was at 10:23 ----------
Чуть отступлю от темы - заказывал на алиэкспрессе недавно EPM3064ATC44.
Пришли быстренько, и цена очень неплохая, по 49рэ. Ножки паябельны для начинающих, пригодны для ЛУТа.