fpga 综合与优化设计
目录
Quartus Prime优化设置
1. 分析与综合设置
2. 物理综合优化
3. 适配设置
描述方法对综合的影响
1. 操作符的应用差异
2. 条件语句和分支语句的应用差异
3. 描述方式对综合电路的影响
优化设计方法
1. FPGA设计的基本原则
2. 常用优化设计方法
优化主要包括 4 个方面:
(1)综合优化 综合优化使得设计系统在FPGA中的映射得到最大优化。
(2)布局布线优化 在布局布线过程中,合理的约束会大大提高整个系统的布局布线效果; (3)设计优化 在设计阶段规划整个系统的架构,利用FPGA的特点尽可能简化设计;
(4)静态时序分析 静态时序分析用于在布局布线后检查整个工程的时序,找出最差的路径,进行一定的调整和修改来优化系统时序;
Quartus Prime优化设置
1. 分析与综合设置
Speed 是以提高系统的工作速度为目标进行优化,Area 是以节约占用的 逻辑资源为目标进行优化,而 Balanced 选项则是速度与占用资源的折中选项。
2. 物理综合优化
逻辑综合是将 HDL代码转换成不含布局布线信息并且能够映射(map)到门级电路过程。因为逻辑综合不包含布局布线的信息,所以综合后的时序仅限于转换后的门级电路 或者器件内部逻辑单元或者节点间逻辑单元级数等时延信息,而对于 FPGA 内部互联的时延是无法分析的。
物理综合是通过改变网表的布局(placement)优化综合结果, 在不改变设计功能的情况下调整网表的布局或者修改增加部分节点从而达到优化设计性能和设计资源利用率等目的。
(1)针对性能的物理综合优化选项
Perform Physical synthesis for combinationial logic: 用于优化组合逻辑关键路径的逻辑层数。
Perform Register Retiming: 通过移动寄存器中组合逻辑中的位置来平衡寄存器之间的路径时延以提升系统性能。 Perform automatic asynchronous signal pipelining: 是通过自动在异步 信号路径上插入流水寄存器来改善异步信号的建立时间和保持时间。 Perform register duplication: 是通过寄存器复制优化多扇出长路径上的时序,从而提升系统的性能。
effort level: 不同级别的差异主要体现在了编译时间的长短,与性能的提升呈反比的关系。
(2)针对面积的物理综合优化选项
针对面积的物理综合优化选项适用于适配(fit)阶段的优化,其功能就是使得设计优化可以适配到目标器件。 Physical Synthesis for Combinational Logic: 是指适配时针对组合逻辑的优化,尽可能地减少组合逻辑以提高资源利用率,只有在“no-fit”事件发生时才会起作用。
Logic to MemoryMapping: 是指在适配时将部分逻辑移到未使用的Memory里,同样也是在“no-fit”事件发生时才会起作用。
3. 适配设置
适配设置包括保持时序优化和多拐角时序优化。 保持时序优化(Optimize hold timing)允许适配器通过在合适的路径中添加延迟,从而实现保持时序的优化。关闭该选项时,则不会对任何路径进行优化。 多拐角时序优化(Optimize multi-corner timing)用于控制适配器是否对设计进行优化以 满足所有拐角的时序要求和操作条件。使用这项功能,必须使能时序逻辑优化。
Extra effort模式需要的编译时间比较长,但可以提高系统的最高工作频率; Off 模式可以节省约 50%的编译时间,但会使最高工作频率有所降低; Normal compilation模式在达到设计要 求的条件下,自动平衡最高工作频率和编译时间
描述方法对综合的影响
1. 操作符的应用差异
对于代码(1)
input[3:0] din;
output dout;
assign dout = (xin == 4'b0); // 关系操作符
若应用代码(2)
input [3:0] din;
output dout;
assign dout = (xin == 4'b0)? 1'b1 : 1'b0; // 条件操作符
若应用代码(3)
input[3:0] din;
output dout;
assign dout = ~|xin; // 缩位或非
应用代码(4)
input[3:0] din;
output dout;
assign dout=~(din[3]+din[2]+din[1]+din[1]) // 或非逻辑
2. 条件语句和分支语句的应用差异
if...else if...语句隐含有优先级的关系,综合出的电路通常为级联结构的优先编码器,传输延迟时间长,建议输入信号有优先级的的场合使用。 case 语句每个分支是平行的,综合为多路选择器,电路结构规整,传输延迟时间短,因而电路的工作速度快。
应用多重条件语句描述 2-4线译码器:
module decoder_2to4(en,bincode,y);input en;input [1:0] bincode;output [3:0] y;reg [3:0] y;always @(en or bincode ) if (en) beginif ( bincode == 2'b00 )y = 4'b0001; else if ( bincode == 2'b01 ) y = 4'b0010;else if ( bincode == 2'b10 )y = 4'b0100; else if ( bincode == 2'b11 )y = 4'b1000;elsey= 4'b0000;endelsey = 4'b0000;
endmodule
2-4线译码器综合出的RTL电路:
若改用分支语句描述,其功能描述语句为
always @(en or bincode ) if (en)case ( bincode )2'b00: y = 4'b0001;2'b01: y = 4'b0010;2'b10: y = 4'b0100;2'b11: y = 4'b1000;default: y = 4'b0000;endcaseelsey = 4'b0000;
endmodule
上述两种描述方式从综合效果看,占用的硬件资源相同,但应用 case 语句比用条件语句综合出的电路传输延迟时间小,因此,在速度优化的项目中,使用 case 语句效果更好。 但需要注意的是,无论是用 if 语句还是用 case 语句描述组合电路时,一定要防止综合出不必要的锁存器,这就要求: (1)在 case 语句中配套使用 default 语句; (2)在赋值表达式中,参与赋值的所有量(线网/变量)都必须在 always 语句的事件列表中列出; (3)if 语句判断表达式中的所有量都必须在always 语句中的事件列表中列出。
3. 描述方式对综合电路的影响
Verilog支持行为描述、数据流描述和结构描述三种方式描述应用电路。描述方式不同,综合占用的资源不同,综合出的电路性能也有差异。明晰这些描述方式之间的差异,对于优化电路的性能有着至关重要的影响。
对于具有使能端的3-8线译码器,若应用行为方式描述,则Verilog描述代码参考如下:
module dec3_8a(s_n,bincode,y_n);input s_n;input [2:0] bincode;output reg [7:0] y_n;always @(s_n,bincode)if (!s_n)case (bincode)3'b000: y_n=8'b11111110;3'b001: y_n=8'b11111101;3'b010: y_n=8'b11111011; 3'b011: y_n=8'b11110111;3'b100: y_n=8'b11101111; 3'b101: y_n=8'b11011111;3'b110: y_n=8'b10111111;3'b111: y_n=8'b01111111;default: y_n=8'b11111111;endcaseelsey_n=8'b11111111;
endmodule
若采用数据流方式描述,Verilog参考代码如下:
module dec3_8b(s_n,a,y_n);input s_n;input [2:0] a;output [7:0] y_n;assign y_n[0]=~((~s_n)&(~a[2])&(~a[1])&(~a[0]));assign y_n[1]=~((~s_n)&(~a[2])&(~a[1])&a[0]);assign y_n[2]=~((~s_n)&(~a[2])&a[1]&(~a[0]));assign y_n[3]=~((~s_n)&(~a[2])&a[1]&a[0]);assign y_n[4]=~((~s_n)&a[2]&(~a[1])&(~a[0]));assign y_n[5]=~((~s_n)&a[2]&(~a[1])&a[0]);assign y_n[6]=~((~s_n)&a[2]&a[1]&(~a[0]));assign y_n[7]=~((~s_n)&a[2]&a[1]&a[0]);
endmodule
若采用结构方式,调用Verilog基元进行描述,参考代码如下:
module dec3_8c(s_n,a,y_n);input s_n;input [2:0] a;output [7:0] y_n;nand U0 (y_n[0],~s_n,~a[2],~a[1],~a[0]);nand U1 (y_n[1],~s_n,~a[2],~a[1], a[0]);nand U2 (y_n[2],~s_n,~a[2], a[1],~a[0]);nand U3 (y_n[3],~s_n,~a[2], a[1], a[0]);nand U4 (y_n[4],~s_n, a[2],~a[1],~a[0]);nand U5 (y_n[5],~s_n, a[2], ~a[1], a[0]);nand U6 (y_n[6], s_n, a[2], a[1],~a[0]);nand U7 (y_n[7],~s_n, a[2], a[1], a[0]);
endmodule
优化设计方法
EDA优化设计包含两层含义:一是在满足系统性能要求的情况下,尽可能节约芯片面积;二是占用面积一定的情况下,尽可能提升系统的性能。
1. FPGA设计的基本原则
(1)速度与面积的平衡与互换
Quartus Prime软件中的分析与综合设置(Analysis & Synthesis Settings)页面中的Speed、Balanced和Area选项,分别对应于速度优先、性能折衷和面积优先三种综合优化选择,就是速度与面积原则的具体体现。
(2)硬件原则
应用Verilog HDL描述数字电路时,不能像写C程序那样,片面追求代码的简洁,而应该时时刻刻牢记Verilog描述的是硬件电路,清楚描述代码与硬件电路的相关关系。
module encode_83 ( // 注:本段代码来源于网络input wire[7:0] x, // 注:8路高/低电平输入output reg[2:0] y, // 注:3位二进制码输出output reg e ); // 注:有无编码输入标志integer i;integer j=0;always @(*) begin // 注:这种隐式敏感量列表方式不推荐使用for (i=0;i<8;i=i+1) beginif (x[i]==1) // 注:x[i]=1时更新输出y<=i;else // 否则,只将j加1j=j+1; endif (j==8) // j等于8时表示无编码信号输入e<=1; // 无编码标志e设置为1 elsee<=0; end
endmodule
上述代码不适合于综合成硬件电路,而且是错误的。因为:(1) 上述代码综合出了时序电路,而不是组合逻辑电路;(2)从资源消耗上看,应用条件语句和分支语句描述的8-3线优先编码器综合后均占用了(EP4CE115F29C7)10个逻辑单元,而上述代码综合后占用了703个逻辑单元,资源占用是前两者的70倍!因此,应用Verilog HDL时,除了在编写测试平台文件testbench中,描述仿真测试激励时可以使用for循环语句外,建议在可综合电路设计中应尽量避免使用循环语句,而是选用if语句和case语句来描述类似的逻辑。
其次,用 HDL 描述数字电路时,应对所要描述的硬件电路的结构有清晰的概念和构想, 选择正确的描述方法,并用适当的代码描述出来。因为综合软件对 HDL 代码在进行综合时, 综合出的硬件电路会因为描述方法和描述代码的不同而不同,从而直接影响着系统的性能。
若定义
input [3:0] a,b,c,d,e,f,g,h;
output [5:0] sum;
实现加法时,应用代码assign sum=((a+b)+(c+d))+((e+f)+(g+h));
和直接使用代码assign sum=a+b+c+d+e+f+g+h;
(3)系统原则 模块化设计是系统原则的一个很好体现,是自顶向下、分工协作设计思路的具体体现, 是复杂系统的推荐设计方法。
(4)同步原则 时序电路有异步和同步两种实现方法。同步电路工作速度快,可靠性高,但电路比异步 电路复杂。异步电路结构简单,但容易产生竞争-冒险,因而可靠性不高。 对于同步电路设计,稳定可靠的时序设计必须遵从以下两个基本原则: (1)在时钟的有效沿到达前,数据输入至少已经稳定了建立时间之久,这条原则简称满足建立时间原则; (2)在时钟的有效沿作用后,数据输入至少还要稳定保持时间之久,这条原则简称满足保持时间原则。
2. 常用优化设计方法
(1)串-并转换方法。串行化是指把消耗资源大、反复使用的逻辑电路分割出来,在时间上共享该电路,采用流水线方式实现相同的功能。
设 a0~a3 和 b0~b3 均为 4 位无符号二进制数,应用并行方式实现乘加运算 y = a0*b0+a1*b1+a2*b2+a3*b3 时,Verilog 描述代码参考如下:
module p_mutl_add ( input [3:0] a0,a1,a2,a3,input [3:0] b0,b1,b2,b3,output [7:0] yout);assign yout = a0*b0+a1*b1+a2*b2+a3*b3;
endmodule
(2)流水线设计思想
流水线(pipelining)设计的基本思想对时序电路中传输延迟时间较大的组合逻辑块进行拆分,将原本在一个时钟周期完成的组合逻辑分割成多个较小的逻辑块,中间插入流水线寄存器,使其在多个时钟周期内完成,目的是提升这部分电路的工作频率,从而提高整个系统的性能。
若将电路中的组合逻辑块拆分成两个传输延迟时间大致相等的组合逻辑块,并在两个组合逻辑块之间插入流水线寄存器,如下图所示,就构成了流水线结构的同步时序电路。
需要注意的是,应用流水线结构能够提高同步电路的性能,但会产生了输入-输出的延迟。这是因为流水线的每一级输出相对于前一级输出,都会延迟一个时钟周期。因此,增加 n 级流水线,输出就会延迟 n 个时钟周期。
流水线思维方式的扩展应用是均衡同步电路的时序。 当两个组合逻辑块的传输延迟时间分别为 15ns和5ns,假设触发器的时钟到输出时间和建立时间均为5ns,则同步电路的最高工作频率为 1/(5ns+15ns+5ns)=40MHz
如果能将两个组合逻辑块的传输延迟时间调整为10ns和10ns,则电路的最高工作频率可以提升到 1/(5ns+10ns+5ns)=50MHz 即经过时序均衡后,同步电路的工作速度提升了25%。
(3)寻找关键路径
关键路径(Critical Path)是指关键信号的传输路径,或者电路中传输延迟时间最大的组合逻辑路径。如果能够减小关键路径的传输延迟时间,就可以有效地提高时序逻辑电路的工作频率。
对于上图所示电路,从输入到输出之间有3条信号传输路径,设每条路径的传输延迟时间分别用td1、td2和td3表示。若td1大于td2和td3,则传输延迟时间为td1的信号路径称为关键路径,优化的主要目标是减小td1,才能有效地提高电路的工作速度。
(4)乒乓操作
“乒乓操作”是串并转化思想的具体体现,常应用于用低速的硬件电路实现高速数据流的处理。
“乒乓操作”的工作原理是:前端通过数据分配器将输入的数据流交替配到两个数据缓冲模块,第一个时钟时将输入的数据存入到“数据缓冲模块1”,第2个时钟将输入的数据存入到“数据缓冲模块2”,依次反复进行。后端再应用数据选择器将两个数据缓冲模块合并为输出数据流,依次反复循环。
乒乓操作的本质是串并转换,将高速的串行数据并行化,利用面积换速度,巧妙运用乒乓操作可以达到用低速模块处理高速数据流的效果。
相关文章:
fpga 综合与优化设计
目录 Quartus Prime优化设置 1. 分析与综合设置 2. 物理综合优化 3. 适配设置 描述方法对综合的影响 1. 操作符的应用差异 2. 条件语句和分支语句的应用差异 3. 描述方式对综合电路的影响 优化设计方法 1. FPGA设计的基本原则 2. 常用优化设计方法 优化主要包括 4 个…...
计算机毕业设计Hadoop+Spark音乐推荐系统 音乐预测系统 音乐可视化大屏 音乐爬虫 HDFS hive数据仓库 机器学习 深度学习 大数据毕业设计
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
C嘎嘎探索篇:栈与队列的交响:C++中的结构艺术
C嘎嘎探索篇:栈与队列的交响:C中的结构艺术 前言: 小编在之前刚完成了C中栈和队列(stack和queue)的讲解,忘记的小伙伴可以去我上一篇文章看一眼的,今天小编将会带领大家吹奏栈和队列的交响&am…...
摄像头原始数据读取——opencv(cv::VideoCapture)
摄像头原始数据读取——opencv(cv::VideoCapture) 测试代码test.cpp #include <iostream> #include <string>#include <opencv2/opencv.hpp>std::string pixeformatcodec2string(int codec) {char pixeformat_name[5] { (char)((codec >> 0) & …...
unreal engine5中多个摄像机切换
UE5系列文章目录 文章目录 UE5系列文章目录前言一、思路二、具体实现 前言 unreal engine5中使用蓝图实现多个相机切换 一、思路 在Unreal Engine 5中,如果你想要在控件蓝图(Widget Blueprint)中获取场景摄像机的信息,可以按照…...
ensp静态路由实验
一、实验目的 1、熟练掌握交换机的基本配置命令 2、熟练掌握静态路由的使用方法 3. 熟练掌握交换机端口模式 二、实验内容 需求: 根据要求利用现有实验设备组建小型局域网 实验设备: 交换机S37002台;PC机2台;路由器2台。 …...
【在Linux世界中追寻伟大的One Piece】多线程(二)
目录 1 -> 分离线程 2 -> Linux线程互斥 2.1 -> 进程线程间的互斥相关背景概念 2.2 -> 互斥量mutex 2.3 -> 互斥量的接口 2.4 -> 互斥量实现原理探究 3 -> 可重入VS线程安全 3.1 -> 概念 3.2 -> 常见的线程不安全的情况 3.3 -> 常见的…...
Git中HEAD、工作树和索引的区别
在Git版本控制系统中,HEAD、工作树(Working Tree)和索引(Index)是三个非常重要的概念,它们分别代表了不同的状态或区域,下面我将对这三个概念进行详细的解释。 HEAD 定义:HEAD是一…...
洛谷 P1156 垃圾陷阱(搜索 DFS)
题目传送门https://www.luogu.com.cn/problem/P1156 解题思路 本题数据过水,可以使用 dfs。 对于每个垃圾,吃掉或者堆着。 然后考虑剪枝: 如果已经等不到下一个垃圾的到来,直接 return; 如果当前状态已经搜过&am…...
nodepad配置c/c++ cmd快速打开创建项目文件
前提:下载MinGw,并且配置环境变量 点击阅读次篇文章配置MinGw 无论是哪个编译器,执行c文件都是经历以下步骤: 编译文件生成exe文件执行该exe文件 我们先手动完成这两部 手动编译文件使用指令 gcc {你的c文件} -o {生成文件名}生成exe文件 第二步运行exe直接点击该文…...
Excel与PPT:职场两大软件的应用比拼
在职场环境中,Excel和PPT无疑是两款最为常用的办公软件。它们各自承担着不同的职责,为职场人士提供了强大的数据处理和演示功能。然而,哪款软件应用得更多,却并非一概而论,而是取决于个人的工作性质、岗位需求以及个人…...
春秋云境 CVE 复现
CVE-2022-4230 靶标介绍 WP Statistics WordPress 插件13.2.9之前的版本不会转义参数,这可能允许经过身份验证的用户执行 SQL 注入攻击。默认情况下,具有管理选项功能 (admin) 的用户可以使用受影响的功能,但是该插件有一个设置允许低权限用…...
文件系统的作用
在一个完整的嵌入式系统中,进行一个简单的操作(如读取传感器数据并保存到文件)通常会涉及多个步骤。这些步骤包括硬件初始化、数据采集、处理、存储以及与外部系统交互。以下是一个通用的操作流程及文件系统在其中的作用。 嵌入式系统的操作流…...
mysql低版本中update_time不自动更新问题
在mysql低版本时,update_time只有插入时才会自动插入当前时间,更新不会改变。 MySQL 5.7 及以上版本对于TIMESTAMP类型字段有自动更新功能相关特性在 MySQL 5.7以上版本 中,如果将一个TIMESTAMP类型的列设置为ON UPDATE CURRENT_TIMESTAMP属…...
【二叉树】【2.1遍历二叉树】【刷题笔记】【灵神题单】
关注二叉树的三个问题: 什么情况适合自顶向下?什么时候适合用自底向上?一般来说,DFS的递归边界是空节点,什么情况下要额外把叶子节点作为递归边界?在什么情况下,DFS需要有返回值?什…...
【深度学习】【RKNN】【C++】模型转化、环境搭建以及模型部署的详细教程
【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转rknnpytorch转onnxonnx转rkn…...
刷题日常(移动零,盛最多水的容器,三数之和,无重复字符的最长子串)
移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 俩种情况: 1.当nums[i]为0的时候 直接i 2.当nums[i]不为0的时候 此时 …...
【单元测试】【Android】JUnit 4 和 JUnit 5 的差异记录
背景 Jetbrain IDE 支持生成 Test 类,其中选择JUnit5 和 JUnit,但是感觉这不是标准的单元测试,因为接口命名吧。 差异对比 两者生成的单测API名称同原API,没加test前缀的。使用差异主要表现在: setUp & …...
LangChain——HTML文本分割 多种文本分割
Text Splitters 文本分割器 加载文档后,您通常会想要对其进行转换以更好地适合您的应用程序。最简单的例子是,您可能希望将长文档分割成更小的块,以适合模型的上下文窗口。 LangChain 有许多内置的文档转换器,可以轻松地拆分、组…...
Spring事务和事务传播机制
博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 目录 1.事务 1.1 什么是事务? 1.2 为什么需要事务? 1.3 事务的操作 2. Spring 中的事务 1. 编程式事务 2. 声明式事务Tra…...
STM32F103外部中断配置
一、外部中断 在上一节我们介绍了STM32f103的嵌套向量中断控制器,其中包括中断的使能、失能、中断优先级分组以及中断优先级配置等内容。 1.1 外部中断/事件控制器 在STM32f103支持的60个可屏蔽中断中,有一些比较特殊的中断: 中断编号13 EXTI…...
ChatGPT的应用场景:开启无限可能的大门
ChatGPT的应用场景:开启无限可能的大门 随着人工智能技术的快速发展,自然语言处理领域迎来了前所未有的突破。其中,ChatGPT作为一款基于Transformer架构的语言模型,凭借其强大的语言理解和生成能力,在多个行业和场景中…...
计算机毕业设计 | SpringBoot+vue社区医院管理系统(附源码+论文)
1,绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展,用了短短的几十年时间就风靡全球,使得全球各个行业都进行了互联网的改造升级,标志着互联网浪潮的来临。在这个新的时代,各行各业都充分考虑互联网是否能与本行…...
直播实时美颜平台开发详解:基于视频美颜SDK的技术路径
视频美颜SDK作为实现实时美颜的关键技术,为开发者提供了高效、灵活的解决方案。本篇文章,小编将以“基于视频美颜SDK的技术路径”为主题,深入解析直播实时美颜平台的开发要点。 一、视频美颜SDK的作用与优势 视频美颜SDK是一种集成化的开发工…...
一个专为云原生环境设计的高性能分布式文件系统
大家好,今天给大家分享一款开源创新的分布式 POSIX 文件系统JuiceFS,旨在解决海量云存储与各类应用平台(如大数据、机器学习、人工智能等)之间高效对接的问题。 项目介绍 JuiceFS 是一款面向云原生设计的高性能分布式文件系统&am…...
【Elasticsearch】开启大数据分析的探索与预处理之旅
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
【算法】欧几里得与拓展欧几里得算法
目录 一、欧几里得算法 二、拓展欧几里得算法 2.1 裴蜀定理 2.2 拓展欧几里得算法 2.3 例题 三、线性同余方程 3.1 概念 3.2 例题 一、欧几里得算法 欧几里得算法又称辗转相除法,可用于求解两个数的最大公约数 其思路: gcd(a, b) gcd(b, a%b…...
组合数的求法
1.如果是多组查询的话,需要用数组去储存阶乘的值 n!/(m!(n-m)!) P4071 [SDOI2016] 排列计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<cstdio> #include<iostream> #include<map> #include<cstring> #include<cmath&g…...
【环境搭建】更新Docker Compose到v2.x版本以支持--profile选项
Docker版本陈旧也是搭建的环境起不来的一个重要原因,比如 --profile 选项是 Docker 20.10.0 版本及以上版本才开始支持的,在 Docker Compose v2.1(及以上版本)中引入用于对服务进行分组和按需启动。 更新 Docker Compose 到 v2.x…...
解决 java -jar 报错:xxx.jar 中没有主清单属性
问题复现 在使用 java -jar xxx.jar 命令运行 Java 应用程序时,遇到了以下错误: xxx.jar 中没有主清单属性这个错误表示 JAR 文件缺少必要的启动信息,Java 虚拟机无法找到应用程序的入口点。本文将介绍该错误的原因以及如何通过修改 pom.xm…...
AIGC-----AIGC在虚拟现实中的应用前景
AIGC在虚拟现实中的应用前景 引言 随着人工智能生成内容(AIGC)的快速发展,虚拟现实(VR)技术的应用也迎来了新的契机。AIGC与VR的结合为创造沉浸式体验带来了全新的可能性,这种组合不仅极大地降低了VR内容的…...
【博主推荐】C#的winfrom应用中datagridview常见问题及解决方案汇总
文章目录 1.datagridview绘制出现鼠标悬浮数据变空白2.datagridview在每列前动态添加序号2.1 加载数据集完成后绘制序号2.2 RowPostPaint事件绘制 3.datagridview改变行样式4.datagridview后台修改指定列数据5.datagridview固定某个列宽6.datagridview某个列的显示隐藏7.datagr…...
Selenium 自动化测试demo
场景描述: 模拟用户登录页面操作,包括输入用户名、密码、验证码。验证码为算数运算,如下: 使用到的工具和依赖: 1. Selenium:pip install selenium 2. 需要安装浏览器驱动:这里使用的是Edge 3…...
深度神经网络模型压缩学习笔记二:离线量化算法和工具、实现原理和细节
文章目录 一、离线量化基础概念二、离线量化难点三、离线量化算法介绍四、离线量化工具介绍五、离线量化工具整体设计结构六、离线量化工具代码解读七、实践:Dipoorlet量化MobileNet 一、离线量化基础概念 二、离线量化难点 三、离线量化算法介绍 四、离线量化工…...
uni-app运行 安卓模拟器 MuMu模拟器
最近公司开发移动端系统,使用真机时每次调试的时候换来换去的麻烦,所以使用模拟器来调试方便。记录一下安装和连接的过程 一、安装MuMu模拟器 百度搜索MuMu模拟器并打开官网或者点这里MuMu模拟器官网 点击下载模拟器 安装模拟器,如果系统…...
网络安全,文明上网(6)网安相关法律
列举 1. 《中华人民共和国网络安全法》: - 这是中国网络安全的基本法律,于2017年6月1日开始实施。该法律明确了网络运营者的安全保护义务,包括采取数据分类、重要数据备份和加密等措施。 2. 《中华人民共和国数据安全法》: …...
Perforce Automation With Python
11/2024 出版 MP4 |视频:h264, 19201080 |音频:AAC,44.1 KHz 语言:英语 |大小: 2.65 GB |时长: 5 小时 18 分钟 使用 Python 脚本简化与 Perforce 版本控制系统相关的生产流程 您将学 到什么 …...
卷积神经网络学习记录
目录 神经网络基础定义: 基本组成部分 工作流程 卷积层(卷积定义)【CONV】: 卷积层(Convolutional Layer) 特征提取:卷积层的主要作用是通过卷积核(或滤波器)运算提…...
Spring Cloud Alibaba
What is SCA Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务。 依托Spring Cloud Alibaba,您只需要添加一些注解和少量…...
【AI绘画】Midjourney进阶:色调详解(上)
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 💯前言💯Midjourney中的色彩控制为什么要控制色彩?为什么要在Midjourney中控制色彩? 💯色调白色调淡色调明色调 💯…...
【滑动窗口】找到字符串中所有字母异位词
文章目录 找到字符串中所有字母异位词 class Solution { public:vector<int> findAnagrams(string s, string p) {vector<int> ret;int sLen s.size(), pLen p.size(), validChar;// 母串长度比子串长度还小 直接返回空vectorif (sLen < pLen)return ret;// …...
C++:final 关键字用于阻止类被继承或阻止虚函数被进一步重写
final 关键字的作用 C11 引入了 final 关键字,用于阻止类被继承或阻止虚函数被进一步重写。 防止类被继承:在类声明后添加 final,表示该类不能被继承。防止虚函数被重写:在虚函数声明后添加 final,表示该虚函数在派生…...
sql漏洞
目录 SQL漏洞产生的原因 未对用户输入进行验证和过滤: 动态SQL语句的拼接: 不安全的数据库配置: 缺乏安全意识和培训: 使用过时的技术或框架: 如何避免SQL漏洞产生 使用参数化查询: 对用户输入进行…...
SQL 复杂查询
目录 复杂查询 一、目的和要求 二、实验内容 (1)查询出所有水果产品的类别及详情。 查询出编号为“00000001”的消费者用户的姓名及其所下订单。(分别采用子查询和连接方式实现) 查询出每个订单的消费者姓名及联系方式。 在…...
在 PyTorch 训练中使用 `tqdm` 显示进度条
在 PyTorch 训练中使用 tqdm 显示进度条 在深度学习的训练过程中,实时查看训练进度是非常重要的,它可以帮助我们更好地理解训练的效率,并及时调整模型或优化参数。使用 tqdm 库来为训练过程添加进度条是一个非常有效的方式,本文将…...
PYNQ 框架 - 时钟系统 + pl_clk 时钟输出不准确问题
目录 1. 简介 2. PS 时钟计算 2.1 计算框架 2.2 KV260 的参考时钟 2.3 PL_CLK 设置 3. 测试 3.1 Block design 3.2 引脚绑定 3.3 使用 AD2 测量 3.4 调整分频 4. PYNQ 时钟驱动 4.1 源码解析 4.2 查看 PL_CLK 4.3 配置 PL_CLK 5. 总结 1. 简介 ZYNQ MPSoC 具有…...
【Reinforcement Learning】强化学习下的多级反馈队列(MFQ)算法
📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...
Cocos编辑器
1、下载 下载地址:https://www.cocos.com/creator-download 2、编辑器界面介绍 官方链接:https://docs.cocos.com/creator/3.8/manual/zh/editor/ 3、项目结构 官方链接:https://docs.cocos.com/creator/3.8/manual/zh/getting-started/…...
Linux kernel 堆溢出利用方法(三)
前言 本文我们通过我们的老朋友heap_bof来讲解Linux kernel中任意地址申请的其中一种比赛比较常用的利用手法modprobe_path(虽然在高版本内核已经不可用了但ctf比赛还是比较常用的)。在通过两道道近期比赛的赛题来讲解。 Arbitrary Address Allocation…...
文心一言与千帆大模型平台的区别:探索百度AI生态的双子星
随着人工智能技术的迅猛发展,越来越多的公司开始投入资源开发自己的AI解决方案。在中国,百度作为互联网巨头之一,不仅在搜索引擎领域占据重要位置,还在AI领域取得了显著成就。其中,“文心一言”和“千帆大模型平台”便…...