DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1275|回复: 0
打印 上一主题 下一主题

[待整理] 试用手记之为国产FPGA正名

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-12 17:07:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
印象中FPGA市场基本是Altera和Xilinx一统天下,他们的明争暗斗决定着FPGA的未来,甚至他们各自的家族产品都是对着干的。Lattice、Actel、Atmel各有其小众市场,再有别的厂商,基本上特权同学是不太叫得上来了。
  国产FPGA?是不是听错了,没有。记得第一次听说FPGA前面加了个定冠词“国产”应该可以追溯到特权同学还和价格堪比年薪的军品纠结的岁月。不过那个“国产”二字总感觉和“盗版”谐音,真的不是损谁,只是实事求是的说。也许这种模式也叫“中国特色”吧,好歹比那天忘了在哪位大侠博客看到的“二次包装”的“中国制造”强上千百倍。Xilinx早期的XC4打头的FPGA,也只有ISE4以前的版本支持,“低端”军品也就这几款了。所以国内的XX所也很牛,居然能够逆向设计将他们的“国产”FPGA做得和它完全兼容,不止是PIN2PIN,甚至连开发工具他们都不用徒手打造了,告诉我们完全替代现有的Xilinx器件。
  有时候不得不感叹,中国人很牛。外国人可以做到的,基本上没有中国人做不到的。时光荏苒,特权同学已不再需要靠那些“可靠”换“性能”的片子干活了。而FPGA的成本却越来越成为产品开发中挥之不去的梦魇,于是乎,老板想尽办法要压榨FPGA的成本,这次找来了又一个“国产”准备在低端低成本的应用中大干一场。不过几番观察下来,特权同学开始对此“君”颇有好感,它也许算不上真正意义上的“国产”,但是多少让人感受到了它走的是一条“正规”有“前途”的路子。
  其实也只是昨天才开始正式的和这家名为Agate Logic的FPGA厂商有了一些“亲密”接触。它的开发工具,它的开发流程,它的主打芯片结构、特点、性能都有所了解,但要真*实弹的用这个家伙干活,还得有更深入的尝试和验证。特权同学希望对这些尝试做些记录,也许,是一次蛮有意思的尝试。
  今天先简单的没主题的随便扯谈吧。首先,这家公司是提供了两个系列的产品,其中一个系列工艺先进些,据说性能好一些,只不过年初刚量产,还不是主推产品,姑且不详谈,毕竟特权同学的DEMO板上的主角儿也不是它。另一个低端点的系列叫Astro,别小看它了,先罗列一下参数大家瞧瞧。
  ★ 硬核——可以跑到100MHz的8051硬核,标准外设IIC一个、SPI一个、USART两个、定时器数个。
  ★ 1Mbit一次性可编程存储(OTP)——加密的利器啊。
  ★ 1个PLL——3个可选输出,相位可调。
  ★ 可选的内部4Mbit FLASH。
  ★ 2个9Kbit可配置存储器——虽然对于片内存储要求很高的特权同学有点“巧妇难为无米之炊”了,不过低端应用牺牲一些“性能”还是可以接受的。
  有这些东西还不算,最主要的还是它保持着传统“中国特色”的“便宜”,基本上3个美金可以拿到有1024个LUT的器件了。若是要和当前的Altera相关解决方案比比,那真得是蛮有竞争力的。MAX II系列CPLD除了逻辑真得没有别的用处了,而逻辑资源逊色不少的EPM570(EPM1270不说了)目前市场上估计是有缺货的因素,居然卖到30好几个RMB了。而如果选择Cyclone系列最便宜的EP1C3好像也只要30多RMB,但是要跑个最经济的NIOS也有点困难。而且有个很有意思的现象,正规代理商会很无奈的告诉你这样的老器件要30的数倍价格才能搞到,而外面的小商小贩卖的就是30的准“白菜价”(当然不排除买到“散新货”的可能)。而Astro却连配置器件和外挂MCU的成本都省了,虽然它也是基于SRAM的结构。(不行,越比发现这东西越好。先申明一下,这里不是推销,只是比较,特权同学是用芯片的,不是卖芯片的。嘿嘿)
  今天花了一上午把它们的开发工具Primace的Help过了一遍。再说个题外话,昨天到它们的上海办事处,感觉上这般人对版本的管理不是很好,动不动来一个版本,让我们当时一个版本装另一个版本卸的来回折腾好几次才看到Primace的本来面目。还有那个USB下载线,MCU要一个JTAG,FPGA也要一个JTAG,如果能二合一的干活多好啊,就像咱的NIOS2。
  FPGA开发,确切的说硬件系统的开发都是有赖于Primace的,软件是KEIL,它们提供了一套接口,用上去还算方便。这个Primace整个一ISE或者Quartus II的简化版,毕竟也是刚起步,勉强可以接受,怎么说咱当年在ISE10大行其道的年代也有过被迫无奈“玩转”ISE4的经历。
  截个图,如图1,它们的开发流程也算是软硬兼施,FPGA的流程很简化,看上去很“清爽”。最终把FPGA配置文件bitgen和KeilC的Hex一起在软件里生成个新文件下载就行。

图1
  开发工具真的很“简陋”。时序约束和分析特权同学还没摸懂怎么回事,就那么两三个GUI选项,只能说是比Classic timing analyzer还Classic,这一点是特权同学最担忧的;提供的板级调试手段也很有限,好像就一个称为Signal monitor的家伙,没有尝试,就不妄下定论,好在本来它的逻辑资源也不多,调试起来有没有在线手段也无关紧要。

      51硬核性能测试
  IO口速度测试,使用以下程序测试高电平脉宽。
  while(1)
  {
  P0 = 0xf;
  P0 = 0x0;
  }
  同等条件下与其他MCU比较:
[size=11.6667px]
            
单片机/处理器

            
            
工作频率

            
            
高脉冲宽度

            
            ASTRO 8051硬核
            
            25MHz
            
            约1us
            
            ASTRO 8051硬核
            
            50MHz
            
            约500ns
            
            ASTRO 8051硬核
            
            100MHz
            
            约250ns
            
            STC89C516
            
            11.0592MHz
            
            约2.16us
            
            NIOS II/e 32位软核
            
            25MHz
            
            约2.5us
            
            NIOS II/s 32位软核
            
            25MHz
            
            约160ns
            
            NIOS II/f 32位软核
            
            25MHz
            
            约160ns
            
  在两次操作之间插入延时函数,分别延时delay(1)、delay(2)、delay(3)、delay(4)。测试延时函数如下:

  void delay(uchar cnt)
  {
  uchar i =0;
  while(i < cnt)
  {
  i++;
  }
  }
  由于delay()函数调用一次会有一些额外开销(如赋初值等),所以我们通过不同延时值的实际延时差来看指令运行的速度。换句话说,对前面的程序,可以通过每次delay()函数的差值来计算每多执行一次i++和一次i--的开销。
[size=11.6667px]
            
延时函数

            
            
ASTRO 8051硬核

            
            
NIOS II/s 32位软核

            
            
50MHz

            
            
100MHz

            
            
25MHz

            
            
50MHz

            
            Delay(1)
            
            5.0us
            
            2.5us
            
            6.5us
            
            4us
            
            Delay(2)
            
            6.6us
            
            3.3us
            
            9us
            
            6us
            
            Delay(3)
            
            8.3us
            
            4.2us
            
            11.5us
            
            7.5us
            
            Delay(4)
            
            9.9us
            
            5.0us
            
            14us
            
            9.5us
            
            i++与i
            
            约1.63us
            
            约0.83us
            
            约2.5us
            
            约1.25us
            
  特权同学曾使用相同条件测试了51单片机,通常11.0592MHz下工作的51单片机每多执行一次i++和一次 简单的一些性能测试,发现这个51硬核还是有花头的,至于稳定性和可靠性上还需继续验证和尝试。当然,本文的测试是使用了片内的存储器作为代码和数据存储,实际速度性能和存储器的性能关系非常大,是需要进一步考核的项目。

       存储器
有几点关于代码和数据存储区配置的一些疑问,麻烦解答一下:
  问:代码存储器可以选择OTP或者extension memory,一般在最终软件定型后使用OTP没有问题,而在调试过程中会选择extension memory。extension memory里有三类:EMB、SRAM和Custom,通常代码存储器应该是非易失存储器,而你们这里列出来的EMB和SRAM都是下电易失的,这一点我不是很明白?难道说extension memory只是在KeilC处于debug模式时代码运行的存储区,而非代码下电存储的介质?EMB只有1K(最大可以到2K),如果设置了这个代码存储器,是不是KEILC DEBUG时代码不可以超过1K?
  FAE:EMB和SRAM都是易失的,用EMB是最大可支持2KB的code空间,EMB初始化的信息与FPGA配置信息一起存储在内嵌SPI Flash中,上电自动加载,用SRAM时,需要使用我们提供的SRAMLoader工程,利用Astro重配置特性进行加载。
  问:与上面类似的疑问,关于数据存储区,两个选项,on-ship SRAM默认勾选,这个没有疑问。而FP应该是内部扩展的4M Flash,应该是非易失存储器,数据存储器通常没有必要是非易失的吧?我认为按照常规,代码存储是非易失存储器,数据存储是易失存储器,而你们的配置选项让我有点糊涂。
  FAE:Astro内部为8051提供16KB专用SRAM,用作data空间。
  问:另外,SPI烧录应该是将FPGA配置数据烧录到4M FLASH中吧?而用Configuration Packer功能应该是要将FPGA配置数据和软件hex文件封装成一个文件烧录到4M flash中吧?我这么尝试过好像下电后系统没有跑起来,那么是不是在系统的存储器配置中有所讲究呢?
  FAE:Configuration Packer可以让Astro内存储多个配置文件,利用它可以在使用SRAM做code空间时打包SRAMLoader工程进行上电自动加载。附件中是关于Astro的几个应用文档,您先看一下,写的比较详细,相信对您理解Astro用法会很有帮助,谢谢!
  昨天对Agate Logic负责硬件的FAE狂轰滥炸,对于其开发工具和器件的结构都有更深入的了解和认识,上面的几个问答只是关于51硬核的数据和代码存储器方面的,好一番追问之后,总算逼出了几个像模像样的文档出来,消化后再做了一些实践,然后有一点收获和对后续项目在存储器配置上的一些可行性的想法。另外,关于时序方面的一些疑问也得到了解答,不是很放心,也问出了一些真真确确的“问题”来,并且目前在用软件版本的一些bug也被我问出来了,目前还需要等着厂商给我提供补丁,所以关于时序方面的博文只能暂缓进行。
  特权同学问题提得比较到位,但不是很有水准。FAE回答得也不是很容易让人明白,最后还是文档给出了比较权威的解答。
  在讨论Astro系列芯片51硬核的软件运行模式之前,要先看看Astro系列芯片到底已经提供了哪些片内的存储资源,不看不要紧,一看吓一跳——可谓品种齐全,满足各类需求。
  1. 总共1Mbit的OTP型存储区,其中64KB用于FPGA的配置数据存储,另64KB用于51硬核的最终代码存储器。
  2. 4Mbit(512KB)的FPGA和8051公用的SPI Flash。
  3. 2块9Kbit的可配置双端口EMB。
  4. 16KB的51硬核专用数据存储器。
  Astro系列芯片51硬核的软件主要运行模式:
  小模式:
  不外挂存储器,使用芯片现有资源,FPGA配置数据和8051代码(小于2KB)存储于SPI Flash中。系统上电后,FPGA配置数据先从SPI Flash中导出并配置FPGA,也包括EMB的初始化数据(即软件代码从SPI FLASH搬运到EMB中);完成后8051代码直接从EMB中开始运行。
  内嵌8051在无等待周期的状态下,最快时钟频率可到70MHz,性能到47MIPS的性能。主要用于8051代码较少时,调试生产两便,成本也比较低。
  手记二中的测试就是基于该模式,性能还算可以。
  调试模式:
  外挂SRAM存储器,FP Bootloader配置数据、FPGA用户程序配置数据和8051用户代码分段存储于SPI Flash中。系统上电先从SPI Flash中导出FP BootLoder配置数据(内含Loader部分)。配置FP包括EMB的初始化数据,完成后SRAM Loader程序将搬运8051用户代码到外挂SRAM中;之后再从SPI Flash中导入FP用户程序并重新配置FP,8051代码在外挂SRAM中开始运行。
  内嵌8051在无等待周期的状态下,最快时钟频率可到35MHz,性能到23MIPS的性能。此模式主要用于8051代码超过2KB调试时用。当然也可用于生产。请注意外挂SRAM将增加成本。
  这种模式由于不太可能使用,所以特权同学不过多研究,但这也是嵌入式系统中比较常见的一种BootLoder方式。
  最终生产模式:
  不外挂存储器,8051代码存储于OTP存储器中,FP配置数据存于OTP或SPI FLASH中。因为OTP存储器是一次性的,所以不能用于调试阶段。一般产品最终定型后再使用OTP存储器可以获得最优的性能和最低的成本。
  而当采用OTP 作为8051 代码内存,最高时钟频率可达100MHz。较理想的方法是用锁相环PLL来产生8051 时钟。CKCON SFR的低4位用来控制数据Memory 的等待周期。如果8051时钟频率高于45MHz,最好将value设置为大于等于2,以防止时钟太快,数据还没准备好。
  也就是说,OTP方式可以达到51硬核代码运行的最佳性能,甚至于性能的速度瓶颈已经不是代码存取,而是数据存取。
  以上三种模式是比较推荐的,但是特权同学从实际工程需要来考虑,简单的说,需要一种调试模式和一种生产模式。生产模式无可厚非的选择OTP烧录,而调试模式有点棘手,如果选择小模式,代码运行量太小,顶多不过2K,基本干不了什么事。而选择外扩SRAM,有限的IO资源不会允许的。所以,有点苦恼,但是还好,还有一种最次的选择——性能低下的第四种模式。

       当8051的性能低于1.4MIPS时,可用spi flash作为8051的代码存储器。此模式的运行环境如下:
  1. 选用片内 SPI FLASH;
  2. FPGA的配置数据和8051代码存放在同一个SPI FLASH 里;
  3. 8051 与SPI FLASH 接口大约需要90 个LE cells;
  4. 8051 的内核时钟最快为30MHz 左右, 8051 最快运行性能大约为1.4MIPS;
  5. 顺序取指需要 8 个时钟周期,跳转取指需要40 个周期;
  在尝试SPI FLASH模式的时候,遇到了比较有意思的事。特权同学根据实例做SPI FLASH的运行测试,结果搞不定,也找不到相关的IP核。于是求问FAE,FAE直接告知这个IP核还没有集成到工具中,然后把源代码都发过来了。呵呵,虽然工具不完善,不过服务倒是很周到。
  由于基于SPI FLASH的模式是在51硬核与SPI FLASH之间使用FPGA逻辑搭建了一个FLASH读取的模块。所以经过测试,确实这个FLASH读取控制的逻辑模块频率不能太高,过高FLASH就要**了,理论值是30M,而特权同学用了25M。然后使用上一篇手记同样的方法改变硬核的频率进行测试。
<p><span class="Apple-style-span" style="font-family: Arial, 宋体; font-size: 11.6667px; line-height: 22px; ">[table]            [tr]            [td=1,2,114]            
延时函数

            [/td]            [td=2,1,227]            
EMB模式

            [/td]            [td=2,1,227]            
SPI FLASH模式

            [/td]        [/tr]        [tr]            [td=1,1,114]            
50MHz

            [/td]            [td=1,1,114]            
100MHz

            [/td]            [td=1,1,114]            
50MHz

            [/td]            [td=1,1,114]            
100MHz

            [/td]        [/tr]        [tr]            [td=1,1,114]            Delay(1)
            [/td]            [td=1,1,114]            5.0us
            [/td]            [td=1,1,114]            2.5us
            [/td]            [td=1,1,114]            20us
            [/td]            [td=1,1,114]            20us
            [/td]        [/tr]        [tr]            [td=1,1,114]            Delay(2)
            [/td]            [td=1,1,114]            6.6us
            [/td]            [td=1,1,114]            3.3us
            [/td]            [td=1,1,114]            27.5us
            [/td]            [td=1,1,114]            27.5us
            [/td]        [/tr]        [tr]            [td=1,1,114]            Delay(3)
            [/td]            [td=1,1,114]            8.3us
            [/td]            [td=1,1,114]            4.2us
            [/td]            [td=1,1,114]            35us
            [/td]            [td=1,1,114]            35us
            [/td]        [/tr]        [tr]            [td=1,1,114]            Delay(4)
            [/td]            [td=1,1,114]            <p style="word-break: break-all; border-top-width: 0px; padding-right: 0px; padding-left: 0px; border-left-width: 0px; border-bottom-width: 0px; padding-bottom: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; border-right-width: 0px; line-height: 16px; font-family: Arial; font-size: 12px; font-weight: normal; ">9.9u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-7-30 01:46 , 耗时 0.100423 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表