§ Создание проекта
Начну я делать проект на Verilog. Для этого я сначала делаю testbench, потом пишу процессор и в конце уже синтезирую на реальной схеме. Писать я буду для микросхему MAX10-02DC, а там памяти только 12кб, но сам код для процессора должен быть универсальным. Я попробую его сделать универсальным и подходящим по таймингам настолько, насколько смогу. Шаблон для testbench я возьму с этой страницы.Итак, создаем папку где-нибудь, складываем файлы из шаблона тестбенча. Делать проект буду на своей любимой частоте 25 МГц и поэтому придется для этого использовать модуль PLL. Но вообще пока что это не требуется, потому что всё будет выполняться в данный момент именно на симуляторе verilog.
§ Модуль процессора
Создам первый шаблон1module nes6502( 2 3 input wire clock, 4 output wire [15:0] address, 5 input wire [ 7:0] data, 6 output reg [ 7:0] out, 7 output reg rd, 8 output reg we 9); 10 11endmodule
- clock будет тактироваться от 25 мгц, но хотя надо 3.5 мгц
- address принимает 64кб, но в реальной схеме у меня только 12кб (или 46кб для ПЛИС Cyclone 3 марсохода)
- data входящие данные из памяти
- out исходящие данные для записи в память
- rd сигнал на чтение данных операнда из памяти, это нужно для PPU для Денди
- we запись в память (write enabled)
1// Регистры процессора 2reg [ 7:0] A; reg [ 7:0] X; reg [ 7:0] Y; 3reg [ 7:0] P; reg [ 7:0] S; reg [15:0] pc = 16'h0000;Теперь очень важный момент такой, что иногда указатель в память бывает либо с регистра PC, текущего счетчика адреса, либо с некоторого курсора, который извлекает операнд
1assign address = bus ? cursor : pc; // Выбор источника памяти 2 3reg bus = 0; 4reg [15:0] cursor;Если bus=0, то указателем в память будет PC, а если bus=1, то регистр cursor.
§ Подключение nes6502 в tb
Теперь надо подключить этот модуль в тестбенч, для этого надо написать следующее объявление в tb.v:1wire [15:0] address; 2reg [ 7:0] data_in; 3wire [ 7:0] data_out; 4wire read; 5wire write; 6 7nes6502 NesMeow( 8 9 .clock (clk25), 10 .address(address), 11 .data (data_in), 12 .out (data_out), 13 .rd (read), 14 .we (write) 15);А также не забыть указать в makefile новый файл
iverilog -g2005-sv -DICARUS=1 -o tb.qqq tb.v nes6502.v
§ Отладка
Для отладки надо сначала запустить сгенерированный vcd файл через командуgtkwave tb.vcd
и получится окно.В этом окне я обычно выбираю слева все провода и нажимаю Append, получая систему сигналов
Но тут пока что не на что смотреть, кроме тактовых сигналов.