/*******************************************************************************************/
|
/*******************************************************************************************/
|
/** **/
|
/** **/
|
/** ORIGINAL COPYRIGHT (C) 2011, SYSTEMYDE INTERNATIONAL CORPORATION, ALL RIGHTS RESERVED **/
|
/** ORIGINAL COPYRIGHT (C) 2011, SYSTEMYDE INTERNATIONAL CORPORATION, ALL RIGHTS RESERVED **/
|
/** COPYRIGHT (C) 2012, SERGEY BELYASHOV **/
|
/** COPYRIGHT (C) 2012, SERGEY BELYASHOV **/
|
/** **/
|
/** **/
|
/** Y80 processor test bench Rev 0.0 06/13/2012 **/
|
/** Y80e processor test bench Rev 0.0 06/18/2012 **/
|
/** **/
|
/** **/
|
/*******************************************************************************************/
|
/*******************************************************************************************/
|
`timescale 1ns / 10ps /* set time scale */
|
`timescale 1ns / 10ps /* set time scale */
|
`include "version.v" /* select version */
|
`include "version.v" /* select version */
|
`include "hierarchy.v" /* include sources */
|
`include "hierarchy.v" /* include sources */
|
|
|
module top_levl;
|
module top_levl;
|
|
|
wire DMA_ACK; /* dma acknowledge */
|
wire DMA_ACK; /* dma acknowledge */
|
wire HALT_TRAN; /* halt transaction */
|
wire HALT_TRAN; /* halt transaction */
|
wire IACK_TRAN; /* int ack transaction */
|
wire IACK_TRAN; /* int ack transaction */
|
wire IO_READ; /* i/o read/write status */
|
wire IO_READ; /* i/o read/write status */
|
wire IO_STROBE; /* i/o strobe */
|
wire IO_STROBE; /* i/o strobe */
|
wire IO_TRAN; /* i/o transaction */
|
wire IO_TRAN; /* i/o transaction */
|
wire IVEC_RD; /* int vector read strobe */
|
wire IVEC_RD; /* int vector read strobe */
|
wire MEM_RD; /* mem read strobe */
|
wire MEM_RD; /* mem read strobe */
|
wire MEM_TRAN; /* mem transaction */
|
wire MEM_TRAN; /* mem transaction */
|
wire MEM_WR; /* mem write strobe */
|
wire MEM_WR; /* mem write strobe */
|
wire RETI_TRAN; /* reti transaction */
|
wire RETI_TRAN; /* reti transaction */
|
wire T1; /* first clock of transaction */
|
wire T1; /* first clock of transaction */
|
wire [7:0] IO_DATA_OUT; /* i/o data output bus */
|
wire [7:0] IO_DATA_OUT; /* i/o data output bus */
|
wire [7:0] MEM_DATA_OUT; /* mem data output bus */
|
wire [7:0] MEM_DATA_OUT; /* mem data output bus */
|
wire [15:0] IO_ADDR; /* i/o address bus */
|
wire [15:0] IO_ADDR; /* i/o address bus */
|
wire [15:0] MEM_ADDR; /* mem address bus */
|
wire [15:0] MEM_ADDR; /* mem address bus */
|
|
|
reg CLEARB; /* master (test) reset */
|
reg CLEARB; /* master (test) reset */
|
reg CLKC; /* clock */
|
reg CLKC; /* clock */
|
reg DMA_REQ; /* dma request */
|
reg DMA_REQ; /* dma request */
|
reg INT_REQ; /* interrupt request */
|
reg INT_REQ; /* interrupt request */
|
reg NMI_REQ; /* non-maskable interrupt req */
|
reg NMI_REQ; /* non-maskable interrupt req */
|
reg RESETB; /* internal (user) reset */
|
reg RESETB; /* internal (user) reset */
|
reg WAIT_REQ; /* wait request */
|
reg WAIT_REQ; /* wait request */
|
reg [7:0] IO_DATA_IN; /* i/o data input bus */
|
reg [7:0] IO_DATA_IN; /* i/o data input bus */
|
reg [7:0] IVEC_DATA_IN; /* vector input bus */
|
reg [7:0] IVEC_DATA_IN; /* vector input bus */
|
reg [7:0] MEM_DATA_IN; /* mem data input bus */
|
reg [7:0] MEM_DATA_IN; /* mem data input bus */
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* testbench internal variables */
|
/* testbench internal variables */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
reg CLR_INT; /* deassert interrupt */
|
reg CLR_INT; /* deassert interrupt */
|
reg CLR_NMI; /* deassert nmi */
|
reg CLR_NMI; /* deassert nmi */
|
reg DISABLE_BREQ; /* bus req generator control */
|
reg DISABLE_BREQ; /* bus req generator control */
|
reg DISABLE_INT; /* interrupt generator control */
|
reg DISABLE_INT; /* interrupt generator control */
|
reg DISABLE_WAIT; /* wait generator control */
|
reg DISABLE_WAIT; /* wait generator control */
|
reg INT_TYPE; /* int type during bus req */
|
reg INT_TYPE; /* int type during bus req */
|
reg PAT_DONE; /* pattern done flag */
|
reg PAT_DONE; /* pattern done flag */
|
reg TRIG_INT; /* assert interrupt */
|
reg TRIG_INT; /* assert interrupt */
|
reg TRIG_NMI; /* assert nmi */
|
reg TRIG_NMI; /* assert nmi */
|
reg [2:0] PAT_CNT; /* counter to track patterns */
|
reg [3:0] PAT_CNT; /* counter to track patterns */
|
reg [15:0] CMP_ERR_L; /* error counter */
|
reg [15:0] CMP_ERR_L; /* error counter */
|
|
|
reg wait_dly; /* wait request state machine */
|
reg wait_dly; /* wait request state machine */
|
reg [5:0] breq_mach; /* bus request state machine */
|
reg [5:0] breq_mach; /* bus request state machine */
|
|
|
reg TREF0, TREF1, TREF2, TREF3, TREF4; /* timing generator */
|
reg TREF0, TREF1, TREF2, TREF3, TREF4; /* timing generator */
|
reg TREF5, TREF6, TREF7, TREF8, TREF9;
|
reg TREF5, TREF6, TREF7, TREF8, TREF9;
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* read memory and write data compare memory */
|
/* read memory and write data compare memory */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
reg [7:0] rdmem [0:65535];
|
reg [7:0] rdmem [0:65535];
|
reg [7:0] wrmem [0:65535];
|
reg [7:0] wrmem [0:65535];
|
|
|
wire [7:0] wr_data = (MEM_TRAN) ? wrmem[MEM_ADDR] :
|
wire [7:0] wr_data = (MEM_TRAN) ? wrmem[MEM_ADDR] :
|
(IO_TRAN) ? wrmem[IO_ADDR] : 8'hxx;
|
(IO_TRAN) ? wrmem[IO_ADDR] : 8'hxx;
|
|
|
wire [7:0] rd_data = rdmem[MEM_ADDR];
|
wire [7:0] rd_data = rdmem[MEM_ADDR];
|
wire [7:0] iord_data = rdmem[IO_ADDR];
|
wire [7:0] iord_data = rdmem[IO_ADDR];
|
|
|
always @ (posedge TREF6) begin
|
always @ (posedge TREF6) begin
|
IO_DATA_IN = (IO_TRAN && IO_READ && IO_STROBE && !WAIT_REQ) ? iord_data : 8'hxx;
|
IO_DATA_IN = (IO_TRAN && IO_READ && IO_STROBE && !WAIT_REQ) ? iord_data : 8'hxx;
|
MEM_DATA_IN = (MEM_TRAN && MEM_RD && !WAIT_REQ) ? rd_data : 8'hxx;
|
MEM_DATA_IN = (MEM_TRAN && MEM_RD && !WAIT_REQ) ? rd_data : 8'hxx;
|
end
|
end
|
|
|
always @ (posedge TREF6) begin
|
always @ (posedge TREF6) begin
|
IVEC_DATA_IN = (IACK_TRAN && IVEC_RD && !WAIT_REQ) ? rd_data : 8'hxx;
|
IVEC_DATA_IN = (IACK_TRAN && IVEC_RD && !WAIT_REQ) ? rd_data : 8'hxx;
|
end
|
end
|
|
|
always @ (posedge TREF0) begin
|
always @ (posedge TREF0) begin
|
IO_DATA_IN = 8'hxx;
|
IO_DATA_IN = 8'hxx;
|
MEM_DATA_IN = 8'hxx;
|
MEM_DATA_IN = 8'hxx;
|
IVEC_DATA_IN = 8'hxx;
|
IVEC_DATA_IN = 8'hxx;
|
end
|
end
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* instantiate the design */
|
/* instantiate the design */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
y80_top Y80 ( .dma_ack(DMA_ACK), .halt_tran(HALT_TRAN), .iack_tran(IACK_TRAN),
|
y80_top Y80 ( .dma_ack(DMA_ACK), .halt_tran(HALT_TRAN), .iack_tran(IACK_TRAN),
|
.io_addr_out(IO_ADDR), .io_data_out(IO_DATA_OUT), .io_read(IO_READ),
|
.io_addr_out(IO_ADDR), .io_data_out(IO_DATA_OUT), .io_read(IO_READ),
|
.io_strobe(IO_STROBE), .io_tran(IO_TRAN), .ivec_rd(IVEC_RD),
|
.io_strobe(IO_STROBE), .io_tran(IO_TRAN), .ivec_rd(IVEC_RD),
|
.mem_addr_out(MEM_ADDR), .mem_data_out(MEM_DATA_OUT), .mem_rd(MEM_RD),
|
.mem_addr_out(MEM_ADDR), .mem_data_out(MEM_DATA_OUT), .mem_rd(MEM_RD),
|
.mem_tran(MEM_TRAN), .mem_wr(MEM_WR), .reti_tran(RETI_TRAN), .t1(T1),
|
.mem_tran(MEM_TRAN), .mem_wr(MEM_WR), .reti_tran(RETI_TRAN), .t1(T1),
|
.clearb(CLEARB), .clkc(CLKC), .dma_req(DMA_REQ), .int_req(INT_REQ),
|
.clearb(CLEARB), .clkc(CLKC), .dma_req(DMA_REQ), .int_req(INT_REQ),
|
.io_data_in(IO_DATA_IN), .ivec_data_in(IVEC_DATA_IN),
|
.io_data_in(IO_DATA_IN), .ivec_data_in(IVEC_DATA_IN),
|
.mem_data_in(MEM_DATA_IN), .nmi_req(NMI_REQ), .resetb(RESETB),
|
.mem_data_in(MEM_DATA_IN), .nmi_req(NMI_REQ), .resetb(RESETB),
|
.wait_req(WAIT_REQ) );
|
.wait_req(WAIT_REQ) );
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* timing generator */
|
/* timing generator */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
initial begin
|
initial begin
|
TREF0 = 1;
|
TREF0 = 1;
|
CLKC = 1;
|
CLKC = 1;
|
end
|
end
|
|
|
always begin
|
always begin
|
#10 TREF0 <= 1'b0;
|
#10 TREF0 <= 1'b0;
|
TREF1 <= 1'b1;
|
TREF1 <= 1'b1;
|
#10 TREF1 <= 1'b0;
|
#10 TREF1 <= 1'b0;
|
TREF2 <= 1'b1;
|
TREF2 <= 1'b1;
|
#10 TREF2 <= 1'b0;
|
#10 TREF2 <= 1'b0;
|
TREF3 <= 1'b1;
|
TREF3 <= 1'b1;
|
#10 TREF3 <= 1'b0;
|
#10 TREF3 <= 1'b0;
|
TREF4 <= 1'b1;
|
TREF4 <= 1'b1;
|
#10 TREF4 <= 1'b0;
|
#10 TREF4 <= 1'b0;
|
TREF5 <= 1'b1;
|
TREF5 <= 1'b1;
|
#10 TREF5 <= 1'b0;
|
#10 TREF5 <= 1'b0;
|
TREF6 <= 1'b1;
|
TREF6 <= 1'b1;
|
#10 TREF6 <= 1'b0;
|
#10 TREF6 <= 1'b0;
|
TREF7 <= 1'b1;
|
TREF7 <= 1'b1;
|
#10 TREF7 <= 1'b0;
|
#10 TREF7 <= 1'b0;
|
TREF8 <= 1'b1;
|
TREF8 <= 1'b1;
|
#10 TREF8 <= 1'b0;
|
#10 TREF8 <= 1'b0;
|
TREF9 <= 1'b1;
|
TREF9 <= 1'b1;
|
#10 TREF9 <= 1'b0;
|
#10 TREF9 <= 1'b0;
|
TREF0 <= 1'b1;
|
TREF0 <= 1'b1;
|
end
|
end
|
|
|
always @ (posedge TREF3) CLKC = 0;
|
always @ (posedge TREF3) CLKC = 0;
|
always @ (posedge TREF8) CLKC = 1;
|
always @ (posedge TREF8) CLKC = 1;
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* initialize input signals */
|
/* initialize input signals */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
initial begin
|
initial begin
|
CLEARB = 1;
|
CLEARB = 1;
|
DMA_REQ = 0;
|
DMA_REQ = 0;
|
INT_REQ = 0;
|
INT_REQ = 0;
|
NMI_REQ = 0;
|
NMI_REQ = 0;
|
RESETB = 1;
|
RESETB = 1;
|
WAIT_REQ = 0;
|
WAIT_REQ = 0;
|
end
|
end
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* initialize testbench variables */
|
/* initialize testbench variables */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
initial begin
|
initial begin
|
breq_mach = 6'b000000;
|
breq_mach = 6'b000000;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
CLR_INT = 0;
|
CLR_INT = 0;
|
CLR_NMI = 0;
|
CLR_NMI = 0;
|
DISABLE_BREQ = 1;
|
DISABLE_BREQ = 1;
|
DISABLE_INT = 1;
|
DISABLE_INT = 1;
|
DISABLE_WAIT = 1;
|
DISABLE_WAIT = 1;
|
INT_TYPE = 0;
|
INT_TYPE = 0;
|
PAT_DONE = 0;
|
PAT_DONE = 0;
|
TRIG_INT = 0;
|
TRIG_INT = 0;
|
TRIG_NMI = 0;
|
TRIG_NMI = 0;
|
end
|
end
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* reset and clear task */
|
/* reset and clear task */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
task resettask;
|
task resettask;
|
begin
|
begin
|
wait(TREF6);
|
wait(TREF6);
|
RESETB = 0;
|
RESETB = 0;
|
wait(TREF0);
|
wait(TREF0);
|
wait(TREF6);
|
wait(TREF6);
|
wait(TREF0);
|
wait(TREF0);
|
wait(TREF6);
|
wait(TREF6);
|
RESETB = 1;
|
RESETB = 1;
|
CLR_INT = 1;
|
CLR_INT = 1;
|
CLR_NMI = 1;
|
CLR_NMI = 1;
|
wait(TREF0);
|
wait(TREF0);
|
PAT_DONE = 0;
|
PAT_DONE = 0;
|
end
|
end
|
endtask
|
endtask
|
|
|
task cleartask;
|
task cleartask;
|
begin
|
begin
|
wait(TREF6);
|
wait(TREF6);
|
CLEARB = 0;
|
CLEARB = 0;
|
RESETB = 0;
|
RESETB = 0;
|
wait(TREF0);
|
wait(TREF0);
|
wait(TREF6);
|
wait(TREF6);
|
wait(TREF0);
|
wait(TREF0);
|
wait(TREF6);
|
wait(TREF6);
|
CLEARB = 1;
|
CLEARB = 1;
|
RESETB = 1;
|
RESETB = 1;
|
CLR_INT = 1;
|
CLR_INT = 1;
|
CLR_NMI = 1;
|
CLR_NMI = 1;
|
wait(TREF0);
|
wait(TREF0);
|
PAT_DONE = 0;
|
PAT_DONE = 0;
|
end
|
end
|
endtask
|
endtask
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* error log */
|
/* error log */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
always @ (posedge TREF4) begin
|
always @ (posedge TREF4) begin
|
if (MEM_WR) CMP_ERR_L = CMP_ERR_L + (MEM_DATA_OUT != wr_data);
|
if (MEM_WR) CMP_ERR_L = CMP_ERR_L + (MEM_DATA_OUT != wr_data);
|
if (!IO_READ && IO_STROBE) CMP_ERR_L = CMP_ERR_L + (IO_DATA_OUT != wr_data);
|
if (!IO_READ && IO_STROBE) CMP_ERR_L = CMP_ERR_L + (IO_DATA_OUT != wr_data);
|
end
|
end
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* end-of-pattern detect */
|
/* end-of-pattern detect */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
always @ (posedge TREF4) begin
|
always @ (posedge TREF4) begin
|
PAT_DONE = (MEM_ADDR[15:0] == 16'h00c3);
|
PAT_DONE = (MEM_ADDR[15:0] == 16'h00c3);
|
end
|
end
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* interrupt/nmi request generator */
|
/* interrupt/nmi request generator */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
always @ (posedge TREF4) begin
|
always @ (posedge TREF4) begin
|
TRIG_INT = !((MEM_ADDR[15:13] == 3'b110) && (MEM_ADDR[8:0] == 9'h0ff)) ||
|
TRIG_INT = !((MEM_ADDR[15:13] == 3'b110) && (MEM_ADDR[8:0] == 9'h0ff)) ||
|
DISABLE_INT || |breq_mach;
|
DISABLE_INT || |breq_mach;
|
TRIG_NMI = !((MEM_ADDR[15:13] == 3'b110) && (MEM_ADDR[8:0] == 9'h1ff)) ||
|
TRIG_NMI = !((MEM_ADDR[15:13] == 3'b110) && (MEM_ADDR[8:0] == 9'h1ff)) ||
|
DISABLE_INT || |breq_mach;
|
DISABLE_INT || |breq_mach;
|
CLR_INT = (MEM_ADDR[15:13] == 3'b111);
|
CLR_INT = (MEM_ADDR[15:13] == 3'b111);
|
CLR_NMI = (MEM_ADDR[15:13] == 3'b111);
|
CLR_NMI = (MEM_ADDR[15:13] == 3'b111);
|
if (T1) INT_TYPE = MEM_ADDR[8];
|
if (T1) INT_TYPE = MEM_ADDR[8];
|
end
|
end
|
|
|
always @ (negedge TRIG_NMI) begin
|
always @ (negedge TRIG_NMI) begin
|
NMI_REQ = 1;
|
NMI_REQ = 1;
|
end
|
end
|
|
|
always @ (posedge CLR_NMI) begin
|
always @ (posedge CLR_NMI) begin
|
NMI_REQ = 0;
|
NMI_REQ = 0;
|
end
|
end
|
|
|
always @ (negedge TRIG_INT) begin
|
always @ (negedge TRIG_INT) begin
|
INT_REQ = 1;
|
INT_REQ = 1;
|
end
|
end
|
|
|
always @ (posedge CLR_INT) begin
|
always @ (posedge CLR_INT) begin
|
wait(TREF0);
|
wait(TREF0);
|
wait(TREF4);
|
wait(TREF4);
|
wait(TREF0);
|
wait(TREF0);
|
wait(TREF4);
|
wait(TREF4);
|
INT_REQ = 0;
|
INT_REQ = 0;
|
end
|
end
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* interrupt request generator (during Halt) */
|
/* interrupt request generator (during Halt) */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
integer j;
|
integer j;
|
|
|
always @ (posedge HALT_TRAN) begin
|
always @ (posedge HALT_TRAN) begin
|
for (j=0; j < 10; j=j+1) begin
|
for (j=0; j < 10; j=j+1) begin
|
wait (TREF6);
|
wait (TREF6);
|
wait (TREF0);
|
wait (TREF0);
|
end
|
end
|
wait (TREF6);
|
wait (TREF6);
|
INT_REQ = HALT_TRAN && !INT_TYPE;
|
INT_REQ = HALT_TRAN && !INT_TYPE;
|
NMI_REQ = HALT_TRAN && INT_TYPE;
|
NMI_REQ = HALT_TRAN && INT_TYPE;
|
wait (TREF0);
|
wait (TREF0);
|
for (j=0; j < 12; j=j+1) begin
|
for (j=0; j < 12; j=j+1) begin
|
wait (TREF6);
|
wait (TREF6);
|
wait (TREF0);
|
wait (TREF0);
|
end
|
end
|
INT_REQ = 0;
|
INT_REQ = 0;
|
NMI_REQ = 0;
|
NMI_REQ = 0;
|
wait (TREF6);
|
wait (TREF6);
|
wait (TREF0);
|
wait (TREF0);
|
wait (TREF6);
|
wait (TREF6);
|
NMI_REQ = HALT_TRAN && INT_TYPE;
|
NMI_REQ = HALT_TRAN && INT_TYPE;
|
wait (TREF0);
|
wait (TREF0);
|
wait (TREF6);
|
wait (TREF6);
|
wait (TREF0);
|
wait (TREF0);
|
NMI_REQ = 0;
|
NMI_REQ = 0;
|
end
|
end
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* wait request generator */
|
/* wait request generator */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
always @ (posedge CLKC) begin
|
always @ (posedge CLKC) begin
|
wait_dly <= T1;
|
wait_dly <= T1;
|
end
|
end
|
|
|
always @ (posedge TREF6) WAIT_REQ = !DISABLE_WAIT && (T1 || wait_dly);
|
always @ (posedge TREF6) WAIT_REQ = !DISABLE_WAIT && (T1 || wait_dly);
|
always @ (posedge TREF9) WAIT_REQ = 1'b0;
|
always @ (posedge TREF9) WAIT_REQ = 1'b0;
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* bus request generator */
|
/* bus request generator */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
always @ (posedge CLKC) begin
|
always @ (posedge CLKC) begin
|
breq_mach <= (DISABLE_BREQ) ? 6'b000000 :
|
breq_mach <= (DISABLE_BREQ) ? 6'b000000 :
|
(T1) ? 6'b000001 : {breq_mach[4:0], wait_dly};
|
(T1) ? 6'b000001 : {breq_mach[4:0], wait_dly};
|
end
|
end
|
|
|
always @ (posedge TREF6) DMA_REQ = !DISABLE_BREQ &&
|
always @ (posedge TREF6) DMA_REQ = !DISABLE_BREQ &&
|
(T1 || |breq_mach[2:0] || (HALT_TRAN && |breq_mach));
|
(T1 || |breq_mach[2:0] || (HALT_TRAN && |breq_mach));
|
|
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
/* */
|
/* */
|
/* run the test patterns */
|
/* run the test patterns */
|
/* */
|
/* */
|
/*****************************************************************************************/
|
/*****************************************************************************************/
|
initial begin
|
initial begin
|
$readmemh("setup_hl.vm", rdmem);
|
$readmemh("setup_hl.vm", rdmem);
|
cleartask;
|
cleartask;
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
DISABLE_INT = 0; /* interrupt generator on */
|
DISABLE_INT = 0; /* interrupt generator on */
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h1;
|
PAT_CNT = 5'h1;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("int_ops.vm", rdmem);
|
$readmemh("int_ops.vm", rdmem);
|
$readmemh("int_opsd.vm", wrmem);
|
$readmemh("int_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
DISABLE_INT = 1; /* interrupt generator off */
|
DISABLE_INT = 1; /* interrupt generator off */
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h2;
|
PAT_CNT = 5'h2;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("alu_ops.vm", rdmem);
|
$readmemh("alu_ops.vm", rdmem);
|
$readmemh("alu_opsd.vm", wrmem);
|
$readmemh("alu_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h3;
|
PAT_CNT = 5'h3;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("dat_mov.vm", rdmem);
|
$readmemh("dat_mov.vm", rdmem);
|
$readmemh("dat_movd.vm", wrmem);
|
$readmemh("dat_movd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h4;
|
PAT_CNT = 5'h4;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("bit_ops.vm", rdmem);
|
$readmemh("bit_ops.vm", rdmem);
|
$readmemh("bit_opsd.vm", wrmem);
|
$readmemh("bit_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h5;
|
PAT_CNT = 5'h5;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("jmp_ops.vm", rdmem);
|
$readmemh("jmp_ops.vm", rdmem);
|
$readmemh("jmp_opsd.vm", wrmem);
|
$readmemh("jmp_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h6;
|
PAT_CNT = 5'h6;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("io_ops.vm", rdmem);
|
$readmemh("io_ops.vm", rdmem);
|
$readmemh("io_opsd.vm", wrmem);
|
$readmemh("io_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h7;
|
PAT_CNT = 5'h7;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("180_ops.vm", rdmem);
|
$readmemh("180_ops.vm", rdmem);
|
$readmemh("180_opsd.vm", wrmem);
|
$readmemh("180_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
|
resettask;
|
|
CMP_ERR_L = 16'h0000;
|
|
PAT_CNT = 5'h8;
|
|
$readmemh("blank_xx.vm", rdmem);
|
|
$readmemh("blank_xx.vm", wrmem);
|
|
$readmemh("ez8_ops.vm", rdmem);
|
|
$readmemh("ez8_opsd.vm", wrmem);
|
|
wait (PAT_DONE);
|
|
|
DISABLE_INT = 0; /* interrupt generator on */
|
DISABLE_INT = 0; /* interrupt generator on */
|
DISABLE_WAIT = 0; /* wait generator on */
|
DISABLE_WAIT = 0; /* wait generator on */
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h1;
|
PAT_CNT = 5'h1;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("int_ops.vm", rdmem);
|
$readmemh("int_ops.vm", rdmem);
|
$readmemh("int_opsd.vm", wrmem);
|
$readmemh("int_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
DISABLE_INT = 1; /* interrupt generator off */
|
DISABLE_INT = 1; /* interrupt generator off */
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h2;
|
PAT_CNT = 5'h2;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("alu_ops.vm", rdmem);
|
$readmemh("alu_ops.vm", rdmem);
|
$readmemh("alu_opsd.vm", wrmem);
|
$readmemh("alu_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h3;
|
PAT_CNT = 5'h3;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("dat_mov.vm", rdmem);
|
$readmemh("dat_mov.vm", rdmem);
|
$readmemh("dat_movd.vm", wrmem);
|
$readmemh("dat_movd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h4;
|
PAT_CNT = 5'h4;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("bit_ops.vm", rdmem);
|
$readmemh("bit_ops.vm", rdmem);
|
$readmemh("bit_opsd.vm", wrmem);
|
$readmemh("bit_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h5;
|
PAT_CNT = 5'h5;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("jmp_ops.vm", rdmem);
|
$readmemh("jmp_ops.vm", rdmem);
|
$readmemh("jmp_opsd.vm", wrmem);
|
$readmemh("jmp_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h6;
|
PAT_CNT = 5'h6;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("io_ops.vm", rdmem);
|
$readmemh("io_ops.vm", rdmem);
|
$readmemh("io_opsd.vm", wrmem);
|
$readmemh("io_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h7;
|
PAT_CNT = 5'h7;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("180_ops.vm", rdmem);
|
$readmemh("180_ops.vm", rdmem);
|
$readmemh("180_opsd.vm", wrmem);
|
$readmemh("180_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
|
resettask;
|
|
CMP_ERR_L = 16'h0000;
|
|
PAT_CNT = 5'h8;
|
|
$readmemh("blank_xx.vm", rdmem);
|
|
$readmemh("blank_xx.vm", wrmem);
|
|
$readmemh("ez8_ops.vm", rdmem);
|
|
$readmemh("ez8_opsd.vm", wrmem);
|
|
wait (PAT_DONE);
|
|
|
DISABLE_INT = 0; /* interrupt generator on */
|
DISABLE_INT = 0; /* interrupt generator on */
|
DISABLE_BREQ = 0; /* bus req generator on */
|
DISABLE_BREQ = 0; /* bus req generator on */
|
DISABLE_WAIT = 1; /* wait generator off */
|
DISABLE_WAIT = 1; /* wait generator off */
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h1;
|
PAT_CNT = 5'h1;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("int_ops.vm", rdmem);
|
$readmemh("int_ops.vm", rdmem);
|
$readmemh("int_opss.vm", wrmem);
|
$readmemh("int_opss.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
DISABLE_INT = 1; /* interrupt generator off */
|
DISABLE_INT = 1; /* interrupt generator off */
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h2;
|
PAT_CNT = 5'h2;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("alu_ops.vm", rdmem);
|
$readmemh("alu_ops.vm", rdmem);
|
$readmemh("alu_opsd.vm", wrmem);
|
$readmemh("alu_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h3;
|
PAT_CNT = 5'h3;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("dat_mov.vm", rdmem);
|
$readmemh("dat_mov.vm", rdmem);
|
$readmemh("dat_movd.vm", wrmem);
|
$readmemh("dat_movd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h4;
|
PAT_CNT = 5'h4;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("bit_ops.vm", rdmem);
|
$readmemh("bit_ops.vm", rdmem);
|
$readmemh("bit_opsd.vm", wrmem);
|
$readmemh("bit_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h5;
|
PAT_CNT = 5'h5;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("jmp_ops.vm", rdmem);
|
$readmemh("jmp_ops.vm", rdmem);
|
$readmemh("jmp_opsd.vm", wrmem);
|
$readmemh("jmp_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h6;
|
PAT_CNT = 5'h6;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("io_ops.vm", rdmem);
|
$readmemh("io_ops.vm", rdmem);
|
$readmemh("io_opsd.vm", wrmem);
|
$readmemh("io_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
resettask;
|
resettask;
|
CMP_ERR_L = 16'h0000;
|
CMP_ERR_L = 16'h0000;
|
PAT_CNT = 4'h7;
|
PAT_CNT = 5'h7;
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", rdmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("blank_xx.vm", wrmem);
|
$readmemh("180_ops.vm", rdmem);
|
$readmemh("180_ops.vm", rdmem);
|
$readmemh("180_opsd.vm", wrmem);
|
$readmemh("180_opsd.vm", wrmem);
|
wait (PAT_DONE);
|
wait (PAT_DONE);
|
|
|
|
resettask;
|
|
CMP_ERR_L = 16'h0000;
|
|
PAT_CNT = 5'h8;
|
|
$readmemh("blank_xx.vm", rdmem);
|
|
$readmemh("blank_xx.vm", wrmem);
|
|
$readmemh("ez8_ops.vm", rdmem);
|
|
$readmemh("ez8_opsd.vm", wrmem);
|
|
wait (PAT_DONE);
|
|
|
$stop;
|
$stop;
|
end
|
end
|
|
|
endmodule
|
endmodule
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|