Aurora8b10b(1)IP核介绍并基于IP核进行设计
文章目录
- 前言
- 一、IP核设置
- 二、基于IP核进行设计
- 2.1、设计框图
- 2.2、aurora_8b10b_0模块
- 2.3、aurora_8b10b_0_CLOCK_MODULE
- 2.4、aurora_8b10b_0_SUPPORT_RESET_LOGIC
- 2.5、aurora8b10b_channel模块
- 2.6、IBUFDS_GTE2模块
- 2.7、aurora_8b10b_0_gt_common_wrapper模块
- 2.8、aurora8b10b_module模块
- 总结
前言
参考xilinx文档pg046
Aurora 是一个用于在点对点串行链路间移动数据的可扩展轻量级链路层协议。这为物理层提供透明接口,让专有协议或业界标准协议上层能方便地使用高速收发器。虽然使用的逻辑资源非常少,但 Aurora 能提供低延迟高带宽和高度可配置的特性集。在 Xilinx FPGA 上使用是免费的,而且在 ASIC 上能以名义成本通过单独的许可证协议得到支持。
主要特性:
- 高带宽,仅受限于收发器的数据速率
- 支持大量键合线路,实现较高的总带宽
- 支持全双工和单工通道
- 无限帧尺寸/灵活组帧
- 小型逻辑封装,采用标准的 AXI-ST 接口。
- 内置流程控制和热插拔支持
Aurora 广泛用于需要背板、电路板间和芯片间连接的应用。细分市场包括有线通信、存储、服务器、测试测量、工业、消费和医疗等。此外,Aurora 也可用作嵌入式处理器应用中的调试端口。
一、IP核设置
IP核配置很简单,相当于只有第一页。
Lane WIDTH:用户侧数据位宽
Line Rate:线速率
GT Refclk :Aurora IP核是基于GT作为物理层实现的,所以时钟GT Refclk就是GT的参考时钟。GT的时钟参考只能使用外部的差分时钟,所以具体的值取决你板卡的硬件设计。
INIT CLK :初始化阶段的时钟 ,在上电初始化阶段,可以使用该时钟来驱动一些逻辑。
DRP CLK : DRP时钟,动态重配置,一般不用。(通常一个内部模块需要进行配置,使用两种方法:端口控制和配置参数控制。一个常见的应用就是线速率切换。这时候就需要利用DRP端口来调整部分参数的值,然后复位GTX,使GTX工作在不同的线速率下。)。
上面这三个时钟,是IP核工作所需要的时钟,也是我们需要提供给IP核的。此外,还有一个时钟是IP核提供给我们的:user_clk。这个时钟,是IP核根据设置的线速率及Lane的位宽计算出来的用户时钟,用户需要传输的数据必须是该时钟域下的数据,否则会存在亚稳态风险。
Link Layer:选择工作模式(一般为全双工)、数据帧接口或者是流接口(一般使用帧接口,也就是AXIS),流控
第二页则是选择通道Lane数目以及位置,第三页选择共享逻辑位置。根据自己需求进行选择。
二、基于IP核进行设计
基于example design进行设计,许多模块也是从其中获取,然后进行简单的修改以方便我们使用。
2.1、设计框图
2.2、aurora_8b10b_0模块
该模块即为例化aurora8b10b IP核。如果看过之前的基于GTX IP核的设计,这些接口应该比较熟悉了。具体含义查看xilinx手册pg046
aurora_8b10b_0 aurora_8b10b_0_u0 (.s_axi_tx_tdata (s_axi_tx_tdata ),.s_axi_tx_tkeep (s_axi_tx_tkeep ),.s_axi_tx_tlast (s_axi_tx_tlast ),.s_axi_tx_tvalid (s_axi_tx_tvalid ),.s_axi_tx_tready (s_axi_tx_tready ),.m_axi_rx_tdata (m_axi_rx_tdata ),.m_axi_rx_tkeep (m_axi_rx_tkeep ),.m_axi_rx_tlast (m_axi_rx_tlast ),.m_axi_rx_tvalid (m_axi_rx_tvalid ),.hard_err (o_hard_err ),.soft_err (o_soft_err ),.frame_err (o_frame_err ),.channel_up (o_channel_up ),.lane_up (o_lane_up ),.txp (gt_txp ),.txn (gt_txn ),.reset (w_system_rst ),.gt_reset (w_gt_reset ),.loopback (i_loopback ),.rxp (gt_rxp ),.rxn (gt_rxn ),.drpclk_in (i_clk_100M ),.drpaddr_in (0 ),.drpen_in (0 ),.drpdi_in (0 ),.drprdy_out ( ),.drpdo_out ( ),.drpwe_in (0 ),.power_down (0 ),.tx_lock (w_gt_clk_locked ),.tx_resetdone_out (),.rx_resetdone_out (),.link_reset_out (),.gt0_qplllock_in (gt0_qplllock_in ),.gt0_qpllrefclklost_in (gt0_qpllrefclklost_in ),.gt0_qpllreset_out (gt0_qpllreset_out ),.gt_qpllclk_quad3_in (gt_qpllclk_quad3_in ),.gt_qpllrefclk_quad3_in (gt_qpllrefclk_quad3_in ),.init_clk_in (i_clk_100M ),.pll_not_locked (w_pll_not_locked ),.tx_out_clk (w_tx_out_clk ),.sys_reset_out (w_sys_reset_out ),.user_clk (w_user_clk ),.sync_clk (w_sycn_clk ),.gt_refclk1 (i_gtref_clk )
);
2.3、aurora_8b10b_0_CLOCK_MODULE
该模块主要作用是根据GT的TXOUTCLK(此处为tx_out_clk)产生w_user_clk和w_sync_clk,w_user_clk是提供给用户逻辑的,也就是TXUSRCLK2 ,w_sync_clk 则是作为TXUSRCLK 。以下是手册当中的介绍,很清楚了已经(前提是要看GT的介绍):
user_clk和sync_clk是由tx_out_clk驱动的PLL或BUFG的输出。这些时钟生成在_clock_module文件中可用。user_clk作为txusrclk2输入信号传递给收发器。sync_clk作为txusrclk输入信号传递给收发器
此处对于该模块进行了简单的修改,将INIT_CLK的差分转单端的过程放到了外部顶层模块。(忘了在哪里看到的一句话,说过最好在顶层模块使用clock_wizard)
module aurora_8b10b_0_CLOCK_MODULE
(// INIT_CLK_P,// INIT_CLK_N,// INIT_CLK_O,GT_CLK,GT_CLK_LOCKED,USER_CLK,SYNC_CLK,PLL_NOT_LOCKED
);//***********************************Port Declarations*******************************// input INIT_CLK_P;// input INIT_CLK_N;// output INIT_CLK_O;input GT_CLK;input GT_CLK_LOCKED;output USER_CLK;output SYNC_CLK;output PLL_NOT_LOCKED;//wire INIT_CLK_I;//*********************************Main Body of Code**********************************// Input buffering//------------------------------------BUFG user_clk_buf_i(.I(GT_CLK),.O(USER_CLK));assign SYNC_CLK = USER_CLK; assign PLL_NOT_LOCKED = !GT_CLK_LOCKED;// Assign an IBUFDS to INIT_CLK
// IBUFDS init_clk_ibufg_i
// (
// .I(INIT_CLK_P),
// .IB(INIT_CLK_N),
// .O(INIT_CLK_I)
// );BUFG init_clk_buf_i(.I(INIT_CLK_I),.O(INIT_CLK_O));endmodule
2.4、aurora_8b10b_0_SUPPORT_RESET_LOGIC
该模块用于产生复位信号reset和gt_reset。根据手册内容,我们可以看到,reset是针对于user_clk时钟域的,gt_reset是针对于init_clk时钟域的。那么代码内容就很好理解了,就是简单的跨时钟处理,将异步复位信号同步到相应的时钟域下。
具体的复位过程有兴趣可以看看手册里面的介绍,我们使用IP核的时候直接关注channel_up信号就可以了。
module aurora_8b10b_0_SUPPORT_RESET_LOGIC
(// User IORESET,USER_CLK, INIT_CLK_IN,GT_RESET_IN,SYSTEM_RESET,GT_RESET_OUT
);`define DLY #1
//***********************************Port Declarations*******************************// User I/O
input RESET;
input USER_CLK;
input INIT_CLK_IN;
input GT_RESET_IN;
output SYSTEM_RESET;
output GT_RESET_OUT;//**************************Internal Register Declarations****************************
(* ASYNC_REG = "true" *) (* shift_extract = "{no}" *) reg [0:3] debounce_gt_rst_r = 4'd0;
reg [0:3] reset_debounce_r = 4'd0;
reg reset_debounce_r2 = 1'b1;
reg gt_rst_r; //********************************Wire Declarations**********************************
wire gt_rst_sync; wire SYSTEM_RESET;//*********************************Main Body of Code**********************************//Reset sync from INIT_CLK to USER_CLKaurora_8b10b_0_cdc_sync_exdes#(.c_cdc_type (1 ), .c_flop_input (1 ), .c_reset_state (0 ), .c_single_bit (1 ), .c_vector_width (2 ), .c_mtbf_stages (5 ) )gt_rst_r_cdc_sync (.prmry_aclk (INIT_CLK_IN ),.prmry_rst_n (1'b1 ),.prmry_in (gt_rst_r ),.prmry_vect_in (2'd0 ),.scndry_aclk (USER_CLK ),.scndry_rst_n (1'b1 ),.prmry_ack ( ),.scndry_out (gt_rst_sync ),.scndry_vect_out ( ) );//_________________Debounce the Reset and PMA init signal___________________________
// Simple Debouncer for Reset button. The debouncer has an
// asynchronous reset tied to GT_RESET_IN. This is primarily for simulation, to ensure
// that unknown values are not driven into the reset linealways @(posedge USER_CLK or posedge gt_rst_sync)if(gt_rst_sync)reset_debounce_r <= 4'b1111; elsereset_debounce_r <= {RESET,reset_debounce_r[0:2]};always @ (posedge USER_CLK)reset_debounce_r2 <= &reset_debounce_r;assign SYSTEM_RESET = reset_debounce_r2;// Debounce the GT_RESET_IN signal using the INIT_CLKalways @(posedge INIT_CLK_IN)debounce_gt_rst_r <= {GT_RESET_IN,debounce_gt_rst_r[0:2]};always @(posedge INIT_CLK_IN)gt_rst_r <= &debounce_gt_rst_r;assign GT_RESET_OUT = gt_rst_r;endmodule
2.5、aurora8b10b_channel模块
该模块就是例化上述三个模块,讲一下关键接口给到上层。看一看接口信号即可:
module aurora8b10b_channel(input i_clk_100M ,input i_rst ,input i_gtref_clk ,output gt_txp ,output gt_txn ,input gt_rxp ,input gt_rxn ,input [31:0] s_axi_tx_tdata ,input [3 :0] s_axi_tx_tkeep ,input s_axi_tx_tlast ,input s_axi_tx_tvalid ,output s_axi_tx_tready ,output [31:0] m_axi_rx_tdata ,output [3 :0] m_axi_rx_tkeep ,output m_axi_rx_tlast ,output m_axi_rx_tvalid ,output o_hard_err ,output o_soft_err ,output o_frame_err ,output o_channel_up ,output o_lane_up ,input [2 :0] i_loopback ,output o_user_clk ,output o_user_rst ,input gt0_qplllock_in ,input gt0_qpllrefclklost_in ,output gt0_qpllreset_out ,input gt_qpllclk_quad3_in ,input gt_qpllrefclk_quad3_in
);
2.6、IBUFDS_GTE2模块
这已经是老朋友了,GT的外部输入参考时钟原语。
IBUFDS_GTE2 #(.CLKCM_CFG ("TRUE" ),.CLKRCV_TRST ("TRUE" ),.CLKSWING_CFG (2'b11 )
)
IBUFDS_GTE2_inst ( .O (gt_ref_clk ), .ODIV2 ( ), .CEB (0 ), .I (i_gtref_clk_p ), .IB (i_gtref_clk_n )
);
2.7、aurora_8b10b_0_gt_common_wrapper模块
一样是老朋友了,里面包含了QPLL原语GTXE2_COMMON。不过我们选择的线速率只有6.25Gbps,CPLL就可以处理了,QPLL其实压根没用到,走完整流程吧。这里的i_clk_100M时钟就是当时在配IP时候的INIT_CLK,我选择的是100M。
注:将该模块放到这里是因为方便我们在aurora8b10b_module当中可以例化多个aurora8b10b_channel,老生常谈了,因为一个QUAD只有一个QPLL。同样注意一个问题,那就是gt_qpllreset_out信号选择一个aurora8b10b_channel的复位信号就行。
aurora_8b10b_0_gt_common_wrapper gt_common_support_u0
(.gt_qpllclk_quad3_i (gt_qpllclk_quad3_in ),.gt_qpllrefclk_quad3_i (gt_qpllrefclk_quad3_in ),.gt0_gtrefclk0_common_in (gt_ref_clk ),.gt0_qplllock_out (gt_qplllock_in ),.gt0_qplllockdetclk_in (i_clk_100M ),.gt0_qpllrefclklost_out (gt_qpllrefclklost_in ),.gt0_qpllreset_in (gt_qpllreset_out )
);
2.8、aurora8b10b_module模块
在该模块当中我们可以例化多个aurora8b10b_channel模块,就和之前使用GT是一样一样的。以下为例化俩个通道的代码。
module aurora8b10b_module(input i_gtref_clk_p ,input i_gtref_clk_n ,input i_clk_100M ,input i_rst ,output [1 :0] gt_txp ,output [1 :0] gt_txn ,input [1 :0] gt_rxp ,input [1 :0] gt_rxn ,input [31:0] s_axi_c0_tx_tdata ,input [3 :0] s_axi_c0_tx_tkeep ,input s_axi_c0_tx_tlast ,input s_axi_c0_tx_tvalid ,output s_axi_c0_tx_tready ,output [31:0] m_axi_c0_rx_tdata ,output [3 :0] m_axi_c0_rx_tkeep ,output m_axi_c0_rx_tlast ,output m_axi_c0_rx_tvalid ,input [31:0] s_axi_c1_tx_tdata ,input [3 :0] s_axi_c1_tx_tkeep ,input s_axi_c1_tx_tlast ,input s_axi_c1_tx_tvalid ,output s_axi_c1_tx_tready ,output [31:0] m_axi_c1_rx_tdata ,output [3 :0] m_axi_c1_rx_tkeep ,output m_axi_c1_rx_tlast ,output m_axi_c1_rx_tvalid ,output o_c0_hard_err ,output o_c0_soft_err ,output o_c0_frame_err ,output o_c0_channel_up ,output o_c0_lane_up ,input [2 :0] i_c0_loopback ,output o_c1_hard_err ,output o_c1_soft_err ,output o_c1_frame_err ,output o_c1_channel_up ,output o_c1_lane_up ,input [2 :0] i_c1_loopback ,output o_c0_user_clk ,output o_c0_user_rst ,output o_c1_user_clk ,output o_c1_user_rst
);wire gt_ref_clk ;
wire gt_qplllock_in ;
wire gt_qpllrefclklost_in ;
wire gt_qpllreset_out ;
wire gt_qpllclk_quad3_in ;
wire gt_qpllrefclk_quad3_in ; IBUFDS_GTE2 #(.CLKCM_CFG ("TRUE" ),.CLKRCV_TRST ("TRUE" ),.CLKSWING_CFG (2'b11 )
)
IBUFDS_GTE2_inst ( .O (gt_ref_clk ), .ODIV2 ( ), .CEB (0 ), .I (i_gtref_clk_p ), .IB (i_gtref_clk_n )
);aurora_8b10b_0_gt_common_wrapper gt_common_support_u0
(.gt_qpllclk_quad3_i (gt_qpllclk_quad3_in ),.gt_qpllrefclk_quad3_i (gt_qpllrefclk_quad3_in ),.gt0_gtrefclk0_common_in (gt_ref_clk ),.gt0_qplllock_out (gt_qplllock_in ),.gt0_qplllockdetclk_in (i_clk_100M ),.gt0_qpllrefclklost_out (gt_qpllrefclklost_in ),.gt0_qpllreset_in (gt_qpllreset_out )
);aurora8b10b_channel aurora_channel_u0(.i_clk_100M (i_clk_100M ),.i_rst (i_rst ),.i_gtref_clk (gt_ref_clk ), .gt_txp (gt_txp[0] ),.gt_txn (gt_txn[0] ),.gt_rxp (gt_rxp[0] ),.gt_rxn (gt_rxn[0] ),.s_axi_tx_tdata (s_axi_c0_tx_tdata ),.s_axi_tx_tkeep (s_axi_c0_tx_tkeep ),.s_axi_tx_tlast (s_axi_c0_tx_tlast ),.s_axi_tx_tvalid (s_axi_c0_tx_tvalid ),.s_axi_tx_tready (s_axi_c0_tx_tready ),.m_axi_rx_tdata (m_axi_c0_rx_tdata ),.m_axi_rx_tkeep (m_axi_c0_rx_tkeep ),.m_axi_rx_tlast (m_axi_c0_rx_tlast ),.m_axi_rx_tvalid (m_axi_c0_rx_tvalid ),.o_hard_err (o_c0_hard_err ),.o_soft_err (o_c0_soft_err ),.o_frame_err (o_c0_frame_err ),.o_channel_up (o_c0_channel_up ),.o_lane_up (o_c0_lane_up ),.i_loopback (i_c0_loopback ),.o_user_clk (o_c0_user_clk ),.o_user_rst (o_c0_user_rst ),.gt0_qplllock_in (gt_qplllock_in ),.gt0_qpllrefclklost_in (gt_qpllrefclklost_in ),.gt0_qpllreset_out (gt_qpllreset_out ),.gt_qpllclk_quad3_in (gt_qpllclk_quad3_in ),.gt_qpllrefclk_quad3_in (gt_qpllrefclk_quad3_in )
);aurora8b10b_channel aurora_channel_u1(.i_clk_100M (i_clk_100M ),.i_rst (i_rst ),.i_gtref_clk (gt_ref_clk ),.gt_txp (gt_txp[1] ),.gt_txn (gt_txn[1] ),.gt_rxp (gt_rxp[1] ),.gt_rxn (gt_rxn[1] ),.s_axi_tx_tdata (s_axi_c1_tx_tdata ),.s_axi_tx_tkeep (s_axi_c1_tx_tkeep ),.s_axi_tx_tlast (s_axi_c1_tx_tlast ),.s_axi_tx_tvalid (s_axi_c1_tx_tvalid ),.s_axi_tx_tready (s_axi_c1_tx_tready ),.m_axi_rx_tdata (m_axi_c1_rx_tdata ),.m_axi_rx_tkeep (m_axi_c1_rx_tkeep ),.m_axi_rx_tlast (m_axi_c1_rx_tlast ),.m_axi_rx_tvalid (m_axi_c1_rx_tvalid ),.o_hard_err (o_c1_hard_err ),.o_soft_err (o_c1_soft_err ),.o_frame_err (o_c1_frame_err ),.o_channel_up (o_c1_channel_up ),.o_lane_up (o_c1_lane_up ),.i_loopback (i_c1_loopback ),.o_user_clk (o_c1_user_clk ),.o_user_rst (o_c1_user_rst ),.gt0_qplllock_in (gt_qplllock_in ),.gt0_qpllrefclklost_in (gt_qpllrefclklost_in ),.gt0_qpllreset_out ( ),.gt_qpllclk_quad3_in (gt_qpllclk_quad3_in ),.gt_qpllrefclk_quad3_in (gt_qpllrefclk_quad3_in )
);endmodule
总结
至此工作就已经准备差不多了,编写相应的用户数据产生模块,我们已经可以直接使用aurora了。下文进行介绍。
相关文章:
Aurora8b10b(1)IP核介绍并基于IP核进行设计
文章目录 前言一、IP核设置二、基于IP核进行设计2.1、设计框图2.2、aurora_8b10b_0模块2.3、aurora_8b10b_0_CLOCK_MODULE2.4、aurora_8b10b_0_SUPPORT_RESET_LOGIC2.5、aurora8b10b_channel模块2.6、IBUFDS_GTE2模块2.7、aurora_8b10b_0_gt_common_wrapper模块2.8、aurora8b10…...
基于Springboot的美发管理系统(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的美发管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…...
最新测试技术
在软件测试领域,随着技术的不断进步和行业需求的变化,新的测试技术和方法不断涌现。以下是一些最新的测试技术,它们正在塑造着软件测试的未来: 人工智能和机器学习(AI/ML)在测试中的应用 人工智能和机器学习正在被集成到软件测试中,以提高测试的自动化水平和效率。AI可…...
【算法】初识算法
尽量不说废话 算法 一、数据结构二、排序算法三、检索算法四、字符算类型算法五、递归算法六、贪心算法七、动态规划八、归一化算法后记 我们这里指的算法,是作为程序员在计算机编程时运用到的算法。 算法是一个庞大的体系,主要包括以下内容:…...
HomeBrew 安装与应用
目录 前言一、安装 HomeBrew二、使用 HomeBrew1、使用 brew 查看已安装的软件包2、使用 brew 安装软件包3、使用 brew 升级已安装的软件包4、brew 还有哪些命令呢? 前言 在 macOS(或Linux)系统里,默认是没有软件包的管理器的&…...
JS详解-设计模式
工厂模式: 单例模式: // 1、定义一个类class SingleTon{// 2、添加私有静态属性static #instance// 3、添加静态方法static getInstance(){// 4、判断实例是否存在if(!this.#instance){// 5、实例不存在,创建实例this.#instance new Single…...
探寻马来西亚服务器托管的优势与魅力
随着全球跨境业务的不断增加,境外服务器成为越来越受欢迎的选择。在这其中,马来西亚服务器备受关注,其机房通常位于马来西亚首都吉隆坡。对于客户群体主要分布在东南亚、澳大利亚和新西兰等地区的用户来说,马来西亚服务器是一个理…...
虚幻UE5数字孪生蓝图开发教程
一、背景 这几年,智慧城市/智慧交通/智慧水利等飞速发展,骑士特意为大家做了一个这块的学习路线。 二、这是学习大纲 1.给虚幻UE5初学者准备的智慧城市/数字孪生蓝图开发教程 https://www.bilibili.com/video/BV1894y1u78G 2.UE5数字孪生蓝图开发教学…...
七、Mybatis-缓存
文章目录 缓存一级缓存二级缓存1.概念2.二级缓存开启的条件:3.使二级缓存失效的情况:4.在mapper配置文件中添加的cache标签可以设置一些属性:5.MyBatis缓存查询的顺序 缓存 一级缓存 级别为sqlSession,Mybatis默认开启一级缓存。 使一级缓存失效的四种…...
数据结构(六)——图的应用
6.4 图的应用 6.4.1 最小生成树 对于⼀个带权连通⽆向图G (V, E),⽣成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有⽣成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的…...
java自动化测试学习-03-06java基础之运算符
运算符 算术运算符 运算符含义举例加法,运算符两侧的值相加ab等于10-减法,运算符左侧减右侧的值a-b等于6*乘法,运算符左侧的值乘以右侧的值a*b等于16/除法,运算符左侧的值除以右侧的值a/b等于4%取余,运算符左侧的值除…...
【VASP学习】在Ubuntu系统安装vasp.5.4.4的全过程(包括VASP官方学习资料、安装过程中相关编辑器的配置、VASP的编译及VASP的测试)
在Ubuntu系统安装vasp.5.4.4的全过程 VASP的简介与相关学习资料安装前的准备工作及说明安装过程intel编译器的安装VASP的编译VASP的测试 参考来源 VASP的简介与相关学习资料 VASP(Vienna Ab initio Simulation Package)是基于第一性原理对原子尺度的材料进行模拟计算的软件。比…...
PyTorch|Dataset与DataLoader使用、构建自定义数据集
文章目录 一、Dataset与DataLoader二、自定义Dataset类(一)\_\_init\_\_函数(二)\_\_len\_\_函数(三)\_\_getitem\_\函数(四)全部代码 三、将单个样本组成minibatch(Data…...
4.6(信息差)
🌍 山西500千伏及以上输电线路工程首次采用无人机AI自主验收 🌋 中国与泰国将开展国际月球科研站等航天合作 ✨ 网页版微软 PowerPoint 新特性:可直接修剪视频 🍎 特斯拉开始在德国超级工厂生产出口到印度的右舵车 1.马斯克&…...
关于C#操作SQLite数据库的一些函数封装
主要功能:增删改查、自定义SQL执行、批量执行(事务)、防SQL注入、异常处理 1.NuGet中安装System.Data.SQLite 2.SQLiteHelper的封装: using System; using System.Collections.Generic; using System.Data.SQLite; using System.…...
LeetCode-79. 单词搜索【数组 字符串 回溯 矩阵】
LeetCode-79. 单词搜索【数组 字符串 回溯 矩阵】 题目描述:解题思路一:回溯 回溯三部曲。这里比较关键的是给board做标记,防止之后搜索时重复访问。解题思路二:回溯算法 dfs,直接看代码,很容易理解。visited哈希,防止…...
游戏引擎之高级动画技术
一、动画混合 当我们拥有各类动画素材(clips)时,要将它们融合起来成为一套完整的动画。 最经典的例子就是从走的动画自然的过渡到跑的动画。 1.1 线性插值 不同于上节课的LERP(同一个clip内不同pose之间)ÿ…...
Oracle 数据库中的全文搜索
Oracle 数据库中的全文搜索 0. 引言1. 整体流程2. 创建索引2-1. 创建一个简单的表2-2. 创建文本索引2-3. 查看创建的基础表 3. 运行查询3-1. 运行文本查询3-2. CONTAINS 运算符3-3. 混合查询3-4. OR 查询3-5. 通配符3-6. 短语搜索3-7. 模糊搜索(Fuzzy searches&…...
代码随想录阅读笔记-二叉树【二叉搜索树中的众数】
题目 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值结点右子树中所含结点的值大于等于当前结点的…...
AcWing-游戏
1388. 游戏 - AcWing题库 所需知识:博弈论,区间dp 由于双方都采取最优的策略来取数字,所以结果为确定的,有可能会有多个不同的过程,但是我们只需要关注最终结果就行了。 方法一: 定义dp[i][j] 表示区间…...
Mybatis——一对一映射
一对一映射 预置条件 在某网络购物系统中,一个用户只能拥有一个购物车,用户与购物车的关系可以设计为一对一关系 数据库表结构(唯一外键关联) 创建两个实体类和映射接口 package org.example.demo;import lombok.Data;import …...
Web 安全之 SSL 剥离攻击详解
目录 SSL/TLS简介 SSL 剥离攻击原理 SSL 剥离攻击的影响 SSL 剥离攻击的防范措施 小结 SSL 剥离攻击(SSL Stripping Attack)是一种针对安全套接层(SSL)或传输层安全性(TLS)协议的攻击手段,…...
数据结构——顺序表(C语言)
目录 一、顺序表概念 二、顺序表分类 1.静态顺序表 2.动态顺序表 三、顺序表的实现 1.顺序表的结构体定义 2. 顺序表初始化 3.顺序表销毁 4.顺序表的检验 5.顺序表打印 6.顺序表扩容 7.顺序表尾插与头插 8.尾删与头删 9.在pos处插入数据 10.在pos处删除数据 11.查找数据 …...
利用Idea实现Ajax登录(maven工程)
一、新建一个maven工程(不会建的小伙伴可以参考Idea引入maven工程依赖(保姆级)-CSDN博客),工程目录如图 js文件可以上up网盘提取 链接:https://pan.baidu.com/s/1yOFtiZBWGJY64fa2tM9CYg?pwd5555 提取码&…...
环信IM集成教程——Web端UIKit快速集成与消息发送
写在前面: 千呼万唤始出来,环信Web端终于出UIKit了!🎉🎉🎉 文档地址:https://doc.easemob.com/uikit/chatuikit/web/chatuikit_overview.html 环信单群聊 UIKit 是基于环信即时通讯云 IM SDK 开…...
Anaconda如何切换国内镜像源
一、anaconda如何切换阿里镜像源 在Anaconda中切换到阿里云镜像源可以通过以下步骤进行: 1、打开终端(Windows)或者命令行界面(macOS/Linux)。 2、执行以下命令来配置阿里云镜像源: conda config --add…...
Android 14.0 添加自定义服务,并生成jar给第三方app调用
1.概述 在14.0系统ROM产品定制化开发中,由于需要新增加自定义的功能,所以要增加自定义服务,而app上层通过调用自定义服务,来调用相应的功能,所以系统需要先生成jar,然后生成jar 给上层app调用,接下来就来分析实现的步骤,然后来实现相关的功能 从而来实现所需要的功能 …...
解决沁恒ch592单片机在tmos中使用USB总线时,接入USB Hub无法枚举频繁Reset的问题
开发产品时采用了沁恒ch592,做USB开发时遇到了一个奇葩的无法枚举问题。 典型症状 使用USB线直连电脑时没有问题,可以正常使用。 如果接入某些特定方案的USB Hub(例如GL3510、GL3520),可能会出现以下2种情况…...
nvm保姆级安装使用教程
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 开发环境篇 ✨特色专栏: M…...
大语言模型LLM《提示词工程指南》学习笔记02
文章目录 大语言模型LLM《提示词工程指南》学习笔记02设计提示时需要记住的一些技巧零样本提示少样本提示链式思考(CoT)提示自我一致性生成知识提示 大语言模型LLM《提示词工程指南》学习笔记02 设计提示时需要记住的一些技巧 指令 您可以使用命令来指…...
兰州营销型网站建设/企业网络规划与设计
递归 func recursion(n:Int)->Int{if(n<1){return 1}else{return recursion(n: n-1)recursion(n: n-2)} } recursion(n: 6)效果变化图 系统自带函数 2/2 abs(-2) assert(true) max(2,3) max(12,31,23,1,41,24,1) min(12,312,312,3,213,12,312,3) //新增分隔符和结尾&a…...
怎么在58上做公司网站/重庆森林电影简介
欢迎各位新同学入驻三墩镇人民公园,正式成为一名土著ZJUer。为了让同学们更快更好地适应大学生活,游刃有余地应对日常学习以及寝室生活的需要,及时选购并学会使用大学生活中的必备物品,小e特地带来了以下两份“寝室生存指南”和“…...
湖北正规网站建设质量保障/免费b站推广网站入口202
Spring框架开发团队已经正式发布了Spring 2.0最终版,Spring 2.0的发布基于两个主题:使用简单化和功能强大化。Spring框架一直传递给人一种理念:提供一个简单、高产模型,让其可以根据需要处理最复杂的应 用。在2.0版中这两方面都有…...
网页设计的基础/宁波品牌网站推广优化公司
1.插件介绍 Active Tab Highlighter插件。 用于 IntelliJ 系列 IDE 的活动标签荧光笔插件。 2.安装方式 第一种方式,是在IDEA上搜索插件进行安装,会适配当前IDEA的版本。 第二种安装方式是使用离线插件进行安装。 插件下载地址:https://…...
wordpress 画廊 插件/营销推广软件
在MyBatis中,<resultMap>和resultType都是定义查询结果映射的标签。 1. resultMap 如果查询出来的结果的列名和实体属性不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系 <resultMap> 则是自定义一个结果映射࿰…...
网页设计html代码大全空格/西安seo外包行者seo06
注:该笔记来自于视频Node.JS-黑马程序员 概述 express是高度封装了http的第三方框架。 express官网:http://expressjs.com/ 只需要像安装其他包那样,直接执行npm install express --save命令安装后就可以使用了。 Hello World Hello Wor…...