Форум Эму-Россия http://forum.emu-russia.net/ |
|
Очень низкоуровневый эмулятор 6502 / NES http://forum.emu-russia.net/viewtopic.php?f=13&t=3938 |
Страница 18 из 21 |
Автор: | tfwbbt [ 17 ноя 2014, 19:24 ] | |||
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES | |||
Посмотрел 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 и квартус выдаст предупреждение), то все будет ок.
|
Автор: | tfwbbt [ 17 ноя 2014, 21:56 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
То, что проект может синтезироваться, еще не означает, что он будет работать без глюков Я попробую сразу edge. Вообще, что есть икарус? Платформа для стендэлон тестбенчей под верилог? |
Автор: | org [ 17 ноя 2014, 22:00 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
В икарусе есть встроенный симулятор через командную строку + оно умеет EDIF синтезировать (и др. форматы). |
Автор: | tfwbbt [ 17 ноя 2014, 22:36 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
Так, попробую осилить декодер сегодня, на основе твоей схемы. Если найдешь когда-нибудь потом в схеме косяки - выкладывай сюда |
Автор: | org [ 17 ноя 2014, 23:01 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
Не вопрос. К ошибкам схемы относись с пониманием) Я считаю что первоочередная задача - это реализовать "вычислительную мощность", то есть заполнить схему / верилог до конца. А ошибки они всегда есть. Хорошо что они находятся достаточно быстро, потому что логическая схема сама подсказывает где искать, начиная работать "нелогично". |
Автор: | tfwbbt [ 18 ноя 2014, 00:44 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
В общем, насчет осилить сегодня - это я круто переоценил свои силы Прогресс 45\130. |
Автор: | org [ 18 ноя 2014, 00:44 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
Закачал: - InstructionRegister - Predecode - XYSRegs + комментарии к контрольным сигналам https://code.google.com/p/breaks/source ... MOS_6502.v |
Автор: | qb60 [ 18 ноя 2014, 15:45 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
tfwbbt писал(а): input wire nRes; output wire resp; input wire phi0; always @(negegde phi0) begin resp <= ~nRes; end Где-то reg потерялся. |
Автор: | tfwbbt [ 18 ноя 2014, 16:02 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
qb60 писал(а): tfwbbt писал(а): input wire nRes; output wire resp; input wire phi0; always @(negegde phi0) begin resp <= ~nRes; end Где-то reg потерялся. Да не где то, а в декларации модуля resp должен быть reg вместо wire, конечно же. Вообще при любом использовании блока always в левой части операторов присваивания должен быть reg, даже если строишь комбинаторную логику. |
Автор: | qb60 [ 18 ноя 2014, 17:00 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
tfwbbt писал(а): Вообще, что есть икарус? Платформа для стендэлон тестбенчей под верилог? Полтора года назад начинал в нём симулировать (и проверять) логические схемы org'а (ещё CircuitLab'овские), похожим подходом, и сравнивал с Visual6502. Находил ошибку даже.) Примерно вот так. Там удобно через командную строку просимулировать модуль и тестбенч, перегнать всё в waveform'ы и открыть в прожке для их просмотра. Spoiler: показать |
Автор: | tfwbbt [ 18 ноя 2014, 17:10 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
Ясненько. Вообще я планировал осваивать modelsim. Если с ним по каким-то причинам не получится, то, видимо, буду осваивать уже икарус. |
Автор: | tfwbbt [ 19 ноя 2014, 00:22 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
tfwbbt писал(а): В общем, насчет осилить сегодня - это я круто переоценил свои силы Прогресс 45\130. 100\130. |
Автор: | org [ 19 ноя 2014, 01:25 ] | ||
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES | ||
Перевёл на верилог 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
|
Автор: | tfwbbt [ 19 ноя 2014, 23:58 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
130\130 https://drive.google.com/file/d/0ByTdMT ... sp=sharing Адовая работенка, конечно. Страшно становится, когда представляю, как ты делал саму схему с топологии чипа. Дальше, видимо, буду продолжать изучать работу по твоей схеме. Что-то мне подсказывает, что можно легко совместить предекод и буфер опкода (instruction register). Также очень странно, что brk не считается implied командой. |
Автор: | org [ 20 ноя 2014, 00:39 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
Цитата: 130\130 Гуд, я это сделаю автоматом, с помощью утилиты, которая перегонит мне транзисторную маску в логику) Потом сверимся) Цитата: Страшно становится, когда представляю, как ты делал саму схему с топологии чипа. Схему топологии я перепроверял три раза. И транзисторную маску столько же. Если посмотришь исходники декодера: view-source:http://breaknes.com/files/6502/decoder.htm То там можно найти эту самую маску. Если ты делаешь комбинаторику, то нет необходимости выход держать в регистре. Можно через assign назначить выходы для wire [129:0] D. BRK не implied, может быть потому что она инициирует специальную BRK-последовательность, то есть обработку прерываний. |
Автор: | tfwbbt [ 20 ноя 2014, 10:10 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
Цитата: Если ты делаешь комбинаторику, то нет необходимости выход держать в регистре. Можно через 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% комбинаторная логика. |
Автор: | org [ 21 ноя 2014, 01:27 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
Я так и подумал вначале) Но всё таки сделаю через assign, ибо мне так нагляднее проецировать верилог на оригинальную реализацию того что было в 6502. Моя версия тут : https://code.google.com/p/breaks/source ... MOS_6502.v |
Автор: | org [ 23 ноя 2014, 02:42 ] | ||||
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES | ||||
Перегнал в верилог флаги и шины. Очень интересно было как квартус справится с таким заданием, и похоже у него это получилось) Я пробежался по полученной синтезатором схеме и не нашёл явных косяков.
|
Автор: | org [ 24 ноя 2014, 01:08 ] |
Заголовок сообщения: | Re: Очень низкоуровневый эмулятор 6502 / NES |
+ Dispatcher + Program Counter https://code.google.com/p/breaks/source ... MOS_6502.v Осталась рандомная логика. |
Страница 18 из 21 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |