fpgaip核最多
展开全部
一、背景
FIFO是FPGA项目中使用最多的IP核,一个项目使用几个,甚至是几十个FIFO都是很正常的。通常情况下,每个FIFO的参数,特别是位宽和深度,是不同的。
明德扬(MDY)在2021年承担了多个基于XILINX芯片的研发项目,包括VPX网络透明传输项目(芯片为XC7K325T-2FBG900)、某高端测试仪项目(芯片为XCKU060-FFVA1156)、某网闸设备项目(芯片为XC7Z030-FBG676)等,另外,明德扬自研了基于XC7K325T-2FBG900和基于XC7K410T-2FBG900芯片的核心板,在XILINX研发领域拥有丰富的经验。
这些项目都必须用到FIFO。如果按照通常做法,每种位宽和深度的IP,都要打开FIFO IP核界面、命名(命名不好不好分辨需要的FIFO)、设置参数、生成并编译IP核,工作量可以想象出来是非常多的。更重要的是随之而来的管理问题,如何管理这几十个不同FIFO,如何检查FIFO的设置是否正确,都是一个不小的挑战。
对于我们专门承接项目的团队,绝不可忍受如此重复、枯燥、容易出错的工作。经过精心研究,终于找到了一条实用的方法:使用XILINX的原语--xpm_fifo_async和xpm_fifo_sync。
XILINX原语xpm_fifo_async和xpm_fifo_sync在FPGA中,可以直接例化使用,并且可以参数化FIFO的位宽和深度的。即在设计时,不用生成FIFO IP,直接例化就可以使用了。
二、获得参考代码
打开VIVADO软件,点击上图中的Language Templates,将会弹出Language Templates窗口,如下图。
在Language Templates窗口中,依次点击verilog、Xilinx Parameterized Macros(XPM)、XPM、XPM_FIFO,如上图。可以看到有三种FIFO,分别是异步的XPM FIFO:xpm_fifo_async、AXI总线的FIFO:xpm_fifo_axis和同步的XMP FIFO:xpm_fifo_sync。
选择xpm_fifo_async,右边的Preview窗口,将出现xpm_fifo_async的注释以及参考代码。将此部分代码拷出来,并将注释删除,剩下的是xpm_fifo_async的例化参考。
上图是对xpm_fifo_async的参数例化部分。下面是需要重点关注并经常使用的参数。
Ø FIFO_WRITE_DEPTH:FIFO的写深度,其实就是在这里设置FIFO的深度,注意该值通常是2的N次方,如8、16、32、64等数。
Ø PROG_EMPTY_THRESH:FIFO的快空的水线。当FIFO存储的数据量小于该水线时,FIFO的快空信号将会变高。
Ø PROG_FULL_THRESH:FIFO的快满的水线。当FIFO存储的数据量大于该水线时,FIFO的快满信号将会变高,表示有效。
Ø READ_DATA_WIDTH:读数据的位宽。
Ø WRITE_DATA_WIDTH:将数据的位宽。
Ø RD_DATA_COUNT_WIDHT:读侧数据统计值的位宽。
Ø WR_DATA_COUNT_WIDTH:写侧数据统计值的位宽。
上图是对xpm_fifo_async的接口信号部分。下面是需要重点关注并经常使用的信号。
Ø wr_clk:FIFO的写时钟
Ø rst:FIFO的复位信号,高电平有效。要注意的是,该信号是属于写时钟域的。
Ø wr_en:FIFO的写使能信号。
Ø din:FIFO的写数据
Ø full:写满指示信号,当FIFO写满时,该信号变高。
Ø wr_data_count:FIFO存储数据量指示信号,用来指示当前FIFO已经写入但未读出的数据个数。
Ø rd_clk:FIFO的读时钟。
Ø rd_en:FIFO的读使能。
Ø dout:FIFO读出的数据。
Ø empty:FIFO的空指示信号。当其为1表示FIFO处于空状态,当其为0,表示FIFO内有数据。
三、定义自用的FIFO模块
从第二步可以看出,xpm_fifo_async是可以参数化深度和位宽的。但xpm_fifo_async有很多参数和信号,并且其中有部分是不使用的。为了使用上的方便,可以自定义自用的FIFO模块。
例如,明德扬就定义了一个模块mdyFifoAsy,该信号的接口信号如下图。可以看出,名称更加规范,并且定义常用的信号,如读时钟rd_clk,写时钟wrclk、写使能wrreq等信号。
明德扬还在模块mdyFifoAsy定义了一些常用的参数,分别是FIFO深度参数:DEPT_W;FIFO位宽的参数:DATA_W,还有FIFO快满参数AL_FUL和快空参数AL_EMP,如下图。
接下来,就是在mdyFifoAsy中例化并使用xpm_fifo_async了。如下图,就是对xpm_fifo_async的参数例化。将DEPT_W传给FIFO_WRITE_DEPTH,DATA_W传给READ_DATA_WIDTH等。
下图是对xpm_fifo_async的信号例化。将不用的信号留空,将dout连到q,din连到data,wr_en连到wrreq等。您可以根据自己情况来定制FIFO。
四、应用
定制完自己的FIFO后,就可以直接例化使用了。
上图就是使用了一个位宽为8,深度为256的FIFO。
上图就是使用了一个位宽为18,深度为1024的FIFO。
FIFO是FPGA、芯片设计中,最常用的IP核,在存储控制、算法实现、接口设计中,都少不了FIFO,因此合理并正确使用FIFO的技术就非常有必要了,明德扬录制了FIFO的训练视频,掌握后技术能力将有大提升。
通过上面介绍可知,通过此种方式,再也不用生成FIFO IP核啦,整个工程大小基本上可以减少一大半。
上面举的例子是xpm_fifo_async,同步FIFO:xpm_fifo_sync的使用方法是类似的。
FIFO是FPGA项目中使用最多的IP核,一个项目使用几个,甚至是几十个FIFO都是很正常的。通常情况下,每个FIFO的参数,特别是位宽和深度,是不同的。
明德扬(MDY)在2021年承担了多个基于XILINX芯片的研发项目,包括VPX网络透明传输项目(芯片为XC7K325T-2FBG900)、某高端测试仪项目(芯片为XCKU060-FFVA1156)、某网闸设备项目(芯片为XC7Z030-FBG676)等,另外,明德扬自研了基于XC7K325T-2FBG900和基于XC7K410T-2FBG900芯片的核心板,在XILINX研发领域拥有丰富的经验。
这些项目都必须用到FIFO。如果按照通常做法,每种位宽和深度的IP,都要打开FIFO IP核界面、命名(命名不好不好分辨需要的FIFO)、设置参数、生成并编译IP核,工作量可以想象出来是非常多的。更重要的是随之而来的管理问题,如何管理这几十个不同FIFO,如何检查FIFO的设置是否正确,都是一个不小的挑战。
对于我们专门承接项目的团队,绝不可忍受如此重复、枯燥、容易出错的工作。经过精心研究,终于找到了一条实用的方法:使用XILINX的原语--xpm_fifo_async和xpm_fifo_sync。
XILINX原语xpm_fifo_async和xpm_fifo_sync在FPGA中,可以直接例化使用,并且可以参数化FIFO的位宽和深度的。即在设计时,不用生成FIFO IP,直接例化就可以使用了。
二、获得参考代码
打开VIVADO软件,点击上图中的Language Templates,将会弹出Language Templates窗口,如下图。
在Language Templates窗口中,依次点击verilog、Xilinx Parameterized Macros(XPM)、XPM、XPM_FIFO,如上图。可以看到有三种FIFO,分别是异步的XPM FIFO:xpm_fifo_async、AXI总线的FIFO:xpm_fifo_axis和同步的XMP FIFO:xpm_fifo_sync。
选择xpm_fifo_async,右边的Preview窗口,将出现xpm_fifo_async的注释以及参考代码。将此部分代码拷出来,并将注释删除,剩下的是xpm_fifo_async的例化参考。
上图是对xpm_fifo_async的参数例化部分。下面是需要重点关注并经常使用的参数。
Ø FIFO_WRITE_DEPTH:FIFO的写深度,其实就是在这里设置FIFO的深度,注意该值通常是2的N次方,如8、16、32、64等数。
Ø PROG_EMPTY_THRESH:FIFO的快空的水线。当FIFO存储的数据量小于该水线时,FIFO的快空信号将会变高。
Ø PROG_FULL_THRESH:FIFO的快满的水线。当FIFO存储的数据量大于该水线时,FIFO的快满信号将会变高,表示有效。
Ø READ_DATA_WIDTH:读数据的位宽。
Ø WRITE_DATA_WIDTH:将数据的位宽。
Ø RD_DATA_COUNT_WIDHT:读侧数据统计值的位宽。
Ø WR_DATA_COUNT_WIDTH:写侧数据统计值的位宽。
上图是对xpm_fifo_async的接口信号部分。下面是需要重点关注并经常使用的信号。
Ø wr_clk:FIFO的写时钟
Ø rst:FIFO的复位信号,高电平有效。要注意的是,该信号是属于写时钟域的。
Ø wr_en:FIFO的写使能信号。
Ø din:FIFO的写数据
Ø full:写满指示信号,当FIFO写满时,该信号变高。
Ø wr_data_count:FIFO存储数据量指示信号,用来指示当前FIFO已经写入但未读出的数据个数。
Ø rd_clk:FIFO的读时钟。
Ø rd_en:FIFO的读使能。
Ø dout:FIFO读出的数据。
Ø empty:FIFO的空指示信号。当其为1表示FIFO处于空状态,当其为0,表示FIFO内有数据。
三、定义自用的FIFO模块
从第二步可以看出,xpm_fifo_async是可以参数化深度和位宽的。但xpm_fifo_async有很多参数和信号,并且其中有部分是不使用的。为了使用上的方便,可以自定义自用的FIFO模块。
例如,明德扬就定义了一个模块mdyFifoAsy,该信号的接口信号如下图。可以看出,名称更加规范,并且定义常用的信号,如读时钟rd_clk,写时钟wrclk、写使能wrreq等信号。
明德扬还在模块mdyFifoAsy定义了一些常用的参数,分别是FIFO深度参数:DEPT_W;FIFO位宽的参数:DATA_W,还有FIFO快满参数AL_FUL和快空参数AL_EMP,如下图。
接下来,就是在mdyFifoAsy中例化并使用xpm_fifo_async了。如下图,就是对xpm_fifo_async的参数例化。将DEPT_W传给FIFO_WRITE_DEPTH,DATA_W传给READ_DATA_WIDTH等。
下图是对xpm_fifo_async的信号例化。将不用的信号留空,将dout连到q,din连到data,wr_en连到wrreq等。您可以根据自己情况来定制FIFO。
四、应用
定制完自己的FIFO后,就可以直接例化使用了。
上图就是使用了一个位宽为8,深度为256的FIFO。
上图就是使用了一个位宽为18,深度为1024的FIFO。
FIFO是FPGA、芯片设计中,最常用的IP核,在存储控制、算法实现、接口设计中,都少不了FIFO,因此合理并正确使用FIFO的技术就非常有必要了,明德扬录制了FIFO的训练视频,掌握后技术能力将有大提升。
通过上面介绍可知,通过此种方式,再也不用生成FIFO IP核啦,整个工程大小基本上可以减少一大半。
上面举的例子是xpm_fifo_async,同步FIFO:xpm_fifo_sync的使用方法是类似的。
展开全部
IP核的定义
IP(Intellectual Property),即知识产权,在半导体产业中将IP核定义为“用于ASIC或FPGA中的预先设计好的电路功能模块”,简而言之,这里的IP核即电路功能模块。
IP核往往不能跨平台使用;IP核不透明,看不到内部核心代码,无法进行修改优化;定制IP核需额外收费。
IP核的存在形式
HDL语言形式-----软核(软IP)
硬件描述语言;可进行参数调整、复用性强;布局、布线灵活;设计周期短、设计投入少。
这是大多数FPGA内IP核的存在形式,以nsdl源文件的形式提供,不涉及物理实现,为后续设计留下发挥空间,以加密的形式提供,用户看不到RTL代码,可通过头文件或GUI界面对参数进行设置。以源代码的形式提供,尽管有加密措施,但仍有知识产权问题。
网表形式----固核
完成了综合的功能块;可预布线特定信号或分配特定的布线资源。
软核与硬核的折中,适合于对时序要求严格的内核(例如PCIE)。有部分固定的布局,会影响其他电路的布局。
版图形式----硬核
硬核是完成提供设计的最终阶段产品--掩膜(Mask);缺乏灵活性、可移植性差;更易于实现IP核的保护。
Mega Wizard插件管理器调用IP核(Quartus II软件)
新版本的Quartus II 14.0 的Tools菜单中不再有“MegaWizard Plug-In Manager”,而是更名为“IP CATALOG”了。
点击Tool菜单下IP CATALOG选项,在屏幕右侧出现IP核选择界面,点击Device Family选择所用的FPGA芯片系列,之后在搜索框中搜索或分类中找到要用的IP核,选中并点击下方Add。
如果是在工程内部打开IP CATALOG则没有Device Family选项,因为工程中已经确定使用的FPGA芯片,所以不再有芯片系列选择选项,忽略即可。
点击Add后会出现文件保存、语言选择的界面,根据需要选择即可。之后便进入IP核配置界面,这部分详见各IP核介绍。
调用IP核
与普通的实例化相同,在成功生成IP核的个文件后,点击xx_inst.v文件,复制到相应的文件中,修改参数完成实例化即可。
复制生成的IP核
复制生成的IP核文件,在工程中添加文件,添加IP核的.qip文件即可。
常用IP核介绍(Quartus II软件)
PLL IP核介绍
PLL(Phase Locked Loop),即锁相环,其性能强大,可以对输入到FPGA的时钟信号进行任意分频、倍频、相位调整、占空比调整,从而输出一个期望时钟。 PLL IP核能对输入的时钟信号进行优化,使信号在抖动等方面的性能更好,所以即使不对输入的时钟做参数上的修改也可以使用PLL。
配置过程
一、进入pll配置界面后,如下图所示,分别设置1、芯片的速度等级;2、输入时钟信号的频率(也可更改单位,输入时钟信号的周期等);3、选择PLL的工作模式。然后点击下一步。四种工作模式的特点如下,根据需要选择。
标准模式:对FPGA时钟输入和PLL核产生的用于内部寄存器的时钟进行补偿,使两者的相位相同,不考虑PLL产生的输出到FPGA外部的时钟,如下图所示。所以该模式下PLL产生的时钟使用在内部寄存器上,不要用于时钟输出。
源补偿模式:即数据和时钟来源于同一个数据源。 对数据输入和时钟输入进行补偿,使FPGA输入端口上数据输入和时钟输入之间的相位关系与寄存器上的数据输入和时钟输入保持一致(整体有延迟),如下图所示。该模式用于数据接口,特别是高速数据接口。
零延时缓冲模式:该模式与标准模式相反,PLL产生的时钟中,用于输出到FPGA外部的时钟进行了补偿,使之输入的时钟相位相同,而不考虑用于内部寄存器的时钟,内部寄存器时钟相位有偏差,如下图所示。该模式产生的时钟用于输出。
无补偿模式:不进行任何补偿。
二、如下图所示,红圈中选项为创建异步复位信号,一般不用,根据需要选择,这里选择取消。在Lock Output中勾选了创建锁定输出,该选项选中后会有一个锁定输出,该输出为高电平时有效,表示输出的时钟可用,低电平时表示输出的时钟还不能使用,这里选择勾选上。点击下一步
三、连续点击下一步,进入输出时钟配置选项卡,如下图所示,期间的其他界面为PLL的其他高级功能,这里不做介绍。PLL IP核最多可输出5个时钟,在时钟输出配置选项卡下方可选择c0到c4子选项卡,在相应的子选项卡下勾选Use this dock则启该时钟输出。
所有的参数设置框右侧都有着另一个框,这个参数框不能编辑,是系统根据用户在左侧输入的参数,结合实际电路设置的实际参数,会尽量接近用户设置的参数理想输入。例如若在相位调整中输入10.00,实际右侧为10.08,这便是系统能调整的最接近10.00的值。
选中enter output clock parameter,在输出时钟参数设置中可输入乘法因子和除法因子,最终该时钟输出的时钟频率为FPGA输入时钟除以除法因子,在乘以乘法因子,也可选中enter output clock frequency,输入需要的时钟频率,系统会计算并自动设置除法和乘法因子,输出最接近的时钟频率,注意对于无法通过因子乘除得到的频率,只会输出最接近的频率。
在clock phase shift中输入相位值可对相位进行调整,可选择角度和时间单位。在clock duty cycle中调整占空比。所有参数设置完毕后,点击下一步,进入EDA选项卡
IP(Intellectual Property),即知识产权,在半导体产业中将IP核定义为“用于ASIC或FPGA中的预先设计好的电路功能模块”,简而言之,这里的IP核即电路功能模块。
IP核往往不能跨平台使用;IP核不透明,看不到内部核心代码,无法进行修改优化;定制IP核需额外收费。
IP核的存在形式
HDL语言形式-----软核(软IP)
硬件描述语言;可进行参数调整、复用性强;布局、布线灵活;设计周期短、设计投入少。
这是大多数FPGA内IP核的存在形式,以nsdl源文件的形式提供,不涉及物理实现,为后续设计留下发挥空间,以加密的形式提供,用户看不到RTL代码,可通过头文件或GUI界面对参数进行设置。以源代码的形式提供,尽管有加密措施,但仍有知识产权问题。
网表形式----固核
完成了综合的功能块;可预布线特定信号或分配特定的布线资源。
软核与硬核的折中,适合于对时序要求严格的内核(例如PCIE)。有部分固定的布局,会影响其他电路的布局。
版图形式----硬核
硬核是完成提供设计的最终阶段产品--掩膜(Mask);缺乏灵活性、可移植性差;更易于实现IP核的保护。
Mega Wizard插件管理器调用IP核(Quartus II软件)
新版本的Quartus II 14.0 的Tools菜单中不再有“MegaWizard Plug-In Manager”,而是更名为“IP CATALOG”了。
点击Tool菜单下IP CATALOG选项,在屏幕右侧出现IP核选择界面,点击Device Family选择所用的FPGA芯片系列,之后在搜索框中搜索或分类中找到要用的IP核,选中并点击下方Add。
如果是在工程内部打开IP CATALOG则没有Device Family选项,因为工程中已经确定使用的FPGA芯片,所以不再有芯片系列选择选项,忽略即可。
点击Add后会出现文件保存、语言选择的界面,根据需要选择即可。之后便进入IP核配置界面,这部分详见各IP核介绍。
调用IP核
与普通的实例化相同,在成功生成IP核的个文件后,点击xx_inst.v文件,复制到相应的文件中,修改参数完成实例化即可。
复制生成的IP核
复制生成的IP核文件,在工程中添加文件,添加IP核的.qip文件即可。
常用IP核介绍(Quartus II软件)
PLL IP核介绍
PLL(Phase Locked Loop),即锁相环,其性能强大,可以对输入到FPGA的时钟信号进行任意分频、倍频、相位调整、占空比调整,从而输出一个期望时钟。 PLL IP核能对输入的时钟信号进行优化,使信号在抖动等方面的性能更好,所以即使不对输入的时钟做参数上的修改也可以使用PLL。
配置过程
一、进入pll配置界面后,如下图所示,分别设置1、芯片的速度等级;2、输入时钟信号的频率(也可更改单位,输入时钟信号的周期等);3、选择PLL的工作模式。然后点击下一步。四种工作模式的特点如下,根据需要选择。
标准模式:对FPGA时钟输入和PLL核产生的用于内部寄存器的时钟进行补偿,使两者的相位相同,不考虑PLL产生的输出到FPGA外部的时钟,如下图所示。所以该模式下PLL产生的时钟使用在内部寄存器上,不要用于时钟输出。
源补偿模式:即数据和时钟来源于同一个数据源。 对数据输入和时钟输入进行补偿,使FPGA输入端口上数据输入和时钟输入之间的相位关系与寄存器上的数据输入和时钟输入保持一致(整体有延迟),如下图所示。该模式用于数据接口,特别是高速数据接口。
零延时缓冲模式:该模式与标准模式相反,PLL产生的时钟中,用于输出到FPGA外部的时钟进行了补偿,使之输入的时钟相位相同,而不考虑用于内部寄存器的时钟,内部寄存器时钟相位有偏差,如下图所示。该模式产生的时钟用于输出。
无补偿模式:不进行任何补偿。
二、如下图所示,红圈中选项为创建异步复位信号,一般不用,根据需要选择,这里选择取消。在Lock Output中勾选了创建锁定输出,该选项选中后会有一个锁定输出,该输出为高电平时有效,表示输出的时钟可用,低电平时表示输出的时钟还不能使用,这里选择勾选上。点击下一步
三、连续点击下一步,进入输出时钟配置选项卡,如下图所示,期间的其他界面为PLL的其他高级功能,这里不做介绍。PLL IP核最多可输出5个时钟,在时钟输出配置选项卡下方可选择c0到c4子选项卡,在相应的子选项卡下勾选Use this dock则启该时钟输出。
所有的参数设置框右侧都有着另一个框,这个参数框不能编辑,是系统根据用户在左侧输入的参数,结合实际电路设置的实际参数,会尽量接近用户设置的参数理想输入。例如若在相位调整中输入10.00,实际右侧为10.08,这便是系统能调整的最接近10.00的值。
选中enter output clock parameter,在输出时钟参数设置中可输入乘法因子和除法因子,最终该时钟输出的时钟频率为FPGA输入时钟除以除法因子,在乘以乘法因子,也可选中enter output clock frequency,输入需要的时钟频率,系统会计算并自动设置除法和乘法因子,输出最接近的时钟频率,注意对于无法通过因子乘除得到的频率,只会输出最接近的频率。
在clock phase shift中输入相位值可对相位进行调整,可选择角度和时间单位。在clock duty cycle中调整占空比。所有参数设置完毕后,点击下一步,进入EDA选项卡
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
IP核是FPGA开发者的老朋友了,可以这么说,只要是做FPGA开发的,都会利用FPGA的IP核进行开发设计,这不像IC设计,什么都要自己设计,使用IP可以加快产生开发进程。
下面摘自《FPGA之道》对IP核的描述,来理解IP核相关的简单内容。
IP核概述
随着FPGA的集成度越来越高,规模越来越大,设计越来越复杂,IC行业的竞争也越来越激烈,产品的交付周期越来越短,这与人类有限的设计能力形成了巨大矛盾。如果FPGA设计还是全部由设计者从最底层的代码写起,那么必然不能在越来越苛刻的开发周期内完成相关项目。而IP核的出现,解决了这个问题。IP核是一段具有特定电路功能的硬件描述语言程序,该程序通常与集成电路工艺无关,可以移植到不同的半导体工艺中去生产集成电路芯片。由于IP核将一些在数字电路中常用,但比较复杂的功能块设计成可修改参数的模块,因此FPGA的设计人员可以通过调用相关IP核来完成所需逻辑功能,从而节省了大量的开发时间。调用IP核能避免重复劳动,大大减轻设计人员的负担,因此使用IP核必然成为将来FPGA设计的一个发展趋势。
IP代表知识产权,从它的名字我们就能猜到IP核应该不是可以随便使用的。事实上,大部分IP核都是需要付费的,例如RS编码器、FIR滤波器、SDRAM控制器、PCI接口等。不过仍有很多免费的IP核资源,这其中最主要的就是每个FPGA厂商都会为自己的软件集成开发环境提供一些比较基本的免费的IP核来增加自家产品的行业竞争力。例如最最常用的FIFO模块、PLL模块等等。对于我们平常的设计来说,利用好这些免费的IP核就能达到事半功倍的效果。
按IP核的硬件描述级实现程度,可将它分为三类:即软核、硬核、固核。
IP软核一般指的是用硬件描述语言描述的功能块,它并不涉及用什么具体电路元件实现这些功能,软核的代码直接参与设计的编译流程,就像我们自己编写的HDL代码一样,虽然一般会对软核的RTL代码进行加密,但是其保密性还是比较差。
IP硬核是以经过完全的布局布线的网表形式提供,由于不再参与设计的编译流程,因此它的性能具有很强的可预见性,并且保密性好,不过移植性差。
IP固核是软核与硬核的一个折中,它只对描述功能中一些比较关键的路径进行预先的布局布线,而其他部分仍然可以任由编译器进行相关优化处理。例如,当你使用IP核生成一个8x8的乘法器时,如果选择使用逻辑资源块来实现的话,那么此时的乘法器IP核就相当于一个软核;如果你选择使用DSP资源来实现的话,那么此时的乘法器IP核就相当于一个硬核;如果你要用DSP资源生成一个36x36的乘法器时,那么FPGA恐怕需要若干DSP资源来实现,这时候,每个DSP核的布局布线是固定的,但是到底选择那几个DSP资源来实现是可以由编译器来决定的,因此此时的乘法器IP核就相当于一个固核。
嵌入式微处理器概述
嵌入式微处理器是一类比较特殊的IP核,通过在FPGA中实现微处理器的逻辑功能,就可以为嵌入式软件设计者提供在FPGA上大展拳脚的平台。这类IP核的引入,极大的变革和拓宽了FPGA的开发方法,它通过调用FPGA内部的资源实现一个行为和相应微处理芯片类似的功能模块,从而可以像开发单片机、ARM、DSP等芯片上的程序一样,让FPGA具有执行相应汇编或嵌入式C语言指令的功能。这样可以让FPGA集串行复杂处理能力与并行简单处理能力于一体,从而使单片FPGA可以实现SOPC的架构。
目前来说,Altera公司花了很大精力致力于开发专门针对其FPGA芯片产品的嵌入式微处理器IP核,从2000年初的NIOS,到现在的NIOS II,都是十分经典的版本。Xilinx主要致力于将Power PC转换为IP核移植到自己的FPGA产品中。而Atmel由于具有很强的微处理器开发能力,则直接在自己的FPGA产品中嵌入一个AVR单片机,这就是一个彻头彻尾的IP硬核。除此以外,只要经过适当的修改,我们几乎可以将任何微处理器搬入到FPGA的芯片中,甚至我们还可以在FPGA中创造出目前世界上没有的虚拟微处理器。总之,这就是FPGA变化无穷的魅力所在。
下面摘自《FPGA之道》对IP核的描述,来理解IP核相关的简单内容。
IP核概述
随着FPGA的集成度越来越高,规模越来越大,设计越来越复杂,IC行业的竞争也越来越激烈,产品的交付周期越来越短,这与人类有限的设计能力形成了巨大矛盾。如果FPGA设计还是全部由设计者从最底层的代码写起,那么必然不能在越来越苛刻的开发周期内完成相关项目。而IP核的出现,解决了这个问题。IP核是一段具有特定电路功能的硬件描述语言程序,该程序通常与集成电路工艺无关,可以移植到不同的半导体工艺中去生产集成电路芯片。由于IP核将一些在数字电路中常用,但比较复杂的功能块设计成可修改参数的模块,因此FPGA的设计人员可以通过调用相关IP核来完成所需逻辑功能,从而节省了大量的开发时间。调用IP核能避免重复劳动,大大减轻设计人员的负担,因此使用IP核必然成为将来FPGA设计的一个发展趋势。
IP代表知识产权,从它的名字我们就能猜到IP核应该不是可以随便使用的。事实上,大部分IP核都是需要付费的,例如RS编码器、FIR滤波器、SDRAM控制器、PCI接口等。不过仍有很多免费的IP核资源,这其中最主要的就是每个FPGA厂商都会为自己的软件集成开发环境提供一些比较基本的免费的IP核来增加自家产品的行业竞争力。例如最最常用的FIFO模块、PLL模块等等。对于我们平常的设计来说,利用好这些免费的IP核就能达到事半功倍的效果。
按IP核的硬件描述级实现程度,可将它分为三类:即软核、硬核、固核。
IP软核一般指的是用硬件描述语言描述的功能块,它并不涉及用什么具体电路元件实现这些功能,软核的代码直接参与设计的编译流程,就像我们自己编写的HDL代码一样,虽然一般会对软核的RTL代码进行加密,但是其保密性还是比较差。
IP硬核是以经过完全的布局布线的网表形式提供,由于不再参与设计的编译流程,因此它的性能具有很强的可预见性,并且保密性好,不过移植性差。
IP固核是软核与硬核的一个折中,它只对描述功能中一些比较关键的路径进行预先的布局布线,而其他部分仍然可以任由编译器进行相关优化处理。例如,当你使用IP核生成一个8x8的乘法器时,如果选择使用逻辑资源块来实现的话,那么此时的乘法器IP核就相当于一个软核;如果你选择使用DSP资源来实现的话,那么此时的乘法器IP核就相当于一个硬核;如果你要用DSP资源生成一个36x36的乘法器时,那么FPGA恐怕需要若干DSP资源来实现,这时候,每个DSP核的布局布线是固定的,但是到底选择那几个DSP资源来实现是可以由编译器来决定的,因此此时的乘法器IP核就相当于一个固核。
嵌入式微处理器概述
嵌入式微处理器是一类比较特殊的IP核,通过在FPGA中实现微处理器的逻辑功能,就可以为嵌入式软件设计者提供在FPGA上大展拳脚的平台。这类IP核的引入,极大的变革和拓宽了FPGA的开发方法,它通过调用FPGA内部的资源实现一个行为和相应微处理芯片类似的功能模块,从而可以像开发单片机、ARM、DSP等芯片上的程序一样,让FPGA具有执行相应汇编或嵌入式C语言指令的功能。这样可以让FPGA集串行复杂处理能力与并行简单处理能力于一体,从而使单片FPGA可以实现SOPC的架构。
目前来说,Altera公司花了很大精力致力于开发专门针对其FPGA芯片产品的嵌入式微处理器IP核,从2000年初的NIOS,到现在的NIOS II,都是十分经典的版本。Xilinx主要致力于将Power PC转换为IP核移植到自己的FPGA产品中。而Atmel由于具有很强的微处理器开发能力,则直接在自己的FPGA产品中嵌入一个AVR单片机,这就是一个彻头彻尾的IP硬核。除此以外,只要经过适当的修改,我们几乎可以将任何微处理器搬入到FPGA的芯片中,甚至我们还可以在FPGA中创造出目前世界上没有的虚拟微处理器。总之,这就是FPGA变化无穷的魅力所在。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
利用IP核设计 电子系统 ,引用方便,修改基本元件的功能容易。具有复杂功能和商业价值的IP核一般具有知识产权,尽管IP核的市场活动还不规范,但是仍有许多 集成电路设计 公司从事IP核的设计、开发和营销工作。IP核有两种,与工艺无关的VHDL程序称为 软核 ;具有特定电路功能的集成电路版图称为硬核。硬核一般不允许更改,利用硬核进行集成电路设计难度大,但是容易成功流片。IP内核的三种类型
IP内核可以在不同的硬件描述级实现,由此产生了三类IP内核: 软核 、 固核 和 硬核 。这种分类主要依据产品交付的方式,而这三种IP内核实现方法也各具特色。
软核 是用VHDL等硬件描述语言描述的功能块,但是并不涉及用什么具体电路元件实现这些功能。软IP通常是以硬件描述语言HDL源文件的形势出现,应用开发过程与普通的HDL设计也十分相似,只是所需的开发硬 软件环境 比较昂贵。软IP的设计周期短,设计投入少。由于不涉及物理实现,为后续设计留有很大的发挥空间,增大了IP的灵活性和适应性。其主要缺点是在一定程度上使后续工序无法适应整体设计,从而需要一定程度的软IP修正,在性能上也不可能获得全面的优化。由于软核是以 源代码 的形式提供,尽管源代码可以采用加密方法,但其 知识产权保护 问题不容忽视。
硬核 提供设计阶段最终阶段产品:掩模。以经过完全的布局布线的网表形式提供,这种硬核既具有可预见性,同时还可以针对特定工艺或购买商进行功耗和尺寸上的优化。尽管硬核由于缺乏灵活性而可移植性差,但由于无须提供寄存器转移级(RTL)文件,因而更易于实现IP保护。
固核 则是软核和硬核的折衷。大多数应用于FPGA的IP内核均为软核,软核有助于用户调节参数并增强可复用性。软核通常以加密形式提供,这样实际的 RTL对用户是不可见的,但布局和布线灵活。在这些加密的软核中,如果对内核进行了参数化,那么用户就可通过头文件或图形用户接口(GUI)方便地对参数进行操作。对于那些对时序要求严格的内核(如PCI接口内核),可预布线特定信号或分配特定的布线资源,以满足时序要求。这些内核可归类为固核,由于内核是预先设计的代码模块,因此这有可能影响包含该内核的整体设计。由于内核的建立(setup)、保持时间和握手信号都可能是固定的,因此其它电路的设计时都必须考虑与该内核进行正确地接口。如果内核具有固定布局或部分固定的布局,那么这还将影响其它电路的布局。
IP内核可以在不同的硬件描述级实现,由此产生了三类IP内核: 软核 、 固核 和 硬核 。这种分类主要依据产品交付的方式,而这三种IP内核实现方法也各具特色。
软核 是用VHDL等硬件描述语言描述的功能块,但是并不涉及用什么具体电路元件实现这些功能。软IP通常是以硬件描述语言HDL源文件的形势出现,应用开发过程与普通的HDL设计也十分相似,只是所需的开发硬 软件环境 比较昂贵。软IP的设计周期短,设计投入少。由于不涉及物理实现,为后续设计留有很大的发挥空间,增大了IP的灵活性和适应性。其主要缺点是在一定程度上使后续工序无法适应整体设计,从而需要一定程度的软IP修正,在性能上也不可能获得全面的优化。由于软核是以 源代码 的形式提供,尽管源代码可以采用加密方法,但其 知识产权保护 问题不容忽视。
硬核 提供设计阶段最终阶段产品:掩模。以经过完全的布局布线的网表形式提供,这种硬核既具有可预见性,同时还可以针对特定工艺或购买商进行功耗和尺寸上的优化。尽管硬核由于缺乏灵活性而可移植性差,但由于无须提供寄存器转移级(RTL)文件,因而更易于实现IP保护。
固核 则是软核和硬核的折衷。大多数应用于FPGA的IP内核均为软核,软核有助于用户调节参数并增强可复用性。软核通常以加密形式提供,这样实际的 RTL对用户是不可见的,但布局和布线灵活。在这些加密的软核中,如果对内核进行了参数化,那么用户就可通过头文件或图形用户接口(GUI)方便地对参数进行操作。对于那些对时序要求严格的内核(如PCI接口内核),可预布线特定信号或分配特定的布线资源,以满足时序要求。这些内核可归类为固核,由于内核是预先设计的代码模块,因此这有可能影响包含该内核的整体设计。由于内核的建立(setup)、保持时间和握手信号都可能是固定的,因此其它电路的设计时都必须考虑与该内核进行正确地接口。如果内核具有固定布局或部分固定的布局,那么这还将影响其它电路的布局。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好,IP核的定义
IP(Intellectual Property),即知识产权,在半导体产业中将IP核定义为“用于ASIC或FPGA中的预先设计好的电路功能模块”,简而言之,这里的IP核即电路功能模块。
IP核往往不能跨平台使用;IP核不透明,看不到内部核心代码,无法进行修改优化;定制IP核需额外收费。
IP核的存在形式
HDL语言形式-----软核(软IP)
硬件描述语言;可进行参数调整、复用性强;布局、布线灵活;设计周期短、设计投入少。
这是大多数FPGA内IP核的存在形式,以nsdl源文件的形式提供,不涉及物理实现,为后续设计留下发挥空间,以加密的形式提供,用户看不到RTL代码,可通过头文件或GUI界面对参数进行设置。以源代码的形式提供,尽管有加密措施,但仍有知识产权问题。
网表形式----固核
完成了综合的功能块;可预布线特定信号或分配特定的布线资源。
软核与硬核的折中,适合于对时序要求严格的内核(例如PCIE)。有部分固定的布局,会影响其他电路的布局。
版图形式----硬核
硬核是完成提供设计的最终阶段产品--掩膜(Mask);缺乏灵活性、可移植性差;更易于实现IP核的保护。
IP(Intellectual Property),即知识产权,在半导体产业中将IP核定义为“用于ASIC或FPGA中的预先设计好的电路功能模块”,简而言之,这里的IP核即电路功能模块。
IP核往往不能跨平台使用;IP核不透明,看不到内部核心代码,无法进行修改优化;定制IP核需额外收费。
IP核的存在形式
HDL语言形式-----软核(软IP)
硬件描述语言;可进行参数调整、复用性强;布局、布线灵活;设计周期短、设计投入少。
这是大多数FPGA内IP核的存在形式,以nsdl源文件的形式提供,不涉及物理实现,为后续设计留下发挥空间,以加密的形式提供,用户看不到RTL代码,可通过头文件或GUI界面对参数进行设置。以源代码的形式提供,尽管有加密措施,但仍有知识产权问题。
网表形式----固核
完成了综合的功能块;可预布线特定信号或分配特定的布线资源。
软核与硬核的折中,适合于对时序要求严格的内核(例如PCIE)。有部分固定的布局,会影响其他电路的布局。
版图形式----硬核
硬核是完成提供设计的最终阶段产品--掩膜(Mask);缺乏灵活性、可移植性差;更易于实现IP核的保护。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询