Board Initialization and PE_Main Operation Regs

Added by Renato Sampaio about 5 years ago

Hi,

the description of the BRD_MODE and BRD_STATUS registers from the PE_MAIN module seems to be incomplete, in comparison to the equivalent structs listed on the driver.
Could you explain a little bit about how the initialization works with those registers?

The part I didn't understand is:

WriteOperationWordReg(brd,PEMAINadr_BRD_MODE, 0);
ToPause(100);    // pause ~ 100 msec
for(i = 0; i < 10; i++)
{
    WriteOperationWordReg(brd, PEMAINadr_BRD_MODE, 1);
    ToPause(100);    // pause ~ 100 msec
    WriteOperationWordReg(brd, PEMAINadr_BRD_MODE, 3);
    ToPause(100);    // pause ~ 100 msec
    WriteOperationWordReg(brd, PEMAINadr_BRD_MODE, 7);
    ToPause(100);    // pause ~ 100 msec
    temp = ReadOperationWordReg(brd, PEMAINadr_BRD_STATUS) & 0x01;
    if(temp)
        break;
}
WriteOperationWordReg(brd, PEMAINadr_BRD_MODE, 0x0F);

- BRD_STATUS(0) is always 1 accordingly to block_pe_main.vhd. So is 'temp' always 1?
- Why does the initialization keeps writing 1,3,7 to the BRD_MODE register and then writes 0xF?

And besides that part, there`s the part of the initialization that checks for the ADM PLD being on 'Test mode'
- How does the InFlags from BRD_MODE and OutFlags from the BRD_STATUS work? The code checks the InFlags for a 0x80 mask. Does that mean 'in test mode'?
Is there a table of values available?

Thanks and sorry for so many questions. Best regards!


Replies (3)

RE: Board Initialization and PE_Main Operation Regs - Added by Dmitry Smekhov about 5 years ago

Hi
This code for old board - AMBPEX8 http://insys.ru/products/ambunits/ambpex8
AMBPEX8 have two FPGA and I made bus between FPGA. This code for connect initialization.

InFlags and OutFlags is part bus. Field in the BRD_MODE and BRD_STATUS allow to check bus between FPGA.

"test mode" is the mode of ADM; In this mode all operation write and read independent from address; All operation - to register DATA in TRD_MAIN;

RE: Board Initialization and PE_Main Operation Regs - Added by Renato Sampaio about 5 years ago

About the code for the AMBPEX8, so I could comment it out with no change to the DMA core behavior, right?

About the 'test mode', I see that there's a TEST_MODE register in TRD_MAIN, but the initialization code writes to the BAR0 PE_MAIN module.
The code goes like this:

dbg_msg(dbg_trace, "%s(): ADM PLD is captured.\n", __FUNCTION__);
brd_status.AsWhole = ReadOperationWordReg(brd, PEMAINadr_BRD_STATUS);
if(AMBPEX8_DEVID == deviceID)
    brd_status.ByBits.InFlags &= 0x80; // 1 - ADM PLD in test mode
else
    brd_status.ByBits.InFlags = 0x80; // 1 - ADM PLD in test mode
if(brd_status.ByBits.InFlags)
{
    BRD_MODE brd_mode;
    dbg_msg(dbg_trace, "%s(): ADM PLD in test mode.\n", __FUNCTION__);
....

As we're not using the AMBPEX8_DEVID device id, it reads brd_status.ByBits.InFlags = 0x80;
So, it says that we are always in 'Test mode' and the 'test mode' isn't set during driver initialization, correct? It`s already defined inside the core.

So then, can I conclude that the Test mode check is optional and could be commented out as well?

thanks!

RE: Board Initialization and PE_Main Operation Regs - Added by Renato Sampaio about 5 years ago

Just to be clear, when I mean 'we're not using the AMBPEX8_DEVID', I mean "I'm not using". I'm not proposing to comment out the original code from the repository.
I'm just trying to simplify the code as much as I can to have a better understanding of the core and driver behavior.

thank you

(1-3/3)