Aurora8b10b(1)IP核介绍并基于IP核进行设计

news2025/1/19 17:56:44

文章目录

  • 前言
  • 一、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_clkw_sync_clkw_user_clk是提供给用户逻辑的,也就是TXUSRCLK2w_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

该模块用于产生复位信号resetgt_reset。根据手册内容,我们可以看到,reset是针对于user_clk时钟域的,gt_reset是针对于init_clk时钟域的。那么代码内容就很好理解了,就是简单的跨时钟处理,将异步复位信号同步到相应的时钟域下。
具体的复位过程有兴趣可以看看手册里面的介绍,我们使用IP核的时候直接关注channel_up信号就可以了。
在这里插入图片描述

module aurora_8b10b_0_SUPPORT_RESET_LOGIC
(
    // User IO
    RESET,
    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_CLK
      aurora_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 line

    always @(posedge USER_CLK or posedge gt_rst_sync)
        if(gt_rst_sync)
            reset_debounce_r    <=  4'b1111;   
        else
            reset_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_CLK
    always @(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了。下文进行介绍。

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

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

相关文章

基于MPPT的风力机发电系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1风能与风力发电机模型 4.2风力机功率特性与最大功率点 4.3 MPPT 5.完整工程文件 1.课题概述 基于MPPT的风力机发电系统simulink建模与仿真。MPPT使用S函数编写实现。基于最大功率点跟踪&#xff08…

【OpenCV-颜色空间】

OpenCV-颜色空间 ■ RGB■ BGR■ HSV■ HSL■ HUE■ YUV ■ RGB ■ BGR BGR 就是RGB R和B调换位置。 OpenCV 默认使用BGR ■ HSV ■ HSL ■ HUE ■ YUV

免费搭建:雾锁王国Enshrouded游戏服务器,10秒完成!

免费自建雾锁王国Enshrouded服务器&#xff0c;先领取阿里云300元无门槛代金券&#xff0c;然后在雾锁王国Enshrouded专题页一键部署&#xff0c;不需要基础&#xff0c;鼠标点选即可10秒钟创建一台雾锁王国游戏服务器&#xff0c;超简单&#xff0c;阿里云服务器网aliyunfuwuq…

利用IP地址判断羊毛用户:IP数据云提供IP风险画像

在当今数字化社会&#xff0c;互联网已经成为人们日常生活和商业活动中不可或缺的一部分。然而&#xff0c;随着网络的普及&#xff0c;网络欺诈行为也日益猖獗&#xff0c;其中包括了羊毛党这一群体。羊毛党指的是利用各种手段获取利益、奖励或者优惠而频繁刷取优惠券、注册账…

leetcode热题100.跳跃游戏2

Problem: 45. 跳跃游戏 II 文章目录 题目思路复杂度Code 题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: …

【排列回溯】Leetcode 46. 全排列

【排列回溯】Leetcode 46. 全排列 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- used数组&#xff0c;其实就是记录此时temp 里都有哪些元素使用了&#xff0c;一个排列里一个元素只能使用一次。 class Solution {List&…

Dockerd的使用

端口映射 存储卷 类似于mount&#xff0c;把真机的某个目录映射都容器里面 -v 选项可以有多个 利用存储卷修改配置文件 容器间网络模式 共享网络为 --networkcontainer&#xff1a;容器名 微服务架构 一种由容器为载体&#xff0c;使用多个小型服务组合来构建复杂的架构为…

如何编写属于自己的第一个exp

0x00 前言 在我们找到一个漏洞之后&#xff0c;可能会想着去fofa上搜语法进而扩大战果&#xff0c;而有些漏洞利用起来十分繁琐&#xff0c;这时候就需要一个exp来批量帮我们进行扫描工作&#xff0c;接下来就介绍一下如何进行exp的编写&#xff0c;这个过程中最重要的还是体现…

12-1-CSS 常用样式属性

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 CSS 常用样式属性1 CSS 三角形2 CSS 用户界面样式2.1 什么是界面样式2.2 鼠标…

磁盘压力测试工具(vdbenchfio)

磁盘压力测试工具&#xff08;vdbench&fio&#xff09; 最近有遇到对象挂载为文件系统的需求&#xff0c;为了测试挂载后的读写性能&#xff0c;有了解了一些测试工具。下面给大家分享下我使用的工具vdbench和fio。 1 vdbench 官网文档&#xff1a;https://www.oracle.com/…

2024/4/5 ACM格式练习

一、知识点&#xff1a; &#xff08;1&#xff09;行数不固定&#xff1a;用Scanf的err返回值判断是否读到EOF。 &#xff08;2&#xff09;每行数据个数不固定&#xff1a;一个一个读数据和它后面的字符&#xff0c;判断后面的字符是否是换行符。如果是就说明读完了一行数据…

汽车网络安全管理

汽车网络安全管理 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c…

三菱FX3U计数器

1&#xff0c;定义计数器用了计数输入信号沿触发次数 2&#xff0c;分类主要分为普通计数器和高速计数器 范围定义C0-C9916位正向计数器&#xff08;一般用&#xff09;C100-c19916位正向计数器(保持型)C200-C21932位加减计数器&#xff08;一般用&#xff09;C220-C23432位加…

软考111-上午题-【计算机网络】-URL和DNS

一、URL解析 org&#xff1a;各类组织结构&#xff08;非盈利团队&#xff09; 1-1、顶级域 顶级域名是域名的最后一个部分&#xff0c;即是域名最后一点之后的字母&#xff0c;例如&#xff1a;www.baidu.com这个域名中&#xff0c;顶级域是.com&#xff08;或.COM&#xff…

20240405,数据类型,运算符,程序流程结构

是我深夜爆炸&#xff0c;不能再去补救C了&#xff0c;真的来不及了&#xff0c;不能再三天打鱼两天晒网了&#xff0c;真的来不及了呜呜呜呜 我实在是不知道看什么课&#xff0c;那黑马吧……MOOC的北邮的C正在进行呜呜 #include <iostream> using namespace std; int…

云原生架构(微服务、容器云、DevOps、不可变基础设施、声明式API、Serverless、Service Mesh)

前言 读完本文&#xff0c;你将对云原生下的核心概念微服务、容器云、DevOps、Immutable Infrastructure、Declarative-API、Serverless、Service Mesh 等有一个相对详细的了解&#xff0c;帮助你快速掌握云原生的核心和要点。 因题主资源有限, 这里会选用部分云服务商的组件进…

idea开发 java web 配电室后台管理系统bootstrap框架web结构java编程计算机网页

一、源码特点 java 配电室后台管理系统是一套完善的完整信息系统&#xff0c;结合java web开发和bootstrap UI框架完成本系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开发。 前段主要技术 cs…

LLM大语言模型(九):LangChain封装自定义的LLM

背景 想基于ChatGLM3-6B用LangChain做LLM应用&#xff0c;需要先了解下LangChain中对LLM的封装。本文以一个hello world的封装来示例。 LangChain中对LLM的封装 继承关系&#xff1a;BaseLanguageModel——》BaseLLM——》LLM LLM类 简化和LLM的交互 _call抽象方法定义 ab…

C# MES通信从入门到精通(9)——c#使用visual studio2019社区版部署webservice服务

前言 在上位机软件开发领域,我们经常使用调用webservice接口来和mes系统进行交互,我们在开发Mes程序之前也可以自己先模拟发布客户的webservice接口进行调用从而加快软件开发进度,本文就是详细介绍如何自己发布webservice接口。 1、创建 参考这篇博文:webservice服务创建…

基于Python的豆瓣电影评分可视化,豆瓣电影评分预测系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…