引言
20 世纪末,半导体技术获得了飞速发展,在其推动下,现代电子产品几乎渗透到社会的每一个角落:军事,航空,汽车,农业,工业,消费电子等等。很难想象,如果没有半导体,自然不会有ASIC,不会有 FPGA,不会有 MCU,在硬件基础上产生的软件似乎也不会获得高速发展,因而半导体技术是整个 IT 技术的基础,是现在社会文明进步的一个重要标志。
半导体技术一个主要内容为电子设计,其核心为EDA(Electronic Design Automation)技术。EDA 技术就是依赖功能强大的计算机,在 EDA 工具软件平台上,对以硬件描述语言HDL 为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译,逻辑化简,逻辑分割,逻辑综合,结构综合(布局布线),以及逻辑优化和仿真测试,直到实现既定的电子线路系统功能。EDA技术使得设计工作仅限于利用软件的方式,即利用硬件描述语言和EDA软件来完成对系统硬件功能的实现。
EDA技术在进入 21世纪后,得到了更大的发展,其中一个突出表现为基于EDA工具的 ASIC 设计标准单元已涵盖大规模电子系统及 IP 核模块。
1 IP和 FPGA的概念
1.1 IP的概念
IP(Intellectual Property)就是知识产权核或知识产权模块的意思。美国 Dataquest 咨询公司将半导体产业的 IP 定义为用于 ASIC 或FPGA/CPLD 中的预先设计好的电路功能模块。 在此不区分 ASIC 和 FPGA/CPLD,从本质上说 FPGA/CPLD 依然是 ASIC。IP 分为软 IP,固IP,和硬IP。软 IP 是用VHDL等硬件描述语言描述的功能块,但是并不涉及用什么具体电路元件实现这些功能。软 IP 通常是以硬件描述语言 HDL源文件的形式出现,应用开发过程与普通的HDL设计也十分相似,只是所需的开发软硬件环境比较昂贵。软 IP 的设计周期短,设计投入少。由于不涉及物理实现,为后续设计留下很大的发挥空间,增大了 IP 的灵活性和适应性。软 IP 的弱点是在一定程序上使后续工序无法适应整体设计,从而需要一定程度的软IP 修正,在性能上也不可能获得全面的优化。
固 IP 是完成了综合的功能块。它有较大的设计尝试,以网表文件的形式提交客户使用。如果客户与固 IP 使用同一个 IC 生产线单元库,IP 应用的成功率会高很多。
硬 IP 提供设计的最终产品:掩膜。随着设计深度的提高,后续工序所需要做的事情就越少,当然,灵活性也就越小。不同的客户可以根据自己的需要订购不同的 IP 产品。由于系统越来越复杂,PLD 的设计也更加庞大,这增加了市场对 IP 核的需求。FPGA/CPLD 厂家继续开发新的商品 IP,并且开始提供“硬件”IP,即将一些功能在出厂时就固化在芯片中。
1.2 IP和 FPGA
FPGA(Field Programmable Gate Array)是上世纪伟大的发明之一。其灵活性在很多场合上已逐步取代了 ASIC,由于集成电路工艺的提高,FPGA 的规模越来越大,处理能力越来越强,应用范围也越来越广。通信,图像处理,自动控制等很多场合其扮演着重要的角色, 现在FPGA 一般成为一个系统板的核心部件。 FPGA 的大规模应用是因为功能越来越强,而设计反而显得简单,一是因为工具的强大,另一是因为 FPGA 供应商提供了大量的 IP CORE 可供使用。
IP CORE一些是集成在 FPGA 中的,例如 FPGA 中的高速串口(RAPID I/O) ,有的则以设计原型提供,例如DDR2 控制器。因而 FPGA 与 IP 是紧密联系的。 一方面, FPGA 丰富了 IP CORE 的类型, 另一方面, IP CORE的完善又直接促进了 FPGA 在某些场合的使用。
2 使用 Xilinx IP Core的开发流程
Xilnx通过Core Generator系统来发布其免费的或商业的 IP (Intellectual Properties) Core。
下图为Xilinx一般的使用Xilinx Core Generator System生成集成 IP 核的流程。
1)Core Generator:第一步需分析设计需求,确定设计需要的IP Core的类型及参数,从而启动 Core Generator 来生成自己想要的 IP Core。启动方法:运行命令 wincoregen(10以前的版本运行 coregen)可以启动 Xilinx Core Generator,再建立工程,选择设计所用的FPGA型号,生成类型(VHDL或Verilog)等。然后找到IP 列表中所需的IP 核,进行配置,最后生成即可。
2)HDL Editor:生成 VHDL 文件后将 VHO 文件中的说明进行模块例化,主要在例化模块中添加Component声明,还有在Architecture中例化生成的VHDL模块。
3)Instance:根据第2 步建立例化文件,并完成整个设计的RTL的工程。
4)Simulation:对设计的RTL进行功能仿真,在这过程进行前需将ISE 的IP 库编译到Modelsim的库中,这样才可调用,仿真完成后证明功能是正确的。
5)Synthesize:综合生成 Implementation 所需的.edf 文件,在综合后查看综合报告,可以看到IP Core调用的说明,一般会生成BlackBox(黑盒子) 。在综合后也可查看原理图等,通过跟RTL描述的比对从而对结构有更大的把握。
6)Implementation:在该步将进行Place and Route,这需要IP Core生成的Edn文件作为宏文件。需要约束文件 ucf,约束文件是对 FPGA Pin 脚的约束及时钟上的约束等。这些文件准备好后,将把设计布局布线成 Bit 二进制文件,该文件可直接下载到 FPGA 中,若 FPGA 与EEPROM相连,则可生成mcs等文件,直接下载到EEPROM中,这样不用每次上电后再编程一次FPGA,因为FPGA 是易失性的。
3 基于 Xilinx IP的开发流程举例
3.1 需求分析
定点平方根运算单元使用场合很多,在浮点开平方运算中,也将浮点首先转化为定点,再进行开平方运算。本设计需要进行一个定点开平方的模块,由于设计一个开平方模块较为复杂,调用相应的IP CORE 将省去大量的设计及验证工作。对设计效率有着明显的提高。 定点开平方运算需实现对一个范围为[0,2)的定点数进行开平方。根据输入使能信号进行开平方的运算,运算完成后输出值。 被开平方数共有48bit,其中最高位为整数位,其余47 位为小数位。整个数为非负数即unsigned。因为负数的平方根没有意义。
3.2 IP的生成
开始步骤省略,开平方根采用CORDIC 算法,其IP 位置如下所示:
选择位宽,为48 位。
3.3 定点平方根运算单元的设计
由于开平方根所需时间较长,而且有时根据数据不同且所需时间不同,因而采用一个状态机来控制开方运算。采用非Pipeline式,即当一次计算完成后下次才可以开始。状态机分为下面几个状态,IDLE,REQ_SEND,READY_WAIT,SQRT_DONE。 IDLE:当有开平方要求时,则进入REQ_SEND 状态。REQ_SEND:该状态只保持一个周期。表示开方运算即将开始。在此状态,被开方数被缓存。
READY_WAIT:等待计算完成。
SQRT_DONE:READY等待完成,发出计算完成脉冲,用于外设采样结果。
3.4 功能的仿真
根据设计出的功能进行了一些数据的仿真。如下图所示:
从上图可以看出:
SQR0x000000000000) = 0
SQRT(0x400000000000) = 0x16A09E667F3C
SQRT(0x000000000001) = 0x0000008504F3
SQRT(0x800000000000) = 0x800000000000
SQRT(0x8FFFFFFFFFFF) = 0x87C38666FB6
上述小数点均在 MSB后。例如0x800000000000 = 1.0
4 结论
本文给出了了Xilinx FPGA 中基于IP 的开发的一般流程。首先进行需求分析,生成合适的IP,被设计例化,进行功能仿真。一般流程及大致步骤是一致的。在需求分析阶段,其实我们更需要去看一下需要的IP 的DATASHEET,每个IP 都有相应的DATASHEET, 他定义了端口的功能,定义了端口的时序。
引言
20 世纪末,半导体技术获得了飞速发展,在其推动下,现代电子产品几乎渗透到社会的每一个角落:军事,航空,汽车,农业,工业,消费电子等等。很难想象,如果没有半导体,自然不会有ASIC,不会有 FPGA,不会有 MCU,在硬件基础上产生的软件似乎也不会获得高速发展,因而半导体技术是整个 IT 技术的基础,是现在社会文明进步的一个重要标志。
半导体技术一个主要内容为电子设计,其核心为EDA(Electronic Design Automation)技术。EDA 技术就是依赖功能强大的计算机,在 EDA 工具软件平台上,对以硬件描述语言HDL 为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译,逻辑化简,逻辑分割,逻辑综合,结构综合(布局布线),以及逻辑优化和仿真测试,直到实现既定的电子线路系统功能。EDA技术使得设计工作仅限于利用软件的方式,即利用硬件描述语言和EDA软件来完成对系统硬件功能的实现。
EDA技术在进入 21世纪后,得到了更大的发展,其中一个突出表现为基于EDA工具的 ASIC 设计标准单元已涵盖大规模电子系统及 IP 核模块。
1 IP和 FPGA的概念
1.1 IP的概念
IP(Intellectual Property)就是知识产权核或知识产权模块的意思。美国 Dataquest 咨询公司将半导体产业的 IP 定义为用于 ASIC 或FPGA/CPLD 中的预先设计好的电路功能模块。 在此不区分 ASIC 和 FPGA/CPLD,从本质上说 FPGA/CPLD 依然是 ASIC。IP 分为软 IP,固IP,和硬IP。软 IP 是用VHDL等硬件描述语言描述的功能块,但是并不涉及用什么具体电路元件实现这些功能。软 IP 通常是以硬件描述语言 HDL源文件的形式出现,应用开发过程与普通的HDL设计也十分相似,只是所需的开发软硬件环境比较昂贵。软 IP 的设计周期短,设计投入少。由于不涉及物理实现,为后续设计留下很大的发挥空间,增大了 IP 的灵活性和适应性。软 IP 的弱点是在一定程序上使后续工序无法适应整体设计,从而需要一定程度的软IP 修正,在性能上也不可能获得全面的优化。
固 IP 是完成了综合的功能块。它有较大的设计尝试,以网表文件的形式提交客户使用。如果客户与固 IP 使用同一个 IC 生产线单元库,IP 应用的成功率会高很多。
硬 IP 提供设计的最终产品:掩膜。随着设计深度的提高,后续工序所需要做的事情就越少,当然,灵活性也就越小。不同的客户可以根据自己的需要订购不同的 IP 产品。由于系统越来越复杂,PLD 的设计也更加庞大,这增加了市场对 IP 核的需求。FPGA/CPLD 厂家继续开发新的商品 IP,并且开始提供“硬件”IP,即将一些功能在出厂时就固化在芯片中。
1.2 IP和 FPGA
FPGA(Field Programmable Gate Array)是上世纪伟大的发明之一。其灵活性在很多场合上已逐步取代了 ASIC,由于集成电路工艺的提高,FPGA 的规模越来越大,处理能力越来越强,应用范围也越来越广。通信,图像处理,自动控制等很多场合其扮演着重要的角色, 现在FPGA 一般成为一个系统板的核心部件。 FPGA 的大规模应用是因为功能越来越强,而设计反而显得简单,一是因为工具的强大,另一是因为 FPGA 供应商提供了大量的 IP CORE 可供使用。
IP CORE一些是集成在 FPGA 中的,例如 FPGA 中的高速串口(RAPID I/O) ,有的则以设计原型提供,例如DDR2 控制器。因而 FPGA 与 IP 是紧密联系的。 一方面, FPGA 丰富了 IP CORE 的类型, 另一方面, IP CORE的完善又直接促进了 FPGA 在某些场合的使用。
2 使用 Xilinx IP Core的开发流程
Xilnx通过Core Generator系统来发布其免费的或商业的 IP (Intellectual Properties) Core。
下图为Xilinx一般的使用Xilinx Core Generator System生成集成 IP 核的流程。
1)Core Generator:第一步需分析设计需求,确定设计需要的IP Core的类型及参数,从而启动 Core Generator 来生成自己想要的 IP Core。启动方法:运行命令 wincoregen(10以前的版本运行 coregen)可以启动 Xilinx Core Generator,再建立工程,选择设计所用的FPGA型号,生成类型(VHDL或Verilog)等。然后找到IP 列表中所需的IP 核,进行配置,最后生成即可。
2)HDL Editor:生成 VHDL 文件后将 VHO 文件中的说明进行模块例化,主要在例化模块中添加Component声明,还有在Architecture中例化生成的VHDL模块。
3)Instance:根据第2 步建立例化文件,并完成整个设计的RTL的工程。
4)Simulation:对设计的RTL进行功能仿真,在这过程进行前需将ISE 的IP 库编译到Modelsim的库中,这样才可调用,仿真完成后证明功能是正确的。
5)Synthesize:综合生成 Implementation 所需的.edf 文件,在综合后查看综合报告,可以看到IP Core调用的说明,一般会生成BlackBox(黑盒子) 。在综合后也可查看原理图等,通过跟RTL描述的比对从而对结构有更大的把握。
6)Implementation:在该步将进行Place and Route,这需要IP Core生成的Edn文件作为宏文件。需要约束文件 ucf,约束文件是对 FPGA Pin 脚的约束及时钟上的约束等。这些文件准备好后,将把设计布局布线成 Bit 二进制文件,该文件可直接下载到 FPGA 中,若 FPGA 与EEPROM相连,则可生成mcs等文件,直接下载到EEPROM中,这样不用每次上电后再编程一次FPGA,因为FPGA 是易失性的。
3 基于 Xilinx IP的开发流程举例
3.1 需求分析
定点平方根运算单元使用场合很多,在浮点开平方运算中,也将浮点首先转化为定点,再进行开平方运算。本设计需要进行一个定点开平方的模块,由于设计一个开平方模块较为复杂,调用相应的IP CORE 将省去大量的设计及验证工作。对设计效率有着明显的提高。 定点开平方运算需实现对一个范围为[0,2)的定点数进行开平方。根据输入使能信号进行开平方的运算,运算完成后输出值。 被开平方数共有48bit,其中最高位为整数位,其余47 位为小数位。整个数为非负数即unsigned。因为负数的平方根没有意义。
3.2 IP的生成
开始步骤省略,开平方根采用CORDIC 算法,其IP 位置如下所示:
选择位宽,为48 位。
3.3 定点平方根运算单元的设计
由于开平方根所需时间较长,而且有时根据数据不同且所需时间不同,因而采用一个状态机来控制开方运算。采用非Pipeline式,即当一次计算完成后下次才可以开始。状态机分为下面几个状态,IDLE,REQ_SEND,READY_WAIT,SQRT_DONE。 IDLE:当有开平方要求时,则进入REQ_SEND 状态。REQ_SEND:该状态只保持一个周期。表示开方运算即将开始。在此状态,被开方数被缓存。
READY_WAIT:等待计算完成。
SQRT_DONE:READY等待完成,发出计算完成脉冲,用于外设采样结果。
3.4 功能的仿真
根据设计出的功能进行了一些数据的仿真。如下图所示:
从上图可以看出:
SQR0x000000000000) = 0
SQRT(0x400000000000) = 0x16A09E667F3C
SQRT(0x000000000001) = 0x0000008504F3
SQRT(0x800000000000) = 0x800000000000
SQRT(0x8FFFFFFFFFFF) = 0x87C38666FB6
上述小数点均在 MSB后。例如0x800000000000 = 1.0
4 结论
本文给出了了Xilinx FPGA 中基于IP 的开发的一般流程。首先进行需求分析,生成合适的IP,被设计例化,进行功能仿真。一般流程及大致步骤是一致的。在需求分析阶段,其实我们更需要去看一下需要的IP 的DATASHEET,每个IP 都有相应的DATASHEET, 他定义了端口的功能,定义了端口的时序。





