指挥控制系统是现代战舰上的关键部分,它为军舰指挥员显示舰船上的传感器捕捉到的各种信息,包括各型雷达信号、各种红外设备图像等,为指挥员提供完整的海战场态势图,并且根据当时的形势,辅助指挥员决策作战命令。指挥控制系统实际上就是专用的计算机系统,由各种专用模块构成,在计算机硬件设计中,存储器的控制和操作占有很重要的地位。
可编程逻辑器件随着微电子制造工艺的发展取得了长足的进步,随着工艺技术的发展与市场需要,FPGA/CPLD以其功能强大,开发过程投资少、周期短,可反复修改,保密性能好,开发工具智能化等特点成为当今硬件设计的首选方式之一[1-4]。在工业控制、数字信号处理和通信等方面发挥了广泛的作用。FPGA/CPLD设计技术已经是当今硬件工程师的必备技能[5,6]。
在最近30多年半导体存储器的显著发展过程中,DRAM已成为用做计算机主存的最大量生产的易失性存储器(也称为挥发性存储器)。由于DRAM密度高,容量较大,封装尺寸比SRAM要少。而且DRAM的价格比较便宜,功耗也只有SRAM的1/6[7-10]。所以,DRAM成为硬件设计中常用芯片。
在实际FPGA程序逻辑设计中,FPGA对DRAM的控制是硬件设计师面临的难点之一,本文通过在FPGA中内嵌ROM表的方法,避开了繁琐复杂的逻辑程序编写,语言简洁,程序易修改,好维护,具有缩短设计周期、优化程序源代码的优点。
DRAM芯片的支持电路使得用户能够读出存储单元阵列中存储的数据,把数据写入阵列以及刷新存储器单元。
本文选用一种专用的DRAM:采用日立公司的TC528257,它是双存储体及双数据口(双端口)结构,可直接在10MHz以上的时钟下工作,它与普通的存储器最大的差别在于其内部含有两个不同类型的存储体,一个容量为256k×8bit的动态存储体(DRAM),另一个容量为512×8bit的高速串行存储体(SAM),并且各自都有自己的数据端口。两个存储体既可分别独立工作,又可相互之间传递数据。它解决了其它存储器不能同时读写的矛盾,与其它存储器比,所需的存储器数目和外围辅助器件较少,图像的彩色效果较好。
TC528257具有很强的功能,有多种工作方式,管理比较复杂。主要有以下几种工作模式:
1) 存储器读操作
对基本的存储器单元读操作,单元必须通过它的行和列坐标被选择,单元上的电荷须被检测、放大并被送到支持电路,且数据必须被送到数据输出端。一个存储器读操作的步骤顺序可概括如下:
• 在“行选信号”下降前一规定的时间内必须将行地址信号加到存储器的地址输入端并在“行选信号”下降之后被保持一定的时间。此外,“行选信号”必须从高电平降到低电平并维持在低电平。
• 在“列选信号”下降前一规定的时间内必须将列地址信号加到地址输入端并在“列选信号”下降之后被保持一定的时间。
• 为了进行读操作,在“列选信号”转换到低电平之前的一规定时间内必须将“写使能信号”设定为高电平,并在转换到高电平之后的一定时间内仍必须维持在高电平。此外“列选信号”必须从高电平转换到低电平并维持在低电平。
• 在规定的时间窗口中“片选信号”降到低电平。“片选信号”的周期是可选择的,如果需要的话,“使能信号”可接低电平。
• 数据在器件的数据输出端出现,这取决于“行选信号”,“列选信号”和“使能信号”都下降到低电平的时刻和提供地址的时间。
• 在“行选信号”和“列选信号”回到它们的无效状态后,就认为完成了读操作。
2) 存储器写操作
对于存储器单元写入,必须选择单元的行和列地址及在数据输入端输入数据。芯片上的存储器逻辑电路或者对存储器单元电容充电或者使其放电,这取决于存储的是1还是0。一个存储器写步骤顺序可以概括如下:
• 在“行选信号”电平降低之前一规定的周期时间内行地址(信号)必须加到存储器的地址输入端并在“行选信号”低电平下维持一定的周期时间。另外,“行选信号”必须从高电平降到低电平。
• 在“行选信号”电平降低之后和“列选信号”电平降低之前一规定的周期时间内列地址(信号)必须加到存储器上的地址输入端并保持一定周期时间。
• 在进行写操作的一定时间周期内,“写使能信号”必须设定为低电平。过渡定时由“列选信号”下降到低电平的时间来决定。
• 在“列选信号”电平降低之前规定的周期时间内数据必须加到数据输入端并维持一定时间。另外,“列选信号”必须从高电平转向低电平。
• 在写周期完成后,“行选信号”和“列选信号”必须回到它们的无效状态。
DRAM的操作还有很多种类,这里就不全部介绍了,可以参看芯片的用户手册。
产生出满足时序要求的DRAM的控制逻辑是设计的重点,需要控制DRAM对数据进行读写操作。由于DRAM的工作模式比较复杂,控制管脚也很多,所以用VHDL或verilog HDL语言直接编程十分困难,直观的来描述这些工作状态及其之间的转化十分复杂。而且程序不易读、不易修改。
根据时序图,例如某写传送时序图1所示:
图1 传送时序图
我们可以设计这样一张表:横排表示完成一个操作所需的周期数,竖排表示所需操作的种类,将各个操作分成不等的周期数,按照波形图将每个控制信号编码,组成总线数据。把这些十六进制数据填入表中。就完成了ROM表的填写。在这张表中,每一横排都表示一种操作,也可以按照特定情况把几排都定义为同一种操作,而每一竖列都是在一个单位周期内,在特定的操作情况下,各个控制信号的电平。实际操作时,只要用FPGA控制ROM表的横排、竖排地址,ROM表的数据输出连接DRAM的控制信号管脚。即可方便的对DRAM进行各种操作。ROM表样表如下所示:
表1 ROM表样表
XILINX的FPGA器件具有丰富的存储器资源。这些资源包括块存储器(Block RAM)、分布式存储器(Distributed RAM)和16位移位寄存器(SRL16)。此外,FPGA器件还可以提供高速的输入输出接口,以支持各种标准的外部存储器阵列。这些存储器资源可以生成任意宽度的RAM、ROM、FIFO、CAM、等存储器结构。
Block RAM是嵌入在FPGA器件中的双口存储器模块,Virtex、Virtex-E、Spartan-II、Spartan-IIE系列器件每个模块为4KB。而Virtex-II、Virtex-II Pro、和Spartan-3系列器件每个模块为18KB。每个模块都为标准的双口(两个独立的读和写)。规模越大的器件可提供的存储器块也越多。
分布式存储器是Xilinx的FPGA器件特有的存储器结构,它由查找表和触发器构成。每个查找表可以构成16×1位的分布式RAM。16位移位寄存器也是一种具有存储功能的寄存器。SRL16和分布式存储器常用于DSP信号处理和FIFO设计中。
利用ISE 6设计工具和核生成器可以非常方便地生成这些存储模块。并直接在顶层设计中进行例化和调用。只有正确地书写HDL代码,综合工具才能快速、有效地进行分析和推论。
利用Case和If…else语句中来指定常数,XST综合工具可以自动推论成ROM结构,并且没有宽度限制。例如:
type ROM_TYPE is arrayl(15 downto 0) of std_logic_vector (3 downto 0);
constant ROM:rom_type:= (‘0010’,’1100’,’1011’,…,’0001’);
…….
…….
…….
Data<=ROM(conv_integer(address));
利用ROM_EXTRACT属性的yes和no来使能和禁止ROM的推论,默认值为yes。利用ROM_STYLE属性来选择是用块存储器还是用分布式存储器来实现。
根据所要完成的功能写出ROM表横排、竖列的地址逻辑表达式,将ROM表中的数值写入芯片内的block ram,由此构成一个数据预先写入的ROM表。将block ram的数据输出的各个数据位接到DRAM的相应控制管脚上,即完成了对芯片的控制。
要修改或是调整对DRAM的控制也非常方便,只要根据新的需要改动地址的逻辑表达式,或是由调整后的功能波形图产生新的ROM表即可。不用改变硬件线路,也不会牵涉其它部分的逻辑程序,程序简单易懂,方便移植,由此大大缩短了程序设计和调试的周期。
由上面样表构成的ROM表程序如下所示:
defparam U1.INIT_00 = 256'hfff0f9fafff0fff0fff0f1f8fff0;
defparam U1.INIT_01 = 256'hfff0f88afff0fff0fff0f088fff0;
defparam U1.INIT_02 = 256'hfff0fff0fff0f088fff0fff0fff0;
defparam U1.INIT_03 = 256'hfff0fff0fff0f088fff0fff0fff0;
defparam U1.INIT_04 = 256'hfff0fff0fff0f98afff0f188fff0;
defparam U1.INIT_05 = 256'hfff0fff0fff0f98afff0f188fff0;
defparam U1.INIT_06 = 256'hfff0fff0fff0f98afff0f188fff0;
defparam U1.INIT_07 = 256'hfff0fff0fff0f98afff0f188fff0;
defparam U1.INIT_08 = 256'hfff0fff0fff0fff0f9c9fff0f1c8;
defparam U1.INIT_0A = 256'hfff0fff0fff0fff0f9c9fff0f1c8;
defparam U1.INIT_0B = 256'hfff0fff0fff0fff0f9c9fff0f1c8;
defparam U1.INIT_0C = 256'hfff0fff0fff0fff0f9c9fff0f1c8;
defparam U1.INIT_0D = 256'hfff0fff0fff0fff0f9c9fff0f1c8;
defparam U1.INIT_0E = 256'hfff0fff0fff0fff0f9c9fff0f1c8;
defparam U1.INIT_0F = 256'hfff0fff0fff0fff0f9c9fff0f1c8;
在某型号外贸出口舰的指挥控制系统中,笔者设计了“雷达扫描转换模块”这一关键部件。实践证明,以上方法简化了繁琐的存储器的控制程序,显著缩短了设计时间,优化了硬件配置,具有良好的应用前景。
本文探讨了利用FPGA控制DRAM操作的一种方式,简要叙述了DRAM一些操作流程,并提供了应用FPGA生成ROM的一般方法。实践结果表明该方法具有良好的实用性,可以适用不同种类DRAM的控制。DRAM由于其方便灵活的操作模式,低廉的价格和容量大的优点,受到越来越广泛的应用。控制方法也多种多样,例如利用状态机控制同样可以达到事半功倍的效果。
[1] 孙航.XILINX可编程逻辑器件的高级应用与设计技巧[M].北京:电子工业出版社,2004.
[2] 夏闻宇.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2003.
[3] 曾莹,伍冬,等著.Advanced Semiconductor Memories: Architectures, Designs, and Applicationsv[M].北京:电子工业出版社,2005.
[4] 王爱英.计算机组成与结构[M].北京:清华大学出版社,2004.
[5] 数字信号处理的FPGA实现[M].北京:清华大学出版社,2006.
[6] 王芳,陈亮.对象存储系统中基于负载均衡的设备选择算法[J].华中科技大学学报:自然科学版,2007,35(10):46-49.
[7] 赵娟,王月玲,刘明峰,等.基于SRAM配置技术的FPGA测试方法研究[J].半导体技术,2007,32(9):804-808.
[8] 柏新才,吴学智,马宁,等.虚拟存储技术及应用分析[J].舰船电子工程,2008(5):166-169.
[9] 景艳,黄士坦,张遂南.一种基于FPGA实现的高速缓存设计[J].微机发展,2005,15(9):141-144.
[10] 谢聪,杨勇.DSP与SDRAM之间信号传输延时的分析及应用[J].计算机与数字工程,2008,36(11):185-187.