URL
https://opencores.org/ocsvn/aoocs/aoocs/trunk
Subversion Repositories aoocs
[/] [aoocs/] [trunk/] [tests/] [tb_ocs_floppy.v.old] - Rev 2
Compare with Previous | Blame | View Log
`timescale 10ns / 1nsmodule tb_ocs_floppy();reg clk_30;reg reset_n;reg [31:0] master_DAT_I;reg ACK_I;wire CYC_O;wire STB_O;wire WE_O;wire [31:2] ADR_O;wire [3:0] SEL_O;wire [31:0] master_DAT_O;reg CYC_I;reg STB_I;reg WE_I;reg [8:2] ADR_I;reg [3:0] SEL_I;reg [31:0] slave_DAT_I;wire ACK_O;reg na_dskbytr_read;wire [15:0] na_dskbytr;reg fl_mtr_n;reg [3:0] fl_sel_n;reg fl_side_n;reg fl_dir;reg fl_step_n;wire floppy_blk_irq;ocs_floppy ocs_floppy_inst(.clk_30(clk_30),.reset_n(reset_n),// line counter.line_start(1'b1),// management.man_floppy_inserted(1'b1),.man_floppy_sector(32'd600),.floppy_error(),// WISHBONE master.CYC_O(CYC_O),.STB_O(STB_O),.WE_O(WE_O),.ADR_O(ADR_O),.SEL_O(SEL_O),.master_DAT_O(master_DAT_O),.master_DAT_I(master_DAT_I),.ACK_I(ACK_I),// WISHBONE slave.CYC_I(CYC_I),.STB_I(STB_I),.WE_I(WE_I),.ADR_I(ADR_I),.SEL_I(SEL_I),.slave_DAT_I(slave_DAT_I),.ACK_O(ACK_O),// dma enable.dma_con(16'hFFFF),.adk_con(16'hFFFF),.floppy_syn_irq(),.floppy_blk_irq(floppy_blk_irq),// Not Aligned address support// DSKBYTR read not implemented here.na_dskbytr_read(na_dskbytr_read),.na_dskbytr(na_dskbytr),// floppy CIA interface.fl_rdy_n(),.fl_tk0_n(),.fl_wpro_n(),.fl_chng_n(),.fl_index_n(),.fl_mtr_n(fl_mtr_n),.fl_sel_n(fl_sel_n),.fl_side_n(fl_side_n),.fl_dir(fl_dir),.fl_step_n(fl_step_n));initial beginclk_30 = 1'b0;forever #5 clk_30 = ~clk_30;endinteger i,j0,j1,j2,j3,j4,j5,j6,j7;integer read_complete;reg [511:0] string;reg [31:0] adr;reg [3:0] sel;reg [31:0] val;parameter [31:0] STDIN = 32'h8000_0000,STDOUT = 32'h8000_0001;initial begin$dumpfile("tb_ocs_floppy.vcd");$dumpvars(0);$dumpon();read_complete = 0;reset_n = 1'b0;ACK_I = 1'b0;#10 reset_n = 1'b1;//write register: adr=1, sel=2, val=3forever beginstring = 512'd0;while(string[7:0] != "\n") beginstring = { string[503:0], 8'd0 };string[7:0] = $fgetc(STDIN);end$display("got: %s\n", string);j0 = $sscanf(string, "write register: adr=%h, sel=%h, val=%h", adr, sel, val);j1 = $sscanf(string, "fl_mtr_n=%h", val);j2 = $sscanf(string, "fl_sel_n=%h", val);j3 = $sscanf(string, "fl_side_n=%h", val);j4 = $sscanf(string, "fl_dir=%h", val);j5 = $sscanf(string, "fl_step_n=%h", val);j6 = $sscanf(string, "step=%d", val);j7 = $sscanf(string, "memory: adr=%h, val=%h", adr, val);if(j0 != 3 && j1 != 1 && j2 != 1 && j3 != 1 && j4 != 1 && j5 != 1 && j6 != 1 && j7 != 2) begin$display("error: read failed: j0=%d, j1=%d, j2=%d, j3=%d, j4=%d, j5=%d, j6=%d, j7=%d", j0,j1,j2,j3,j4,j5,j6,j7);$finish_and_return(-1);end#10 ;if(j1 == 1) fl_mtr_n = val;if(j2 == 1) fl_sel_n = val;if(j3 == 1) fl_side_n = val;if(j4 == 1) fl_dir = val;if(j5 == 1) fl_step_n = val;if(j6 == 1) beginif(val == 0) begin$dumpflush();$display("done");$fflush(STDOUT);$finish_and_return(val);endelse beginfor(j6=0; j6<val; j6 = j6+1) #10 ;$dumpflush();endendif(j0 == 3) beginADR_I = adr[8:2];slave_DAT_I = val;STB_I = 1'b1;CYC_I = 1'b1;WE_I = 1'b1;SEL_I = sel;while(ACK_O == 1'b0) #10;while(ACK_O == 1'b1) #10;STB_I = 1'b0;CYC_I = 1'b0;endif(j7 == 2 && read_complete == 1) beginif({ADR_O, 2'b0} != adr) begin$display("read memory address mismatch");$fflush(STDOUT);$finish_and_return(-1);end#5master_DAT_I = val;ACK_I = 1'b1;#10master_DAT_I = 32'd0;ACK_I = 1'b0;#5 ;read_complete = 0;endif(CYC_O == 1'b1 && STB_O == 1'b1 && WE_O == 1'b0 && read_complete == 0) begin$display("read memory: adr=%h", {ADR_O, 2'b0});$fflush(STDOUT);read_complete = 1;endelse if(CYC_O == 1'b1 && STB_O == 1'b1 && WE_O == 1'b1) begin$display("write memory: adr=%h, sel=%h, val=%h", {ADR_O, 2'b0}, SEL_O, master_DAT_O);$fflush(STDOUT);#5ACK_I = 1'b1;#10ACK_I = 1'b0;#5 ;endendendendmodule
