1
0
mirror of synced 2026-01-21 10:13:00 +00:00
2009-05-10 23:51:20 +00:00

128 lines
2.4 KiB
Verilog

// run.v
// testing top end for pdp8.v
//
`include "pdp8.v"
`include "pdp8_io.v"
`include "pdp8_ram.v"
`timescale 1ns / 1ns
module test;
reg clk, reset;
reg [11:0] switches;
wire [11:0] ram_data_in;
wire ram_rd;
wire ram_wr;
wire [11:0] ram_data_out;
wire [14:0] ram_addr;
wire [11:0] io_data_in;
wire [11:0] io_data_out;
wire [11:0] io_addr;
wire io_data_avail;
wire io_interrupt;
wire io_skip;
wire [5:0] io_select;
wire iot;
wire [3:0] state;
wire [11:0] mb;
pdp8 cpu(.clk(clk),
.reset(reset),
.ram_addr(ram_addr),
.ram_data_in(ram_data_out),
.ram_data_out(ram_data_in),
.ram_rd(ram_rd),
.ram_wr(ram_wr),
.state(state),
.io_select(io_select),
.io_data_in(io_data_in),
.io_data_out(io_data_out),
.io_data_avail(io_data_avail),
.io_interrupt(io_interrupt),
.io_skip(io_skip),
.iot(iot),
.mb(mb),
.switches(switches));
pdp8_io io(.clk(clk),
.reset(reset),
.iot(iot),
.state(state),
.mb(mb),
.io_data_in(io_data_out),
.io_data_out(io_data_in),
.io_select(io_select),
.io_data_avail(io_data_avail),
.io_interrupt(io_interrupt),
.io_skip(io_skip));
pdp8_ram ram(.clk(clk),
.reset(reset),
.addr(ram_addr),
.data_in(ram_data_in),
.data_out(ram_data_out),
.rd(ram_rd),
.wr(ram_wr));
initial
begin
$timeformat(-9, 0, "ns", 7);
$dumpfile("pdp8.vcd");
$dumpvars(0, test.cpu);
end
initial
begin
clk = 0;
reset = 0;
#1 begin
reset = 1;
end
#50 begin
reset = 0;
end
#3000000 $finish;
end
always
begin
#10 clk = 0;
#10 clk = 1;
end
//----
integer cycle;
initial
cycle = 0;
always @(posedge cpu.clk)
if (cpu.state == 4'b0000)
begin
cycle = cycle + 1;
// #1 $display("#%d, r%b s%d, pc %o ir%o ma %o mb %o j%b l%b ac %o, i%b/%b",
// cycle, cpu.run, cpu.state, cpu.pc,
// cpu.ir, cpu.ma, cpu.mb, cpu.jmp, cpu.l, cpu.ac,
// cpu.interrupt_enable, cpu.interrupt);
//#1 $display(" io_data_in %o, io_data_out %o",
//io_data_in, io_data_out);
#1 $display("pc %o ir %o l %b ac %o ion %o",
cpu.pc, cpu.mb, cpu.l, cpu.ac, cpu.interrupt_enable);
if (state == 4'b1100)
$finish;
end
endmodule