Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Unsorted (http://zx-pk.ru/forumdisplay.php?f=13)
-   -   ПЛИС и всё что с ними связано (http://zx-pk.ru/showthread.php?t=9342)

USERHOME 8th April 2011 21:40

Quote:

Originally Posted by Ewgeny7 (Post 373797)
Alex_NEMO, 20.
На подобном чипе сделана ПентЭва (1500LE). Проц снаружи, логика внутри.

ПентЭва - это что?

IanPo 8th April 2011 22:23

USERHOME
http://nedopc.com/zxevo/zxevo.php

lisica 18th June 2011 20:46

2 Attachment(s)
Как отучить квактус за меня лишние связи делать?
Вот, например код
RTL рисует мне лишнюю линию. (она красным выделена и разрезана)
Как мне избавиться от этого соединения не меняя код?

PS Рисую то же самое, только схемно, он в RTLe прорисовывает как на схеме... То есть без лишней связи. Преобразую схему в VHDL, потом этот VHDL компилирую, и, оппа - опять лишняя линия...:mad:

ZEK 18th June 2011 22:09

вообще нездорово писать что бы юзалиль pre и clr где нить кроме как начальная иницилизация, очень плохая практика для fpga/cpld, из за гонок сигналов можно очень веселые глюки ловить.

а красная перечеркнутая цепь отражает
Code:

if dos_on = '0' then
    dos <= '0';
 elsif dos_of = '0' then
    dos <= '1';

красненькое

lisica 18th June 2011 22:58

А как же это?
Quote:

Originally Posted by lisica (Post 393929)
PS Рисую то же самое, только схемно, он в RTLe прорисовывает как на схеме... То есть без лишней связи. Преобразую схему в VHDL, потом этот VHDL компилирую, и, оппа - опять лишняя линия...


Keeper 19th June 2011 00:03

Quote:

Originally Posted by lisica (Post 393929)
Как отучить квактус за меня лишние связи делать?

Переделать этот кусок кода по другому...

---------- Post added at 22:03 ---------- Previous post was at 21:50 ----------

Например:

Code:

res_dos <= '1' when ( m1 = 0, mreq = 0, (a14 or a15) = 1 ) else '0';
set_dos <= '1' when ( m1 = 0, mreq = 0, (a15..a8) = "#3D" ) else '0';

process(res_dos,set_dos)
begin
if res_dos = '1' then
        dos <= '0';
elseif ( rising_edge(set_dos)) then
        dos <= '1';
end if;
end process;

Таким образом, по переднему фронту set_dos мы устанавливаем признак активности доса, а сбрасываем его асинхронно (вход clr триггера dos) сигналом res_dos.

krotan 28th July 2011 16:53

Вопрос к знатокам. Почему для симуляции процессора z80 всегда используется T80 (VHDL, 35MHz) и его разновидности и нет никакого упоминания про использование других OpenCore процессоров, таких как: nextz80 (Verilog, 40 MHZ), tv80 (Verilog), Wishbone High Performance Z80 (Verilog, 90 MHZ), z80control (VHDL)?

svofski 28th July 2011 17:03

Наверное потому, что большинство начинают свои проекты смотря на других и T80 был, наверное, первым общедоступным полноценным Z80. Кому охота, не имея особой уверенности в собственных силах, испытывать еще какой-то непроверенный код? К тому же то, что T80 работает максимально приближенно к оригиналу, для большинства проектов важнее той максимальной тактовой частоты, которую он способен выдержать.

Сделайте проект на каком-нибудь другом. У T80 немного достоинств. Толстый, в коде черт ногу сломит. Из-за его универсальности часто невозможно понять что там вообще относится к делу, а что нет. Точно совершенно можно сделать лучше.

Ewgeny7 28th July 2011 19:40

Т80 вылизан по самое не горюй. В нем уже все команды работают корректно.
Что там творится в прочих реализациях на Верилоге - точно не известно.

krotan 1st August 2011 16:24

Вся Амига 1200 со всеми потрохами в одном чипе уже есть http://opencores.org/project,aoocs , а ведь это более сложная система, чем спек...

balu_dark 1st August 2011 22:20

Вообще-то - это А1000 - самая первая амига с OCS чипсетом. до А1200 этому проекту весьма далековато...

krotan 2nd August 2011 16:09

Спасибо. А звуковая часть у A1000 и A1200 одинаковая? Я к тому, чтобы ее оттуда выдернуть и использовать со спеком?

tnt23 2nd August 2011 17:49

krotan, проще спек припаять сбоку к амиге - получится как раз Sega Megadrive.

Mick 2nd August 2011 19:56

Народ как реализовать выборку сигнала DOS для того чтобы в окно TR DOS залезть. У меня он пролетает. Если на дискретах можно было кондерчиком подзадержать, а тут как. Сегодня полдня голову ломал, решил пока отдохнуть. Я делаю прошлогодний проект - второго феникса. Там применены CPLDшки EPM7032. Пишется на языке подобном AHDL. Вобщем поскажите неразумному.

ZEK 2nd August 2011 20:01

в каком смысле пролетает?
ты должен дос устанавливать по логике
ROMS = 1 A[15:8]=3D M1=0 MREQ=0
сброс
A[15:14] != 0 M1=0 MREQ=0

а задержки сигналов делают сдвиговым регистром

Mick 2nd August 2011 20:05

Quote:

Originally Posted by ZEK (Post 404364)
в каком смысле пролетает?
ты должен дос устанавливать по логике
ROMS = 1 A[15:8]=3D M1=0 MREQ=0
сброс
A[15:14] != 0 M1=0 MREQ=0

Ну да в теории это так, а на практике - пролетаем мимо ПЗУ TRDOS а летим в васик 48. У меня такое уже бвло на первом Фениксе, только там ставили кондерчики чтобы этих иголок не было. А тут из CPLDшки выходит только сигнал DOS :)

Keeper 2nd August 2011 20:13

А синхронизирован сигнал DOS с клоком CPU?

Mick 2nd August 2011 20:15

Quote:

Originally Posted by Keeper (Post 404371)
А синхронизирован сигнал DOS с клоком CPU?

Каким образом?

Ewgeny7 2nd August 2011 20:21

Вот фрагмент относительно DOS от старой реализации Скорпа:

Code:

process(clock,res_n,dos_win,ramm1,nmi_n)
begin
        if (clock'event and clock = '1') then
                if (res_n = '0') then
                        dos <= '0';
                else
                        if (ramm1 = '1') then
                                dos <= not(nmi_n);
                        end if;
                        if (dos_win = '1') then
                                dos <= '1';
                        end if;
                end if;
        end if;
end process;

ramm1 <= '1' when (m1_n = '0' and rom_sel = '0' and rd_n = '0' and mreq_n = '0') else '0';
dos_win <= '1' when (cpu_a_bus(13 downto 8) = "111101" and m1_n = '0' and p_7ffd(4) = '1' and rom_sel = '1') else '0';


Mick 2nd August 2011 20:23

Quote:

Originally Posted by Ewgeny7 (Post 404378)
process(clock,res_n,dos_win,ramm1,nmi_n)

Пока Verilog и VHDL не обучен. Мне попроще бы. :)

Keeper 2nd August 2011 20:30

Нужно сигнал /DOS завести на вход D триггера, на вход C триггера подать CLK Z80 или 14 МГц, главное тут учесть что если Z80 работает по заднему фронту CLK то /DOS нужно защелкивать по переднему.

ZEK 2nd August 2011 20:30

Quote:

Originally Posted by Mick (Post 404366)
олетаем мимо ПЗУ TRDOS а летим в васик 48

а можно AHDL кусок, ток непосредственно логики DOS, а то в нем туго очень колупаться, наверное замешано что то лишнее или сигнал фиксируется тригером не поздно

Mick 2nd August 2011 20:36

Quote:

Originally Posted by ZEK (Post 404384)
а можно AHDL кусок, ток непосредственно логики DOS, а то в нем туго очень колупаться, наверное замешано что то лишнее или сигнал фиксируется тригером не поздно

Просьба не пинать сильно, я описал кусок схемы из фени.
A45 - это A[15,14]

Code:

        %============== Формирователь сигнала выбора кода инструкции из памяти ================%
        SEL_CODE = M1 # MREQ;

        %============== Формирователь сигнала выбора окна ПЗУ =================================%
        SEL_3DXX = !(ADDR[8] & !ADDR9 & ADDR[10] & ADDR[11] & ADDR[12] & ADDR[13] & ROM128 & A45 & !SEL_CODE);

        %================ Формирователь сигнала NMI ============================================%
        NMI_REG.d    = MAGIC;
        NMI_REG.clrn = VCC;
        NMI_REG.clk  = SEL_CODE;
        NMI_REG.prn  = SEL_3DXX;
   
        NMI = NMI_REG.q;

        %===================== Формирователь сигнала DOS =========================================%
        DOS_REG.d    = VCC;
        DOS_REG.clrn = RES & (SEL_CODE # A45);
        DOS_REG.clk  = VCC;
        DOS_REG.prn  = SEL_3DXX & NMI_REG.q;
   
        DOS = !DOS_REG.q;


Keeper 2nd August 2011 20:47

Как-то так...
Code:

DOSRG = !DOS_REG.q;       

DOS_SYNC.d    = DOSRG ;
DOS_SYNC.clrn = VCC;
DOS_SYNC.clk  = F14; или Z80 CLK
DOS_SYNC.prn  = VCC;

DOS = DOS_SYNC.q;


Mick 2nd August 2011 21:09

Quote:

Originally Posted by Keeper (Post 404389)
Как-то так...

Спасибо, попробую этот вариант - может заработает.

MV1971 2nd August 2011 22:02

Quote:

Originally Posted by Mick (Post 404399)
Спасибо, попробую этот вариант - может заработает.

Вы лучше вместо D-триггера в режиме асинхронного SR-триггера используйте синхронный SR-триггер.
На CLK - частоту проца, на S и R логику включения и выключения.

Mick 2nd August 2011 22:07

Quote:

Originally Posted by MV1971 (Post 404422)
Вы лучше вместо D-триггера в режиме асинхронного SR-триггера используйте синхронный SR-триггер.
На CLK - частоту проца, на S и R логику включения и выключения.

Это типа примитива SRFF вместо DFF. Я так понял.

Code:

       

        %===================== Формирователь сигнала DOS =========================================%
        DOS_REG.clrn    = VCC;
        DOS_REG.prn    = VCC;

        DOS_REG.r = RES & (SEL_CODE # A45);
        DOS_REG.clk  = CLK;
        DOS_REG.s  = SEL_3DXX & NMI_REG.q;
   
        DOS = !DOS_REG.q;


MV1971 2nd August 2011 22:09

Quote:

Originally Posted by Mick (Post 404426)
Это типа примитива SRFF вместо DFF. Я так понял.

Да, да, именно так.

Mick 3rd August 2011 21:38

Quote:

Originally Posted by Keeper (Post 404389)
Как-то так...

Попробовал твой вариант - не помогло.

---------- Post added at 20:38 ---------- Previous post was at 20:36 ----------

Quote:

Originally Posted by MV1971 (Post 404427)
Да, да, именно так.

А твой помог. Вот мож кому пригодится - рабочий код.
Code:

        %============== Формирователь сигнала выбора кода инструкции из памяти ================%
        SEL_CODE = M1 # MREQ;

        %============== Формирователь сигнала выбора окна ПЗУ =================================%
    SEL_3DXX = !(ADDR[8] & !ADDR[9] & ADDR[10] & ADDR[11] & ADDR[12] & ADDR[13] & ROM128 & A45 & !SEL_CODE);

        %================ Формирователь сигнала NMI ============================================%
        NMI_REG.d    = MAGIC;  %A45 # MAGIC;%
        NMI_REG.clrn = VCC;
        NMI_REG.clk  = SEL_CODE;
        NMI_REG.prn  = SEL_3DXX;
   
        NMI = NMI_REG.q;

        %===================== Формирователь сигнала DOS =========================================%

        DOS_REG.clrn    = VCC;
        DOS_REG.prn    = VCC;
        DOS_REG.s = !(RES & (SEL_CODE # A45));
        DOS_REG.clk  = !CLKZ;
        DOS_REG.r  = !(SEL_3DXX & NMI_REG.q);
   
        DOS = DOS_REG.q;


krotan 9th August 2011 16:02

А такое никто не пробовал? LabVIEW_FPGA

Mick 9th August 2011 21:51

Кстати еще один глючок нашел при отладки фени. Прерывания временами шли с удвоенной частотой. Я и так и сяк думал как же так, когда по формуле чито должен идти с нормальной частотой. Полез в файл отчета при компиляции. А там это чудо программной мысли(MAX PLUS II) сгенерил мне примитивы EXP, а в литературе пишут, что это глючные примитивы. Вот формулы запихал в примитив LCELL. Вуаля прерывания стали идти с нормальной частотой. Так что при компиляции заглядывайте в файл отчета что там он наделал.

Mick 10th August 2011 20:17

Опять я с тупым вопросом. Пытаюсь читать из AY, а он судя по осцилу пытается писать, линии BDIR и BC1 активны.
Вод код, может я ошибся - в упор смотрю и не вижу.

Code:

        %============== Формирователь сигнала разрешения доступа к портам AY ============%
            BC1 = !CSFD & ADDR14 & ADDR15; 
            BDIR = !CSFD & !WR & ADDR15;


lisica 10th August 2011 21:03

Дело не в bc1 и bdir

Надо ещё вывести данные на шину
DATi <=(Dat AY) when (a_bus(15 downto 0) = X"FFFD" and cpu_iorq_n='0' and cpu_m1_n = '1' ) else "11111111"

Mick 10th August 2011 21:21

Quote:

Originally Posted by lisica (Post 406885)
Дело не в bc1 и bdir

Надо ещё вывести данные на шину
DATi <=(Dat AY) when (a_bus(15 downto 0) = X"FFFD" and cpu_iorq_n='0' and cpu_m1_n = '1' ) else "11111111"

У меня CSFD уже включает в себя и IORQ и M1 и младшие адреса.

lisica 10th August 2011 21:31

Quote:

Originally Posted by Mick (Post 406891)
У меня CSFD уже включает в себя и IORQ и M1 и младшие адреса.

Ну так сотри.
Я пример привёл... Его надо вставить в процесс, где у тебя выставляются данные с чего либо.

---------- Post added at 19:31 ---------- Previous post was at 19:26 ----------

Запиши - DATi <=(Dat AY) when (a_bus(15 downto 8) = X"FF" and CSFD = '1' ) else ........
Только не говори, что csfd у тебя активно = '0'. Сам исправишь, это опять пример.

Mick 10th August 2011 21:33

Quote:

Originally Posted by lisica (Post 406892)
....
Только не говори, что csfd у тебя активно = '0'. Сам исправишь, это опять пример.

Ага, CSFD активный 0. Дело в том что в AY то пишет данные, музыка то играет.

lisica 10th August 2011 21:43

Quote:

Originally Posted by Mick (Post 406894)
Дело в том что в AY то пишет данные, музыка то играет.

Ну и что, они не считаются, пока не пропишешь в данные.
AY их выдаёт, но надо провести их на шд процессора.

---------- Post added at 19:43 ---------- Previous post was at 19:42 ----------

Забеги ко мне в аську

Keeper 10th August 2011 21:49

Quote:

Originally Posted by lisica (Post 406897)
AY их выдаёт, но надо провести их на шд процессора.

У Mick`a настоящий AY и настоящий Z80, ИМХО ШД проведена от Z80 и до AY...

lisica 10th August 2011 21:57

Quote:

Originally Posted by Keeper (Post 406900)
У Mick`a настоящий AY и настоящий Z80, ИМХО ШД проведена от Z80 и до AY...

Гыыыыы, не знал, сорри.
Тогда пусть попробуй как в реверсе
bc1 <= '1' when (nM1 = '1' and nIORQ = '0' and A(15 downto 14) = "11" and A(1 downto 0) = "01") else '0';
bdir <= '1' when (nM1 = '1' and nIORQ = '0' and nWR = '0' and A(15) = '1' and A(1 downto 0) = "01") else '0';

И без CSFD, а там посмотрим.

Mick 10th August 2011 22:01

Quote:

Originally Posted by lisica (Post 406897)
Ну и что, они не считаются, пока не пропишешь в данные.
AY их выдаёт, но надо провести их на шд процессора.
Забеги ко мне в аську

Аська пока недоступна (прогу снес).

Я чисто промоделировал дешифратор то что у меня на схеме обработчик порта xxFD.
Для полной ясности вот весь код.

Code:

        %============ Формирователь сигнала разрешения доступа к портам ввода-вывода =========%
        ENABLE_IO = !M1 # IORQ # IORQGE;

        %============ Формирователь сигнала разрешения доступа к портам FXh =================%

        ENABLE_FX = !(ADDR[7] & ADDR[6] & ADDR[5] & ADDR[4]) # ENABLE_IO;

        %============= Формирователь сигнала разрешения доступа к портам FDh ================%

        CSFD = !ADDR[3] # !ADDR[2] # ADDR[1] # !ADDR[0] # ENABLE_FX;

        %============== Формирователь сигнала разрешения доступа к портам AY ============%
            BC1 = !CSFD & ADDR14 & ADDR15; 
            BDIR = !CSFD & !WR & ADDR15;

По логике BDIR возникать должен только при записи. А у меня и при чтении.
Естетсвенно он ничего не делает в этом случае и считывает FF с шины.

У меня не проблема довести данные до шины данных ЦП. Проблема в возникновении активного BDIR при чтении.


All times are GMT +4. The time now is 06:42.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.