UltraScale 架构 SelectIO 资源之IODELAY与IOSERDES仿真与使用

news2024/11/25 6:27:33

平台:vivado2018.3
具体内容见ug571-ultrascale-selectio


IDELAYE3 


在调试超高速信号的时候,需要使用iodelay+iserdes来调试校准输入信号。例如外部某ADC采样率为5GHZ,外部ADC使用2.5GHZ的时钟去采集输入信号。为了实现采集,adc芯片使用了4个1.25ghz采样率的小ADC来采集。但是由于FPGA的工艺,在FPGA内部无法处理高达1.25ghz的信号。外部信号采用并行数据输入,在双边沿采集信号。输入随路时钟为625mhz的双边沿数据。但是对于一般的工程,内部时钟跑到625mhz对于FPGA的时序要求太高。所以我们将625mhz的时钟通过idelay+iserdes的结构。将625mhz的ddr数据转换为312.5mhz的4路单边沿数据。由于芯片采用的并行数据输入,在pcb布局,fpga引脚这些问题上,导致并行输入信号在进入FPGA内部的时间不一致,导致我们采集的输入数据就会出现亚稳态,可能提前也可能延后。这时候我们就需要使用iodelay来对数据进行校准,保证时钟每次采集的数据都是数据的正中心。以确保数据不会出错。
感兴趣的可以看我的另外一篇关于iodelay的文章。

IDELAY输入延迟分析-CSDN博客

那么625mhz的ddr数据如何转换为312.5mhz的呢?在FPGA中拥有serdes可以将输入的串行数据转换为并行数据。今天我们就来通过仿真简单介绍一下iodelay和iserdes。
关于IODELAY3
可以使用 IDELAYE3 原语延迟除时钟以外的任何输入信号,然后将其直接转发到器件逻辑,或者使用输入/输出互联 (IOI) 内部的单数据速率 (SDR) 时钟或双倍数据速率 (DDR) 时钟将其寄存到简单的触发器、IDDDR 或 ISERDESE3 中。不 应使用 IDELAYE3 来延迟时钟,因为 IDELAY 无法直接布线到全局时钟缓存。如必须延迟时钟,请使用 MMCM 或 PLL 生成时钟,并使用精细相移功能来延迟时钟。
需要注意的是,IDELAY3原语包含512抽头系数。仿真实测每个taps实际为5ps。仿真测试接入IDELAY3产生的固有延迟为160ps。
IDELAY3拥有两种模式。
COUNT模式和TIME模式。
COUNT模式不需要IDELAYCTRL,无校准,只是记数tap的个数(最多512个taps)
TIME模式需要IDELAYCTRL,有校准。
端口介绍

关于ISERDESE3


UltraScale器件中的ISERDESE3是具有特定时控和逻辑功能的串并转换器,便于实现高速源同步应用。
ISERDESE3可在SDR数据捕获中将传入信号按2或4位进行解串,而在DDR数据捕获模式中则可以按4或8位进行解串。当用于SDR数据捕获时,每隔一个数据输出管脚即为有效输出。例如,当使用SDR时钟作为1:4解串器时,数据宽度应设置为8,接收到的数据取自 Q0、Q2、Q4和Q6。
ISERDES还包含一个较浅的八元素FIFO。可用于跨时钟域传输。
ISERDES可以定义串并转换器宽度。为4位和8位。

ISERDES的端口介绍

ISERDES的属性

下面我们在逻辑中做仿真。模拟外部输入的625mhz的DDR数据,通过调节idelay和使用iserdes将输入的串行信号转换位并行数据。

代码仿真

使用idelay,设置idelay时钟位312.5mhz。输入625mhz的串行ddr数据。

// *********************************************************************************/
// Project Name :
// Author       : i_huyi
// Email        : i_huyi@qq.com
// Creat Time   : 2024/4/1 16:22:39
// File Name    : .v
// Module Name  : 
// Called By    :
// Abstract     :
//
// CopyRight(c) 2020, xxx xxx xxx Co., Ltd.. 
// All Rights Reserved
//
// *********************************************************************************/
// Modification History:
// 1. initial
// *********************************************************************************/
// *************************
// MODULE DEFINITION
// *************************
`timescale 1 ns / 1 ps
module io_delay3#(
parameter   U_DLY = 1
                                        )
                                        (
//serdes data in and Parallel data out 
input   wire        data_in             ,
output  wire        data_delay_out      ,
//iodelay
input   wire[8:0]   delay_data          ,//延迟值
input   wire        delay_valid         ,//延迟值有效
//system signal
input   wire        clk_312_5           ,//312.5 
input   wire        rst                 
                                        );
//--------------------------------------
// localparam
//--------------------------------------

//--------------------------------------
// register
//--------------------------------------

//--------------------------------------
// wire
//--------------------------------------

//--------------------------------------
// assign
//--------------------------------------

//------------------------------------------------------------
//------------------------------------------------------------
//------------------------------------------------------------
//------------------------------------------------------------
IDELAYCTRL #(
    .SIM_DEVICE                   ("ULTRASCALE"                 )// Must be set to "ULTRASCALE" 
)
IDELAYCTRL_inst (
    .RDY                          (RDY                          ),// 1-bit output: Ready output
    .REFCLK                       (clk_312_5                    ),// 1-bit input: Reference clock input
    .RST                          (rst                          )// 1-bit input: Active high reset input. Asynchronous assert, synchronous deassert to
                    // REFCLK.

);
//------------------------------------------------------------
//------------------------------------------------------------
IDELAYE3 #(
    .CASCADE                      ("NONE"                       ),// Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE)
    .DELAY_FORMAT                 ("TIME"                       ),// Units of the DELAY_VALUE (COUNT, TIME)
    .DELAY_SRC                    ("IDATAIN"                    ),// Delay input (DATAIN, IDATAIN)
    .DELAY_TYPE                   ("VAR_LOAD"                   ),// Set the type of tap delay line (FIXED, VARIABLE, VAR_LOAD)
    .DELAY_VALUE                  (0                            ),// Input delay value setting
    .IS_CLK_INVERTED              (1'b0                         ),// Optional inversion for CLK
    .IS_RST_INVERTED              (1'b0                         ),// Optional inversion for RST
    .REFCLK_FREQUENCY             (312.5                        ),// IDELAYCTRL clock input frequency in MHz (200.0-2667.0)
    .SIM_DEVICE                   ("ULTRASCALE"                 ),// Set the device version (ULTRASCALE, ULTRASCALE_PLUS, ULTRASCALE_PLUS_ES1,// ULTRASCALE_PLUS_ES2)
    .UPDATE_MODE                  ("ASYNC"                      )// Determines when updates to the delay will take effect (ASYNC, MANUAL, SYNC)
)
IDELAYE3_inst (
    .CASC_OUT                     (                             ),// 1-bit output: Cascade delay output to ODELAY input cascade
    .CNTVALUEOUT                  (                             ),// 9-bit output: Counter value output
    .DATAOUT                      (data_delay_out               ),// 1-bit output: Delayed data output
    .CASC_IN                      (1'b0                         ),// 1-bit input: Cascade delay input from slave ODELAY CASCADE_OUT
    .CASC_RETURN                  (1'b0                         ),// 1-bit input: Cascade delay returning from slave ODELAY DATAOUT
    .CE                           (1'b0                         ),// 1-bit input: Active high enable increment/decrement input
    .CLK                          (clk_312_5                    ),// 1-bit input: Clock input
    .CNTVALUEIN                   (delay_data                   ),// 9-bit input: Counter value input
    .DATAIN                       (1'b0                         ),// 1-bit input: Data input from the logic
    .EN_VTC                       (~delay_valid                 ),// 1-bit input: Keep delay constant over VT
    .IDATAIN                      (data_in                      ),// 1-bit input: Data input from the IOBUF
    .INC                          (1'b1                         ),// 1-bit input: Increment / Decrement tap delay input
    .LOAD                         (delay_valid                  ),// 1-bit input: Load DELAY_VALUE input
    .RST                          (rst                          )// 1-bit input: Asynchronous Reset to the DELAY_VALUE
);
//------------------------------------------------------------
//------------------------------------------------------------

//------------------------------------------------------------
//------------------------------------------------------------
endmodule

使用iserdes,ddr数据输入。输出比例为1:4。

// *********************************************************************************/
// Project Name :
// Author       : i_huyi
// Email        : i_huyi@qq.com
// Creat Time   : 2024/4/1 16:32:49
// File Name    : .v
// Module Name  : 
// Called By    :
// Abstract     :
//
// CopyRight(c) 2020, xxx xxx xxx Co., Ltd.. 
// All Rights Reserved
//
// *********************************************************************************/
// Modification History:
// 1. initial
// *********************************************************************************/
// *************************
// MODULE DEFINITION
// *************************
`timescale 1 ns / 1 ps
module iserdes3#(
parameter   U_DLY = 1
                                        )
                                        (
//serdes data in and Parallel data out 
input   wire        data_in             ,
output  wire[3:0]   data_out            ,
//system signal
input   wire        clk_312_5           ,//625 
input   wire        clk_625_p           ,//625mhz
input   wire        clk_625_n           ,
input   wire        rst                 
                                        );
//--------------------------------------
// localparam
//--------------------------------------

//--------------------------------------
// register
//--------------------------------------

//--------------------------------------
// wire
//--------------------------------------

//--------------------------------------
// assign
//--------------------------------------

//------------------------------------------------------------
//------------------------------------------------------------
ISERDESE3 #(
    .DATA_WIDTH                   (4                            ),// Parallel data width (4,8)
    .FIFO_ENABLE                  ("FALSE"                      ),// Enables the use of the FIFO
    .FIFO_SYNC_MODE               ("FALSE"                      ),// Always set to FALSE. TRUE is reserved for later use.
    .IS_CLK_B_INVERTED            (1'b0                         ),// Optional inversion for CLK_B
    .IS_CLK_INVERTED              (1'b0                         ),// Optional inversion for CLK
    .IS_RST_INVERTED              (1'b0                         ),// Optional inversion for RST
    .SIM_DEVICE                   ("ULTRASCALE"                 )// Set the device version (ULTRASCALE, ULTRASCALE_PLUS, ULTRASCALE_PLUS_ES1,ULTRASCALE_PLUS_ES2)
)
ISERDESE3_inst (
    .FIFO_EMPTY                   (                             ),// 1-bit output: FIFO empty flag
    .INTERNAL_DIVCLK              (                             ),// 1-bit output: Internally divided down clock used when FIFO is, disabled (do not connect)
    .Q                            (data_out                     ),// 8-bit registered output
    .CLK                          (clk_625_p                    ),// 1-bit input: High-speed clock
    .CLKDIV                       (clk_312_5                    ),// 1-bit input: Divided Clock
    .CLK_B                        (clk_625_n                    ),// 1-bit input: Inversion of High-speed clock CLK
    .D                            (data_in                      ),// 1-bit input: Serial Data Input
    .FIFO_RD_CLK                  (                             ),// 1-bit input: FIFO read clock
    .FIFO_RD_EN                   (                             ),// 1-bit input: Enables reading the FIFO when asserted
    .RST                          (rst                          )// 1-bit input: Asynchronous Reset
);
//------------------------------------------------------------
//------------------------------------------------------------

//------------------------------------------------------------
//------------------------------------------------------------
endmodule

顶层例化两个模块。

// *********************************************************************************/
// Project Name :
// Author       : i_huyi
// Email        : i_huyi@qq.com
// Creat Time   : 2024/4/1 15:53:53
// File Name    : .v
// Module Name  : 
// Called By    :
// Abstract     :
// iserdes + iodelay
//
// CopyRight(c) 2020, xxx xxx xxx Co., Ltd.. 
// All Rights Reserved
//
// *********************************************************************************/
// Modification History:
// 1. initial
// *********************************************************************************/
// *************************
// MODULE DEFINITION
// *************************
`timescale 1 ns / 1 ps
module io_delay_iserdes#(
parameter   U_DLY = 1
                                        )
                                        (
//serdes data in and Parallel data out 
input   wire        data_in             ,
output  wire[3:0]   data_out            ,
//iodelay
input   wire[8:0]   delay_data          ,//延迟值
input   wire        delay_valid         ,//延迟值有效
//system signal
input   wire        clk_312_5           ,//625 
input   wire        clk_625_p           ,//625mhz
input   wire        clk_625_n           ,
input   wire        rst                 
                                        );
//--------------------------------------
// localparam
//--------------------------------------

//--------------------------------------
// register
//--------------------------------------

//--------------------------------------
// wire
//--------------------------------------

//--------------------------------------
// assign
//--------------------------------------
io_delay3 u_io_delay3  (
//serdes data in 
    .data_in                      (data_in                      ),
    .data_delay_out               (data_delay_out               ),
//iodelay
    .delay_data                   (delay_data                   ),
    .delay_valid                  (delay_valid                  ),
//system signal
    .clk_312_5                    (clk_312_5                    ),
    .rst                          (rst                          ));

//------------------------------------------------------------
//------------------------------------------------------------
iserdes3 U_iserdes3(
//serdes data in and Parallel data out 
    .data_in                      (data_delay_out               ),
    .data_out                     (data_out                     ),
//system signal
    .clk_312_5                    (clk_312_5                    ),
    .clk_625_p                    (clk_625_p                    ),
    .clk_625_n                    (clk_625_n                    ),
    .rst                          (rst                          ));

//------------------------------------------------------------
//------------------------------------------------------------
//
endmodule

添加仿真文件

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2024/04/01 16:43:25
// Design Name: 
// Module Name: vtf_io_delay_iserdes
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module vtf_io_delay_iserdes;
//
wire    [9:0]       adc_di_p        ;

//iodelay
reg     [8:0]       delay_data      ;//延迟值
reg                 delay_valid     ;//延迟值有效
//system signal
reg                 clk_312_5       ;//625 
reg                 clk_625_p       ;//625mhz
reg                 clk_625_n       ;
reg                 rst             ;

reg                 data_clk        ;

wire    [3:0]       data_out[9:0]   ; 

wire    [9:0]       data_p0         ;
wire    [9:0]       data_p1         ;
wire    [9:0]       data_p2         ;
wire    [9:0]       data_p3         ;

//-----------------------------------------------------------
//-----------------------------------------------------------
assign  data_p0 = { data_out[9][0],
                    data_out[8][0],
                    data_out[7][0],
                    data_out[6][0],
                    data_out[5][0],
                    data_out[4][0],
                    data_out[3][0],
                    data_out[2][0],
                    data_out[1][0],
                    data_out[0][0]
                                };
assign  data_p1 = { data_out[9][1],
                    data_out[8][1],
                    data_out[7][1],
                    data_out[6][1],
                    data_out[5][1],
                    data_out[4][1],
                    data_out[3][1],
                    data_out[2][1],
                    data_out[1][1],
                    data_out[0][1]
                                };
assign  data_p2 = { data_out[9][2],
                    data_out[8][2],
                    data_out[7][2],
                    data_out[6][2],
                    data_out[5][2],
                    data_out[4][2],
                    data_out[3][2],
                    data_out[2][2],
                    data_out[1][2],
                    data_out[0][2]
                                };
assign  data_p3 = { data_out[9][3],
                    data_out[8][3],
                    data_out[7][3],
                    data_out[6][3],
                    data_out[5][3],
                    data_out[4][3],
                    data_out[3][3],
                    data_out[2][3],
                    data_out[1][3],
                    data_out[0][3]
                                };

//-----------------------------------------------------------
//-----------------------------------------------------------
parameter               WIDTH = 10;
//-----------------------------------------------------------
//-----------------------------------------------------------
	genvar i;
	generate
	for (i = 0; i<=(WIDTH-1); i = i +1) begin : adc_ch_di_p
		io_delay_iserdes u_io_delay_iserdes(
        //serdes data in and Parallel data out 
        .data_in                    (adc_di_p[i]                ),
        .data_out                   (data_out[i]                   ),
        //iodelay
        .delay_data                 (delay_data                 ),
        .delay_valid                (delay_valid                ),
        //system signal
        .clk_312_5                  (clk_312_5                  ),
        .clk_625_p                  (clk_625_p                  ),
        .clk_625_n                  (clk_625_n                  ),
        .rst                        (rst                        ));
	end
	endgenerate 
//-----------------------------------------------------------
//-----------------------------------------------------------


initial
begin
        delay_data      =0;
        delay_valid     =0;
        data_clk        =0;
                        
        clk_312_5       =0;
        clk_625_p       =0;
        clk_625_n       =1;
        rst             =1;
        #100;
        rst             =0;
        #100;
        delay_data      =9'd0;
        delay_valid     =1'b1;
        #10;
        delay_data      =9'd0;
        delay_valid     =1'b0;

        #100;
        delay_data      =9'd2;
        delay_valid     =1'b1;
        #10;
        delay_data      =9'd0;
        delay_valid     =1'b0;
        #100;
        delay_data      =9'd3;
        delay_valid     =1'b1;
        #10;
        delay_data      =9'd0;
        delay_valid     =1'b0;

        #100;
        delay_data      =9'd4;
        delay_valid     =1'b1;
        #10;
        delay_data      =9'd0;
        delay_valid     =1'b0;

        #100;
        delay_data      =9'd200;
        delay_valid     =1'b1;
        #10;
        delay_data      =9'd0;
        delay_valid     =1'b0;

end


reg [9:0]   data_cnt ;
 
always@(posedge data_clk or posedge rst)
begin
        if(rst == 1'b1)begin
                data_cnt    <= 10'd0;
        end
        else begin
                data_cnt  <= data_cnt + 10'h1;
        end
end
//-----------------------------------------------------------
//-----------------------------------------------------------
//产生数据
assign  adc_di_p[0] = data_cnt[0];
assign  adc_di_p[1] = data_cnt[1];
assign  adc_di_p[2] = data_cnt[2];
assign  adc_di_p[3] = data_cnt[3];
assign  adc_di_p[4] = data_cnt[4];
assign  adc_di_p[5] = data_cnt[5];
assign  adc_di_p[6] = data_cnt[6];
assign  adc_di_p[7] = data_cnt[7];
assign  adc_di_p[8] = data_cnt[8];
assign  adc_di_p[9] = data_cnt[9];



always  #1.6 clk_312_5 = ~clk_312_5;
always  #0.8 clk_625_p = ~clk_625_p;
always  #0.8 clk_625_n = ~clk_625_n;
always  #0.4 data_clk  = ~data_clk;

endmodule

在仿真文件中,我们模式外部ADC采集输入的并行数据。使用1.25ghz时钟将数据产生。产生的数据将通过并行的十根数据线发送到idelay+iserdes模块分别进行解串。解串后的数据为单bit的312.5mhz的四组并行数据。在仿真顶层我们需要将该数据装换为10bit的312.5mhz数据。所以这里例化十个解串模块。将其解串后的数据进行拼合。就将原始的10bit的1.25ghz的数据转换为了四组312.5mhz的10bit数据流。接下来具体看一下效果。

idelay调节。调节tap为0。可以看到调节后的数据较输入原始数据延迟了160ps。

idelay调节。调节tap为2。可以看到调节后的数据较输入原始数据延迟了170ps。

idelay调节。调节tap为200。可以看到调节后的数据较输入原始数据延迟了1160ps。

iserdes解串出来的数据。

为了验证每个通道到达iserdes数据的先后顺序不一致。我们在仿真时,将输入的bit0,作为单独的一路数据,延迟tap设置为500。

设置仿真。

		io_delay_iserdes u_io_delay_iserdes0(
        //serdes data in and Parallel data out 
        .data_in                    (adc_di_p[0]                ),
        .data_out                   (data_out[0]                ),
        //iodelay
        .delay_data                 (9'd500                     ),
        .delay_valid                (delay_valid                ),
        //system signal
        .clk_312_5                  (clk_312_5                  ),
        .clk_625_p                  (clk_625_p                  ),
        .clk_625_n                  (clk_625_n                  ),
        .rst                        (rst                        ));

	genvar i;
	generate
	for (i = 1; i<=(WIDTH-1); i = i +1) begin : adc_ch_di_p
		io_delay_iserdes u_io_delay_iserdes(
        //serdes data in and Parallel data out 
        .data_in                    (adc_di_p[i]                ),
        .data_out                   (data_out[i]                   ),
        //iodelay
        .delay_data                 (delay_data                 ),
        .delay_valid                (delay_valid                ),
        //system signal
        .clk_312_5                  (clk_312_5                  ),
        .clk_625_p                  (clk_625_p                  ),
        .clk_625_n                  (clk_625_n                  ),
        .rst                        (rst                        ));
	end
	endgenerate 

bit0进过iserdes解串出来的并行数据。idelay=0;

bit0进过iserdes解串出来的并行数据。idelay=500;

经过idelay和iserdes还原出来的数据。在调节idelay之前。输入10bit并行数据,可以看到输出的数据为00f,010,011,012,与输入的1.25ghz数据一致。

经过idelay和iserdes还原出来的数据。在调节idelay之后。输入10bit并行数据,可以看到输出的数据为07f,081,080,083,与输入的1.25ghz数据不一致。数据已经错误。

这时再将所有通道idelay延迟设置为500taps。观察解串后的数据。

	genvar i;
	generate
	for (i = 0; i<=(WIDTH-1); i = i +1) begin : adc_ch_di_p
		io_delay_iserdes u_io_delay_iserdes(
        //serdes data in and Parallel data out 
        .data_in                    (adc_di_p[i]                ),
        .data_out                   (data_out[i]                   ),
        //iodelay
        .delay_data                 (delay_data                 ),
        .delay_valid                (delay_valid                ),
        //system signal
        .clk_312_5                  (clk_312_5                  ),
        .clk_625_p                  (clk_625_p                  ),
        .clk_625_n                  (clk_625_n                  ),
        .rst                        (rst                        ));
	end
	endgenerate 
//-----------------------------------------------------------
//-----------------------------------------------------------


initial
begin
        delay_data      =0;
        delay_valid     =0;
        data_clk        =0;
                        
        clk_312_5       =0;
        clk_625_p       =0;
        clk_625_n       =1;
        rst             =1;
        #100;
        rst             =0;
        #100;
        delay_data      =9'd500;
        delay_valid     =1'b1;
        #10;
        delay_data      =9'd0;
        delay_valid     =1'b0;


end

解串后的数据。在idelay写入时,存在几个周期的数据错误。在idelay生效后,解串出来的数据与原始数据一致。解串成功。

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

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

相关文章

【python】python基于Pygame扫雷游戏设计实现(源码+报告)【独一无二】

> &#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博…

AD7685BRMZRL7 16位 2.3V 低功耗模数转换器芯片 ADI

AD7685BRMZRL7是一款由ADI&#xff08;亚德诺&#xff09;公司生产的模数转换器&#xff08;ADC&#xff09;芯片。该芯片的主要功能是将模拟信号转换为数字信号&#xff0c;以便在数字系统中处理. AD7685BRMZRL7 规格信息&#xff1a; 制造商:Analog Devices Inc. 产品种类:模…

volatile是如何禁止指令进行重排序的

Further Reading &#xff1a; 内存屏障类型介绍&#xff08;StoreStore&#xff0c;StoreLoad&#xff0c;LoadLoad&#xff0c;LoadStore&#xff09; Further Reading &#xff1a; 什么是指令重排 重排序分为编译器重排序和处理器重排序。 为了实现volatile内存语义&#x…

本地开发nginx代理服务器(2024-04-10)

1、nginx 解释 nginx 是一个高性能的HTTP和反向代理服务器&#xff0c;同时也是一个IMAP/POP3/SMTP 代理服务器。 在性能上&#xff0c;Nginx占用很少的系统资源&#xff0c;能支持更多的并发连接&#xff0c;达到更高的访问效率&#xff1b; 在功能上&#xff0c;Nginx是优…

展厅装修设计中合理的使用颜色

一、选择合适的主题是最重要的一点 一个引人注目的主题可以立即吸引到游客的注意力&#xff0c;成功的将展厅的主题和产品联系在一起。这个主题应该是与你的产品或服务密切相关的&#xff0c;同时又足够具有吸引力&#xff0c;以吸引消费者对你的展厅产生好奇心。 二、合理的使…

武汉星起航领航跨境电商风潮,一站式服务赋能创业者翱翔

在全球化浪潮的推动下&#xff0c;跨境电商行业如日中天&#xff0c;成为外贸领域的新宠。众多企业纷纷涉足这一领域&#xff0c;寻求新的增长点。然而&#xff0c;在这个竞争激烈的市场中&#xff0c;武汉星起航电子商务有限公司以其独特的服务理念和一站式解决方案&#xff0…

Windows系统本地部署Jupyter Notebook并实现公网访问编辑笔记

文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 在数据分析工作中&#xff0c;使用最多的无疑就是各种函数、图表、…

正向代理是什么?为什么要使用它?

在跨境行业中&#xff0c;会有跨境用户会询问到一个词&#xff1a;正向代理&#xff1b;正向代理是什么意思&#xff0c;它又有什么作用&#xff0c;为什么要使用它呢&#xff1f;为大家来解答。 正向代理是一种网络架构模式&#xff0c;它位于客户端和互联网之间&#xff0c;…

DedeCMS 未授权远程命令执行漏洞分析

dedecms介绍 DedeCMS是国内专业的PHP网站内容管理系统-织梦内容管理系统&#xff0c;采用XML名字空间风格核心模板&#xff1a;模板全部使用文件形式保存&#xff0c;对用户设计模板、网站升级转移均提供很大的便利&#xff0c;健壮的模板标签为站长DIY自己的网站提供了强有力…

【微服务】------常见模型的分析与比较

DDD 分层架构 整洁架构 整洁架构又名“洋葱架构”。为什么叫它洋葱架构&#xff1f;看看下面这张图你就明白了。整洁架构的层就像洋葱片一样&#xff0c;它体现了分层的设计思想。 整洁架构最主要的原则是依赖原则&#xff0c;它定义了各层的依赖关系&#xff0c;越往里依赖越…

Python单元测试pytest捕获日志输出

使用pytest进行单元测试时&#xff0c;遇到了需要测试日志输出的情况&#xff0c;查看了文档 https://docs.pytest.org/en/latest/how-to/capture-stdout-stderr.html https://docs.pytest.org/en/latest/how-to/logging.html 然后试了一下&#xff0c;捕捉logger.info可以用…

2024妈妈杯数学建模D题思路分析-量子计算在矿山设备配置及运营中的建模应用

# 1 赛题 D 题 量子计算在矿山设备配置及运营中的建模应用 随着智能技术的发展&#xff0c;智慧矿山的概念越来越受到重视。越来越多的 设备供应商正在向智慧矿山整体解决方案供应商转型&#xff0c;是否具备提供整体 解决方案的能力&#xff0c;也逐步成为众多矿山设备企业的核…

蓝桥杯 每天2题 day6

碎碎念&#xff1a;哇咔咔 要不是中间缺勤一天就圆满day7了&#xff01;最后一晚上&#xff01;写题复习哇咔咔 唉&#xff0c;睡了一觉就看不下去了&#xff0c;&#xff0c;&#xff0c;看看之前的笔记洗洗睡觉&#xff0c;&#xff0c;&#xff0c; 记得打印准考证带好东西…

(学习日记)2024.04.15:UCOSIII第四十三节:任务消息队列

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

Pandas部分应掌握的重要知识点

目录 Pandas部分应掌握的重要知识点一、DataFrame数据框的创建1、直接基于二维数据创建&#xff08;同时使用index和columns参数&#xff09;2、基于excel文件中的数据来创建 二、查看数据框中的数据和联机帮助信息1、查看特殊行的数据2、查看联机帮助的两种常见方法&#xff0…

Harbor镜像仓库报错“Harbor被设置为只读模式,在此模式下,不能删除仓库、标签及推送镜像。”

由于Harbor镜像仓库空间不足&#xff0c;今天扩容的磁盘空间&#xff0c;扩容前做了垃圾清理操作&#xff0c;然后直接停止了服务。估计清理任务没完成&#xff0c;导致服务启动后Harbor被设置为只读模式&#xff0c;无法使用。下面是解决方法。 1、报错信息&#xff1a; “Ha…

【Linux】基础IO----理解缓冲区

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;理解缓冲区 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff1a;Linux初阶 > 望…

开源模型应用落地-chatglm3-6b-zero/one/few-shot-入门篇(五)

一、前言 Zero-Shot、One-Shot和Few-Shot是机器学习领域中重要的概念&#xff0c;特别是在自然语言处理和计算机视觉领域。通过Zero-Shot、One-Shot和Few-Shot学习&#xff0c;模型可以更好地处理未知的情况和新任务&#xff0c;减少对大量标注数据的依赖&#xff0c;提高模型的…

Gradle 实战 - 检查不用包 -ApiHug准备-工具篇-010

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace ApiHug …

《架构风清扬-Java面试系列第21讲》什么是线程的优先级?在Java中如何设置线程的优先级?

各位小伙伴早上好&#xff01; 谢谢你的关注&#xff01;也欢迎来加入我主导的知识星球&#xff0c;更多干货&#xff0c;提高你的面试准备效率&#xff01; 敢承诺三天内不满意&#xff0c;可以直接退出&#xff01; 这道题&#xff0c;属于面试热场的题目&#xff0c;我是不…