OpenCores
Issue List
cs/wr/rd #3
Closed dettus opened this issue over 14 years ago
dettus commented over 14 years ago

hello.

the handling of cs/wr/rd seems strange to me. i didn't know if they were high- or lowactive, so i had a look into the sourcecode.

then i stumbled over this: iCSWR <= '1' when CS = '1' and WR = '1' else '0'; iCSRD <= '1' when CS = '1' and RD = '1' else '0'; UART_ED_WRITE: slib_edge_detect port map (CLK => CLK, RST => RST, D => iCSWR, FE => iWriteFE); UART_ED_READ: slib_edge_detect port map (CLK => CLK, RST => RST, D => iCSRD, FE => iReadFE); iWrite <= '1' when iWriteFE = '1' else '0'; iRead <= '1' when iReadFE = '1' else '0';

the way i read this, you are detecting a falling edge on (CS and WR). meaning that when EITHER ONE of them goes low, you have a falling edge. i assume that this is not what you had in mind?

hasw commented over 14 years ago

Hello,

yes, that's right. A read or write is also 'finished' when CS goes low and RD or WR is high.

I did not find the expected behaviour in the original datasheets. In the wave diagrams RD/WR goes always low before CS so I would say pulling CS low before RD/WR is out-of-spec...

From the datasheet:

"th3 Hold time, CS valid after WR2 -> low" "th6 Hold time, CS valid after RD2 -> low"

If I understand you correctly than the read/write should be ignored if CS goes low and RD/WR are high?

But what about when CS and RD/WR are going the same time low? Is this a valid end sequence or not? When using the original chip it is not (th3/th6).

Also I think de-asserting CS before RD/WR is finished is pretty uncommon.

Regards, Sebastian

hasw was assigned over 14 years ago
hasw closed this over 14 years ago

Assignee
hasw
Labels
Request