VIVADO异步时钟约束之实例演示

前言

vivado在synthesis之后,需要对工程中的时钟进行约束,其中包括异步时钟的约束。
异步时钟约束首先需要对FPGA内部的时钟非常熟悉,然后,FPGA设计中,异步时钟之间已经经过异步时钟同步化处理,异步时钟约束可以提高编译器的编译效率,同时可实现FPGA布局布线的最优化。

示例演示

synthesis完成后,打开综合设计,点击flow navigator中的report clock interaction(也可在tcl对话框中输入“report_clock_interaction -delay_type min_max -significant_digits 3 -name timing_1”命令),打开时钟交互窗口,观察FPGA设计中内部时钟之间的交互关系。如下图所示:
在这里插入图片描述
时钟交互报告界面中红色部分即为存在异步时钟域交互,但未进行异步时钟约束,需要根据实际情况进行异步时钟约束。
如果FPGA设计中异步时钟之间均采取了异步时钟同步化处理,可将上述标红的区域都进行异步时钟约束.
建议FPGA设计中,异步时钟域下的信号均进行异步时钟同步化处理,可有效的减少电路实现中的亚稳态情况,同时提高FPGA运行的稳定性,异步时钟同步化可参考本人博客“单bit信号跨时钟域处理及时序约束”。 (https://blog.youkuaiyun.com/aaaaaaaa585/article/details/118093422?spm=1001.2014.3001.5501)
异步时钟域之间约束可以采用set_clock_groups命令,具体语法见博客“VIVADO异步时钟域约束(groups)”
(https://blog.youkuaiyun.com/aaaaaaaa585/article/details/116067981?spm=1001.2014.3001.5501)
常用的语法为:

set_clock_groups -asynchronous -group [get_clocks -include_generated_clocks clock_name]

该语法下,约束clock_name的时钟以及由clock_name生成的时钟之间互为异步关系,且与设计中的其他时钟也均为异步时钟关系。
clock_name的获取,可以在TCL窗口中输入get_clocs获得;
在这里插入图片描述
其中每个时钟具体的信息,可以通过report_clocks命令得知。
在这里插入图片描述
在这里插入图片描述
对于产生的时钟,同一个master clock产生的时钟,可以使用-include_generated_clocks 只约束一次。
下述约束示例为结合上图中的时钟交互报告进行的时序约束:

set_clock_groups -asynchronous -group virt_clk
set_clock_groups -asynchronous -group [get_clocks ctrl_clk25m]
set_clock_groups -asynchronous -group [get_clocks -include_generated_clocks clk_25m]
set_clock_groups -asynchronous -group [get_clocks -include_generated_clocks Sodimms_sys_clk_p]
set_clock_groups -asynchronous -group [get_clocks rxoutclk_out[0]_4]
set_clock_groups -asynchronous -group [get_clocks txoutclk_out[0]_4]
set_clock_groups -asynchronous -group [get_clocks rxoutclk_out[0]]
set_clock_groups -asynchronous -group [get_clocks txoutclk_out[0]]
set_clock_groups -asynchronous -group [get_clocks rxoutclk_out[0]_8]
set_clock_groups -asynchronous -group [get_clocks txoutclk_out[0]_8]

约束后,打开时钟交互报告窗口,可以看到约束后的时钟交互报告:
在这里插入图片描述
可以看到异步时钟已全部约束。

上述约束语法,相比较与set_false或者不使用-include_generated_clocks选项时的约束命令会少很多,代码简洁性更好。

<think>嗯,用户想在Jetson Nano上使用YOLOv5和USB摄像头做目标检测。首先,我需要回顾一下Jetson Nano配置和环境要求。记得Jetson Nano是基于ARM架构的,所以安装某些库可能需要特定版本的包。用户提到USB摄像头,可能需要先确认摄像头是否被系统正确识别。 然后,YOLOv5的部署流程大概分为几个步骤:环境配置、克隆YOLOv5仓库、安装依赖库、下载预训练权重,最后是运行推理。但Jetson Nano上可能还需要考虑使用TensorRT来加速模型,比如生成engine文件。不过用户可能只是初步使用,不一定需要那么复杂的优化,所以先确保基础步骤正确。 另外,参考内容里提到了DeepStream的部署方法,但用户可能更倾向于直接使用YOLOv5Python代码。USB摄像头在Linux下通常通过OpenCV的VideoCapture来调用,可能需要检查OpenCV是否安装正确,并且支持GStreamer后端,因为Jetson Nano上有时需要用它来处理视频流。 用户的问题包括运行推理和训练。训练部分在Jetson Nano上可能不太现实,因为计算资源有限,但如果是小数据集或迁移学习,或许可行。不过通常建议在PC上训练,然后在Nano上部署。所以回答时需要区分推理和训练的步骤,并给出相应的建议。 需要注意的还有,YOLOv5的PyTorch版本是否兼容Jetson Nano的CUDA环境。Jetson Nano的JetPack版本可能限制了PyTorch和TorchVision的版本,需要用户安装对应的ARM架构的whl文件,比如从NVIDIA官网下载。 最后,确保USB摄像头能被OpenCV正确识别,可能需要测试cv2.VideoCapture(0)或者其他的设备索引。如果有多个摄像头,用户可能需要调整参数。另外,推理时的FPS可能较低,可以建议一些优化方法,比如模型简化、调整输入分辨率等。</think>以下是在Jetson Nano上通过USB摄像头运行YOLOv5的详细步骤: ### 一、环境准备 1. **更新系统** ```bash sudo apt update && sudo apt upgrade -y ``` 2. **安装依赖库** ```bash sudo apt install python3-pip libopenblas-base libopenmpi-dev libjpeg-dev zlib1g-dev ``` 3. **安装PyTorch** 需使用NVIDIA官方提供的JetPack兼容版本: ```bash wget https://nvidia.box.com/shared/static/p57jwntv436lfrd78inwl7iml6p13fzh.whl -O torch-1.8.0-cp36-cp36m-linux_aarch64.whl pip3 install torch-1.8.0-cp36-cp36m-linux_aarch64.whl ``` ### 二、部署YOLOv5 1. **克隆仓库** ```bash git clone https://github.com/ultralytics/yolov5 cd yolov5 pip3 install -r requirements.txt ``` 2. **验证摄像头** ```python import cv2 cap = cv2.VideoCapture(0) print("摄像头支持的分辨率:", cap.get(cv2.CAP_PROP_FRAME_WIDTH), "x", cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) ``` ### 三、实时推理 1. **基础检测脚本** ```python import torch import cv2 model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True) cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() results = model(frame) cv2.imshow('YOLOv5', results.render()[0]) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 2. **性能优化技巧** - 添加`half=True`启用FP16推理: ```python model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True).half().eval() ``` - 设置分辨率`640x480`: ```python cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) ``` ### 四、训练注意事项 虽然Jetson Nano可以进行小规模训练,但建议: 1. 在PC端完成训练后导出权重 2. 使用迁移学习微调模型 3. 减小输入分辨率至`320x320` 4. 设置较小batch_size(推荐1-2) ### 五、常见问题解决 1. **摄像头无法识别** ```bash ls /dev/video* # 确认设备节点 sudo apt install v4l-utils # 安装视频工具包 v4l2-ctl --list-devices # 列出视频设备 ``` 2. **低帧率优化** - 使用TensorRT加速(参考[^2]) - 开启Jetson Nano高性能模式: ```bash sudo nvpmodel -m 0 sudo jetson_clocks ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值