Forum Discussion
Altera_Forum
Honored Contributor
21 years agoSynchronous SRAM - Instruction and Data memory
Hello,
Has anyone implemented synchronous sram for Nios instruciton and data store (ie execute out of synch sram)? I'm sure it can be done, but I'm wondering about the performance hit for opening access, and non-sequential execution of instructions. The cache could play in here as far as actual performance. The avalon bus supports a feedback pin to indicate timing on the transfer. That is for transfers which are not always the same length. For example, the synch sram might take three cycles for an opening access, and then one cycle there-after (as long as the address are sequential). I am thinking that you will loose cycles in the "glue" that stitches the synch sram to the avalon bus, and thus make the performance not as good as the Asynchronous SRAM that is used on the Altera demo boards. Has anyone looked in detail at this? Thanks for any info. Eric Tauch11 Replies
- Altera_Forum
Honored Contributor
Hi,
this file "class.ptf" allows to use the onboard SSRAM as instruction and data memory on DSP Development Board: # ## CLASS dspboard_ssram { ASSOCIATED_FILES { Add_Program = ""; Edit_Program = ""; Generator_Program = "--none--"; } USER_INTERFACE { USER_LABELS { name="SSRAM on 1s25 DSP Board"; technology = "Memory"; } } MODULE_DEFAULTS { class = "dspboard_ssram"; class_version = "2.0"; HDL_INFO { # An interface to this memory requires no additional files # in the target project directory. } SLAVE s1 { PORT_WIRING { PORT A { direction = "input"; is_shared = "1"; type = "address"; width = "18"; } PORT D { direction = "inout"; is_shared = "1"; type = "data"; width = "32"; } PORT adsc_n { direction = "input"; is_shared = "1"; type = "always0"; width = "1"; } PORT adsp_n { direction = "input"; is_shared = "1"; type = "outputenable_n"; width = "1"; } PORT adv_n { direction = "input"; is_shared = "1"; type = "always1"; width = "1"; } PORT bw_n { direction = "input"; is_shared = "1"; type = "writebyteenable_n"; width = "4"; } PORT bwe_n { direction = "input"; is_shared = "1"; type = "write_n"; width = "1"; } PORT clk { direction = "input"; is_shared = "1"; type = "clk"; width = "1"; } PORT chipselect_n { direction = "input"; type = "chipselect_n"; width = "1"; } PORT mode { direction = "input"; is_shared = "1"; type = "always0"; width = "1"; } PORT oe_n { direction = "input"; is_shared = "1"; type = "outputenable_n"; width = "1"; } } SYSTEM_BUILDER_INFO { Active_CS_Through_Read_Latency = "1"; Address_Alignment = "dynamic"; Address_Width = "18"; Base_Address = "--unknown--"; Bus_Type = "avalon_tristate"; Data_Width = "32"; Has_IRQ = "0"; IRQ_Number = "N/A"; Is_Memory_Device = "1"; Read_Latency = "1"; Read_Wait_States = "0"; Write_Wait_States = "0"; Setup_Time = "1"; Hold_Time = "0"; } } SYSTEM_BUILDER_INFO { Is_Enabled = "1"; Instantiate_In_System_Module = "0"; } } } # ## Hope that helps! Jochen http://forum.niosforum.com/work2/style_emoticons/<#EMO_DIR#>/smile.gif