1
0
mirror of synced 2026-02-08 01:02:11 +00:00
Files
lisper.cpus-pdp8/verif/test_rf.v
2010-04-11 10:31:43 +00:00

181 lines
3.1 KiB
Verilog

// run_rf.v
// testing top end for pdp8_rf.v
//
`include "../rtl/pdp8_rf.v"
`include "../rtl/ide_disk.v"
`include "../rtl/ide.v"
`include "../rtl/ram_256x12.v"
`include "../verif/fake_ide.v"
`timescale 1ns / 1ns
module test;
reg clk, reset;
wire [11:0] io_data_out;
wire io_data_avail;
wire io_interrupt;
wire io_skip;
wire ram_read_req;
wire ram_write_req;
reg ram_done;
wire [14:0] ram_ma;
wire [11:0] ram_out;
reg [11:0] ram_in;
reg [5:0] io_select;
reg [11:0] io_data_in;
reg iot;
reg [3:0] state;
reg [11:0] mb_in;
wire ide_dior;
wire ide_diow;
wire [1:0] ide_cs;
wire [2:0] ide_da;
wire [15:0] ide_data_bus;
fake_ide ide(.ide_dior(ide_dior),
.ide_diow(ide_diow),
.ide_cs(ide_cs),
.ide_da(ide_da),
.ide_data_bus(ide_data_bus));
pdp8_rf rf(.clk(clk),
.reset(reset),
.iot(iot),
.state(state),
.mb(mb_in),
.io_data_in(io_data_in),
.io_data_out(io_data_out),
.io_select(io_select),
.io_data_avail(io_data_avail),
.io_interrupt(io_interrupt),
.io_skip(io_skip),
.ram_read_req(ram_read_req),
.ram_write_req(ram_write_req),
.ram_done(ram_done),
.ram_ma(ram_ma),
.ram_in(ram_in),
.ram_out(ram_out),
.ide_dior(ide_dior),
.ide_diow(ide_diow),
.ide_cs(ide_cs),
.ide_da(ide_da),
.ide_data_bus(ide_data_bus));
//
task write_rf_reg;
input [11:0] isn;
input [11:0] data;
begin
@(posedge clk);
begin
state = 4'h0;
mb_in = isn;
io_select = isn[8:3];
io_data_in = data;
iot = 1;
end
#20 state = 4'h1;
#20 state = 4'h2;
#20 state = 4'h3;
#20 begin
state = 4'h0;
iot = 0;
end
end
endtask
//
task read_rf_reg;
input [11:0] isn;
output [11:0] data;
begin
@(posedge clk);
begin
state = 4'h0;
mb_in = isn;
io_select = isn[8:3];
io_data_in = 0;
iot = 1;
end
#20 state = 4'h1;
#20 begin
data = io_data_out;
state = 4'h2;
end
#20 state = 4'h3;
#20 begin
state = 4'h0;
iot = 0;
end
end
endtask
initial
begin
$timeformat(-9, 0, "ns", 7);
$dumpfile("pdp8_rf.vcd");
$dumpvars(0, test.rf);
end
reg [11:0] data;
initial
begin
clk = 0;
reset = 0;
ram_done = 1;
ram_in = 0;
#1 begin
reset = 1;
end
#50 begin
reset = 0;
end
write_rf_reg(12'o6000, 12'o0000);
write_rf_reg(12'o6601, 12'o0000);
write_rf_reg(12'o6611, 12'o0000);
write_rf_reg(12'o6615, 12'o0000);
write_rf_reg(12'o6641, 12'o0000);
write_rf_reg(12'o6643, 12'o0000);
read_rf_reg(12'o6616, data);
write_rf_reg(12'o6603, 12'o0000); // DMAR
write_rf_reg(12'o6000, 12'o0000);
write_rf_reg(12'o6000, 12'o0000);
#40000 $finish;
end
always
begin
#10 clk = 0;
#10 clk = 1;
end
//----
integer cycle;
initial
cycle = 0;
always @(posedge rf.clk)
begin
cycle = cycle + 1;
end
endmodule