tag 标签: mig

相关博文
  • 热度 13
    2013-12-9 09:05
    3363 次阅读|
    0 个评论
          SPARTAN6开发板的PCB已经完成,现正在校验中,板子整体外观如下:           板子的功能较多,含有FPGA+DDR2+USB2.0+VGA+DM9000+WM8731+PS2+SD+CP2103,计划加工两版将这些功能全部调通。DDR2是首先要调试的,SPARTAN6含有DDR2的硬核,相对CYCLONE IV的软核,调试起来要方便很多。这里简单介绍MIG生成控制器相关的内容,只是简单介绍,完整的文档可以查看以后的开发板配套的用户开发手册。         首先打开Core Generator,我的ISE的版本是13.2,XP系统,如下图所示:          打开后的界面如下所示:         由于此时还没有工程,所以现在还无法用MIG生成DDR2控制器。先创建一个工程,直接在快捷工具栏上选择“New Project”按钮,如下:          工程名直接用系统默认的coregen.cgp,文件夹是C:\liangziusb,直接单击“保存”后,弹出如下画面:           上图中从上到下依次选择的是:器件家族是SPARTAN6;器件类型是XC6SL16,封装是BGA256,速度等级是-2。最后再选择左上角的Generation,画面如下:           上面选择的语言是VHDL,最后单击"OK",完成工程的创建,回到CORE Generator画面,如下:           上图红色部分是刚才创建的工程的简短说明。在左侧窗口中找到MIG3.8,如下:            直接双击左侧的MIG Virtex6 and Spartan6,开始创建DDR2的控制器,画面如下:           这是一个欢迎界面,最好仔细看一下。The Memory Interface Gendrator(MIG)用来生成完整的DDR控制器,包括所有Verilog 或者VHDL源代码,引脚锁定及约束文件,还有仿真及一些脚本文件等所有的资源。这里直接选择下一步,如下:          这里主要设置是:创建一个新的控制器,控制器的名称用默认的名字就可以,最后选择下一下,如下:           这里主要是设置FPGA的引脚垂直兼容设计,为了降低复杂性,这里没有选择任何兼容的FPGA,直接选择下一步,如下:     近期文章: 1、毫威摄像头传感器OV5620简介 2、用USB3.0开发板驱动毫威摄像头传感器OV5620 3、测试USB3.0速度的几个固件例程 4、OV7670摄像头开发板介绍 5、通过JTAG口烧录EPCS芯片   (另公布一群号178338109,CYUSB3014开发专业讨论区。)     我的博客: http://bbs.ednchina.com/BLOG_liangziusb_440752.HTM 淘宝店铺: http://shop64171919.taobao.com 良子.2013年    承接USB开发工程  USB毕设指导 QQ:2687652834
  • 热度 18
    2013-3-27 11:18
    4848 次阅读|
    2 个评论
      XILINX 公司在最新的Spartan6中集成了MCB硬核,它可以支持到DDR3-800,而且对于大多数厂家的存储芯片都支持(Micron、Elpida、Hynix.....)。对于工程来讲,其MCB硬核优秀的误码校验和偏移时钟校验,以及PLL_ADV工作时的稳定、高精度都大大保证了研发产品的质量。而对于用户控制接口又是以通用FIFO的读写方式,代替复杂的DDR/DDR2/DDR3读写逻辑。以SRAM的地址映射方式代替复杂的行列地址选择。可见spartan6—MCB硬核控制器的诞生是值得大家推崇的。 一, 在工程中添加 IP 1、 打开工程,添加新的源文件, 2、 选择版本,这里以3.6为例(尽量选择最新版本),进入Xilinx Memory Interface Generator界面,单击Next,进入下一步; 3、 选择输出项,输入自定义模块名; 单击Next,注意:如果你是修改一个核而不是第一次生成核,会出现如下对话框,单击Yes,这时会覆盖掉一些文件,因此无论你在接下来的步骤中有没有对核的选项进行修改,最后必须点击Generator; 4、 单击Next,选择Memory Type; 注意到图中有个C1、C3,这是因为Xilinx的MCB有部分是属于硬核,引脚是固定的,分别存在于FPGA芯片的BANK1和BANK3,在代码中将看到很多的信号名是以C1_XXX和C3_XXX开头的,这很容易区分是哪个DDR芯片对应的信号名,注意与后面的端口(Port)混淆; 5、 单击Next,进入DDR2芯片选项模块,先选择存储器,再输入时钟; 这里的Memory Part 选择的是自定义的芯片,单击,输入一个自定义的DDR2芯片名,尽量输入芯片的实名而不是自定义名,这样有利于重复使用,不至于将来使用时不知所云,下面的参数可以在你所选的DDR2芯片DATASHEET中找到,输入参数值,保存,这样就可以在 找到自定义的存储器了,单击Next; 6、 选择同上,单击Next; 7、 设置端口的一些参数,主要是根据自己板子的实际情况稍微做一些修改即可。 8、 进入端口配置, (1)选择配置模式,单向与双向的意思是指端口是可读、可写,还是既可读又可写, 将端口配置成一个读一个写,其他不用; (2)选择存储器的地址映射方式,可根据自己程序设计方便选择,这里默认; 9、 Next;接着 10、进入FPGA选项,这里注意系统时钟的方式,根据实际情况选择单端还是差分,这里选择单端。还有就是要注意下这里debug选项,建议选择”Disable”.   其他默认;   11、Next,同上;   12、Next; 13、选择  Next;   14、Next; 二, IP中的文件 打开生成的文件夹(一般在工程的ipcore_dir目录下),四个文件夹分别是参数配置、RTL代码、仿真库和综合脚本。 其中RTL文件夹内的文件是我们主要关注的。这里的DDR667(建立IP时取的名字)是顶层文件,另外两个分别是“管理时钟”和“管理端口”的描述文件。 打开“管理时钟”的infrastrcture.v,需要注意的几点 (1) 如果MCB的输入时钟是经过IBFG处理的,那么这里的IBFG就需要注释掉,IBFG是全局输入时钟的缓冲,一个工程中有一个即可。 (2)u_pll_adv模块就是Xilinx的PLL核,并没有什么特殊之处,而MCB只用了其中的4个时钟输出,其中一个还是提供给用户逻辑使用,因此完全可以对该PLL的3个时钟输出做自定义,这样可以减少系统所用PLL个数。 对于自定义的PLL输出根据需要最好加上BUFG, 然后将这些时钟添加到模块输出项,经顶层模块输出。 (3) 对于BUFPLL_MCB的详细解释,读者可参见ug382手册.输出文件和对应的关系图如下: 打开作为顶层文件的DDR667,可以看到在IP设置时所选择的参数都在这里了 ,如果需要做改动,可以在这里的parameter下修改。这里的参数有最高的权限,会覆盖所调用模块的默认值。 三, IP的使用 (1)在par文件夹下面有系统默认的UCF(约束文件),默认情况下会使用该UCF文件。 笔者在使用中发现一个奇怪的问题,就是在自己重新定义UCF,且确认所有的管脚都映射正确后,在MAP阶段一直报错,主要是报DQS、UDQS、DQS_N、UDQS_N这四个pin脚的分布有问题,尝试了很多办法都无效。 最终的解决办法是从工程中移除顶层的DDR2_test.XCO文件(备注:这里DDR2_test是笔者为IP所取的名字),手动添加所有的RTL源文件,编译后顺利通过map,不知道是bug还是其他的什么原因。 (2) 由于spartan6系统是最新的FPGA,xilinx官方一直在更新ISE软件,FPGA的内核也会有所变动,在期间选型时需要留意DS162文件中不同器件所需要的软件版本。 同时,对于使用-2速度的朋友需要注意下在XCN10024中XILINX队MCB的性能做了一些小小的修正,在内核电压较低(1.14~1.26)的情况下,速度由原来的667降低至625. (3)由于系统默认是将整个DDR按8bit来重新对地址编码,这样对于X16、X8和X4就需要根据下图经行重新的映射,具体可以参看UG388 (4)在设置FIFO的位宽时,需要注意几个速度问题。比如DDR3-800,如果器件是X8模式的,那么每个时钟可以触发16bit数据(DDR是双沿触发),假设FIFO是64bit,那么系统时钟至少需要(16/64)*400=100MHZ才能跟上DDR的速度,同理如果是32bit的FIFO,那么至少需要200MHZ的系统时钟,这个在系统规划时需要注意。另外FIFO最多可以到64级,每一级大小等于位宽。 (5)由于整个IP中定义的参数和系统调用模块比较多,为了防止软件将一些信号优化掉,需要设置Hierarchy为soft (6)如果系统中不止一个DDR,可以参考XAPP496中相关设计思路。
  • 热度 11
    2012-5-24 17:03
    2198 次阅读|
    0 个评论
        前面已经介绍过关于SPARTAN 6 的开发板SP601,主要是对板上的硬件资料做一说明。今天我们要从软件开始着手,做一个最简单的驱动板子上的LED灯的实验。配套的软件可以从网上下载,是一个压缩包,名字是sp601_standalone_apps_rdf0015_13.2_c.zip。当然,你也可以从XPS开始,或者从Project Nevigate开始,再到EDK,从头到尾创建一个自己的例程。   为了说明方便,将压缩包解压到C盘根目录下,如下,      以上图中的hello_gpio为例,说明如何使用这些例程。打开SDK软件,在启动软件过程中,需要指定工作目录,这里也统一为C盘下的TEMP目录。我用的IDS软件版本是13.2,最新的软件已经是14.1了。SDK启动后如下所示,   由于没有打开任何工程,所以工作区是空的(如果有欢迎画面,可以直接关掉)。接下来我们会导入刚才解压过的工程hello_gpio。按下图进行操作,      在弹出的对话中,选择导入现有的工程,如下,    单击下一步,在接下来的对话框中选择需要导入的工程,如下所示,   再单击确定,如下所示,    最后点击确定,导入工程结束。ECLIPSE软件会自动开始编绎,成功的画面如下,          待续,,,,   更多文章请访问: 我的博客: http://bbs.ednchina.com/BLOG_liangziusb_440752.HTM 我的淘宝店铺: http://shop64171919.taobao.com 我的实体店铺:北京新中发电子市场2557号 良子.2012年    承接USB开发工程 QQ:2687652834    392425239
  • 热度 14
    2012-5-22 14:53
    2698 次阅读|
    0 个评论
          之前一直在接触ALTRERA公司的FPGA,当然也包括NIOS系统,对XILINXE公司的FPGA产品,有些时间没有研究了。最近有一项目,恰好XILINX公司的SPARTAN-6 FPGA比较适合,所以就机会重新温习一下XILINX公司FPGA的开发流程了。记得之前使用的ISE版本是7点几,想不到现在已经升级到了13.4,看来软件的发展还真是快。这里简单介绍一下13.2版本的一些基本概念,重新拾起XILINX公司的FPGA。 1、关于EDK        The Embedded Development Kit,简称为EDK,就是嵌入式发展工具包的意思,主要是在开发基于FPGA的嵌入式系统,由一组工具及相应的IP组成。 2、关于XPS       Xilinx Platfrom Studio,简称为XPS,就是做嵌入式系统硬件部分的设计工具,如Microblaze软核、DDR2存储器等片上外设的,只做硬件的。 3、关于SDK      Software Development Kit,简称为SDK,就是软件开发包,当然是基于Eclipse 的集成开发环境,这一点和ALTERA公司的NIOS II系统一样,是同样的开发工具。CYPRESS公司的USB3.0的设计开发工具也是Eclipse,看来Keil有些危险了。 4、关于BSB      Base System Builder,简称BSB,就是硬件系统生成器,包含在XPS软件之中, 5、关于IDS     Xilinx ISE Design Suit Tools,简称IDS,就是XILINX公司开发FPGA的一组工具。以前的开发工具只是ISE,就可以搞定所有的设计。现在又出了很多工具,以增强各个方面的设计能力,所以就是一组工具了。 6、关于XMP      Xilinx Microprocessor Project,简称为XMP,是一种文件格式,基于FPGA的嵌入式系统设计(Microblaze),最顶层的文件就是XMP文件,这个文件保存了所有模块的相应信息。 7、关于UCF 8、关于CIP 9、关于Platgen     更多文章请访问: 我的博客: http://bbs.ednchina.com/BLOG_liangziusb_440752.HTM 我的淘宝店铺: http://shop64171919.taobao.com 我的实体店铺:北京新中发电子市场2557号 良子.2012年    承接USB开发工程 QQ:2687652834    392425239
  • 热度 15
    2012-4-13 09:36
    3614 次阅读|
    0 个评论
    最近评估使用了下XILINX最新的Spartan-6 FPGA器件,感觉跟前一代使用比较多的Spartan-3E FPGA器件相比性能有了很大的提高, 如Spartan-6的时钟管理模块就引入了以前在高端器件Virtex-5才有的模拟锁相环(PLL).本文从用户角度介绍了Spartan-6 FPGA时钟管理模块的特性,并就它的使用做了一个总结, 可供使用Spartan-6时钟管理模块时参考。 闲话少说,书归正传,我们知道同步时序电路设计中最关键的是时钟设计,随着电路规模与速度的提高,对时钟的周期、占空比、延时和抖动等方面的要求也越来越高。为了顺应这需求,Spartan-6系统器件在原有的DCM模块基础引入了模拟PLL模块构成了功能强大、控制灵活的时钟管理模块(CMT)。每个CMT模块包含两个DCM模块和一个PLL模块。Spartan-6系统器件有多至六个 CMT模块。 一、器件组成与特性   1.DCM模块主要有以下功能模块组成: a.DLL模块, 主要由延时线和控制逻辑组成。 b.数字频率合成器,为系统产生丰富的频率合成信号输出到CLKFX和CLKFX180。可以提供2~32的倍乘与1~32的分频系数。 c.数字移相器, 可提供粗调的0,90,180,270度移相和具有动态调节能力的相位细调。 d.数字频谱合成器,产生扩频时钟减少电磁干扰(EMI)。 Spartan-6 DCM模块提供给用户的设计原语有DCM_SP和DCM_CLKGEN,DCM_SP在Spartan-3E FPGA器件中也有,而DCM_CLKGEN是Spartan-6新增的,可以用产生动态的频率合成信号和扩频时钟。   2. PLL模块,有一400MHz~1000 MHz压控振荡器(VCO),可提供8种移相(0°, 45°, 90°, 135°, 180°, 225°, 270°, 315°)和6个可独立编程倍乘与分频系数的输出信号。提供给用户的设计原语有PLL_BASE和PLL_ADV,PLL_BASE是单独使用PLL模块最常调用的原语,允许使用PLL的最常用特性,PLL_ADV包括PLL_BASE所有的特性之外,还提供时钟切换及与DCM的连接。可用于以下工作模式: a. 时钟网络去歪斜 b. 频率合成 c. 抖动滤波 d. 零延时的缓冲 f. PLL与PLL、DCM的级联   二、使用指南   1.注意时钟的输入与输出范围,所有应用不能超过范围.。如Spartan-6 器件DCM的DLL模块的时钟输入范围如下(以下摘自Spartan-6 DATA SHEET): 速度等级为-1L的为器件5MHz~175MHz。 速度等级为2的为器件5MHz~250MHz。 速度等级为3和4的为器件5MHz~280MHz。 DCM的DLL模块的时钟输出范围如下: CLKOUT_FREQ_CLK0与CLKOUT_FREQ_CLK180为5MHz~250MHz(等级2)或5MHz~280MHz(等级3或4); CLKOUT_FREQ_CLK90与CLKOUT_FREQ_CLK270为5MHz~200MHz; CLKOUT_FREQ_2X与CLKOUT_FREQ_2X180为0.3125MHz~166MHz(等级2)或0.3125MHz~186MHz(等级3或4); DCM的DFS模块的时钟输入范围如下: 速度等级为2的为器件0.5MHz~333MHz。 速度等级为3和4的为器件0.5MHz~375MHz。 DCM的DFS模块的时钟输出范围如下: CLKOUT_FREQ_FX与CLKOUT_FREQ_FX180为5MHz~333MHz(等级2)或5MHz~375MHz(等级3或4); PLL模块的最小的输入时钟频率为19 MHz,最大输入时钟频率为375MHz(从全局时钟输入,速度等级2),400MHz(从全局时钟输入,速度等级3),450MHz(从I/O时钟输入,速度等级2),525MHz(从I/O时钟输入,速度等级3)。 PLL模块的最小的输出时钟频率为3.125MHz,最大输入时钟频率为从BUFGMUX输出为375MHz(速度等级2)或400MHz(速度等级3或4),从BUFPLL输出为950MHz(速度等级2)或1050MHz(速度等级3)或1080MHz(速度等级4)。 无论什么时候都不能使VCO超出范围,Spartan-6 器件VCO的频率范围为400MHz~1000MHz(等级2),400MHz~1050MHz(等级3),400MHz~1080MHz(等级4),   2.PLL或DCM的选择使用问题。 PLL和DCM有类似的功能,又有各自的特性, 在应用中什么时候选择使用PLL模块较好, 什么时候选择使用DCM模块较好呢? 一般认为PLL模块有六组输出时钟, 在多时钟的应用中使用PLL比较合适,另外PLL对抖动滤波效果比较好,如要实现抖动滤波也推荐使用PLL模块。Spartan-6 PLL模块还提供时钟切换功能,在需要动态切换时钟源的应用中尤为合适。DCM在相位调整上功能比较全,既有粗调的0,90,180,270度移相,又有动态调节的相位细调能力,在实现时钟相位调整的时候推荐使用DCM模块。其它情况如频率合成、调整时钟占空比,消除时钟延时使用PLL模块或DCM模块都可以。   3.DCM除对输入时钟的频率有要求外,对输入时钟的抖动也有要求,如果超出限制的话会导致DCM失锁,失锁后需要用户将DCM复位。抖动主要分两类: a. Cycle-to-cycle jitter b. Period jitter Cycle-to-cycle jitter一般为±150ps(FCLKFX 150 MHz)或±3000ps(FCLKFX 150 MHz), Period jitter一般为±1ns. 具体参见Spartan-6 DATA SHEET。 如果输入时钟的抖动过大,建议先经过PLL模块进行抖动滤波。   4.PLL与DCM的级联选择 a. PLL输出驱动DCM模块,优点是在输入DCM模块前可减少输入时钟的抖动,同时又可以使用户能构访问所有DCM模块的输出信号,一个PLL可以驱动多个DCM模块,并不要求PLL与DCM都是在同一CMT模块内。 b. DCM模块输出驱动PLL模块,这种情况可以减少输入时钟和DCM时钟输出的总体抖动。如果DCM输出直接连到PLL输入,要求PLL与DCM都是在同一CMT模块内,这种情况可减少的本地噪声与专用布线资源。如果PLL与DCM不在同一CMT模块内,DCM输出必须经过BUFG缓冲后连到PLL。由于PLL输入信号的限制, 最多只有两个DCM输出信号可以连到一个PLL模块. c. PLL与PLL的级联, 级联PLL可以产生更大范围的时钟, 两个PLL的级联也要通过BUFG缓冲, 此时器件通路的抖动最小。 以上抛砖引玉,主要参考文献为XILINX的:   1.ug382 Spartan-6 FPGA Clocking Resources User Guide. 2.Ds162 Spartan-6 FPGA Data Sheet: DC and Switching Characteristics. 3.xapp1065 Spread-Spectrum Clock Generation in Spartan-6 FPGAs 如有不当之处或要补充的地方,还望博友不吝赐教以共同提高使用Spartan-6时钟管理模块的水平^_^。此文为“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛参赛作品。(转帖)   更多文章请访问: 我的博客: http://bbs.ednchina.com/BLOG_liangziusb_440752.HTM 我的淘宝店铺: http://shop64171919.taobao.com 我的实体店铺:北京新中发电子市场2557号 良子.2012年 QQ:2687652834    392425239
相关资源