- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
1.
There are IORD,IOWR routines. It is right to IORD_32DIRECT("*000 *004 *008 *00C")! Then is it right to IORD_32DIRECT("*001 *005 *009 *00C...") or IORD_8DIRECT("*001 *002 *003 *004...") when accesses the tristate slaves?? And while accesses the "normal" slave, such as registers in UART, which address should we keep in mind in IORD/IOWR? Master or slave address? (reference: I look up quartusii_handbook(may 2005) p1302 (http://www.altera.com/literature/hb/qts/quartusii_handbook.pdf) andavalon interface specification(april 2005) p67 p88 (http://www.altera.com/literature/manual/mnl_avalon_spec.pdf) about "Address alignment". As NiosII is 32-bit CPU, so the master address is always "*000 *004 *008 *00C" . However the "the tristate slave" is always byte-address("*000 *001 *002 *003...") In another words, when there are some registers in a tristate slave comopent(8 bit ), what's address in IORD/IOWR? IS it *001 *002 *003 *004... or *000 *004 *008 *00C? Maybe it is a common sense , but it is confuse me. --------------------------------------------------------------- 2. By the way, when SDRAM shares the tristate bus, the addresses(A11-A0) of SDRAM(32-bit data width) should connect to (A13-A2) of the tristate bus?Link Copied
3 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
mountain8848,
1.) your hw-access depends on the type of interface: if it is a register-type interface you always have 32-bit aligned ports even you've defined an 8-bit port. So the lower two address bits are ignored, direct accesses to 0,1,2,3 are equivalent. Only if your interface is a memory-type interface, accesses are aligned in the 'dynamic bus sizing' mode, where bytes a byte-aligned, words are word-aligned and Dwords are Dword-aligned. 2.) when using Alteras 'SDRAM controller' SDRAM an Avalon-Tri-State bus have to be connected 1:1 (A0 to A0, A1 to A1, ..) . A 16-Bit device's signal LDQM has to be connected to byteenable[0], UDQM to byteenable[1] (I've connected Mitels MT48LC8M16A2 in this way). Mike- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you, Mike.
1) When we add a User component as 8-bit data, 3-bit address, register-type like PWM-module, SOPC builder will map the component *00--*1F. Why not *00--*08? After your explaination, because the 32-bit-width and register-type, it should be "multiply" by 4. But comes another question, the A2, A1, A0 of Components is "automaticlly" connected to A4, A3, A2 of "Master" in these situation?? 2) Take SRAM(memory-type , tristate slave) in Nios Kit as an example, we connect 19..2 from SOPC builder to 17..0 of the SRAM, and byteenable[3..0] connects proper signals. (assume 0x1 is in the map of SRAM) IORD_32direct(0x1) ==>we get the data of 0x00,0x01,0x02,0x04 of SRAM IORD_16direct(0x1) ==>we get the data of 0x00,0x01 of SRAM IORD_8direct(0x1) ==>we get the data of 0x01 of SRAM Isn't it? And in my opinion, byte and word are selected by "byteeanble" when accessing SRAM as A1,A0 are ignored, while accessing ext_flash, it is select by A1,A0 actually. I used to think A1, A0 were always ignored in 32-bit system.- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
mountain8848,
1) Registers are internally 32-Bits wide, but only the lower 8 bits are used in your case. With A2-A0 you have 8 locations that spans an area of 8 x 4Bytes = 32Bytes in the memory map (0x0 - 0x1F). Consecutive writes to these locations can be done as*(alt_u8 *)(BASE + 0) = 1;
*(alt_u8 *)(BASE + 4) = 2;
*(alt_u8 *)(BASE + 8) = 3;
or
*(alt_u8 *)(BASE + 3) = 1;
*(alt_u8 *)(BASE + 7) = 2;
*(alt_u8 *)(BASE + 11) = 3;
or
*(alt_u32 *)(BASE + 0) = 1;
*(alt_u32 *)(BASE + 4) = 2;
*(alt_u32 *)(BASE + 8) = 3;
which will have the same results. The address A[4..2] of an Avalon-Master are mapped to A[2..0] of the register slave, as you supposed. 2) The difference between SRAM and SDRAM connected to TRi-State-Avalon is, that there is a special SDRAM-controller, managing different row- and column- addresses. During a SDRAM-access, these address lines are multiplexed with absolute Avalon addresses. So it depends on the actual access if row-addresses, column-addresses or absolute addresses are present on these lines. In this special case A0 means A0! (I also had to correct this in my design). Mike

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page