Zynq开发实践(FPGA之第一个vivado工程)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        数字电路设计,如果仅仅是写写代码,做做verilog仿真,那么其实是不需要转移到fpga上面的。这就好比是算法工程师,他做好了算法,写好了matlab仿真之后,如果仅仅是为了发论文,这个时候其实目的已经达到了。但是我们最终是需要用verilog做产品的,也就是所有的电路都要port到fpga上的,这个时候就要想办法创建fpga工程,下载程序了。

1、从ise到vivado、vitis

        我们使用的芯片是zynq,主要是7010和7020。最早xilinx fpga编译的工具叫ise,它只能做fpga的开发,现在加了arm之后,ise变成了vivado,最新的软件叫vitis。相比较原来的软件,vivado不仅安装大小大了很多,功能也多了不少,它既可以做fpga的开发,还可以做arm的开发、hls的开发。如果不涉及到linux系统的开发,vivado windows版本其实可以覆盖所有的开发内容。

2、vivado的开发步骤

        目前为止,我们使用vivado还是先做fpga方面的开发。一个fpga工程在构建之前,最好已经做好了仿真方面的测试。比如我们之前做的iverilog+vvp+gtkwave就是仿真测试。如果通想过不停编译fpga工程来进行在线测试,效率是非常低的。

        一般vivado的开发步骤分成这三个步骤,首先是综合,也就是把verilog语言转变成各种网表。其次是实现布局布线,也就是把这些网表映射到fpga的硬件资源上面,中间会涉及到各种条件的约束。最后就是bitstream的生成。有了这个bitstream,就可以下载到具体的fpga上面,检测一下执行效果了。

3、vivado最重要的优点就是软硬协同开发

        之前用ise开发fpga,大部分就是纯数字的电路开发。但是vivado的开发思路有了很大的转变。就拿zynq来说,由于有硬核arm和mio多功能接口,大部分外设、协议开发的工作其实都可以arm+软件来完成。这个时候fpga部分就可以做一些算法加速、硬件扩展的工作。因为此时fpga做成的ip就可以为cpu所调用,这样整个系统又灵活、效率又高。ps,也就是arm部分可以专注于业务和流程,而pl,也就是fpga专注于性能和接口拓展,两者紧密合作,做自己擅长的工作即可。以前虽然也这么做,但是两者是通过分列式元器件实现的,现在是合二为一了。

4、先fpga,再block design,最后sdk开发

        很多ip其实是vivado自带的,比如pll、rom、ram、fifo、ddr contrller、dma这些。但是很多行业特定的算法,都是没有的,这部分就要自己写。所以我们做好fpga开发之后,一般就会套一个axi接口,这样就可以为cpu所调用。

        所谓的block design,就是从数字电路层面构建一个系统。里面有arm cpu,有reset系统,有axi总线,有dma,还有各种各样的外设ip、算法ip,最后把它们串联成系统,构建一个超级fpga工程。这样的设计既有系统性,还有灵活性。

        最后就是sdk开发,最初的时候可以专注于裸机开发,或者是rtos开发。如ps自带的mio接口,使用的也是固化ip,类似于gpio、uart、iic、sd、eth部分,这部分完全不需要pl的参与,就和mcu开发是一样的。如果是ps端口不够,就可以用pl拓展端口,或者直接把pl的算法ip导入进来,做好驱动,做好dma数据收发,这样ip就可以为我们所用了。

5、第一个vivado工程

        明确了未来的方向,目前为止我们还是以fpga为主。fpga本身也是可以单独进行arm开发,或者是单独进行fpga开发,只不过arm+fpga融合是效率最高的方式。如果是纯fpga开发,只需要注意三点就可以了,第一点就是开始的时候,一定要注意好芯片类型的选择。比如假设soc类型是7020clg400-1,结果后续端口选择了其他soc的pin脚,很容易出现warning,或者直接bitstream生成失败。

        第二点,就是准备好verilog代码。这部分代码最好是之前仿真测试好的,这里直接copy粘贴过来即可。不要指望全部下载到fpga进行调试,这个效率是非常慢的。一般第一个verilog都是点灯程序,那么可以仿真测试好,再copy过来即可。

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2025/09/11 22:07:11
// Design Name: 
// Module Name: led
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////module led(input clk,input rst,output reg[1:0] led);reg[31:0] counter;
localparam THRESHOLD_VALUE = 32'd25000000;always@(posedge clk or negedge rst)if(!rst)counter <= 32'd0;else if(counter == THRESHOLD_VALUE)counter <= 32'd0;elsecounter <= counter + 1;always@(posedge clk or negedge rst)if(!rst)led <= 2'b00;else if(counter == THRESHOLD_VALUE)led <= ~led;endmodule

        第三,就是xdc约束文件。有了verilog还不够,我们还需要告诉fpga,哪部分是输入,哪部分是输出,clk是哪一个,只有这样才能进行全部的工作。xdc可以和verilog一样,一开始的时候就全部写好,直接Generate bitstream即可。

set_property PACKAGE_PIN P15 [get_ports {led[1]}]
set_property PACKAGE_PIN U12 [get_ports {led[0]}]
set_property PACKAGE_PIN N18 [get_ports clk]
set_property PACKAGE_PIN R19 [get_ports rst]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports led]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports rst]
create_clock -period 20.000 -name clk -waveform {0.000 10.000} [get_ports clk]

        其实不光是vivado,其他厂家的eda基本上也是这么一个流程。只是过程可能会多一个仿真,比如modelsim的仿真,只是我们自己使用了iverilog,所以这一步就可以跳过去了。等到bitfile生成好了,就可以继续准备后面的验证测试了。

6、jtag烧录

        烧录一般有两种方法,一种就是jtag烧录器直接烧入,还有一种就是直接type c烧入,这个时候烧录模块已经merge到开发板上面了。如果是vivado工具,直接输入“open hardware target”,继续单击“Open Target”,左侧选择识别的芯片(比如7010或者是7020),右击选择“Program Device”,继续选择好对应的bitstream file,单击“Program”即可。一般烧录好了之后,芯片自己就开始运行了。不过断电之后,程序也消失了。

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96886.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Selenium】Selenium 测试失败排查:一次元素定位超时的完整解决之旅

Selenium 测试失败排查:一次元素定位超时的完整解决之旅 在自动化测试过程中,我们经常会遇到元素定位超时的问题。本文记录了一次完整的 Selenium TimeoutException 排查过程,从问题发现到最终解决,涵盖了各种常见陷阱和解决方案。 问题背景 测试用例在执行过程中失败,…

32.网络基础概念(二)

局域网网络传输流程图两台主机在同一个局域网&#xff0c;是否能够直接通信&#xff1f;以太网原理举例&#xff1a;上课&#xff0c;老师点名小王让他站起来回答问题。教室里的其他人是可以听见的&#xff0c;为什么其他人不响应&#xff1f;因为老师叫的是小王&#xff0c;和…

【高并发内存池】六、三种缓存的回收内存过程

文章目录前言Ⅰ. thread cache的内存回收Ⅱ. central cache的内存回收Ⅲ. page cache的内存回收前言 ​ 前面我们将内存的申请流程都走通了&#xff0c;现在就是内存回收的过程&#xff0c;主要是从 thread cache 开始&#xff0c;一层一层往下回收&#xff0c;因为我们调用的…

DeerFlow 实践:华为IPD流程的评审智能体设计

目录 一、项目背景与目标 二、IPD 流程关键评审点与 TR 点解析 &#xff08;一&#xff09;4 个关键评审点 &#xff08;二&#xff09;6 个 TR 点 三、评审智能体详细设计与协作机制 机制设计核心原则 &#xff08;一&#xff09;概念评审&#xff08;CDCP&#xff09;…

【ubuntu】ubuntu中找不到串口设备问题排查

ubuntu中找不到串口问题排查1. 检查设备识别情况2. 检查并安装驱动3. 检查内核消息4. 禁用brltty服务1. 停止并禁用 brltty 服务2. 完全移除 brltty 包3. 重启系统或重新插拔设备5.输出结果问题&#xff1a;虚拟机ubuntu中&#xff0c;已经显示串口设备连接成功&#xff0c;但是…

Unity 性能优化 之 静态资源优化 (音频 | 模型 | 纹理 | 动画)

Unity 之 性能优化 -- 静态资源优化参考性能指标静态资源资源工作流程资源分类原理小结Audio 实战优化建议模型导入工作流程DCC中模型导出.DCC中Mesh生产规范模型导出检查流程模型优化建议纹理优化纹理基础概念纹理类型纹理大小纹理颜色空间纹理压缩纹理图集纹理过滤纹理Mipmap…

GitHub 热榜项目 - 日榜(2025-09-13)

GitHub 热榜项目 - 日榜(2025-09-13) 生成于&#xff1a;2025-09-13 统计摘要 共发现热门项目&#xff1a;18 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜项目呈现三大技术热点&#xff1a;AI开发工具化&#xff08;如GenKit、ROMA多智能体框架&#xff…

Pytest 常见问题及其解决方案

常见问题及解决方案 1. 测试通过了,但覆盖率不达标 现象: 虽然所有测试都通过了,但覆盖率报告显示某些代码没有被覆盖。 解决方案: 检查覆盖率配置:确保 .coveragerc 或 pytest.ini 中正确设置了要分析的源代码路径。 使用标记(markers)排除测试文件本身:避免测试代…

直击3D内容创作痛点-火山引擎多媒体实验室首次主持SIGGRAPH Workshop,用前沿技术降低沉浸式内容生成门槛

当3D、VR技术在游戏、教育、医疗、文化领域遍地开花&#xff0c;“内容短缺”却成了制约行业爆发的关键瓶颈——传统3D/4D创作不仅耗时耗力、依赖专业技能&#xff0c;还难以适配消费级设备&#xff0c;让许多创作者望而却步。近日&#xff0c;由火山引擎多媒体实验室联合领域顶…

华为基本命令

我们使用的是华为官方的模拟器eNSP 一、华为设备的模式 华为的设备有两种模式&#xff1a; 用户视图和系统视图 用户视图只能读取&#xff0c;或者进行一些基础查询 系统视图能对设备和接口进行一些配置管理&#xff0c;和一些高级操作 在“用户视图”下使用system-view系统可…

2025.9.14英语红宝书【必背16-20】

单词组合 中文速记句子 英文句子 confine, misery, necessitate, negotiate, preach, precaution, precision, stretch 病人被 confine(限制) 在床上,感受 misery(痛苦),情况 necessitate(需要) 医生 negotiate(商讨),牧师 preach(布道) 并提醒 precaution(预防)…

HUST-STAR电控组视觉任务

视觉任务 注意&#xff1a;视觉部分建议采用 python 完成&#xff0c;下面教程也大多针对 python。其原因在于 python 配置相应环境更为轻松&#xff0c;且内置库较为丰富&#xff0c;属于初学者友好类型。没接触过 python 也不必担心&#xff0c;它的大体逻辑与 C 相近&#…

压缩和归档 文件传输

压缩和归档压缩&#xff1a;4G----1.5Gbzip2-bunzip2 gzip-gunzip xz-unxzgzip 要压缩的文件原来的文件就会被删除 (压缩和解压缩)会生成一个 aaa.gz 的文件归档&#xff1a; 4G----4G 打包tarc 创建归档文件 v 看到创建的详细过程 f 文件类型 t 不展开归档文件&…

深入探索 C++ 元组:从基础到高级应用

在现代 C 编程中&#xff0c;元组&#xff08;std::tuple&#xff09;是一个强大且灵活的容器&#xff0c;能够存储和操作多个不同类型的数据。它在标准库中扮演着重要角色&#xff0c;并在实际开发中提供了诸多便利。本文将全面探讨 C 元组的各个方面&#xff0c;从基础用法到…

Excel批量处理一列数据---分列功能

0 Preface/Foreword当有多行数据需要处理时&#xff0c;为了减少手动操作&#xff0c;可以EXCEL数据分列功能可以提高效率。1 数据分列1.1 数据分类步骤如下&#xff1a;选中需要处理的一列数据&#xff1b;选择菜单栏中的“数据”&#xff1b;选择分列按照需求设置即可1.2 查找…

HTTPS + 域名 + 双向证书认证(下)

文章目录1. .p12文件1.1 主要特点1.2 常见用途1.3 常见操作1.4 与其他格式的区别1.5 与公钥的区别和联系1.6 安全性注意事项2. Nginx 配置2.1 location指令2.2 alias 与 root 指令的区别3 双向认证配置3.1 创建根证书3.1.1 生成根CA的私钥3.1.2 生成请求证书3.1.3 生成自签署CA…

嵌入式 - ARM3

一、arm启动C语言1. 配置异常向量表2. 实现了软件中断的部分注&#xff1a;ldmfd sp!, {r0-r12, lr} ldmfd sp!, {r0-r12, pc}^ bx lr 左半部分&#xff1a;繁琐易理解的返回方式&#xff1a;先弹出所有通用寄存器和lr &…

如何通过标签和分类提升知识复用效率

通过标签和分类提升知识复用效率&#xff0c;其核心在于构建一个结构化与灵活性兼备的知识组织体系。这需要将分类的“确定性”与标签的“多维性”进行有效结合&#xff0c;为知识的存储与检索建立清晰的“骨架”和丰富的“神经网络”。具体实践中&#xff0c;要求我们进行顶层…

ZYNQ PS读写PL BRAM

一、实验室任务 本章的实验任务是 PS 将数据写入BRAM&#xff0c;然后从 BRAM 中读出数据&#xff0c;并通过串口打印出来&#xff1b;与此同时&#xff0c;PL 从通过自定义ip核从BRAM中同样读出数据&#xff0c;并通过ILA 来观察读出的数据与串口打印的数据是否一致。这里是通…

LinuxC++项目开发日志——高并发内存池(5-page cache框架开发)

PageCachepage cache 设计逻辑一、PageCache 的核心定位&#xff1a;理解它与 CentralCache 的本质区别二、PageCache 的内存分配流程&#xff1a;从 “精确匹配” 到 “拆分适配”三、PageCache 的内存释放流程&#xff1a;合并小 Span&#xff0c;解决内存碎片问题page cache…