Author Topic: FPGA VGA Controller for 8-bit computer  (Read 426426 times)

0 Members and 2 Guests are viewing this topic.

Offline nockieboyTopic starter

  • Super Contributor
  • ***
  • Posts: 1812
  • Country: england
Re: FPGA VGA Controller for 8-bit computer
« Reply #2500 on: February 27, 2021, 11:58:47 am »
Would it be useful to know if the GPU is waiting for the next frame in a VWAIT state as well?

In any case, it appears I've not done the scFIFO full check properly in the GPU.  Still getting artefacts when I speed the ball up as commands are dropped from the buffer.

Obligatory video showing FIFO buffer overrun as the ball speeds up.

Every time I send a command to the GPU, the Z80 enters a loop waiting for the scFIFO buffer 'nearly full' flag to be zero before sending the command.

In the z80_bridge, I've added/amended these lines in the appropriate places:

Code: [Select]
parameter int FIFO_STAT = 248;      // IO address for GPU FIFO status on bit 0 - remaining bits free for other data

assign port_in_range       = ((Z80_addr_r[7:0] >= IO_DATA[7:0]) && (Z80_addr_r[7:0] <= FIFO_STAT[7:0])) ; // You are better off reserving a range of ports

if ( z80_read_port_1s && Z80_addr_r[7:0] == FIFO_STAT[7:0] ) begin   // Read_port 1 clock & GPU status
   
    Z80_rData  <= GEO_STAT_RD ;
     
end

It looks as though the status isn't being reported properly as the FIFO buffer is still getting overrun at higher speeds.
Make the addition in the attached block diagram.
Bit 0 will still be the GEO FIFO Star, but, bits 1 through 7 will be a frame counter.  You should be able to see it counting once per frame.  If so, then I need to check the FIFO status flag, maybe it is not wired or setup properly.

Yes, it appears to be reading the frame counter okay.
 

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 7747
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2501 on: February 27, 2021, 10:49:33 pm »
Well, at least now with an equality compare since the last reading, you know when the frame has just changed.

So, we need to figure out why the FIFO full flag isn't working.  That is unless the Z80 just cant send enough circles out, even within 1/60th of a second to fill it with the delays.

I'll check the Geometry Test Bench later tonight.

 
The following users thanked this post: nockieboy

Offline nockieboyTopic starter

  • Super Contributor
  • ***
  • Posts: 1812
  • Country: england
Re: FPGA VGA Controller for 8-bit computer
« Reply #2502 on: February 28, 2021, 11:09:59 am »


Above link shows latest vid with basic vsync working.  Bouncing ball demo in all three modes (320x200x16, 320x240x4 and 640x400x2 in that order), showing some vsync timing issues at the top of the screen for larger circles.  Camera used was one I dug out of storage and haven't used for a while, so autofocus plays up halfway through, but excuse that. ;)
« Last Edit: March 15, 2021, 06:07:49 pm by nockieboy »
 

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 7747
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2503 on: February 28, 2021, 10:35:45 pm »
Man, I never thought I would see a Z80 drawing and erasing such a large filled circle at 640x480, animating it with ease, WITHOUT a double buffered background.

When using the 'VWAIT', try a frame count of '0', but a line number like 440 placing the 'pause' until the end of the frame.

To do this you will need to check the source verilog code to set a 'double' factor for the 'Horizontal line wait position' and use a line setting of 220.
Here is the verilog code lines 828 to 840:
Code: [Select]
   else if (cmd_in[15:8]  == 8'd7)  begin
                                              if (cmd_in[7:2]==6'd0) ellipse_quadrant  <= cmd_in[1:0]; // Set which ellipse quadrant to render.
                                              if (cmd_in[7]) begin
                                                             vw_counter[3:0]   <= cmd_in[3:0]; // Set the number of vertical frames to wait for.
                                                             if (cmd_in[3:0]!=4'd0) begin
                                                                                    wait_int           <= 1'd1 ; // Turn on the wait for vertical frames
                                                                                    plotter_busy       <= 1'd1 ; // Tell the rest of the geometry processor that the plotter is just busy
                                                                                    int_kill           <= 2'd2; // reset the wait timer killer
                                                                                    hw_position[10:0]  <= hw_pos_lat[7:0] << cmd_in[5:4] ;
                                                                                    end
                                                             end
                                    end
   else if (cmd_in[15:8]  == 8'd15) hw_pos_lat[7:0]   <= cmd_in[7:0]; // Set the wait for horizontal lines after display ends.

For the wait, you need to fill (CMD[15:8]==15) with 220.
And (CMD[15:8]==7) with 8'b10010000

As you can see, bits [5:4] in this line here:
Code: [Select]
hw_position[10:0]  <= hw_pos_lat[7:0] << cmd_in[5:4] ;
Shifts the 8 bit number 220 you placed in 'hw_pos_lat', placing the now 220 changed into 440 in the H-Wait line position 'hw_position[10:0]'.
 

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 7747
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2504 on: March 06, 2021, 11:39:05 am »
DDR3 Status update.

Arrrgggg, +3k lines of new code and finally.....  >:D
100% By the book!!!

Testbench script:
Code: [Select]
[at]CMD READ  <32'hex ADDR> <32'hex VECTOR>                  > Transmits a read request at address ADDR with the target vector set to VECTOR.
[at]CMD WRITE <32'hex ADDR> <32'binary MASK>  <256'hex DATA> > Transmits a read request at address ADDR with the target vector set to VECTOR.
[at]CMD DELAY <time in microseconds>                         > Adds a huge delay.


@LOG_FILE  DDR3_SEQ_CMD_script_log.txt

@CMD READ  00000000 0
@CMD READ  00000800 0
@CMD READ  00010820 0
@CMD READ  00000000 0
@CMD READ  00010800 0
@CMD READ  00011800 0
@CMD READ  00012000 0
@CMD READ  00012800 0
@CMD READ  00013000 0
@CMD READ  00013800 0
@CMD WRITE 00013800 11111111111111111111111111111111 0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
@CMD WRITE 00013820 11111111111111111111111111111111 0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
@CMD READ  00013800 0


Output from Micron's DDR3 Verilog Model:
Code: [Select]
#  Note : Cyclone IV E PLL was reset
# Time: 0.0 ps  Instance: BrianHG_DDR3_PHY_SEQ_tb.DUT_DDR3_PLL.genblk3.HPLL1.cycloneiii_pll.pll3
#  Note : Cyclone IV E PLL locked to incoming clock
# Time: 2670000.0 ps  Instance: BrianHG_DDR3_PHY_SEQ_tb.DUT_DDR3_PLL.genblk3.HPLL1.cycloneiii_pll.pll3
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203163000.0 ps INFO: Load Mode 2
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203163000.0 ps INFO: Load Mode 2 Partial Array Self Refresh = Bank 0-7
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203163000.0 ps INFO: Load Mode 2 CAS Write Latency =           6
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203163000.0 ps INFO: Load Mode 2 Auto Self Refresh = Disabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203163000.0 ps INFO: Load Mode 2 Self Refresh Temperature = Extended
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203163000.0 ps INFO: Load Mode 2 Dynamic ODT = Disabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203171000.0 ps INFO: Load Mode 3
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203171000.0 ps INFO: Load Mode 3 MultiPurpose Register Select = Pre-defined pattern
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203171000.0 ps INFO: Load Mode 3 MultiPurpose Register Enable = Disabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 DLL Enable = Enabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 Output Drive Strength =          40 Ohm
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 ODT Rtt =         120 Ohm
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 Additive Latency = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 Write Levelization = Disabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 TDQS Enable = Disabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 Qoff = Enabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0 Burst Length =  8
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0 Burst Order = Sequential
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0 CAS Latency =           7
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0 DLL Reset = Reset DLL
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0 Write Recovery =           8
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0 Power Down Mode = DLL off
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203211000.0 ps INFO: ZQ        long = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203211000.0 ps INFO: Initialization Sequence is complete
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204235000.0 ps INFO: Load Mode 3
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204235000.0 ps INFO: Load Mode 3 MultiPurpose Register Select = Pre-defined pattern
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204235000.0 ps INFO: Load Mode 3 MultiPurpose Register Enable = Enabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204259000.0 ps INFO: Read      bank 3 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204267000.0 ps INFO: Read      bank 3 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204272000.0 ps READ @ DQS MultiPurpose Register 0, col = 0,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204273000.0 ps READ @ DQS MultiPurpose Register 0, col = 1,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204274000.0 ps READ @ DQS MultiPurpose Register 0, col = 2,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204275000.0 ps READ @ DQS MultiPurpose Register 0, col = 3,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204276000.0 ps READ @ DQS MultiPurpose Register 0, col = 4,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204277000.0 ps READ @ DQS MultiPurpose Register 0, col = 5,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204278000.0 ps READ @ DQS MultiPurpose Register 0, col = 6,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204279000.0 ps READ @ DQS MultiPurpose Register 0, col = 7,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204280000.0 ps READ @ DQS MultiPurpose Register 0, col = 0,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204281000.0 ps READ @ DQS MultiPurpose Register 0, col = 1,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204282000.0 ps READ @ DQS MultiPurpose Register 0, col = 2,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204283000.0 ps READ @ DQS MultiPurpose Register 0, col = 3,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204284000.0 ps READ @ DQS MultiPurpose Register 0, col = 4,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204285000.0 ps READ @ DQS MultiPurpose Register 0, col = 5,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204286000.0 ps READ @ DQS MultiPurpose Register 0, col = 6,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204287000.0 ps READ @ DQS MultiPurpose Register 0, col = 7,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204291000.0 ps INFO: Load Mode 3
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204291000.0 ps INFO: Load Mode 3 MultiPurpose Register Select = Pre-defined pattern
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204291000.0 ps INFO: Load Mode 3 MultiPurpose Register Enable = Disabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204315000.0 ps INFO: Activate  bank 0 row 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204331000.0 ps INFO: Read      bank 0 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204339000.0 ps INFO: Read      bank 0 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204344000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204345000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204345000.0 ps INFO: Activate  bank 1 row 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204346000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204347000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204348000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204349000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204350000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204351000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204352000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204353000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204354000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204355000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204356000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204357000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204358000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204359000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204361000.0 ps INFO: Read      bank 1 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204369000.0 ps INFO: Read      bank 1 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204374000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204375000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204376000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204377000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204378000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204379000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204380000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204381000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204381000.0 ps INFO: Precharge bank   1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204382000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204383000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204384000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204385000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204386000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204387000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204388000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204389000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204397000.0 ps INFO: Activate  bank 1 row 0004
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204413000.0 ps INFO: Read      bank 1 col 010, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204421000.0 ps INFO: Read      bank 1 col 018, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204426000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000010 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204427000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000011 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204428000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000012 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204429000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000013 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204429000.0 ps INFO: Read      bank 0 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204430000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000014 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204431000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000015 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204432000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000016 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204433000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000017 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204434000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000018 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204435000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000019 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204436000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000001a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204437000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000001b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204437000.0 ps INFO: Read      bank 0 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204438000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000001c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204439000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000001d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204440000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000001e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204441000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000001f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204442000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204443000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204444000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204445000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204445000.0 ps INFO: Read      bank 1 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204446000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204447000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204448000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204449000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204450000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204451000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204452000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204453000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204453000.0 ps INFO: Read      bank 1 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204454000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204455000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204456000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204457000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204458000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204459000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204459000.0 ps INFO: Activate  bank 3 row 0004
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204460000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204461000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204462000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204463000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204464000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204465000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204466000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204467000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204468000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204469000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204470000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204471000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204472000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204473000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204475000.0 ps INFO: Read      bank 3 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204483000.0 ps INFO: Read      bank 3 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204488000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204489000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204489000.0 ps INFO: Activate  bank 4 row 0004
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204490000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204491000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204492000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204493000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204494000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204495000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204496000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204497000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204498000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204499000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204500000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204501000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204502000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204503000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204505000.0 ps INFO: Read      bank 4 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204513000.0 ps INFO: Read      bank 4 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204518000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204519000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204519000.0 ps INFO: Activate  bank 5 row 0004
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204520000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204521000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204522000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204523000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204524000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204525000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204526000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204527000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204528000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204529000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204530000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204531000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204532000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204533000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204535000.0 ps INFO: Read      bank 5 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204543000.0 ps INFO: Read      bank 5 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204548000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204549000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204549000.0 ps INFO: Activate  bank 6 row 0004
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204550000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204551000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204552000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204553000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204554000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204555000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204556000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204557000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204558000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204559000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204560000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204561000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204562000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204563000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204565000.0 ps INFO: Read      bank 6 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204573000.0 ps INFO: Read      bank 6 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204578000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204579000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204579000.0 ps INFO: Activate  bank 7 row 0004
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204580000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204581000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204582000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204583000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204584000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204585000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204586000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204587000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204588000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204589000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204590000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204591000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204592000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204593000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204595000.0 ps INFO: Read      bank 7 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204603000.0 ps INFO: Read      bank 7 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204608000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204609000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204610000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204611000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204612000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204613000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204614000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204615000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204616000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204617000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204617000.0 ps INFO: Write     bank 7 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204618000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204619000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204620000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204621000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204622000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204623000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204625000.0 ps INFO: Write     bank 7 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.main: at time 1204625000.0 ps INFO: Sync On Die Termination Rtt_NOM =        120 Ohm
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204630000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000000 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204631000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000001 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204632000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000002 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204633000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000003 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204633000.0 ps INFO: Write     bank 7 col 010, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204634000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000004 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204635000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000005 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204636000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000006 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204637000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000007 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204638000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000008 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204639000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000009 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204640000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000000a data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204641000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000000b data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204641000.0 ps INFO: Write     bank 7 col 018, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204642000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000000c data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204643000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000000d data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204644000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000000e data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204645000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000000f data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204646000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000010 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204647000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000011 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204648000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000012 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204649000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000013 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204650000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000014 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204651000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000015 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204652000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000016 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204653000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000017 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204654000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000018 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204655000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000019 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204656000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000001a data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204657000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000001b data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204658000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000001c data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204659000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000001d data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204660000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000001e data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204661000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000001f data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.main: at time 1204661000.0 ps INFO: Sync On Die Termination Rtt_NOM =          0 Ohm
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204669000.0 ps INFO: Read      bank 7 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204677000.0 ps INFO: Read      bank 7 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204682000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000000 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204683000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000001 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204684000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000002 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204685000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000003 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204686000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000004 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204687000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000005 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204688000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000006 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204689000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000007 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204690000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000008 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204691000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000009 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204692000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000a data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204693000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000b data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204694000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000c data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204695000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000d data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204696000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000e data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204697000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000f data = ffff
#
# End of command source ASCII file 'DDR3_SEQ_CMD_script.txt'.
#   51 lines processed.
#
# ** Note: $stop    : BrianHG_DDR3_PHY_SEQ_tb.sv(321)
#    Time: 1205150 ns  Iteration: 1  Instance: /BrianHG_DDR3_PHY_SEQ_tb
# Break in Module BrianHG_DDR3_PHY_SEQ_tb at BrianHG_DDR3_PHY_SEQ_tb.sv line 321
#
run -all (continue...)
#
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge All
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   3
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   4
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   5
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   6
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   7
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205509000.0 ps INFO: Refresh 
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1206095000.0 ps INFO: Refresh 
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1207895000.0 ps INFO: Refresh 
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1209695000.0 ps INFO: Refresh 
# ** Note: $stop    : BrianHG_DDR3_PHY_SEQ_tb.sv(321)
#    Time: 1210270 ns  Iteration: 1  Instance: /BrianHG_DDR3_PHY_SEQ_tb
# Break in Module BrianHG_DDR3_PHY_SEQ_tb at BrianHG_DDR3_PHY_SEQ_tb.sv line 321

Not a single warning or error....

This is the core memory controler which basically does this:
Code: [Select]
// **********************************************************************************************************************************
// *** Inner Sequencer Running at DDR3_CK clock frequency.
// **********************************************************************************************************************************
// ---------------------------------------------------------------------------------------------------------------------------------------
// CMD         - Sequence
// ---------------------------------------------------------------------------------------------------------------------------------------
// RESET_ON/OFF- Clear all active bank flags & do a reset / power-up sequence.  Forced immediately...
// MRS         - If any banks are active, do a precharge all banks, then set MRS using the bank as the MR# and the upper address as the config.
// REFRESH     - If any active bank ID flags have been set, precharge all banks & clear all the activated bank ID flags, then do a REFRESH
// READ        - If current read req bank's row != the existing active bank ID's row, first ***ACTIVATE the requested row, then READ command
// WRITE       - Same as READ.
//               *** When ACTIVATING a new row, if the new chosen bank ID was already activated, first do a PRECHARGE to release that 1 bank,
//                   then do the ACTIVATE command & set that bank's ID to the new row.
// ZQCL        - Do a long form 512 clock ZQCL write level calibration.
// ZQCS        - Do a short form 64 clock ZQCS write level calibration.
// READ_CAL    - Skips row activate and does a CAS read of address 0 for read level/read timing calibration.
// NOP         - Just adds a dummy tCK nop.
// ---------------------------------------------------------------------------------------------------------------------------------------


Yes, this controler keeps track of multiple open banks and will smartly switch between them without sending additional 'ACTIVATE/RAS' commands & close (PRECHARGE) / open single banks as needed.  Great for partioning your memory where the ram controller would act like 8 different ram controllers only ACTIVATING a row as needed in each of your memory domains.

Next, get this part working on the DECA board.
Then, get the multiport COMMANDER module working.
Then, release the first version with a functioning demo.
Then, get it simulating on Lattice Diamond.
(Yes, it will be 100% free opensource...)
« Last Edit: March 06, 2021, 11:47:27 am by BrianHG »
 
The following users thanked this post: Omega Glory, nockieboy

Offline SMB784

  • Frequent Contributor
  • **
  • Posts: 421
  • Country: us
    • Tequity Surplus
Re: FPGA VGA Controller for 8-bit computer
« Reply #2505 on: March 06, 2021, 04:34:13 pm »
DDR3 Status update.

Arrrgggg, +3k lines of new code and finally.....  >:D
100% By the book!!!

Testbench script:
Code: [Select]
[at]CMD READ  <32'hex ADDR> <32'hex VECTOR>                  > Transmits a read request at address ADDR with the target vector set to VECTOR.
[at]CMD WRITE <32'hex ADDR> <32'binary MASK>  <256'hex DATA> > Transmits a read request at address ADDR with the target vector set to VECTOR.
[at]CMD DELAY <time in microseconds>                         > Adds a huge delay.


@LOG_FILE  DDR3_SEQ_CMD_script_log.txt

@CMD READ  00000000 0
@CMD READ  00000800 0
@CMD READ  00010820 0
@CMD READ  00000000 0
@CMD READ  00010800 0
@CMD READ  00011800 0
@CMD READ  00012000 0
@CMD READ  00012800 0
@CMD READ  00013000 0
@CMD READ  00013800 0
@CMD WRITE 00013800 11111111111111111111111111111111 0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
@CMD WRITE 00013820 11111111111111111111111111111111 0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF
@CMD READ  00013800 0


Output from Micron's DDR3 Verilog Model:
Code: [Select]
#  Note : Cyclone IV E PLL was reset
# Time: 0.0 ps  Instance: BrianHG_DDR3_PHY_SEQ_tb.DUT_DDR3_PLL.genblk3.HPLL1.cycloneiii_pll.pll3
#  Note : Cyclone IV E PLL locked to incoming clock
# Time: 2670000.0 ps  Instance: BrianHG_DDR3_PHY_SEQ_tb.DUT_DDR3_PLL.genblk3.HPLL1.cycloneiii_pll.pll3
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203163000.0 ps INFO: Load Mode 2
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203163000.0 ps INFO: Load Mode 2 Partial Array Self Refresh = Bank 0-7
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203163000.0 ps INFO: Load Mode 2 CAS Write Latency =           6
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203163000.0 ps INFO: Load Mode 2 Auto Self Refresh = Disabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203163000.0 ps INFO: Load Mode 2 Self Refresh Temperature = Extended
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203163000.0 ps INFO: Load Mode 2 Dynamic ODT = Disabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203171000.0 ps INFO: Load Mode 3
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203171000.0 ps INFO: Load Mode 3 MultiPurpose Register Select = Pre-defined pattern
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203171000.0 ps INFO: Load Mode 3 MultiPurpose Register Enable = Disabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 DLL Enable = Enabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 Output Drive Strength =          40 Ohm
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 ODT Rtt =         120 Ohm
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 Additive Latency = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 Write Levelization = Disabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 TDQS Enable = Disabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203179000.0 ps INFO: Load Mode 1 Qoff = Enabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0 Burst Length =  8
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0 Burst Order = Sequential
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0 CAS Latency =           7
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0 DLL Reset = Reset DLL
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0 Write Recovery =           8
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203187000.0 ps INFO: Load Mode 0 Power Down Mode = DLL off
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203211000.0 ps INFO: ZQ        long = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1203211000.0 ps INFO: Initialization Sequence is complete
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204235000.0 ps INFO: Load Mode 3
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204235000.0 ps INFO: Load Mode 3 MultiPurpose Register Select = Pre-defined pattern
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204235000.0 ps INFO: Load Mode 3 MultiPurpose Register Enable = Enabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204259000.0 ps INFO: Read      bank 3 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204267000.0 ps INFO: Read      bank 3 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204272000.0 ps READ @ DQS MultiPurpose Register 0, col = 0,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204273000.0 ps READ @ DQS MultiPurpose Register 0, col = 1,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204274000.0 ps READ @ DQS MultiPurpose Register 0, col = 2,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204275000.0 ps READ @ DQS MultiPurpose Register 0, col = 3,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204276000.0 ps READ @ DQS MultiPurpose Register 0, col = 4,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204277000.0 ps READ @ DQS MultiPurpose Register 0, col = 5,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204278000.0 ps READ @ DQS MultiPurpose Register 0, col = 6,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204279000.0 ps READ @ DQS MultiPurpose Register 0, col = 7,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204280000.0 ps READ @ DQS MultiPurpose Register 0, col = 0,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204281000.0 ps READ @ DQS MultiPurpose Register 0, col = 1,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204282000.0 ps READ @ DQS MultiPurpose Register 0, col = 2,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204283000.0 ps READ @ DQS MultiPurpose Register 0, col = 3,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204284000.0 ps READ @ DQS MultiPurpose Register 0, col = 4,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204285000.0 ps READ @ DQS MultiPurpose Register 0, col = 5,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204286000.0 ps READ @ DQS MultiPurpose Register 0, col = 6,  data = 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204287000.0 ps READ @ DQS MultiPurpose Register 0, col = 7,  data = 1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204291000.0 ps INFO: Load Mode 3
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204291000.0 ps INFO: Load Mode 3 MultiPurpose Register Select = Pre-defined pattern
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204291000.0 ps INFO: Load Mode 3 MultiPurpose Register Enable = Disabled
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204315000.0 ps INFO: Activate  bank 0 row 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204331000.0 ps INFO: Read      bank 0 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204339000.0 ps INFO: Read      bank 0 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204344000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204345000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204345000.0 ps INFO: Activate  bank 1 row 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204346000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204347000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204348000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204349000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204350000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204351000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204352000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204353000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204354000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204355000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204356000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204357000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204358000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204359000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204361000.0 ps INFO: Read      bank 1 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204369000.0 ps INFO: Read      bank 1 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204374000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204375000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204376000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204377000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204378000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204379000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204380000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204381000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204381000.0 ps INFO: Precharge bank   1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204382000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204383000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204384000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204385000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204386000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204387000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204388000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204389000.0 ps INFO: READ @ DQS= bank = 1 row = 0000 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204397000.0 ps INFO: Activate  bank 1 row 0004
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204413000.0 ps INFO: Read      bank 1 col 010, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204421000.0 ps INFO: Read      bank 1 col 018, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204426000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000010 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204427000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000011 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204428000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000012 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204429000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000013 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204429000.0 ps INFO: Read      bank 0 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204430000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000014 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204431000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000015 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204432000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000016 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204433000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000017 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204434000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000018 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204435000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000019 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204436000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000001a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204437000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000001b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204437000.0 ps INFO: Read      bank 0 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204438000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000001c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204439000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000001d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204440000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000001e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204441000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000001f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204442000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204443000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204444000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204445000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204445000.0 ps INFO: Read      bank 1 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204446000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204447000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204448000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204449000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204450000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204451000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204452000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204453000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204453000.0 ps INFO: Read      bank 1 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204454000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204455000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204456000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204457000.0 ps INFO: READ @ DQS= bank = 0 row = 0000 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204458000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204459000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204459000.0 ps INFO: Activate  bank 3 row 0004
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204460000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204461000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204462000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204463000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204464000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204465000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204466000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204467000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204468000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204469000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204470000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204471000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204472000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204473000.0 ps INFO: READ @ DQS= bank = 1 row = 0004 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204475000.0 ps INFO: Read      bank 3 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204483000.0 ps INFO: Read      bank 3 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204488000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204489000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204489000.0 ps INFO: Activate  bank 4 row 0004
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204490000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204491000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204492000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204493000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204494000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204495000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204496000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204497000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204498000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204499000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204500000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204501000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204502000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204503000.0 ps INFO: READ @ DQS= bank = 3 row = 0004 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204505000.0 ps INFO: Read      bank 4 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204513000.0 ps INFO: Read      bank 4 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204518000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204519000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204519000.0 ps INFO: Activate  bank 5 row 0004
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204520000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204521000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204522000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204523000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204524000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204525000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204526000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204527000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204528000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204529000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204530000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204531000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204532000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204533000.0 ps INFO: READ @ DQS= bank = 4 row = 0004 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204535000.0 ps INFO: Read      bank 5 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204543000.0 ps INFO: Read      bank 5 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204548000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204549000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204549000.0 ps INFO: Activate  bank 6 row 0004
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204550000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204551000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204552000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204553000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204554000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204555000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204556000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204557000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204558000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204559000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204560000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204561000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204562000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204563000.0 ps INFO: READ @ DQS= bank = 5 row = 0004 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204565000.0 ps INFO: Read      bank 6 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204573000.0 ps INFO: Read      bank 6 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204578000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204579000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204579000.0 ps INFO: Activate  bank 7 row 0004
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204580000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204581000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204582000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204583000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204584000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204585000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204586000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204587000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204588000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204589000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204590000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204591000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204592000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204593000.0 ps INFO: READ @ DQS= bank = 6 row = 0004 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204595000.0 ps INFO: Read      bank 7 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204603000.0 ps INFO: Read      bank 7 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204608000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000000 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204609000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000001 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204610000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000002 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204611000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000003 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204612000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000004 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204613000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000005 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204614000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000006 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204615000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000007 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204616000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000008 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204617000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000009 data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204617000.0 ps INFO: Write     bank 7 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204618000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000a data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204619000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000b data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204620000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000c data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204621000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000d data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204622000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000e data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204623000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000f data = xxxx
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204625000.0 ps INFO: Write     bank 7 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.main: at time 1204625000.0 ps INFO: Sync On Die Termination Rtt_NOM =        120 Ohm
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204630000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000000 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204631000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000001 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204632000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000002 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204633000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000003 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204633000.0 ps INFO: Write     bank 7 col 010, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204634000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000004 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204635000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000005 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204636000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000006 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204637000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000007 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204638000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000008 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204639000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000009 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204640000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000000a data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204641000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000000b data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204641000.0 ps INFO: Write     bank 7 col 018, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204642000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000000c data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204643000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000000d data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204644000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000000e data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204645000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000000f data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204646000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000010 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204647000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000011 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204648000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000012 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204649000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000013 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204650000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000014 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204651000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000015 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204652000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000016 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204653000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000017 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204654000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000018 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204655000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 00000019 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204656000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000001a data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204657000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000001b data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204658000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000001c data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204659000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000001d data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204660000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000001e data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204661000.0 ps INFO: WRITE @ DQS= bank = 7 row = 0004 col = 0000001f data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.main: at time 1204661000.0 ps INFO: Sync On Die Termination Rtt_NOM =          0 Ohm
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204669000.0 ps INFO: Read      bank 7 col 000, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1204677000.0 ps INFO: Read      bank 7 col 008, auto precharge 0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204682000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000000 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204683000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000001 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204684000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000002 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204685000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000003 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204686000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000004 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204687000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000005 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204688000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000006 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204689000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000007 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204690000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000008 data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204691000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 00000009 data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204692000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000a data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204693000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000b data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204694000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000c data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204695000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000d data = ffff
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204696000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000e data = 0000
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.data_task: at time 1204697000.0 ps INFO: READ @ DQS= bank = 7 row = 0004 col = 0000000f data = ffff
#
# End of command source ASCII file 'DDR3_SEQ_CMD_script.txt'.
#   51 lines processed.
#
# ** Note: $stop    : BrianHG_DDR3_PHY_SEQ_tb.sv(321)
#    Time: 1205150 ns  Iteration: 1  Instance: /BrianHG_DDR3_PHY_SEQ_tb
# Break in Module BrianHG_DDR3_PHY_SEQ_tb at BrianHG_DDR3_PHY_SEQ_tb.sv line 321
#
run -all (continue...)
#
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge All
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   0
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   1
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   3
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   4
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   5
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   6
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205493000.0 ps INFO: Precharge bank   7
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1205509000.0 ps INFO: Refresh 
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1206095000.0 ps INFO: Refresh 
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1207895000.0 ps INFO: Refresh 
# BrianHG_DDR3_PHY_SEQ_tb.sdramddr3_0.cmd_task: at time 1209695000.0 ps INFO: Refresh 
# ** Note: $stop    : BrianHG_DDR3_PHY_SEQ_tb.sv(321)
#    Time: 1210270 ns  Iteration: 1  Instance: /BrianHG_DDR3_PHY_SEQ_tb
# Break in Module BrianHG_DDR3_PHY_SEQ_tb at BrianHG_DDR3_PHY_SEQ_tb.sv line 321

Not a single warning or error....

This is the core memory controler which basically does this:
Code: [Select]
// **********************************************************************************************************************************
// *** Inner Sequencer Running at DDR3_CK clock frequency.
// **********************************************************************************************************************************
// ---------------------------------------------------------------------------------------------------------------------------------------
// CMD         - Sequence
// ---------------------------------------------------------------------------------------------------------------------------------------
// RESET_ON/OFF- Clear all active bank flags & do a reset / power-up sequence.  Forced immediately...
// MRS         - If any banks are active, do a precharge all banks, then set MRS using the bank as the MR# and the upper address as the config.
// REFRESH     - If any active bank ID flags have been set, precharge all banks & clear all the activated bank ID flags, then do a REFRESH
// READ        - If current read req bank's row != the existing active bank ID's row, first ***ACTIVATE the requested row, then READ command
// WRITE       - Same as READ.
//               *** When ACTIVATING a new row, if the new chosen bank ID was already activated, first do a PRECHARGE to release that 1 bank,
//                   then do the ACTIVATE command & set that bank's ID to the new row.
// ZQCL        - Do a long form 512 clock ZQCL write level calibration.
// ZQCS        - Do a short form 64 clock ZQCS write level calibration.
// READ_CAL    - Skips row activate and does a CAS read of address 0 for read level/read timing calibration.
// NOP         - Just adds a dummy tCK nop.
// ---------------------------------------------------------------------------------------------------------------------------------------


Yes, this controler keeps track of multiple open banks and will smartly switch between them without sending additional 'ACTIVATE/RAS' commands & close (PRECHARGE) / open single banks as needed.  Great for partioning your memory where the ram controller would act like 8 different ram controllers only ACTIVATING a row as needed in each of your memory domains.

Next, get this part working on the DECA board.
Then, get the multiport COMMANDER module working.
Then, release the first version with a functioning demo.
Then, get it simulating on Lattice Diamond.
(Yes, it will be 100% free opensource...)

Fucking impressive man.  Well done indeed.  I look forward to using this as a stand alone unit in my designs in the future.

Online SiliconWizard

  • Super Contributor
  • ***
  • Posts: 14490
  • Country: fr
Re: FPGA VGA Controller for 8-bit computer
« Reply #2506 on: March 06, 2021, 05:39:40 pm »
Then, get it simulating on Lattice Diamond.

Diamond now ships with Modelsim so that shouldn' t be a problem.
If you ever want to synthesize it with Diamond though, just a quick tip: as far as I saw, you're using SystemVerilog? Lattice LSE (Lattice own synthesis engine) doesn't support SystemVerilog AFAIK, so you'll need to use Synplify Pro instead. Diamond comes with both, so it's just a matter of selecting Synplify as the synthesis tool. Just so you don't waste time looking that up.
 

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 7747
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2507 on: March 06, 2021, 08:43:44 pm »
Then, get it simulating on Lattice Diamond.

Diamond now ships with Modelsim so that shouldn' t be a problem.
If you ever want to synthesize it with Diamond though, just a quick tip: as far as I saw, you're using SystemVerilog? Lattice LSE (Lattice own synthesis engine) doesn't support SystemVerilog AFAIK, so you'll need to use Synplify Pro instead. Diamond comes with both, so it's just a matter of selecting Synplify as the synthesis tool. Just so you don't waste time looking that up.
Yes it does, well it seemed to.  I got my .SV ellipse generator & .BMP saver test bench working here working with ActiveHDL, so I know the 1 or 2 little changes needed:
https://www.eevblog.com/forum/fpga/systemverilog-example-testbench-which-saves-a-bmp-picture-and-executes-a-script/msg3465172/#msg3465172

I also got my HDMI_PLL.SV going in Lattice's Synplify-Pro.  It's their stupid arcane:
Code: [Select]
    EHXPLLL HPLL0     (.CLKI(clk_in),           .CLKFB(PLL0_clk_out[0]), // was an assigned wire (CLKOP_t)
                       .PHASESEL1(scuba_vlo0),  .PHASESEL0(scuba_vlo0),   .PHASEDIR(scuba_vlo0), .PHASESTEP(scuba_vlo0), .PHASELOADREG(scuba_vlo0),
                       .STDBY(scuba_vlo0),      .PLLWAKESYNC(scuba_vlo0), .RST(scuba_vlo0),
                       .ENCLKOP(scuba_vlo0),    .ENCLKOS(scuba_vlo0),     .ENCLKOS2(scuba_vlo0), .ENCLKOS3(scuba_vlo0),
                       .CLKOP(PLL0_clk_out[0]), .CLKOS(),                 .CLKOS2(),             .CLKOS3(),
                       .LOCK(LOCK0),            .INTLOCK(),               .REFCLK(REFCLK0),      .CLKINTFB())
             /* synthesis FREQUENCY_PIN_CLKOP  = "WTF MUST THIS NUMBER HERE BE AN ASCII NUMBER IN QUOTES" */
             /* synthesis FREQUENCY_PIN_CLKI   = "WTF MUST THIS NUMBER HERE BE AN ASCII NUMBER IN QUOTES" */
             /* synthesis ICP_CURRENT="6" */
             /* synthesis LPF_RESISTOR="16" */;
 defparam
 HPLL0.CLKOS3_DIV       = 1,          HPLL0.CLKOS2_DIV     = 1,          HPLL0.CLKOS_DIV       = 1,
 HPLL0.CLKOP_DIV        = PLL0_div,   HPLL0.CLKFB_DIV      = PLL0_mult,  HPLL0.CLKI_DIV        = 1,
 
 HPLL0.CLKOS3_FPHASE    = 0,          HPLL0.CLKOS3_CPHASE  = 0,
 HPLL0.CLKOS2_FPHASE    = 0,          HPLL0.CLKOS2_CPHASE  = 0,
 HPLL0.CLKOS_FPHASE     = 0,          HPLL0.CLKOS_CPHASE   = 0,
 HPLL0.CLKOP_FPHASE     = 0,          HPLL0.CLKOP_CPHASE   = (PLL0_div-1),

 HPLL0.FEEDBK_PATH      = "CLKOP",    HPLL0.PLL_LOCK_MODE  = 0,

 HPLL0.OUTDIVIDER_MUXD  = "DIVD",     HPLL0.CLKOS3_ENABLE  = "DISABLED",
 HPLL0.OUTDIVIDER_MUXC  = "DIVC",     HPLL0.CLKOS2_ENABLE  = "DISABLED",
 HPLL0.OUTDIVIDER_MUXB  = "DIVB",     HPLL0.CLKOS_ENABLE   = "DISABLED",
 HPLL0.OUTDIVIDER_MUXA  = "DIVA",     HPLL0.CLKOP_ENABLE   = "ENABLED",
 HPLL0.PLLRST_ENA       = "DISABLED", HPLL0.INTFB_WAKE     = "DISABLED", HPLL0.STDBY_ENABLE     = "DISABLED", HPLL0.DPHASE_SOURCE  = "DISABLED",
 HPLL0.CLKOS_TRIM_DELAY = 0,          HPLL0.CLKOS_TRIM_POL = "FALLING",  HPLL0.CLKOP_TRIM_DELAY = 0,          HPLL0.CLKOP_TRIM_POL = "FALLING";

It's that stupid comment  /* synthesis FREQUENCY_PIN_CLKOP/CLKI ="WTF MUST THIS NUMBER HERE BE AN ASCII NUMBER IN QUOTES" */ '
I cannot place a computed parameter there.  Only a fixed ASCII number in quotes, otherwise Diamond says my PLL is illegal configured to 0MHz, and it stops there.

Lattice tole me just to use their Clarity Designer to make to PLL, but, I told them there were was a possibility of around 100 different PLL configurations and I would need Clarity to make ~100 .V files, and selectively include one instead of properly doing things a true software selection route.

Diamond may have been always automatically pushing my .SV code through SynplifyPro and it's just been accepting things so far.  It would be kind of old and sad that Diamond cannot support at least an HDL language where I can use packed 2 dimensional registers.

Everything else I coded should be straight forward.

If a .V file would support a 2D array port, then my code is simple to change back to old fashioned Verilog.
EG:
reg [15:0]  BANK_ROW_LOCATION [0:7] = '{0,0,0,0,0,0,0,0};

Instead of 'logic'

This is the only reason I have been using SystemVerilog.  It's so I can have addressable regs like 8 x 16 bit bank_row_location s to scan in a simple for loop, or pass all 8 from 1 module to another.
« Last Edit: March 06, 2021, 08:54:17 pm by BrianHG »
 

Online SiliconWizard

  • Super Contributor
  • ***
  • Posts: 14490
  • Country: fr
Re: FPGA VGA Controller for 8-bit computer
« Reply #2508 on: March 06, 2021, 08:53:28 pm »
Then, get it simulating on Lattice Diamond.

Diamond now ships with Modelsim so that shouldn' t be a problem.
If you ever want to synthesize it with Diamond though, just a quick tip: as far as I saw, you're using SystemVerilog? Lattice LSE (Lattice own synthesis engine) doesn't support SystemVerilog AFAIK, so you'll need to use Synplify Pro instead. Diamond comes with both, so it's just a matter of selecting Synplify as the synthesis tool. Just so you don't waste time looking that up.
Yes it does, well it seemed to.  I got my .SV ellipse generator & .BMP saver test bench working here working with ActiveHDL, so I know the 1 or 2 little changes needed:

I dunno if my post was not clear enough, but it seems you're confusing synthesis with simulation here.

LSE (or Synplify) are synthesis tools. They don't do simulation and are not used for simulation. And AFAIK, LSE doesn't support SV, at least that's what is stated in the docs?

For simulation, yes ActiveHDL was bundled with Diamond before they switched to Modelsim (recently). ActiveHDL is a third-party simulation tool and has nothing in common with LSE that I know of.
 

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 7747
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2509 on: March 06, 2021, 09:08:12 pm »
It's the 'SynplifyPro', I've been using it from day one as the instructional video I used only had designs compiled through 'SynplifyPro'.  So I never knew that Diamond didn't do SystemVerilog internally even though it took my SystemVerilog and compiled a FPGA.

This was my first introduction to Diamond:


Right now, I need to finish my controler's multiport interface and prep a demo using the multiport to drive a 1080p video output with a geometry processor driving an alternate port & maybe an debug port on another port.

And one last issue is the generation of the .sdc file.  Just a bit of math, but needs to be done right.  Right now, I made the DDR3 IO port forced to the IO Pin;'s Flipflop for best possible IO timing at the expense of fabric routing.  I also saw that Diamond also has the same feature to specify that you want your IO logic to use the flipflop at the IO pin.
 

Online SiliconWizard

  • Super Contributor
  • ***
  • Posts: 14490
  • Country: fr
Re: FPGA VGA Controller for 8-bit computer
« Reply #2510 on: March 06, 2021, 09:29:11 pm »
It's the 'SynplifyPro', I've been using it from day one as the instructional video I used only had designs compiled through 'SynplifyPro'.  So I never knew that Diamond didn't do SystemVerilog internally even though it took my SystemVerilog and compiled a FPGA.

As I said - since you mentioned ActiveHDL - both ActiveHDL and Modelsim are two third-party simulation tools. None do synthesis and none are developed by Lattice. This was to reply to your remark that ActiveHDL took your SV whereas I was talking about synthesis.

Diamond has been offering two synthesis tools for a long time: LSE and Synplify Pro. LSE is Lattice's own synthesis tool. Synplify Pro is a well-known tool they licensed from Synopsys (and that is used by most other FPGA vendors too.)

LSE doesn't support SV AFAIK (at least so far), but I mentioned it not knowing which synthesis tool you were using or if you even were aware of it. I also think LSE is default when you create a new project in Diamond, hence my warning. Now if for some reason you've always selected Synplify Pro, you can ignore the warning.

But now you know Lattice have their own synthesis tool. And apart from not supporting SV and no (or very little) VHDL-2008, it's not bad. It's faster than Synplify and may even produce better results entirely depending on your design. It's sometimes interesting to compare results using both.
 

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 7747
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2511 on: March 11, 2021, 06:24:21 pm »
DDR3 update:  Finally moved code from ModelSim to Quartus and set it up for the Deca board.  After a bunch of conflicts and even Quartus crashes.  It's finally in there, but, I first have to fix the 'FMAX' problem as attaining 320MHz operation with my current core wont make it.  It will take a few days to clean up the 'glut'.
 
The following users thanked this post: nockieboy

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 7747
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2512 on: March 15, 2021, 12:13:27 pm »
DDR3 Update: Almost there.  I'm short 2MHz as shown in the photo, though, I still need to design it with some more breathing room.  Also still need to define the IO constraints, but the 'gate-level' simulation has finally passed read calibration.  It will be a few more days.
 
The following users thanked this post: nockieboy

Offline asmi

  • Super Contributor
  • ***
  • Posts: 2733
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2513 on: March 15, 2021, 02:08:33 pm »
Also still need to define the IO constraints
You might want to do it sooner rather than later, as routing delays can be quite significant. I have seen (and done) IO designs that have Fmax fluctuate as much as 20% depending on the pinout you choose.

Offline nockieboyTopic starter

  • Super Contributor
  • ***
  • Posts: 1812
  • Country: england
Re: FPGA VGA Controller for 8-bit computer
« Reply #2514 on: March 15, 2021, 06:02:24 pm »
I've put together a basic Pong game in CP/M using the GPU with the limited spare time I've had recently.   Just need to display the score on the game screen and it'll be done.  It works in all three screen modes (that I currently have on the EP4CE10 GPU), though the video just shows 320x200.

Apologies for the focus in the video - my camera doesn't seem to want to play these days.  ::)



EDIT: Oh - it'll be done when the scores are displayed and also when I adjust the return angle of the ball based on where it hits the bat, to add a little more complexity to the game.  At the moment it's more a proof-of-concept than anything else.  ;)
« Last Edit: March 15, 2021, 06:05:56 pm by nockieboy »
 
The following users thanked this post: BrianHG

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 7747
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2515 on: March 15, 2021, 09:22:40 pm »
Also still need to define the IO constraints
You might want to do it sooner rather than later, as routing delays can be quite significant. I have seen (and done) IO designs that have Fmax fluctuate as much as 20% depending on the pinout you choose.
My code has assignable pipe delays to the IO.  There wont be any routing problems.
The route for the DQ on the writes is already huge due to CWL.
The read CL and data ready toggle can be set from 0 on up generating an automatic sequential pipe from the pins to your core.

Also, only clocks C2 and C1 will be effected by IO pin timing.  And when I add just 1 single additional pipe-line delay to those guys, they max out at 500MHz (Core limit), IO 1GHz DDR rate.

The limiting FMAX is being cut down due to crossing clock domain boundaries and the way I'm running my 5 command timers which keep track of when the next requested command's earliest possible time to be sent.  Funny how it's the system global reset which has caused a huge problem up until now...

I'm just learning the limits of setting the 'multicycle' paths VS cutting clock domain paths.

I should be on the IO timing tomorrow which will finally yield real hardware communication.

« Last Edit: March 15, 2021, 09:34:13 pm by BrianHG »
 

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 7747
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2516 on: March 15, 2021, 09:25:36 pm »
I've put together a basic Pong game in CP/M using the GPU with the limited spare time I've had recently.   Just need to display the score on the game screen and it'll be done.  It works in all three screen modes (that I currently have on the EP4CE10 GPU), though the video just shows 320x200.

Apologies for the focus in the video - my camera doesn't seem to want to play these days.  ::)



EDIT: Oh - it'll be done when the scores are displayed and also when I adjust the return angle of the ball based on where it hits the bat, to add a little more complexity to the game.  At the moment it's more a proof-of-concept than anything else.  ;)
Wow, your first game.  :-+
How are you moving those paddles?
It almost looks as if you keep track of key-down and key-up...

And to think with the ellipse you could easily animate a ball squish/squeeze effect when it bounces off of the paddles and walls...  That would look cool with definition at 640x400.
« Last Edit: March 15, 2021, 09:27:58 pm by BrianHG »
 

Offline nockieboyTopic starter

  • Super Contributor
  • ***
  • Posts: 1812
  • Country: england
Re: FPGA VGA Controller for 8-bit computer
« Reply #2517 on: March 15, 2021, 10:07:55 pm »
How are you moving those paddles?
It almost looks as if you keep track of key-down and key-up...

Well if I use CP/M's BIOS routines to read the keyboard, I can only read one key down at a time - so if one paddle is moving, the other can't, even if a key pressed for it.  Instead I'm using a hardware IO port that I put on the CPU card some time ago and a very basic (8 buttons) controller I made - each button grounds a bit on the IO port when pressed.  The Pong loop reads the IO port value - bits 4 & 7 are up/down for the left paddle, bits 0 and 3 are up/down for the right paddle, and all bits are acted upon each loop so simultaneous control of both paddles is possible.

And to think with the ellipse you could easily animate a ball squish/squeeze effect when it bounces off of the paddles and walls...  That would look cool with definition at 640x400.

Absolutely.  One for the to-do list.   :-+
 

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 7747
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2518 on: March 16, 2021, 04:08:50 am »
How are you moving those paddles?
It almost looks as if you keep track of key-down and key-up...

Well if I use CP/M's BIOS routines to read the keyboard, I can only read one key down at a time - so if one paddle is moving, the other can't, even if a key pressed for it.  Instead I'm using a hardware IO port that I put on the CPU card some time ago and a very basic (8 buttons) controller I made - each button grounds a bit on the IO port when pressed.  The Pong loop reads the IO port value - bits 4 & 7 are up/down for the left paddle, bits 0 and 3 are up/down for the right paddle, and all bits are acted upon each loop so simultaneous control of both paddles is possible.

And to think with the ellipse you could easily animate a ball squish/squeeze effect when it bounces off of the paddles and walls...  That would look cool with definition at 640x400.

Absolutely.  One for the to-do list.   :-+
What happened to the key-down, key-up trick I mentioned way back using the MSB bit in the keyboard routine to send the key-ups which would be ignored by the normal CP/M routines, but, you may intercept them to respond to multiple key presses simultaneously?
 

Offline nockieboyTopic starter

  • Super Contributor
  • ***
  • Posts: 1812
  • Country: england
Re: FPGA VGA Controller for 8-bit computer
« Reply #2519 on: March 16, 2021, 11:18:29 am »
What happened to the key-down, key-up trick I mentioned way back using the MSB bit in the keyboard routine to send the key-ups which would be ignored by the normal CP/M routines, but, you may intercept them to respond to multiple key presses simultaneously?

I forgot all about those! :o  I really haven't had a lot of time to do anything these past few weeks and that isn't going to change until after Easter, so no surprise I forgot about the extra bit to show key-ups.  I don't even remember if it was working or not - will have to go look at the HDL and see what I've got set up for it.  Also, reading the IO port directly for key presses will be quicker than going through the CP/M methods anyway.

EDIT:  Yes, it's active.  The ASCII code passed via the GPU's keyboard IO port has bit 7 set if it's a key-up.
« Last Edit: March 16, 2021, 08:39:36 pm by nockieboy »
 

Online BrianHG

  • Super Contributor
  • ***
  • Posts: 7747
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2520 on: March 19, 2021, 02:35:45 pm »
The DDR3 is coming.... Having a scope would have saved me almost a week as the CLK out to the ram wasn't oscillating due to unknown BS as it simulated fine both at logic and gate level properly, sound design, but something about the MAX10 as the chosen IOs just generated dead output.  It's a pain avoiding a bunch of Altera's eccentricities as I avoid their built in DDRx PHY and do everything in a way which can be supported throughout all Altera FPGAs as well as be ported to other FPGA vendors.
 

Online SiliconWizard

  • Super Contributor
  • ***
  • Posts: 14490
  • Country: fr
Re: FPGA VGA Controller for 8-bit computer
« Reply #2521 on: March 19, 2021, 06:04:08 pm »
The DDR3 is coming.... Having a scope would have saved me almost a week as the CLK out to the ram wasn't oscillating due to unknown BS as it simulated fine both at logic and gate level properly, sound design, but something about the MAX10 as the chosen IOs just generated dead output.  It's a pain avoiding a bunch of Altera's eccentricities as I avoid their built in DDRx PHY and do everything in a way which can be supported throughout all Altera FPGAs as well as be ported to other FPGA vendors.

Wow you're designing all this without a scope?
 

Offline asmi

  • Super Contributor
  • ***
  • Posts: 2733
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2522 on: March 19, 2021, 06:11:03 pm »
Wow you're designing all this without a scope?
I design most of my projects without a scope, as IO speeds far exceed what my scope is capable of, while the kind of scopes which would be capable of displaying would cost insane money.

Offline nockieboyTopic starter

  • Super Contributor
  • ***
  • Posts: 1812
  • Country: england
Re: FPGA VGA Controller for 8-bit computer
« Reply #2523 on: March 19, 2021, 07:32:09 pm »
I design most of my projects without a scope, as IO speeds far exceed what my scope is capable of, while the kind of scopes which would be capable of displaying would cost insane money.

And there I was a couple of years ago thinking a 20MHz analogue scope (that I bought for about £20 on eBay) would be more than enough for my project.  ;)  Actually, it was for the 8MHz Z80 computer I built (though a cheap logic analyser has replaced the scope for just about everything), but this stuff is just a whole other level.  A week or so back I thought - for a laugh - I'd see how much a good(-ish) oscilloscope would cost me that a YouTuber I watch uses (Ben Eater).  His Keysight DSOX1204G looks pretty smart, I thought to myself.  Then I found out it's over £1,300 and that's just a 70MHz model..  A 1GHz scope would cost as much as a half decent new car! :o

So yeah, unless you work in the EE industry and have access to professional equipment (and I certainly do not fulfil either of those requirements), I'd say using a scope for this work would be prohibitively expensive.
 

Offline asmi

  • Super Contributor
  • ***
  • Posts: 2733
  • Country: ca
Re: FPGA VGA Controller for 8-bit computer
« Reply #2524 on: March 19, 2021, 07:46:25 pm »
And there I was a couple of years ago thinking a 20MHz analogue scope (that I bought for about £20 on eBay) would be more than enough for my project.  ;)  Actually, it was for the 8MHz Z80 computer I built (though a cheap logic analyser has replaced the scope for just about everything), but this stuff is just a whole other level.  A week or so back I thought - for a laugh - I'd see how much a good(-ish) oscilloscope would cost me that a YouTuber I watch uses (Ben Eater).  His Keysight DSOX1204G looks pretty smart, I thought to myself.  Then I found out it's over £1,300 and that's just a 70MHz model..  A 1GHz scope would cost as much as a half decent new car! :o

So yeah, unless you work in the EE industry and have access to professional equipment (and I certainly do not fulfil either of those requirements), I'd say using a scope for this work would be prohibitively expensive.
There is a good news though - Xilinx provides free "Integrated Logic Analyzer" IP, which is an excellent substitute for situations when your IO interface doesn't quite work and you are not sure why. In a way it's even better because unlike external scope/LA, it doesn't distort the signal when you connect it to traces you want to probe. You can use it to visualize internal signals in your design as well, but I use the core mostly to debug IO interfaces, as often peripheral devices datasheets leave a lot of be desired, forcing you to find out how it actually works using a good-ol' trial-and-error approach. For multi-gigabit serial transceivers there is also free IBERT core, which allows measuring and visualizing of a signal eye in real time - again, without disturbing transmission lines with probes.

I'm pretty sure Intel has similar cores, though I don't know if they are free or cost money.

The scope I have is 2 input 200 MHz bandwidth which is good enough for slower peripherals, but nowhere near enough for stuff like DDR3, not to mention multi-gigabit links.
« Last Edit: March 21, 2021, 04:04:23 am by asmi »
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf