一、FPGA引入
1、FPGA简介
2、FPGA优势和局限性
二、LED点灯
1、创建工程
2、原理图
3、仿真
一、FPGA引入
1、FPGA简介
Field Programmable Gate Array(FPGA)就是“可反复编程的逻辑器件”(可编程的数字电路)。
FPGA、ARM和DSP区别简述:
ARM:侧重于控制和传输,通常也包含的人机交互功能;
DSP:为高速数据的实时采集和传输、复杂的运算处理应用而进行定制化的处理器;
FPGA:覆盖各种ARM和DSP无法满足的应用,更趋向于小批量、定制化、实时性、要求又很高的应用。
2、FPGA优势和局限性
FPGA通常在数字信号处理、视频处理、图像处理、5G通信领域、医疗领域、工业控制、云服务、加速计算、人工智能、数据中心、自动驾驶、芯片验证等领域发挥着不可替代的作用。
【潜在优势】(1)灵活性:可重编程,可定制,易于维护,方便移植、升级或扩展降低NRE成本,加速产品上市时间支持丰富的外设接口,可根据需求配置;(2)并行性:更快的速度、更高的带宽,满足实时处理的要求;(3)集成性:更多的接口和协议支持,可将各种端接匹配元件整合到器件内部,有效降低BOM成本,单片解决方案,可以替代很多数字芯片减少板级走线,有效降低布局布线难度。
【局限性】(1)绝对性能受限:在某些性能上FPGA可能比不上专用芯片;(2)灵活性是否适用:如果设计不需要,FPGA的灵活性反而浪费,会潜在的增加产品的成本;(3)功耗相对较高:相比特定功能应用集中的ASIC,使用FPGA实现相同功能可能产生更高的功耗(相比GPU,则单位性能耗要低很多);(4)设计复杂性高:FPGA的设计复杂性和难度可能会给产品的开发带来一场噩梦。
二、LED点灯
1、创建工程
双击打开“Vivado ”,点击“Create Project”创建工程,如下图所示。
点击“Next”下一步,如下图所示。
配置好工程名称以及所需要保存的路径,点击“Next”,如下图所示。
确认创建RTL工程,之后点击下一步,如下图所示。
创建源文件并命名为“led”,之后点击“OK”,如下图所示。
点击“Next”,如下图所示。
创建约束文件,规定片子上哪一个引脚是led,引脚的电平,就是对引脚做一个约束,约束的依据就是原理图,最后点击“OK”,如下图所示。
点击“Next”,如下图所示。
查看开发板上的芯片型号,本开发板选用的型号为“XC7K325T”,双击该行,如下图所示。
点击“Finish”,如下图所示。
在弹出的界面中点击“OK”,如下图所示。
在弹出的界面中点击“Yes”,如下图所示。
2、原理图
关于LED等的管脚接线图如下图所示。
查看一下时钟源对应的管脚以便于在程序中进行配置。
配置并绑定管脚如下。
点击生成bite流,在弹出的点击“Generate Bitstream”。
在弹出的界面点击“OK”。
报这个错误的原因是将LVCMOS33错误的写成了LVCOMS33
set_property PACKAGE_PIN K21 [get_ports led1] set_property IOSTANDARD LVCMOS33 [get_ports led1] create_clock -period 20.000 [get_ports sys_clk50m] set_property PACKAGE_PIN F22 [get_ports sys_clk50m] set_property IOSTANDARD LVCMOS33 [get_ports sys_clk50m]之后点击Generate BitStream,之后如下图所示,Open Hardware Manager。
外部连接好硬件,在软件内部点击自动连接“Auto Connect”。
将程序加载到板子中。
选择对应的bit流文件之后点击“Program”。
3、仿真
在led.xdc文件中对应的想要观察信号的变量前插入下图所示的一段语句。
点击右侧的Language Templates,如下图所示。
检索BUFG,拷贝对应的语句规则,如下图所示。
按照这样的格式修改led.xdc中的代码,如下所示。
module led( input sys_clk50m , (*mark_debug = "true" *)output led1 ); wire clk; BUFG U1 ( .O(clk), // 1-bit output: Clock output .I(sys_clk50m) // 1-bit input: Clock input ); assign led1 = 1'b1; endmodule点击“Run Synthesis”,如下图所示。
点击“Schematic”,如下图所示。
如果下方没有Debug这个导航栏,在Window选项卡中点出来。
按照下图所示的步骤点击“Create Debug Core...”。
在弹出来的界面中点击“OK”。
按照下图所示的步骤点击“Assign to Debug Port...”。
按照下图所示操作点击OK。
按照下图所示的配置点击“Create Debug Port”,实际上已经不需要再加这个probe了,因为已经有了一个probe0了,再添加也只能是悬空。
在弹出的界面中点击“OK”。
将led1_OBUF分配给Debug端口,如下图所示。
分配到指定的探针口,如下图所示点击“OK”。
识别到了这个probe1没有连接,于是将其删除重新进行Run Synthesis。
解决报错后,连接硬件,下图所示。
将程序下载如下图所示。
点击运行,如下图所示。
在界面中可以看到对应的变量的当前值。