当前位置: 首页 新闻详细

vivado烧录led灯,xilinx Vivado的使用详细介绍:管脚约束 产生比特流文件烧写程序

专业网络营销推广——跟随大平台节奏

电话+V:159999-78052 ,欢迎咨询vivado烧录led灯,[专业新媒体运营推广],[各种商圈业内交流],[抖音运营推广课程],[微信运营推广课程],[小红书运营推广课程],[让你站在风口忘记焦虑]

一、FPGA入门有多难?这篇文章让你吃透零基础入门技巧!

FPGA,一种高度集成的芯片,其学习之路既需要编程技能,又要理解硬件电路和计算机架构。涉及的知识和基础非常广泛,若学习内容安排不当,学习过程可能变得漫长而枯燥。这使得许多对FPGA感兴趣的人望而却步。那么,FPGA入门究竟有多难呢?今天,移知教育的小编将带领大家深入了解。

FPGA入门的难易程度,与你的专业背景密切相关。

1、相关专业:如果你在本科学习期间,学习过数字电路,或者就是电子相关专业的同学。对数字电路和逻辑设计有一定基础的话,入门FPGA可能相对容易一些。

2、非相关专业:对于完全没有相关背景的初学者来说,学习FPGA可能会有一定的难度。学习FPGA,最基本的就是需要去学习数字电路基础知识,对于没有相关专业背景知识的同学来说,在开始学习之前,首先是需要花时间去学习数字电路基础的。其次,要想掌握FPGA,还需要掌握除了数电知识以外的其他很多知识。比如硬件描述语言和学习开发工具和设计流程,还要掌握常用的FPGA设计技术等等。

总体来说,FPGA入门难,主要在于需要掌握的知识多,有一定的复杂性。

移知教育联合国内一线Fpga工程师,精心打磨《21天搞定FPGA入门训练营》,7天基础内容学习+7天代码学习+7天完成实验项目报告,深入浅出掌握FPGA必备技能,对入门学习以及后续进阶非常有用!

通过为期两周的训练营学习,基础理论结合动手的实操演练,十个项目的全维度工程掌握,可以帮助在家的学生掌握FPGA设计从RTL设计、功能仿真、综合等,直到在FPGA开发板上进行下载验证的设计流程,使学生对FPGA设计有一个宏观认识。

FPGA入门学习的建议:

1、入门最基本的就是理解数字电路基础知识:

理解FPGA编程的基础,熟悉二进制、布尔代数、逻辑门和组合逻辑等等基础的概念,这些知识是理解FPGA编程的基础。

2、学习硬件描述语言:

常用的硬件描述语言有两种,VHDL和verilog,是用于描述FPGA中的逻辑电路。目前市面上以verilog为主,与传统的软件开发语言有着本质的不同。

误区提醒:verilog和C语言很相似,导致很多同学在学习verilog时尝尝以学习C语言角度代入,很容易陷入误区。学习verilog一定要从硬件电路的思维方式和编程方法去学习。

3、熟悉开发流程和开发仿真工具:

QuartusPrime(用于AlteraFPGA),Vivado(用于XilinxFPGA)或ISE

使用FPGA进行开发,通常使用专用的开发工具,开发工具需要根据不同芯片厂商,以及的不同的使用的软件也不一样。这些工具从刚入门的角度来说,界面也是有些复杂的,作为初学者可能需要一段时间来熟悉和掌握他们。现在报名21天搞定FPGA入门》即送FPGA开发板。

4、学习FPGA架构和资源:优化设计,解决问题

需要了解FPGA的内部结构,包括逻辑器件、时间资源、ARM资源等等,理解这些资源的特性,对于后面做设计优化约束非常重要的。了解FPGA内部结构和架构,可以使我们的更好的理解和应用FPGA技术,能够进一步的优化设计和解决一些代码上或调试上的一些问题。

5、上手完成简单的项目:

基础综合实操演练有上诉四点基础,可以动手做一些简单的项目:LED灯的闪烁、计数器、状态器等等;通过实际动手做项目,可以加深对FPGA编程和设计流程的理解。

6、学习常用的FPGA设计技术:

优化设计性能如说了解时序约束、如何处理跨时中域、状态机设计、IP核的使用等等;这些技术可以帮助我们在设计中避免一些常见的问题,并且能优化设计性能。

7、参考文档查阅

如说阅读FPGA厂商提供的官方文档和用户手册,这些文档详细的介绍了FPGA的架构、编程语言、一些工具使用,或者是一些常用芯片的说明书;一般这些参考文档都是英文的,所以说具备一定的英语阅读能力也是非常重要的。

xilinxVivado的使用详细介绍:管脚约束产生比特流文件烧写程序

2018-10-1416:57·JAVA柯尼塞克丶Author:zhangxianhe

新建工程

打开Vivado软件,直接在欢迎界面点击CreateNewProject,或在开始菜单中选择File-NewProject即可新建工程。

点击Next;

输入工程名称和路径。

选择默认的RTLProject选项,勾选Donotspecify......(这样可以跳过添加源文件的步骤,源文件可以后面再添加)。

直接选择Boards,然后选择ZedboardZynqEvaluationandDevelopmentKit硬件开发包。

点击Next,再点击Finish,项目新建完成

添加Verilog设计文件(DesignSource)

在ProjectManager窗口中,右击选择DesignSources,在空白处或任意文件夹上右击,选择AddSources。

选择AddorCreateDesignSources,点击Next。

点击CreateFile按钮,弹出的小窗口中输入文件名,点击OK。

可以一次性新建或添加多个文件,最后点击Finish。

稍后会弹出定义模块的窗口,也就是刚刚添加的Divider_multiple文件。可以在这里设置Divider_multiple模块的输入输出端口;或者直接点击OK,稍后再自行编写。

点击OK后,如果弹出下面窗口直接点击Yes。

设计文件和对应的模块即创建完成,如下图。

打开Divider_multiple设计文件,并把如下代码复制进去,并保存。

moduleDivider_Multiple_top(inputclk_i,inputrst_n_i,outputdiv2_o,outputdiv3_o,outputdiv4_o,outputdiv8_o,outputdiv2hz_o);regdiv2_o_r;always@(posedgeclk_iornegedgerst_n_i)beginif(!rst_n_i)div2_o_r<=1'b0;elsediv2_o_r<=~div2_o_r;endreg[1:0]div_cnt1;always@(posedgeclk_iornegedgerst_n_i)beginif(!rst_n_i)div_cnt1<=2'b00;elsediv_cnt1<=div_cnt1+1'b1;endregdiv4_o_r;regdiv8_o_r;always@(posedgeclk_iornegedgerst_n_i)beginif(!rst_n_i)div4_o_r<=1'b0;elseif(div_cnt1==2'b00||div_cnt1==2'b10)div4_o_r<=~div4_o_r;elsediv4_o_r<=div4_o_r;endalways@(posedgeclk_iornegedgerst_n_i)beginif(!rst_n_i)div8_o_r<=1'b0;elseif((~div_cnt1[0])(~div_cnt1[1]))div8_o_r<=~div8_o_r;elsediv8_o_r<=div8_o_r;endreg[1:0]pos_cnt;reg[1:0]neg_cnt;always@(posedgediv2_o_rornegedgerst_n_i)beginif(!rst_n_i)pos_cnt<=2'b00;elseif(pos_cnt==2'd2)pos_cnt<=2'b00;elsepos_cnt<=pos_cnt+1'b1;endalways@(negedgediv2_o_rornegedgerst_n_i)beginif(!rst_n_i)neg_cnt<=2'b00;elseif(neg_cnt==2'd2)neg_cnt<=2'b00;elseneg_cnt<=neg_cnt+1'b1;endregdiv3_o_r0;regdiv3_o_r1;always@(posedgediv2_o_rornegedgerst_n_i)beginif(!rst_n_i)div3_o_r0<=1'b0;elseif(pos_cnt<2'd1)div3_o_r0<=1'b1;elsediv3_o_r0<=1'b0;endalways@(negedgediv2_o_rornegedgerst_n_i)beginif(!rst_n_i)div3_o_r1<=1'b0;elseif(neg_cnt<2'd1)div3_o_r1<=1'b1;elsediv3_o_r1<=1'b0;endregdiv2hz_o_r;reg[25:0]div2hz_cnt;always@(posedgeclk_iornegedgerst_n_i)beginif(!rst_n_i)div2hz_cnt<=0;elseif(div2hz_cnt<26'd50_000000)div2hz_cnt<=div2hz_cnt+1'b1;elsediv2hz_cnt<=0;endalways@(posedgeclk_iornegedgerst_n_i)beginif(!rst_n_i)div2hz_o_r<=0;elseif(div2hz_cnt==26'd24_999999||div2hz_cnt==26'd49_999999)div2hz_o_r<=~div2hz_o_r;elsediv2hz_o_r<=div2hz_o_r;endassigndiv2_o=div2_o_r;assigndiv3_o=div3_o_r0|div3_o_r1;assigndiv4_o=div4_o_r;assigndiv8_o=div8_o_r;assigndiv2hz_o=div2hz_o_r;endmodule

添加Verilog仿真文件(SimulationSource)

操作和上一步添加Verilog设计文件基本一致,唯一的区别是选择AddorCreateSimulationSources。新建一个名为Divider_Multiple_TB的仿真文件。

设计文件新建完成后,在DesignSources和SimulationSources中都有,而仿真文件只会出现在SimulationSources文件夹中。设计文件可以用于仿真,也可以用于最终烧写进开发板,而仿真文件仅用于仿真。

双击打开Divider_Multiple_TB仿真文件,并把如下代码复制进去,并保存。

moduleDivider_Multiple_TB;//Inputsregclk_i;regrst_n_i;//Outputswirediv2_o;wirediv3_o;wirediv4_o;wirediv8_o;wirediv2hz_o;//InstantiatetheUnitUnderTest(UUT)Divider_MultipleMyDivider_Multiple(.clk_i(clk_i),.rst_n_i(rst_n_i),.div2_o(div2_o),.div3_o(div3_o),.div4_o(div4_o),.div8_o(div8_o),.div2hz_o(div2hz_o));initialbegin//InitializeInputs4clk_i=0;rst_n_i=0;//Wait100nsforglobalresettofinish#96;rst_n_i=1;endalwaysbegin#5clk_i=~clk_i;endendmodule

vivado烧录led灯

IO口配置(I/OPlanning)/编辑约束文件(EditConstraintsSets)

做好的模块,在烧写进板子之前,需要设置输入输出信号与板子上IO口的对应关系。

IO口设置有两种方法,第一种是直接创建并编辑约束文件,第二种是在图形界面进行设置。

编辑约束文件

操作和上一步添加Verilog设计文件、仿真文件基本一致,唯一的区别是选择AddorCreateSimulationSources。新建一个名为Zedboard_pin的约束文件。

打开Zedboard_pin的约束文件,并把如下代码复制进去。

create_clock-nameclk100MHZ-period10.0[get_ports{clk_i}]set_propertyPACKAGE_PINY9[get_ports{clk_i}]set_propertyIOSTANDARDLVCMOS33[get_ports{clk_i}]set_propertyPACKAGE_PINN15[get_ports{rst_n_i}]set_propertyIOSTANDARDLVCMOS18[get_ports{rst_n_i}]set_propertyPACKAGE_PINT22[get_ports{div2hz_o}]set_propertyIOSTANDARDLVCMOS33[get_ports{div2hz_o}]set_propertyPACKAGE_PINT21[get_ports{div8_o}]set_propertyIOSTANDARDLVCMOS33[get_ports{div8_o}]set_propertyPACKAGE_PINU22[get_ports{div4_o}]set_propertyIOSTANDARDLVCMOS33[get_ports{div4_o}]set_propertyPACKAGE_PINU21[get_ports{div3_o}]set_propertyIOSTANDARDLVCMOS33[get_ports{div3_o}]set_propertyPACKAGE_PINV22[get_ports{div2_o}]set_propertyIOSTANDARDLVCMOS33[get_ports{div2_o}]

图形界面配置管脚

在实现完成后,OpenImplementedDesign选项从灰色变成可点击状态。

点击OpenImplementedDesign,即可打开ImplementedDesign窗口。

在I/OPorts窗口展开管脚,对于每个输入输出信号,在Site栏选择对应的管脚,注意确保Fixed栏处于勾选状态,I/OStd常选择LVCMOS33。

设置好后,ImplementedDesign窗口标题栏会显示一个*号,表示设置发生了更改。

按Ctrl+S快捷键保存设置,会弹出窗口如图,提示保存constraints文件会导致综合与实现过期。也就是说,修改了管脚分配设置后,需要重新进行综合、实现操作。这里点击OK。

弹出窗口,选择Createanewfile并输入文件名,点击OK。

此时约束文件已经自动被创建并编辑,可以打开查看。

行为仿真(RunBehavioralSimulation)

在FlowNavigator窗口中点击RunSimulation-RunBehavioralSimulation;或者在菜单中选择Flow-RunSimulation-RunBehavioralSimulation,即可启动行为仿真。

稍后BehavioralSimulation窗口打开,即可看到输出的仿真波形。

综合(Synthesis)

综合类似于编程中的编译。

在FlowNavigator或Flow菜单中,选择Synthesis-RunSynthesis;或点击工具栏中的三角形按钮如图,即可开始对设计文件进行综合。

综合完成后,会弹出如下窗口。如果选择第一项并点击OK,就会启动下一步的实现。为了方便学习,这里我们直接点击Cancel。

综合后时序仿真(RunPost-SynthesisTimingSimulation)

在FlowNavigator窗口中点击RunSimulation-RunPost-SynthesisTimingSimulation;或者在菜单中选择Flow-RunSimulation-RunPost-SynthesisTimingSimulation,即可启动行为仿真。

观察波形可以清晰看到综合后仿真加入了延迟更加接近实际芯片的运行情况

执行(Implementation)

综合完成后,需要进行实现,在FlowNavigator或Flow菜单中,选择Synthesis-RunImplementation;或点击工具栏中的三角形按钮如图,即可开始对设计文件进行综合。实际中是在综合后没有错误直接点RunImplementation选项进行实现。

实现完成后,同样会出现一个窗口如下。选择第一项可以打开下一步的IO口设置界面,选择第二项可以启动后面要说的生成比特流操作。同样,这里还是点击Cancel关闭。

执行后时序仿真(RunPost-ImplementationTimingSimulation)

观察波形可以清晰看到布局布线后仿真加入了延迟这要比综合后的时序更加接近真实的情况。

生成比特流

生成比特流文件,这个文件会被直接烧写进板子。类似于编程中的二进制可执行文件。点击ProgramandDebug->GenerateBitstream。或下图的上面图标即可执行生成比特流的操作。

比特流生成后显示如下对话框,为了方便直接点击Cancel。

烧写程序

连接电路板并打开电源。生成比特流,打开硬件会话并编程FPGA。

确保Micro-USB电缆连接到Zedboard的电源连接器旁边的JTAGPROG连接器。

Zedboard需要通过位于POWER开关旁边的J20连接一个单独的电源。

选择ProgramandDebug-OpenHardwareManager。

如果之前连接过开发板,直接点击上方绿色栏的Openrecenttarget即可打开;如果是第一次连接开发板,则点击Openanewhardwaretarget。

第一次连接开发板,点击Openanewhardwaretarget,点击Next

还是点击Next。

显示下面窗口,稍后即可打开硬件设备。

由于我以前连接过开发板,所以直接连接开发板。

HardwareManager窗口即被打开,此时处于”Unconnected”状态。

单击Opentarget,在下面出现的菜单中选择AutoConnect。

硬件会话状态从“Unconnected”更改为服务器名称,设备突出显示。还要注意状态表明它没有被编程。

打开设备后,就会在Hardware窗口显示。右击设备并选择ProgramDevice,进行Program。

或者直接点击绿色栏的ProgramDevice进行Program。

弹出比特流文件选择窗口,一般直接按默认值点击Program,即可烧写程序到板子中。

本实验介绍了VIVADO的FPGA开发流程规范。包括了程序设计、行为仿真、综合过程、综合后时序仿真、执行过程、执行后仿真,比特流文件生成并下载到开发板上验证。

注意点一:

在vivado下建立工程,有以下几种情况:1.如果没有涉及到PS部分,可以采用基于v文件或者diagram的工程。基于v文件的工程是由一个个的verilog或vhdl或ip组成的;基于diagram的工程是先新建一个diagram,然后在diagram中添加一个个的ip。2.如果用到了PS,那只能采用基于diagram的工程。

PS和PL的关系:PS的实质就是ARMCortexA9MPcore,所以如果我们不使用可编程部分,我们完全可以只使用PS部分。也就是说,对于ZYNQ芯片,PS部分可以完全独立使用,不依赖PL部分。PL部分的实质是XilinxFPGA。在ZYNQ中,我们可以把PL看成是PS的另一个具有可重配置特点的“外设”,它可以作为PS部分的一个从设备,受ARM处理器控制。比如ARM(PS)的串口数量不够时,以太网接口不够时,或者需要视频接口时都可以用PL部分扩展。当然我们也可以把PL部分看成一个不受ARM处理器控制,与ARM处理器对等的主设备,主动完成与外部芯片、接口的数据交互。更甚至PL部分也可以作为整个系统的主设备,主动从APU部分的存储器中获取、存储数据,并可控制ARM处理器的运算。所以,理论上PL部分也可以像PS部分那样独立运行。但限制是必须使用JTAG接口对PL部分进行配置。如果没有JTAG接口,就无法独立运行,因为ZYNQ的PS部分和PL部分都必须依靠PS来完成芯片的初始化配置。

注意点二:

PS核与PL的IP之间通信方式只有一种,那就是通过AXI总线。AXIinterconnectIP是一个功能强大的IP,它能管理多个AXI接口的IP。用户如果用到多个AXIIP,那么只需PS将M_AXI_GP0引脚连接到AXIinterconnectIp的SO0_AXI引脚,再将AXIinterconnectip的输出分别连接到每个AXIIP的S_AXI引脚即可,省去了多个AXI互联的管理问题。ProcessorSystemResetIP为其他IP提供复位信号。

【WINDRISES NETWORK MARKETING】尊享直接对接老板

电话+V: 159999-78052

专注于网络营销推广配套流程服务方案。为企业及个人客户提供高性价比的运营方案,解决小微企业和个人创业难题

vivado烧录led灯
发布人:goudeng8670 发布时间:2024-10-16