Сообщения без ответов | Активные темы Текущее время: 29 мар 2024, 03:44



Ответить на тему  [ Сообщений: 411 ]  На страницу Пред.  1 ... 15, 16, 17, 18, 19, 20, 21  След.
 Очень низкоуровневый эмулятор 6502 / NES 
Автор Сообщение
Сообщение 17 ноя 2014, 19:24
Профиль
Аватара пользователя

Зарегистрирован:
05 ноя 2014, 23:03
Сообщения: 29
Посмотрел interrupt control на верилог, который тоже разбирал с точки зрения переделки на ПЛИС неделю назад.
Как и предполагал, с точки зрения дебага - это ад.
Очень многие вещи упрощаются, если переосмыслить схемы с позиции использования синхронной логики, из-за того что большая часть хитрого обвеса латчей с обратными связями как раз и созданы для того, чтобы приблизить их работу к работе DFF.
Для сравнения - схема на латчах и то, к чему я пришел после анализа работы.
Ну и описание совсем примитивное:

input wire nRes;
output wire resp;
input wire phi0;

always @(negegde phi0) begin
resp <= ~nRes;
end

-- 17 Nov 2014, 18:29 --

HardWareMan писал(а):
tfwbbt писал(а):
Они и так будут срабатывать одновременно. Простая логика в плис - условно бесплатные операции с точки зрения потраченного на них времени.

Это если фиттер тебя уважает. Если нет (а он никого не уважает) - то иголок у тебя будет мама не горюй. Декодер на комбинаторной логике в оригинале, поэтому он должен быть таким и в плисине, за исключением требования синхронизации данных сигналов относительно друг друга.

Если не использовать их и производные от них как clk вход у DFF (что вообще говоря является bad practice и квартус выдаст предупреждение), то все будет ок.


Вложения:
resp1.png
resp1.png [ 4.84 КБ | Просмотров: 13847 ]
resp.png
resp.png [ 5.17 КБ | Просмотров: 13847 ]
Сообщение 17 ноя 2014, 21:17
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Загнал в кактус текущий проект, что-то скомпилировалось, сразу без ошибок и синтезировалось.

Результаты меня вполне устраивают. Есть и латчи и тристейты, всё как положено. Так что я пока на edge переходить не буду, просто переведу все схемы как есть, а потом видно будет.


Вложения:
InterruptControl_RTL.png
InterruptControl_RTL.png [ 58.38 КБ | Просмотров: 13842 ]
Core6502_RTL.png
Core6502_RTL.png [ 18.85 КБ | Просмотров: 13842 ]
Сообщение 17 ноя 2014, 21:56
Профиль
Аватара пользователя

Зарегистрирован:
05 ноя 2014, 23:03
Сообщения: 29
То, что проект может синтезироваться, еще не означает, что он будет работать без глюков :)

Я попробую сразу edge.

Вообще, что есть икарус? Платформа для стендэлон тестбенчей под верилог?


Сообщение 17 ноя 2014, 22:00
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
В икарусе есть встроенный симулятор через командную строку + оно умеет EDIF синтезировать (и др. форматы).


Сообщение 17 ноя 2014, 22:36
Профиль
Аватара пользователя

Зарегистрирован:
05 ноя 2014, 23:03
Сообщения: 29
Так, попробую осилить декодер сегодня, на основе твоей схемы.
Если найдешь когда-нибудь потом в схеме косяки - выкладывай сюда ^_^


Сообщение 17 ноя 2014, 23:01
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Не вопрос. К ошибкам схемы относись с пониманием) Я считаю что первоочередная задача - это реализовать "вычислительную мощность", то есть заполнить схему / верилог до конца. А ошибки они всегда есть. Хорошо что они находятся достаточно быстро, потому что логическая схема сама подсказывает где искать, начиная работать "нелогично".


Сообщение 18 ноя 2014, 00:44
Профиль
Аватара пользователя

Зарегистрирован:
05 ноя 2014, 23:03
Сообщения: 29
В общем, насчет осилить сегодня - это я круто переоценил свои силы :D
Прогресс 45\130.


Сообщение 18 ноя 2014, 00:44
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Закачал:
- InstructionRegister
- Predecode
- XYSRegs
+ комментарии к контрольным сигналам

https://code.google.com/p/breaks/source ... MOS_6502.v


Сообщение 18 ноя 2014, 15:45
Профиль ICQ
Аватара пользователя

Зарегистрирован:
28 дек 2012, 05:58
Сообщения: 19
Откуда: Курган
tfwbbt писал(а):
input wire nRes;
output wire resp;
input wire phi0;

always @(negegde phi0) begin
resp <= ~nRes;
end


Где-то reg потерялся.


Сообщение 18 ноя 2014, 16:02
Профиль
Аватара пользователя

Зарегистрирован:
05 ноя 2014, 23:03
Сообщения: 29
qb60 писал(а):
tfwbbt писал(а):
input wire nRes;
output wire resp;
input wire phi0;

always @(negegde phi0) begin
resp <= ~nRes;
end


Где-то reg потерялся.

Да не где то, а в декларации модуля :blush:
resp должен быть reg вместо wire, конечно же.
Вообще при любом использовании блока always в левой части операторов присваивания должен быть reg, даже если строишь комбинаторную логику.


Сообщение 18 ноя 2014, 17:00
Профиль ICQ
Аватара пользователя

Зарегистрирован:
28 дек 2012, 05:58
Сообщения: 19
Откуда: Курган
tfwbbt писал(а):
Вообще, что есть икарус? Платформа для стендэлон тестбенчей под верилог?
Прикольная штука этот икарус.
Полтора года назад начинал в нём симулировать (и проверять) логические схемы org'а (ещё CircuitLab'овские), похожим подходом, и сравнивал с Visual6502. Находил ошибку даже.)
Примерно вот так.

Там удобно через командную строку просимулировать модуль и тестбенч, перегнать всё в waveform'ы и открыть в прожке для их просмотра.


Сообщение 18 ноя 2014, 17:10
Профиль
Аватара пользователя

Зарегистрирован:
05 ноя 2014, 23:03
Сообщения: 29
Ясненько.

Вообще я планировал осваивать modelsim. Если с ним по каким-то причинам не получится, то, видимо, буду осваивать уже икарус.


Сообщение 19 ноя 2014, 00:22
Профиль
Аватара пользователя

Зарегистрирован:
05 ноя 2014, 23:03
Сообщения: 29
tfwbbt писал(а):
В общем, насчет осилить сегодня - это я круто переоценил свои силы :D
Прогресс 45\130.

100\130.


Сообщение 19 ноя 2014, 01:25
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Перевёл на верилог BranchLogic и проверил что кактус там наколбасит.

У него получилось весьма достойно, я впечатлен.

Код:
module BranchLogic (
    // Outputs
    BRFW, _BRTAKEN,
    // Inputs
    PHI0, BR2, DB7, _IR5, _IR6, _IR7, _C_OUT, _V_OUT, _N_OUT, _Z_OUT
);

    input PHI0, BR2, DB7, _IR5, _IR6, _IR7, _C_OUT, _V_OUT, _N_OUT, _Z_OUT;

    output BRFW, _BRTAKEN;

    wire BRFW, _BRTAKEN;

    // Clocks
    wire PHI1, PHI2;
    assign PHI1 = ~PHI0;
    assign PHI2 = PHI0;

    // Branch Forward
    wire BR2Latch_Out, Latch1_Out, Latch2_Out;
    mylatch BR2Latch ( BR2Latch_Out, BR2, PHI2);
    mylatch Latch1 ( Latch1_Out, (~(~DB7 & BR2Latch_Out) & ~(~BR2Latch_Out & Latch2_Out)), PHI1);
    mylatch Latch2 ( Latch2_Out, ~Latch1_Out, PHI2);
    assign BRFW = Latch1_Out;

    // Branch Taken
    wire temp;
    assign temp = ~(
        (_C_OUT | ~_IR6 | _IR7) |
        (_V_OUT | _IR6 | ~_IR7) |
        (_N_OUT | ~_IR6 | ~_IR7) |
        (_Z_OUT | _IR6 | _IR7) );
    assign _BRTAKEN = ~(temp & _IR5) & (temp | _IR5);

endmodule   // BranchLogic


Вложения:
BranchLogic_RTL.png
BranchLogic_RTL.png [ 23.16 КБ | Просмотров: 13775 ]
Сообщение 19 ноя 2014, 23:58
Профиль
Аватара пользователя

Зарегистрирован:
05 ноя 2014, 23:03
Сообщения: 29
130\130 :yahoo:
https://drive.google.com/file/d/0ByTdMT ... sp=sharing
Адовая работенка, конечно. Страшно становится, когда представляю, как ты делал саму схему с топологии чипа.

Дальше, видимо, буду продолжать изучать работу по твоей схеме.
Что-то мне подсказывает, что можно легко совместить предекод и буфер опкода (instruction register).
Также очень странно, что brk не считается implied командой.


Сообщение 20 ноя 2014, 00:39
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Цитата:
130\130 :yahoo:

Гуд, я это сделаю автоматом, с помощью утилиты, которая перегонит мне транзисторную маску в логику) Потом сверимся)

Цитата:
Страшно становится, когда представляю, как ты делал саму схему с топологии чипа.

Схему топологии я перепроверял три раза. И транзисторную маску столько же.

Если посмотришь исходники декодера:
view-source:http://breaknes.com/files/6502/decoder.htm
То там можно найти эту самую маску.

Если ты делаешь комбинаторику, то нет необходимости выход держать в регистре. Можно через assign назначить выходы для wire [129:0] D.

BRK не implied, может быть потому что она инициирует специальную BRK-последовательность, то есть обработку прерываний.


Сообщение 20 ноя 2014, 10:10
Профиль
Аватара пользователя

Зарегистрирован:
05 ноя 2014, 23:03
Сообщения: 29
Цитата:
Если ты делаешь комбинаторику, то нет необходимости выход держать в регистре. Можно через assign назначить выходы для wire [129:0] D.


Понятно :)
Цитата:
При описании выражений внутри поведенческих блоков комбинаторной логики, с правой стороны от знака равенства, как и раньше, можно использовать типы сигналов wire или reg, а вот с левой стороны теперь используется только тип reg:

reg [3:0] c;
always @(a or b or d)
begin
c = <выражение использующее входные сигналы a,b,d>;
end

Обратите внимание, что регистры, которым идет присвоение в таких поведенческих блоках не будут выполнены в виде D-триггеров после синтеза. Это часто вызывает недоумение у начинающих.

отсюда
Можешь посмотреть мой файл декодера в rtl viewer и убедиться - там 100% комбинаторная логика.


Сообщение 21 ноя 2014, 01:27
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Я так и подумал вначале)

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

Моя версия тут : https://code.google.com/p/breaks/source ... MOS_6502.v


Сообщение 23 ноя 2014, 02:42
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Перегнал в верилог флаги и шины. Очень интересно было как квартус справится с таким заданием, и похоже у него это получилось)
Я пробежался по полученной синтезатором схеме и не нашёл явных косяков.


Вложения:
6502_wip1.png
6502_wip1.png [ 71.99 КБ | Просмотров: 13621 ]
FLAGS.png
FLAGS.png [ 51.08 КБ | Просмотров: 13621 ]
BUSES.png
BUSES.png [ 54.53 КБ | Просмотров: 13622 ]
Сообщение 24 ноя 2014, 01:08
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
+ Dispatcher
+ Program Counter

https://code.google.com/p/breaks/source ... MOS_6502.v

Осталась рандомная логика.


Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 411 ]  На страницу Пред.  1 ... 15, 16, 17, 18, 19, 20, 21  След.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


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

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF (mod by Zeru-j).
Русская поддержка phpBB