一种基于FPGA 的嵌入式块SRAM 的设计
3.2.1 可配置数据位宽实现方法
配置逻辑中三位控制信号WIDTH_SEL0∶2>连到BRAM中,同时对地址宽度、数据宽度进行控制。
由于BRAM可以实现1、2、4、8、16 位的任意位宽,所以地址总线宽度、数据总线宽度都必须满足其中任意一种模式下的要求。于是设计时使地址总线宽度为各种模式下的最大值,即1位时的地址宽度11∶0>,其他模式下可使不用的地址位使能无效,进而获得所需的地址位。数据总线宽度也设置为各种情况下的最大值,即16 位时的数据宽度15∶0>,其他情况下选择有用的数据位进行存储。
表1可见WIDTH_SEL0∶2>对地址使能的控制,主要在于对地址11∶8>的控制,其他位地址7∶0>则一直有效。
表1 不同数据位宽的地址使能
由WIDTH_SEL0∶2>另外译码产生一组数据控制信号,分别为S_1、S_2、S_4、S_8、S_16 控制数据如何分配到位线上。这当中* 根位线实行了分片,每片4 根:
S_1有效:DI0>可分配到16片中的任何一片上。
S_2有效:DI0∶1>可分配到0∶1>、2∶3>、4∶5>?任何相邻两片上,每片1 位数据。
S_4有效:DI0∶3>可分配到0∶3>、4∶7>、8∶11>、12∶15>任何相邻四片上,每片1 位数据。
S_8 有效:DI0∶7>可分配到0∶7>或8∶15> 8片上,每片1 位数据。
S_16 有效:DI0∶15>刚好分配到16片上,每片1 位数据。
至于上述究竟存储到哪些片上以及具体存储到片内哪根位线上则由列译码控制。
3.2.2 译码控制
行译码采用了常用的3-8 译码器,3-8 译码器内由与门组成。第一级用两个3-8 译码器,输入端接入行地址ADDR5∶0>,第二级用64 个与门把第一级译码进一步译出来,可实现64 行中选出1 行。
图2 64 选1 行译码
列译码相对较复杂,首先将列地址分为两组,一组用于片选译,一组用于片内译码。片选地址由ADDR11∶8>组成,片内译码由ADDR7∶6>组成。
片选地址译码由地址和地址使能组成,而地址使能则是由WIDTH_SEL0∶2>配置决定的。
图3 片选译码
译码所得的A11∶8>_DEC0∶15>即可实现片选存储。当配置为1 位时,4 位地址均有效,译出的16位中只有1 位有效,只能选择16 片中的1 片。当配置为2 位时,ADDR11>使能无效,译出16位中有连续2 位有效,能选择16 片中连续2 片。当配置为4 位时,译出16 位中有连续4 位有效,能选择16 片中连续4 片。配置为8 位就能选择16 片中的上8 片或下8 片。配置为16 位,4 个地址均无效,译出的16 位全有效,16 片全选。经过了片选的一级译码,列译码还需经过第二级的片内译码。
图4 片内译码
评论