User Tag List

Страница 109 из 191 ПерваяПервая ... 105106107108109110111112113 ... ПоследняяПоследняя
Показано с 1,081 по 1,090 из 1903

Тема: ПЛИС и всё что с ними связано

  1. #1081
    Moderator Аватар для Mick
    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    9,924
    Спасибо Благодарностей отдано 
    179
    Спасибо Благодарностей получено 
    697
    Поблагодарили
    368 сообщений
    Mentioned
    19 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от solegstar Посмотреть сообщение
    я не скажу за конфигурацию ПЛИС с SPI микросхем памяти, но у меня на заводе стоят станки, в них стоят для хранения конфигурации 24с512. я их раз в год меняю
    24C512 это ивасевые микрухи (I2C). У них вроде протокол другой.
    А ПЛИС альтеровские или может Xilinx или еще какие?
    Сайт поддержки моих изделий - http://micklab.ru/
    Группа ВКонтакте - https://vk.com/micklab

  2. #1081
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #1082
    Moderator Аватар для Mick
    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    9,924
    Спасибо Благодарностей отдано 
    179
    Спасибо Благодарностей получено 
    697
    Поблагодарили
    368 сообщений
    Mentioned
    19 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от TSL Посмотреть сообщение
    Mick, я думаю это реально. Только nCONFIG фпга нужно дергать после того, как пошлешь флэшке команду чтения и 3 (2) байта адреса. Т.е. Команда, адрес, пинок на PS, читаешь данные. Плюсы метода: можно выбирать адрес флэша, где лежит конфиг (при AS он всегда = 0).
    Что же, ты меня обнадежил. Надо будет поподробнее изучить этот вопрос.
    Сайт поддержки моих изделий - http://micklab.ru/
    Группа ВКонтакте - https://vk.com/micklab

  4. #1083
    Moderator Аватар для Mick
    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    9,924
    Спасибо Благодарностей отдано 
    179
    Спасибо Благодарностей получено 
    697
    Поблагодарили
    368 сообщений
    Mentioned
    19 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Народ, вопрос по Кактусу. Можно ли настроить его чтобы он в отчетах показывал как он преобразует исходный текст в логическое представление, т.е. его логический синтез. Вот в Мах Plus в файле с расширением rpt это можно увидеть.
    А как бы в Кактусе такое провернуть.

    А то заткнулся на одной вещи, понять не могу во что он ее синтезирует.
    Сайт поддержки моих изделий - http://micklab.ru/
    Группа ВКонтакте - https://vk.com/micklab

  5. #1084
    Guru Аватар для tnt23
    Регистрация
    28.03.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,634
    Спасибо Благодарностей отдано 
    404
    Спасибо Благодарностей получено 
    78
    Поблагодарили
    63 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спрошу и я: возможно ли у Cyclone II включить On-Chip Termination (встроенный последовательный резистор) для выхода типа Open Drain?

  6. #1085
    Moderator Аватар для Mick
    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    9,924
    Спасибо Благодарностей отдано 
    179
    Спасибо Благодарностей получено 
    697
    Поблагодарили
    368 сообщений
    Mentioned
    19 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так, мой вопрос остался без ответа, попробуем по другому.

    Я попытался переложить интерфейс SD карты, написанный на vhdl Keeper на AHDL.
    Но нифига не работает зараза и не врублюсь почему.
    Может кто незамутненным взглядом найдет ошибку.

    Вот мой кусок кода
    Код:
        ------------------------------------------------------------------------------------
        --  Интерфейс 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;
    Почему то cчетчик SD_count доходя до 8 не останавливается и продолжает считать.

    А вот исходный вариант на 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;
    Сайт поддержки моих изделий - http://micklab.ru/
    Группа ВКонтакте - https://vk.com/micklab

  7. #1086
    Moderator
    Регистрация
    25.11.2007
    Адрес
    Симферополь
    Сообщений
    2,164
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Mick Посмотреть сообщение
    Так, мой вопрос остался без ответа, попробуем по другому.

    Я попытался переложить интерфейс SD карты, написанный на vhdl Keeper на AHDL.
    Но нифига не работает зараза и не врублюсь почему.
    Может кто незамутненным взглядом найдет ошибку.

    Вот мой кусок кода

    Скрытый текст


    Код:
        ------------------------------------------------------------------------------------
        --  Интерфейс 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;
    [свернуть]


    Почему то cчетчик SD_count доходя до 8 не останавливается и продолжает считать.

    А вот исходный вариант на 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 коде там в последней секции он инкрементится
    Код:
     if CLC'event and CLC = '0' then
                        if COUNTER_EN = '1' then
                            COUNTER <= COUNTER+"0001";
    а в твоем куске он только присваивается но никаких движняков именно по изменению, я в коде не вижу. Может конечно в AHDL есть какое то автоинкрементирование - но я в этом сомневаюсь.

    ---------- 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 бита.
    Последний раз редактировалось balu_dark; 17.05.2014 в 09:57.
    Amiga 1200+Blizzard 1260 72 Mb+Mtek 68030,Compozit 128, Leningrad 2,
    Atari STE 1040,ZX Spectrum +2,Pentagon 48, Speccy2007 - 2 , ATAS 256k.
    ZX Evo 4Mb- в строю.
    Speccy2010 v1
    Специалист (пока готовлюсь к восстановлению).
    Это все мое!
    Родное!
    Все люблю на свете я! Это родина моя!

  8. #1087
    Moderator Аватар для Mick
    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    9,924
    Спасибо Благодарностей отдано 
    179
    Спасибо Благодарностей получено 
    697
    Поблагодарили
    368 сообщений
    Mentioned
    19 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от balu_dark Посмотреть сообщение
    И вопросы по .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
    Сайт поддержки моих изделий - http://micklab.ru/
    Группа ВКонтакте - https://vk.com/micklab

  9. #1088
    Moderator
    Регистрация
    25.11.2007
    Адрес
    Симферополь
    Сообщений
    2,164
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ух как все интересно .
    Я не увидел что это обращение к полям структуры.
    Теперь понятно. Но вопросы - остаются.
    И все таки попробуйте ввести проверку о которой я написал - если код равен 7 на выходе тригера при необходимости увеличить счетчик - присваивать входу значение 0. А то я так и не понял - было ли это сделано или нет.
    Amiga 1200+Blizzard 1260 72 Mb+Mtek 68030,Compozit 128, Leningrad 2,
    Atari STE 1040,ZX Spectrum +2,Pentagon 48, Speccy2007 - 2 , ATAS 256k.
    ZX Evo 4Mb- в строю.
    Speccy2010 v1
    Специалист (пока готовлюсь к восстановлению).
    Это все мое!
    Родное!
    Все люблю на свете я! Это родина моя!

  10. #1089
    Super Moderator Аватар для Ewgeny7
    Регистрация
    03.07.2005
    Адрес
    Санкт-Петербург
    Сообщений
    10,168
    Спасибо Благодарностей отдано 
    146
    Спасибо Благодарностей получено 
    76
    Поблагодарили
    51 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Откопал у себя в завалах старенький даташит на CPLD MAX3000A. Там внятно расписан часто возникающий вопрос о совместимости любимых народом EPM3032, 3064, 3128 с пятивольтовым окружением. Раздел Output Configuration.
    В упрощенном переводе с ангельского - чипы полностью толерантны к пятивольтовым входным сигналам, танцы с бубном не требуются. Выходные сигналы (при питании ядра 3.3вольт) - вполне укладываются для подключения к пятивольтовой логике. В общем, ничего нового, просто для закрепления информации
    ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
    Speccy-2007 128/AY/TR-DOS

    Сайт с документацией к "Scorpion ZS 256"

  11. Этот пользователь поблагодарил Ewgeny7 за это полезное сообщение:

    tiretrak (04.04.2020)

  12. #1090
    Moderator
    Регистрация
    25.11.2007
    Адрес
    Симферополь
    Сообщений
    2,164
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    a Mick то куда пропал ? Одолел интересно или нет? Вернее даже добавил сброс счетчика при переходе через 7 или оставил переполняться?
    Amiga 1200+Blizzard 1260 72 Mb+Mtek 68030,Compozit 128, Leningrad 2,
    Atari STE 1040,ZX Spectrum +2,Pentagon 48, Speccy2007 - 2 , ATAS 256k.
    ZX Evo 4Mb- в строю.
    Speccy2010 v1
    Специалист (пока готовлюсь к восстановлению).
    Это все мое!
    Родное!
    Все люблю на свете я! Это родина моя!

Страница 109 из 191 ПерваяПервая ... 105106107108109110111112113 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. ДВК (и всё, что с ними связано)
    от Grand в разделе ДВК, УКНЦ
    Ответов: 4544
    Последнее: 01.06.2024, 20:20
  2. Ответов: 1187
    Последнее: 22.12.2023, 20:53
  3. PAL/GAL и все что с ними связано.
    от Mick в разделе Клоны на ПЛИС, МК и БМК
    Ответов: 487
    Последнее: 01.12.2023, 00:30
  4. SMUC на дискретах и ПЛИС
    от spensor в разделе Scorpion
    Ответов: 844
    Последнее: 15.05.2023, 12:31
  5. Вопрос по ПЛИС
    от Zloy в разделе Несортированное железо
    Ответов: 23
    Последнее: 17.10.2015, 17:12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •