Очень низкоуровневый эмулятор 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 [ 4.84 КБ | Просмотров: 15586 ]
resp.png [ 5.17 КБ | Просмотров: 15586 ]
|
|
17 ноя 2014, 21:17 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 571
|
Загнал в кактус текущий проект, что-то скомпилировалось, сразу без ошибок и синтезировалось.
Результаты меня вполне устраивают. Есть и латчи и тристейты, всё как положено. Так что я пока на edge переходить не буду, просто переведу все схемы как есть, а потом видно будет.
Вложения:
InterruptControl_RTL.png [ 58.38 КБ | Просмотров: 15581 ]
Core6502_RTL.png [ 18.85 КБ | Просмотров: 15581 ]
|
|
17 ноя 2014, 21:56 |
|
Зарегистрирован: 05 ноя 2014, 23:03 Сообщения: 29
|
То, что проект может синтезироваться, еще не означает, что он будет работать без глюков Я попробую сразу edge. Вообще, что есть икарус? Платформа для стендэлон тестбенчей под верилог?
|
|
17 ноя 2014, 22:00 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 571
|
В икарусе есть встроенный симулятор через командную строку + оно умеет EDIF синтезировать (и др. форматы).
|
|
17 ноя 2014, 22:36 |
|
Зарегистрирован: 05 ноя 2014, 23:03 Сообщения: 29
|
Так, попробую осилить декодер сегодня, на основе твоей схемы. Если найдешь когда-нибудь потом в схеме косяки - выкладывай сюда
|
|
17 ноя 2014, 23:01 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 571
|
Не вопрос. К ошибкам схемы относись с пониманием) Я считаю что первоочередная задача - это реализовать "вычислительную мощность", то есть заполнить схему / верилог до конца. А ошибки они всегда есть. Хорошо что они находятся достаточно быстро, потому что логическая схема сама подсказывает где искать, начиная работать "нелогично".
|
|
18 ноя 2014, 00:44 |
|
Зарегистрирован: 05 ноя 2014, 23:03 Сообщения: 29
|
В общем, насчет осилить сегодня - это я круто переоценил свои силы Прогресс 45\130.
|
|
18 ноя 2014, 00:44 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 571
|
Закачал: - InstructionRegister - Predecode - XYSRegs + комментарии к контрольным сигналам https://code.google.com/p/breaks/source ... MOS_6502.v
|
|
18 ноя 2014, 15:45 |
|
Зарегистрирован: 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 потерялся. Да не где то, а в декларации модуля resp должен быть reg вместо wire, конечно же. Вообще при любом использовании блока always в левой части операторов присваивания должен быть reg, даже если строишь комбинаторную логику.
|
|
18 ноя 2014, 17:00 |
|
Зарегистрирован: 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 писал(а): В общем, насчет осилить сегодня - это я круто переоценил свои силы Прогресс 45\130. 100\130.
|
|
19 ноя 2014, 01:25 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 571
|
Перевёл на верилог 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 [ 23.16 КБ | Просмотров: 15514 ]
|
|
19 ноя 2014, 23:58 |
|
Зарегистрирован: 05 ноя 2014, 23:03 Сообщения: 29
|
130\130 https://drive.google.com/file/d/0ByTdMT ... sp=sharing Адовая работенка, конечно. Страшно становится, когда представляю, как ты делал саму схему с топологии чипа. Дальше, видимо, буду продолжать изучать работу по твоей схеме. Что-то мне подсказывает, что можно легко совместить предекод и буфер опкода (instruction register). Также очень странно, что brk не считается implied командой.
|
|
20 ноя 2014, 00:39 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 571
|
Цитата: 130\130 Гуд, я это сделаю автоматом, с помощью утилиты, которая перегонит мне транзисторную маску в логику) Потом сверимся) Цитата: Страшно становится, когда представляю, как ты делал саму схему с топологии чипа. Схему топологии я перепроверял три раза. И транзисторную маску столько же. Если посмотришь исходники декодера: 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 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 571
|
Я так и подумал вначале) Но всё таки сделаю через assign, ибо мне так нагляднее проецировать верилог на оригинальную реализацию того что было в 6502. Моя версия тут : https://code.google.com/p/breaks/source ... MOS_6502.v
|
|
23 ноя 2014, 02:42 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 571
|
Перегнал в верилог флаги и шины. Очень интересно было как квартус справится с таким заданием, и похоже у него это получилось) Я пробежался по полученной синтезатором схеме и не нашёл явных косяков.
|
|
24 ноя 2014, 01:08 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 571
|
+ Dispatcher + Program Counter https://code.google.com/p/breaks/source ... MOS_6502.vОсталась рандомная логика.
|
|
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|