Важная информация

User Tag List

Страница 21 из 33 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя
Показано с 201 по 210 из 330

Тема: Любительская девборда на Z80

  1. #201

    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    10,141
    Спасибо Благодарностей отдано 
    216
    Спасибо Благодарностей получено 
    769
    Поблагодарили
    417 сообщений
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    if sync_count = 7 - вот так надо
    Хорошо, но тогда вопрос в другом. Ведь по схеме сторчный счетчик срабатывает при переходе из 7 -> 0, т.е. по спаду. А тут получится немного раньше сработает.

    ---------- Post added at 16:00 ---------- Previous post was at 15:58 ----------

    Цитата Сообщение от Blade Посмотреть сообщение
    Примерно так:
    Код:
                   elsif (CLK_25MHZ'event and CLK_25MHZ = '1') then
                             if (Sync_count = 7) then 
    
                                 if HSync_count = 99 then
                                    HSync_count <= (others => '0');
    Код:
                   elsif (CLK_25MHZ'event and CLK_25MHZ  = '1') then
                             if (HSync_count = 99 and Sync_count= 7) then 
    
                                 if VSync_count = 448 then
                                     VSync_count <= (others => '0');
    Ах да, забыл еще и с 0 посчитать.
    Сайт поддержки моих изделий - http://micklab.ru/
    Группа ВКонтакте - https://vk.com/micklab

  2. #202

    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    10,141
    Спасибо Благодарностей отдано 
    216
    Спасибо Благодарностей получено 
    769
    Поблагодарили
    417 сообщений
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Еще вопрос, как правильнее описать вот этот кусок схемы.

    Код:
        ------------------------------------------------------------------------------------
        -- Сигнал стробирования адреса и формирование частоты процессора
        -- Примечание: память работает на частоте 12,5МГц, процессор на частоте 6,25МГц
      ------------------------------------------------------------------------------------
      Clock_sync : process(CLK_25MHZ)
                        begin
                      if (CLK_25MHZ'event and CLK_25MHZ  = '1') then
                              Strobe_Addr <= Sync_count(0);
                              
                              if(CLK_25MHZ  = '1' and Sync_count(0) = '0') then 
                               C_CLK <= not Sync_count(1);
                              end if;
                            end if;
                 end process Clock_sync;
    Так как схема синхронна, то для того чтобы работать в VGA в столь извращенном виде необходимо чтобы память работала считай в турбо режиме. В данном случае H0 = 12,5МГц, H1 = 6,25МГц. Процессор планируется работать на частоте 6,25 МГц.
    Сигнал RAS/ это считай строб адреса для мультиплексоров типа КП13.

    Типа такой схемы я опробовал в втором Фениксе (память работала всегда на 7Мгц, а процессор либо 3,5МГц, либо 7МГц).
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	clock.png 
Просмотров:	173 
Размер:	6.4 Кб 
ID:	42454  
    Сайт поддержки моих изделий - http://micklab.ru/
    Группа ВКонтакте - https://vk.com/micklab

  3. #203

    Регистрация
    31.03.2008
    Адрес
    Москва
    Сообщений
    735
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    37 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    if rising_edge(f25) then RAS <= H0;
    if rising_edge(f25) and H0 = 0 then CLK <= not H1;

    синтаксис проверяй!
    можешь объединить все под условием rising_edge или как ты пишешь : 'event и '=1
    ZXM-Phoenix rev.01 2048K, VG93 hw emulator

  4. #204

    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    10,141
    Спасибо Благодарностей отдано 
    216
    Спасибо Благодарностей получено 
    769
    Поблагодарили
    417 сообщений
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от IanPo Посмотреть сообщение
    if rising_edge(f25) then RAS <= H0;
    if rising_edge(f25) and H0 = 0 then CLK <= not H1;

    синтаксис проверяй!
    можешь объединить все под условием rising_edge или как ты пишешь : 'event и '=1

    Как я понял, будет выглядеть так.

    Код:
     ------------------------------------------------------------------------------------
        -- Сигнал стробирования адреса и формирование частоты процессора
        -- Примечание: память работает на частоте 12,5МГц, процессор на частоте 6,25МГц
      ------------------------------------------------------------------------------------
      Clock_sync : process(CLK_25MHZ)
                        begin
                      if (CLK_25MHZ'event and CLK_25MHZ  = '1') then
                              Strobe_Addr <= Sync_count(0); -- RAS <= H0;
                              
                              if Sync_count(0) = '0' then 
                                 C_CLK <= not Sync_count(1); -- C_CLK <= not H1;
                              end if;
                         end if;
                 end process Clock_sync;
    Сайт поддержки моих изделий - http://micklab.ru/
    Группа ВКонтакте - https://vk.com/micklab

  5. #205

    Регистрация
    31.03.2008
    Адрес
    Москва
    Сообщений
    735
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    37 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Mick, да, все правильно. Можно сделать 2 отд.процесса - по 1 для каждого сигнала (CLK и RAS), профики вроде так делают обычно, разделяют логику. Все условие в скобках необязательно писать. Но если тебе так проще, то и нормально.
    http://tehnari.info/glava-2.-yazyk-v...zyke-vhdl.html - тут приоритеты (по возрастанию), чтобы меньше скобок делать.
    ZXM-Phoenix rev.01 2048K, VG93 hw emulator

  6. #206

    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    10,141
    Спасибо Благодарностей отдано 
    216
    Спасибо Благодарностей получено 
    769
    Поблагодарили
    417 сообщений
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от IanPo Посмотреть сообщение
    Mick, да, все правильно. Можно сделать 2 отд.процесса - по 1 для каждого сигнала (CLK и RAS), профики вроде так делают обычно, разделяют логику. Все условие в скобках необязательно писать. Но если тебе так проще, то и нормально.
    http://tehnari.info/glava-2.-yazyk-v...zyke-vhdl.html - тут приоритеты (по возрастанию), чтобы меньше скобок делать.
    Я пока не профик, я еще только в начале пути

    Кстати, если допустим разделить процессы

    то если с RAS понятно

    Код:
      RAS_sync : process(CLK_25MHZ)
                        begin
                      if (CLK_25MHZ'event and CLK_25MHZ  = '1') then
                              Strobe_Addr <= Sync_count(0); -- RAS <= H0;
                            
                         end if;
                 end process RAS_sync;
    То вот для CLK процесса как правильнее будет

    Код:
      CLK_sync : process(CLK_25MHZ)
                        begin
                      if (CLK_25MHZ'event and CLK_25MHZ  = '1') then
                          if Sync_count(0) = '0' then 
                                 C_CLK <= not Sync_count(1); -- C_CLK <= not H1;
                              end if;
                         end if;
                 end process CLK_sync;
    или

    Код:
      CLK_sync : process(CLK_25MHZ)
                        begin
                      if CLK_25MHZ'event and CLK_25MHZ  = '1' and Sync_count(0) = '0'  then
                               C_CLK <= not Sync_count(1); -- C_CLK <= not H1;
                       end if;
                 end process CLK_sync;
    Или они равнозначны?
    Последний раз редактировалось Mick; 15.07.2013 в 21:37.
    Сайт поддержки моих изделий - http://micklab.ru/
    Группа ВКонтакте - https://vk.com/micklab

  7. #207

    Регистрация
    31.03.2008
    Адрес
    Москва
    Сообщений
    735
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    37 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну, я разницы не вижу.
    Как читать удобнее, то и выбирай.
    -----------------
    Пришло в голову:
    возможно, во втором случае надо включить в список чувствительности еще и Sync_count(0), только я не уверен.
    Последний раз редактировалось IanPo; 15.07.2013 в 22:44.
    ZXM-Phoenix rev.01 2048K, VG93 hw emulator

  8. #208

    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    10,141
    Спасибо Благодарностей отдано 
    216
    Спасибо Благодарностей получено 
    769
    Поблагодарили
    417 сообщений
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от IanPo Посмотреть сообщение
    Пришло в голову:
    возможно, во втором случае надо включить в список чувствительности еще и Sync_count(0), только я не уверен.
    Тогда оставлю вариант через два if.

    Вот еще сигнал INT на проверку. Сигнал прерывания формируется по кадровому импульсу частотой 70Гц.
    Длительность прерывания 32 такта процессора.
    Сюда нужно добавлять сигнал сброса или не надо?


    Код:
      ------------------------------------------------------------------------------------
        -- Сигнал прерывания
      -- Примечание: прерывание генерится с частотой 70Гц по кадровому синхроимпульсу
      ------------------------------------------------------------------------------------
      INT_sync : process(VSync, HSync_count)
                   begin
                  if HSync_count >= 8 then
                              C_INT <= '1';
                        elsif (VSync'event and VSync  = '1') then
                              C_INT <= '0';
                        end if;
               end process INT_sync;
    Cо сбросом

    Код:
      ------------------------------------------------------------------------------------
        -- Сигнал прерывания
      -- Примечание: прерывание генерится с частотой 70Гц по кадровому синхроимпульсу
      ------------------------------------------------------------------------------------
      INT_sync : process(C_RESET, VSync, HSync_count)
                   begin
                  if C_RESET = '0' or HSync_count >= 8 then
                              C_INT <= '1';
                        elsif (VSync'event and VSync  = '1') then
                              C_INT <= '0';
                        end if;
               end process INT_sync;
    Еще чуток сигналов и синхрогенератор считай написан
    Последний раз редактировалось Mick; 16.07.2013 в 09:15.
    Сайт поддержки моих изделий - http://micklab.ru/
    Группа ВКонтакте - https://vk.com/micklab

  9. #209

    Регистрация
    31.03.2008
    Адрес
    Москва
    Сообщений
    735
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    37 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Может, так (вне процессов) ?
    C_INT <= '0' when VSync = '1' and HSync_Count < 8 and C_RESET = '1' else '1';
    Нужен ли тут C_RESET (это сброс процессора?), не могу сказать, этот ты должен сам решить.
    Последний раз редактировалось IanPo; 16.07.2013 в 11:30.
    ZXM-Phoenix rev.01 2048K, VG93 hw emulator

  10. #210

    Регистрация
    14.06.2005
    Адрес
    г. Калуга
    Сообщений
    10,141
    Спасибо Благодарностей отдано 
    216
    Спасибо Благодарностей получено 
    769
    Поблагодарили
    417 сообщений
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от IanPo Посмотреть сообщение
    Может, так (вне процессов) ?
    C_INT <= '0' when VSync = '1' and HSync_Count < 8 and C_RESET = '1' else '1';
    Нужен ли тут C_RESET (это сброс процессора?), не могу сказать, этот ты должен сам решить.
    C_RESET это общий сброс. По сути при сбросе проц запрещает прерывание. По логике, если и возникнет, один фиг его не обработают.
    Может действительно сброс лишний.

    ---------- Post added at 12:12 ---------- Previous post was at 11:59 ----------

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

Страница 21 из 33 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Прикольная девборда... для спека в самый раз :)
    от ILoveSpeccy в разделе Несортированное железо
    Ответов: 12
    Последнее: 15.08.2008, 07:06

Ваши права

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