FPGA的以太网ip核具体实现步骤,怎样仿真其功能

FPGA的以太网ip核具体实现步骤,怎样仿真其功能,第1张

你用的是Altera还是xilinx的IP核?

一般的ip核都有自动生成工具,比如Altera有megacore wizard,按照你需要的功能enable或者disable选项就可以了。具体步骤可以上Altera或者Xilinx的网站,搜索你需要的以太网ip核关键字,比如GE或者FE,以及是否需要MAC,PCS功能等。

仿真方面,ip核提供商都是考虑好了的:提供有仿真模型,一般生成core的时候都有sim文件夹,可以用来实现仿真。

这个要看你的系统需求了,nios可以抑制c代码,用软件语言实现(类似单片机),当然Verilog完全可以实现nios里面的功能,其主要优势就是并行执行,速度快了很多倍,可是需要有硬件语言的功底。

运动控制卡的实现还是比较复杂的,其中牵扯了很多控制因子,有时候需要复杂的算法支持,很多是通过dsp实现,现在的fpga是具有dsp builder功能,所以,提供两种思路:

1、软件实现,采用高端的fpga可以通过sopc内嵌dsp的ip核(可能需要购买),然后在nios里面实现软件编程,dsp程序也方便移植。

2、硬件实现,所有的控制功能都是通过硬件语言实现,可能比较复杂,你需要实现你控制功能里面划分的每个模块,然后综合逻辑,仿真等。

总之,这两种方式都是可以实现的,或者也可以综合,即:简单的逻辑通过硬件实现,复杂的通过软件实现,两者结合,工程量会少很多,这就是fpga的魅力所在!

希望对你有帮助,加油!

STM32提供了很多片上通信接口,如SPI,I2C,UART等,还可用IO直接并行传输,这些接口在FPGA上都能够实现。关键看你要通讯的数据量,要求的传输速率,对于串行并行的特殊要求,电路板空间要求等综合考虑,选择通讯方式。具体的FPGA代码都有软核或者示例代码,稍作修改都能用。STM32的代码网上就非常多了。

  基于FPGA的双口RAM实现及应用的使用方法:

  CPU并行工作(双单片机系统)方式得到广泛应用。为了使2个单片机能够快速有效交换

信息,充分利用系统资源,采用双口RAM实现存储器共享是目前较为流行的方法。

  大容量、高速FPGA器件具有集成度高、体积小、灵活可重配置、实验风险小等优点,在复杂数字系统中得到越来越广泛的应用。数字电路设计采用l片FPGA器件、存储设备和一些电气接口匹配电路的解决方案已成为主流选择方案。用FPGA来实现双口RAM的功能可以很好地解决并行性和速度问题,而且其灵活的可配置特性使得基于FPGA的双口RAM易于进行修改、测试及系统升级,可降低设计成本,缩短开发周期。

  双口RAM简介:

  双口RAM是在1个SRAM存储器上具有两套完全独立的数据线、地址线和读写控制线,并允许两个独立的系统同时对其进行随机性访问的存储器,即共享式多端口存储器。双口RAM最大的特点是存储数据共享。1个存储器配备两套独立的地址、数据和控制线,允许两个独立的CPU或控制器同时异步地访问存储单元。因为数据共享。则必须具有访问仲裁控制。内部仲裁逻辑控制提供以下功能:对同一地址单元访问的时序控制;存储单元数据块的访问权限分配:信令交换逻辑(例如中断信号)等。双口RAM可用于提高RAM的吞吐率,适用于实时数据缓存。

FPGA 查找表功能实现:

查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。

CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时序逻辑。换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。

CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。

在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。

FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。

CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。

CPLD的速度比FPGA快,并且具有较大的时间可预测性。这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。

在编程方式上,CPLD主要是基于E2PROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编程器上编程和在系统编程两类。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。

CPLD保密性好,FPGA保密性差。

一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。

布局布线应该是xilinx FPGA的,不用手动进行,,如果你只是实现一些简单的功能,利用xilinx ISE的开发工具就是直接双击implement,就会完成,但是可以手动设置一些参数,比如速度优先、性能优先等。

真正将你的HDL代码变为可用的电路过程如下:

xilinx的步骤synphysize(综合) translate(注译),map(映射),和place and route(布局布线)

altera的步骤为complie(编译)synphysize(综合) fitter(布线)

综合以后生成的就为网表文件。这个文件只是一个电路的雏形,经过translate,map,place and route(布局布线)就会和你的FPGA芯片中的结构一一对应起来,这些都是ISE自己完成的不需要你的参与,当然你可以进行约束你写的模块的位置。

首先,对照外部芯片的电气特性部分,确认电平连接方式,在FPGA的管脚约束满足外部芯片的电气要求即可。

其次,在FPGA设计中满足外部器件的时序要求,这包括两部分,一个是功能实现,一个是时序约束。基本功能实现,可以通过编写代码的方式,同时查看外部芯片的时序要求,满足setup/hold 要求,就针对SPI的时序而言,其CLK和DI、DO的时序要求很简单,很容易满足(如果实现不会,就看这时序图设计电路,或网上下载个成熟电路,把他们看明白)。而时序约束,通过编写SDC等文件实现,你这里只需要周期约束即可满足,而其他的offset、miti-cycle等约束是否需要,在设计过程中确认。

最后,其他要求,如jitter等,需要依靠FPGA器件自身性能满足。这个不需要设计,只需要查看FPGA DATASHEET即可。

1 FPGA与MCU,DSP,ARM等区别

MCU等是属于软件编程,程序是顺序执行,即使像DSP有多级流水线,但是程序总体还是顺序的。

FPGA是属于硬件编程,程序是并行执行的,可以有多个进程,同时执行不同的功能。

2 FPGA实现UART,IIC,SPI。

如果是简单的应用(比如说不用校验等等),完全可以自己写,例如下面的程序,VHDL写的,既可以作为UART发送程序(改改就是接收),也可以做SPI发送或者接收(加一个时钟)。

如果需要较完善的功能的话,建议使用IP核,往上有很多免费的UART,IIC,SPI等接口的IP核,功能及代码都给你写好了的,提供输入输出接口,方便应用。

process(Clk)

variable temp : integer range 0 to 7;

begin

if Clk'event and Clk='1' then

if Reset = '0' then

TxD <= '1';

BitCnt <= "00000";

SL<='1';

TReg<=(others=>'0');

temp:=0;

elsif Load = '0' and temp=0 then

TxD <= '1';

SL<='1';

BitCnt <= "00000";

temp:=0;

elsif Load='1' and temp=0 then

temp:=1;

elsif temp=1 then

case BitCnt is

when "00000" =>

TReg <= Addr_Data;

SL<='0';

TxD <= '0';

BitCnt <= BitCnt + 1;

temp:=1;

when "00001" | "00010" | "00011" |

"00100" | "00101" | "00110" |

"00111" | "01000" | "01001" |

"01010" | "01011" | "01100" |

"01101" | "01110" | "01111" =>

TxD <= TReg(0);

TReg <= '1' & TReg(14 downto 1);

BitCnt <= BitCnt + 1;

temp:=1;

when "10000" =>

SL<='1';

TxD <= '1';

TReg <= '1' & TReg(14 downto 1);

BitCnt <= "00000";

temp:=0;

when others => NULL;

end case;

ELSE

TXD<='1';

SL<='1';

end if;

end if;

end process;

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » FPGA的以太网ip核具体实现步骤,怎样仿真其功能

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情