Git Product home page Git Product logo

Comments (10)

cospan avatar cospan commented on July 27, 2024

I haven't looked at this in a while so it took me a little while why it's like this.

From what I remember, It depends on the platform that you use.

In the Xilinx Spartan 6 GTP The OOB controller takes in strobes. So, for example if you want to send a COMM RESET Pattern to the hard drive you strobe the 'tx_comm_reset ' signal for one clock cycle and the GTP will perform the long sequence of squelches in the appropriate pattern and then set the 'tx_oob_complete' high to say it's finished with the reset sequence.

from nysa-sata.

Jzone315 avatar Jzone315 commented on July 27, 2024

You were right , I tried to make it working on kintex7 platform , so I keep these two signals up to 1.06us , for now linkup has been completed , however i have observed a others problem , when the platform startup,
signal sata_ready can't be asserted , because in the sata_link_layer_read.v module , signal idle always be low, what i known is when startup , the ssd will send the x_rdy signal ,which cause the state to fall into the READ_START , but without sof or even sync signal , this makes it as a dead state , i tried a lot of ways but with the same results , how can i settle this? why can't i receive the sof or other signals? is there any suggestions? Thanks a lot.

from nysa-sata.

cospan avatar cospan commented on July 27, 2024

I'm glad to hear you saw linkup!

I'm looking at 'sata_link_layer_read.v'

I think this is what you are saying correct?

SSD -> FPGA

ALIGN
XRDY
! SOF && !SYNC??

That's strange, the sequence should be:

SSD/FPGA: SYNC (IDLE)
...
SSD: X_RDY (Transmit Ready)
FPGA: R_RDY (Read Ready)
SSD: SOF (Start of Frame)
SSD: DATA... (Data)
SSD: EOF (Endo of Frame)
SSD: WTRM (Write Terminate)
FPGA: R_OK (Response is Okay!)
SSD/FPGA: SYNC (IDLE)
...

It looks like the FPGA is not sending the 'Read Ready' signal. or the transmitter is not correctly configured to send the R_RDY correctly.

The value that is sent from the FPGA should be:

R_RDY: 0x4A4A957C
When it is scrambled it should be... (I think):
R_RDY (Scrambled): 0x8898E3F1

tx_dout = 32'h8898E3F1
tx_is_k' = 1

If this is true then the read state machine is correctly sending out 'R_RDY' and the transceiver may not be correctly sending data.

Dave

from nysa-sata.

cospan avatar cospan commented on July 27, 2024

Also, you might have the tx pair polarity inverted. I ran into a similar issue and found that I could invert the polarity within the SERDES module.

from nysa-sata.

Jzone315 avatar Jzone315 commented on July 27, 2024

I am hignly appreciated that you have totaly token what I meant.
But in my debug project , I have obseved the transmitter of R_RDY sequence in its primitive value 0x4A4A957C instead of the scrambled value 0x8898E3F1 , so did all the prim sequences(SYNC , X_RDY , SOF , EOF , R_RDY , WTRM , ...etc) need to be scrambled?
I found two singals prim_scrambler_en and data_scrambler_en in the top module , i did tied both of these two signals to 1 , but the transmitter of the prim sequences are still in thers primitive values , only the payload parts are in thers scrambled value , why did this happen?
And the receiver in my ILA core i observed are the primitive values too , did these primitive values caused the loss of the SOF and SYNC?
Thank you very much for my disturbance.

from nysa-sata.

Jzone315 avatar Jzone315 commented on July 27, 2024

I have checked the schematic and XDC file again , both the tx pair and rx pair are normal , if the PN pairs does inverted , how could the linkup is asserted?

from nysa-sata.

cospan avatar cospan commented on July 27, 2024

I am hignly appreciated that you have totaly token what I meant.

Your welcome!

But in my debug project , I have obseved the transmitter of R_RDY sequence in its primitive value 0x4A4A957C instead of the scrambled value 0x8898E3F1 , so did all the prim sequences(SYNC , X_RDY , SOF , EOF , R_RDY , WTRM , ...etc) need to be scrambled?

They should be scrambled before they are transmitted over the SATA link.

I found two singals prim_scrambler_en and data_scrambler_en in the top module , i did tied both of these two signals to 1 , but the transmitter of the prim sequences are still in thers primitive values , only the payload parts are in thers scrambled value , why did this happen?

You are correct the primitives should not be scrambled. I apologize, I forgot about that.

I have checked the schematic and XDC file again , both the tx pair and rx pair are normal , if the PN pairs does inverted , how could the linkup is asserted?

You are correct, I shouldn't have posted that at midnight.

I don't have an idea right now, but I think of something I'll let you know.

from nysa-sata.

Jzone315 avatar Jzone315 commented on July 27, 2024

Hi Dave
Sorry to interrupt you again.
I have fixed the issues now , it had something to do with my gtx phy , now i could start the sata tests , but i still has a little confusion .
According to the wiki , when i start a DMA write operation , i need to fill up 2048 bytes data to the fifo , but for all i know is the single one of the hdd's sector is 512 bytes , so can i set the sector_count and sector_address?
In my tests , when i use sector_count = 1 and sector_address = 0 to do DMA write , while in DMA read , the user_dout_size is 0x000080(128bytes) , when i use sector_count = 4 and sector_address = 0 to do DMA write , while in DMA read , the user_dout_size is 0x000200(512bytes) , so how should i exactly use the two signals in DMA write and read ?
Thanks a lot!
Jzone Wang

from nysa-sata.

cospan avatar cospan commented on July 27, 2024

Hi Jzone,

I have fixed the issues now , it had something to do with my gtx phy , now i could start the sata tests , but i still has a little confusion.

I'm happy to hear you fixed the issue!

According to the wiki , when i start a DMA write operation , i need to fill up 2048 bytes data to the fifo , but for all i know is the single one of the hdd's sector is 512 bytes , so can i set the sector_count and sector_address?

The minimum size you can write to the hard drive is 8192 bytes or 2048 32-bit values. You must write in the entire 2048 32-bit words in order to complete a transaction or else the hard drive will lock up.

When I first started I thought 512 bytes was the correct size too. This is correct for older hard drive communications but for the new hard drives the size of a sector is 8192 bytes. If you would like to write only 512 bytes you will need to read the 8192 byte sector into a local buffer, modify the 512 bytes and then write back an entire 8192 bytes.

1 sector_count = 8192 bytes (or 2048 32-bit values)

The reason why you must write 32-bit values is because the SATA stack operates at 1/4th the frequency of the byte clock for the gigabit transceiver.

SATA II = 2.5GHz frequency
Byte Frequency = 250MHz (8b10b)
SATA Stack = Byte Frequency / 4 = 75MHz

I hope this makes sense.

from nysa-sata.

morvaridS avatar morvaridS commented on July 27, 2024

Hi,
@Jzone315 I think I have the same problem that you had. Linkup is 1 but but it seems like the read and write signals aren't sent out correctly from the fpga (Kintex 7). Since you said you fixed this issue and it had something to do with your gtx phy, I'd appreciate if you tell me what the problem was and how you fixed it.
Thanks
Mori

from nysa-sata.

Related Issues (9)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.