=================引言===================================================
昨天从某宝上买了一个很简单AG1280Q48的最小系统核心板,简单跑起来了小灯,跟几个朋友说好要提供一下操作步骤和详细的操作步骤,借这个BLOG我实现从0开始简单写写。
AG1280Q48是一个国产的CPLD,内部有1280个LE,相当于EPM570逻辑资源量的两倍,并且在传统的CPLD基础上加入了一个PLL 和一个内置的RAM,这就算是福利了。更重要的是当前价格仅仅是在10元RMB之内,可以说非常香甜。
==================关于FPGA/CPLD开发的两个基本阶段===========================
FPGA开发软件大约的工作流程是这样的:
步骤1,首先将我们的VERILOG代码进行分析编译成基本的LUT表和寄存器,虽然是相同的LUT表,但是给内部赋予不同初始数值就可以实现不同功能。如果用到了其他内部硬核比如PLL,DSP,RAM需要进行实例化。这一步骤的结果我们成为网表(NETLIST)。
步骤2,NETLIST里面就好像一个原理图结合PCB库导入到PCB文件里,接下来要进行布局和布线,将原件放在实际的位置上,生成对每个FPGA/CPLD内部连接的开关以及LUT的初始化文件。这一步可以叫做布局布线,或者叫做实现“Implament”。
当然这只是最简单步骤,忽略了寄存器复制,RETIMING,时序约束等各种其他细节。
第一步骤实际是公式化的,只要知道一个FPGA/CPLD里面用到的基本逻辑单元,就可以根据成熟的积累的算法实现到verilog代码到基本逻辑单元的映射。这也就是为什么有SYNPLIFY灯灯第三方综合软件的出现。尤其在QUARTUS和ISE综合能力不是那么强的年代,这些第三方软件还有一定市场。其生成NETLIST给厂家对应的EDA进行布局布线最终实现生成配置的BIT流。
我们想,如果我们设计一个CPLD/FPGA硬件,内部采用的是基本逻辑元素是跟现有厂家某一个型号兼容的,则我们可以上述的第一步可以用现有厂家的编译工具产生网表(NETLIST),有了这个NETLIST我们再根据自己的芯片内部LUT的放置和延迟等信息具体确定某个LUT放在哪个位置,必要时候为了达到时许要求还要进行寄存器复制等。这些工作是需要用到具体厂家芯片内部的各种信息,只能有厂家的来写这个软件。
===================AG1280Q48软件开发的思路==============================
上面讲了两个基本步骤,其实比较难的是第一步骤,但是国外有成熟的算法和积累的,经历了几十年的发展,已经成熟。国内人做产品还是比较机智的,第一步骤借用了国外的开发工具生成NETLIST,之后自己之要做好第二步骤来生成BIT流,最后再实现一个下载方案将生成BIT流烧入到此CPLD就行。
另外在纯粹的RTL综合时要确保不产生BRAM和其他的所选ALTERA的FPGA/CPLD内置硬核。
具体而言:AQ1280Q48使用的基本逻辑单元是兼容CYCLONE 4的,我们做一个简单的不不包含任何硬核的纯粹RTL设计,用VERILOG写好代码,再QUARTUS里面里面选定任意一个CYLONE 4的型号进行编译,确保代码没有错误。在AG软件软件下指定QUARTUS项目目录,之后AG软件在另外一个目录自动转换成了另外一个QUARTUS项目,将这个QURTUS项目编译一下再次生成NETLIST。之后就进入AG软件进行布局布线了。
上述步骤是纯RTL的编译,而AG1280Q48里面还赠送了两个硬核一个是PLL一个是BRAM,由于这两个不是纯RTL不能转换成LUT,所以要对应进行以下的骚操作:
1,将PLL或者BRAM设置为DESIGN PARTITION。
2,加入仿真文件,用里面的描述替代真实的PLL和BRAM模块
基本这样的步骤我们下一个BLOG就详细实践一下这个过程。
有了上面的原理分析下面的这些实际操作步骤就很容易理解和操作了
下面是几个连接可以参考:
https://github.com/xjtuecho/agmpill
AG1280Q48 最小系统板 V1 - 嘉立创EDA开源硬件平台
分享一个国产CPLD/FPGA芯片资料:AGM的AG1280Q48 / Xilinx/Altera/FPGA/CPLD/Verilog / WhyCan Forum(哇酷开发者社区)