FPGA 遍历读 LMK04803 寄存器

主要思路:
1.使用 VIO 输出信号控制什么时候开始读LMK04803寄存器
2.遍历LMK04803所有寄存器,将读到的每个寄存器的值显示在VIO上。
3.遍历指的是 从 R0 开始读,R0读完接着读 R1,一直到R31 结束
4.注意的是写寄存器是 32bit (data[31:5] + addr[4:0]),读出来数据是 27bit[26:0]

部分时序
通过 ILA 抓取的波形
开始读取,从R0 开始读,接着 R1 … R31
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/790c1b117e524de689dbf14dd7bc431a.png

结束读取,32个寄存器全部读取完毕
在这里插入图片描述

具体参考LMK04803手册读写时序:
寄存器写:
在这里插入图片描述

寄存器读:
在这里插入图片描述

/*下面是lmk04803需要读取寄存器地址的 向LMK04803的R31 写操作的值addr     : R0000001F : 0
0001001F : 1
0002001F : 2
0003001F : 3
0004001F : 4
0005001F : 5
0006001F : 6
0007001F : 7
0008001F : 8
0009001F : 9
000A001F : 10
000B001F : 11
000C001F : 12
000D001F : 13
000E001F : 14
000F001F : 15
0010001F : 16
0011001F : 17
0012001F : 18
0013001F : 19
0014001F : 20
0015001F : 21
0016001F : 22
0017001F : 23
0018001F : 24
0019001F : 25
001A001F : 26
001B001F : 27
001C001F : 28
001D001F : 29
001E001F : 30
001F001F : 31*///功能: 通过 VIO 控制开始读取寄存器,接着遍历读取 lmk04803 32个寄存器地址,再通过 VIO 将所有32个寄存器值显示module lmk_rd (input  i_clk          ,input  i_rstn         ,input  i_rd_data      ,input  i_sim_flag     ,output o_wr_data      ,output o_lmk_rd_le    ,output o_lmk_rd_clk   ,output o_vio_rd_flag
);parameter P_IDLE     = 0,P_START    = 1,P_WRITE    = 2,      // 写 R11 值 期间P_WAIT1    = 3,P_READ_PRE = 4,      // 读之前 需要 向 R31 写值 期间P_WAIT2    = 5,P_READ     = 6,      // 读寄存器的期间P_WAIT3    = 7,P_DONE     = 8;// vio singal(*dont_touch = "true"*) wire        w_lmk_rd_start    ;(*dont_touch = "true"*) wire [31:0] w_lmk_R11_wr      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R0_rd       ;(*dont_touch = "true"*) wire [26:0] w_lmk_R1_rd       ;(*dont_touch = "true"*) wire [26:0] w_lmk_R2_rd       ;(*dont_touch = "true"*) wire [26:0] w_lmk_R3_rd       ;(*dont_touch = "true"*) wire [26:0] w_lmk_R4_rd       ;(*dont_touch = "true"*) wire [26:0] w_lmk_R5_rd       ;(*dont_touch = "true"*) wire [26:0] w_lmk_R6_rd       ;(*dont_touch = "true"*) wire [26:0] w_lmk_R7_rd       ;(*dont_touch = "true"*) wire [26:0] w_lmk_R8_rd       ;(*dont_touch = "true"*) wire [26:0] w_lmk_R9_rd       ;(*dont_touch = "true"*) wire [26:0] w_lmk_R10_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R11_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R12_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R13_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R14_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R15_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R16_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R17_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R18_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R19_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R20_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R21_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R22_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R23_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R24_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R25_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R26_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R27_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R28_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R29_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R30_rd      ;(*dont_touch = "true"*) wire [26:0] w_lmk_R31_rd      ;wire       w_read_start_pos ;reg        r_lmk_clk        ;
reg        r_lmk_le         ;
(*mark_debug = "true"*) reg [1:0]  r_cnt0           ;
(*mark_debug = "true"*) reg [7:0]  r_cnt1           ;
(*mark_debug = "true"*) reg [3:0]  r_cu_status      ;
reg [3:0]  r_nx_status      ;
reg [7:0]  r_status_cnt     ;
(*mark_debug = "true"*) reg [7:0]  r_bit_cnt        ;
reg        r_rd_end         ;
(*mark_debug = "true"*) reg [7:0]  r_rd_cnt         ;
reg [31:0] r_wrdata         ;
reg [31:0] r_readaddr       ;
reg [31:0] r_addr_write     ;
(*mark_debug = "true"*) reg [26:0] r_readin         ;
(*mark_debug = "true"*) reg        r_read_valid     ;
(*mark_debug = "true"*) reg [7:0]  r_read_bit_cnt   ;
(*mark_debug = "true"*) reg [7:0]  r_valid_cnt      ;
reg        r_rd_finish      ;
reg        r_read_process   ;
reg        r_begin_read_1d  ;
reg        r_begin_read_2d  ;
reg [26:0] LMK_R [0:31]     ;assign o_vio_rd_flag    = r_read_process  ;
assign o_lmk_rd_le      = r_lmk_le        ;
assign o_lmk_rd_clk     = r_lmk_clk       ;
assign o_wr_data        = (r_cu_status == P_WRITE)? r_wrdata[31]:r_addr_write[31];
assign w_read_start_pos = !r_begin_read_2d && r_begin_read_1d;// vio data out
assign w_lmk_R0_rd      = LMK_R[0] ;  
assign w_lmk_R1_rd      = LMK_R[1] ;
assign w_lmk_R2_rd      = LMK_R[2] ;
assign w_lmk_R3_rd      = LMK_R[3] ;
assign w_lmk_R4_rd      = LMK_R[4] ;
assign w_lmk_R5_rd      = LMK_R[5] ;
assign w_lmk_R6_rd      = LMK_R[6] ;
assign w_lmk_R7_rd      = LMK_R[7] ;
assign w_lmk_R8_rd      = LMK_R[8] ;
assign w_lmk_R9_rd      = LMK_R[9] ;
assign w_lmk_R10_rd     = LMK_R[10];
assign w_lmk_R11_rd     = LMK_R[11];
assign w_lmk_R12_rd     = LMK_R[12];
assign w_lmk_R13_rd     = LMK_R[13];
assign w_lmk_R14_rd     = LMK_R[14];
assign w_lmk_R15_rd     = LMK_R[15];
assign w_lmk_R16_rd     = LMK_R[16];
assign w_lmk_R17_rd     = LMK_R[17];
assign w_lmk_R18_rd     = LMK_R[18];
assign w_lmk_R19_rd     = LMK_R[19];
assign w_lmk_R20_rd     = LMK_R[20];
assign w_lmk_R21_rd     = LMK_R[21];
assign w_lmk_R22_rd     = LMK_R[22];
assign w_lmk_R23_rd     = LMK_R[23];
assign w_lmk_R24_rd     = LMK_R[24];
assign w_lmk_R25_rd     = LMK_R[25];
assign w_lmk_R26_rd     = LMK_R[26];
assign w_lmk_R27_rd     = LMK_R[27];
assign w_lmk_R28_rd     = LMK_R[28];
assign w_lmk_R29_rd     = LMK_R[29];
assign w_lmk_R30_rd     = LMK_R[30];
assign w_lmk_R31_rd     = LMK_R[31];// vio_lmk_rd_flag vio_lmk_rd_flag_u0 (// .clk       (i_clk     ),                // input wire clk// .probe_out0(w_lmk_rd  )   // output wire [0 : 0] probe_out0
// );// vio vio_lmk_rd_flag vio_lmk_rd_flag_u0 (.clk       (i_clk         ),    // input wire clk.probe_in0 (w_lmk_R0_rd   ),    // input wire [31 : 0] probe_in0.probe_in1 (w_lmk_R1_rd   ),    // input wire [31 : 0] probe_in1.probe_in2 (w_lmk_R2_rd   ),    // input wire [31 : 0] probe_in2.probe_in3 (w_lmk_R3_rd   ),    // input wire [31 : 0] probe_in3.probe_in4 (w_lmk_R4_rd   ),    // input wire [31 : 0] probe_in4.probe_in5 (w_lmk_R5_rd   ),    // input wire [31 : 0] probe_in5.probe_in6 (w_lmk_R6_rd   ),    // input wire [31 : 0] probe_in6.probe_in7 (w_lmk_R7_rd   ),    // input wire [31 : 0] probe_in7.probe_in8 (w_lmk_R8_rd   ),    // input wire [31 : 0] probe_in8.probe_in9 (w_lmk_R9_rd   ),    // input wire [31 : 0] probe_in9.probe_in10(w_lmk_R10_rd  ),    // input wire [31 : 0] probe_in10.probe_in11(w_lmk_R11_rd  ),    // input wire [31 : 0] probe_in11.probe_in12(w_lmk_R12_rd  ),    // input wire [31 : 0] probe_in12.probe_in13(w_lmk_R13_rd  ),    // input wire [31 : 0] probe_in13.probe_in14(w_lmk_R14_rd  ),    // input wire [31 : 0] probe_in14.probe_in15(w_lmk_R15_rd  ),    // input wire [31 : 0] probe_in15.probe_in16(w_lmk_R16_rd  ),    // input wire [31 : 0] probe_in16.probe_in17(w_lmk_R17_rd  ),    // input wire [31 : 0] probe_in17.probe_in18(w_lmk_R18_rd  ),    // input wire [31 : 0] probe_in18.probe_in19(w_lmk_R19_rd  ),    // input wire [31 : 0] probe_in19.probe_in20(w_lmk_R20_rd  ),    // input wire [31 : 0] probe_in20.probe_in21(w_lmk_R21_rd  ),    // input wire [31 : 0] probe_in21.probe_in22(w_lmk_R22_rd  ),    // input wire [31 : 0] probe_in22.probe_in23(w_lmk_R23_rd  ),    // input wire [31 : 0] probe_in23.probe_in24(w_lmk_R24_rd  ),    // input wire [31 : 0] probe_in24.probe_in25(w_lmk_R25_rd  ),    // input wire [31 : 0] probe_in25.probe_in26(w_lmk_R26_rd  ),    // input wire [31 : 0] probe_in26.probe_in27(w_lmk_R27_rd  ),    // input wire [31 : 0] probe_in27.probe_in28(w_lmk_R28_rd  ),    // input wire [31 : 0] probe_in28.probe_in29(w_lmk_R29_rd  ),    // input wire [31 : 0] probe_in29.probe_in30(w_lmk_R30_rd  ),    // input wire [31 : 0] probe_in30.probe_in31(w_lmk_R31_rd  ),    // input wire [31 : 0] probe_in31.probe_out0(w_lmk_rd_start),    // output wire [0 : 0] probe_out0.probe_out1(w_lmk_R11_wr  )     // output wire [31 : 0] probe_out1
);// 寄存 32 个寄存器的值
genvar i;
generate for (i = 0 ; i <= 31; i = i + 1)beginalways @ (posedge i_clk or negedge i_rstn)beginif (!i_rstn)LMK_R[i] <= 0;     else if (r_read_valid && r_valid_cnt == i)LMK_R[i] <= r_readin;elseLMK_R[i] <= LMK_R[i]; endend 
endgenerate// 开始标志
always @ (posedge i_clk)
beginr_begin_read_1d <= w_lmk_rd_start;//   r_begin_read_1d <= i_sim_flag;r_begin_read_2d <= r_begin_read_1d;
end//status
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_cu_status <= P_IDLE;elser_cu_status <= r_nx_status;       
endalways @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_status_cnt <= 0;else if (r_cu_status != r_nx_status)r_status_cnt <= 0;    elser_status_cnt <= r_status_cnt + 1;       
endalways @ (*)
begincase (r_cu_status) P_IDLE : beginif (w_read_start_pos) r_nx_status <= P_START;elser_nx_status <= r_cu_status;               end       P_START : beginif (r_status_cnt == 10) r_nx_status <= P_WRITE;elser_nx_status <= r_cu_status;               endP_WRITE : beginif (r_cnt1 == 63 && r_cnt0 == 3) r_nx_status <= P_WAIT1;elser_nx_status <= r_cu_status;               endP_WAIT1 : beginif (r_status_cnt == 12) r_nx_status <= P_READ_PRE;elser_nx_status <= r_cu_status;               end P_READ_PRE : beginif (r_cnt1 == 63 && r_cnt0 == 3) r_nx_status <= P_WAIT2;elser_nx_status <= r_cu_status;               endP_WAIT2 : beginif (r_status_cnt == 12) r_nx_status <= P_READ;elser_nx_status <= r_cu_status;               end   P_READ : beginif (r_rd_end) r_nx_status <= P_DONE;else if (r_cnt1 == 54 && r_cnt0 == 3)r_nx_status <= P_WAIT3; elser_nx_status <= r_cu_status;                           endP_WAIT3 : beginif (r_status_cnt == 10) r_nx_status <= P_READ_PRE;elser_nx_status <= r_cu_status;               end       P_DONE : beginif (r_status_cnt == 10) r_nx_status <= P_IDLE;elser_nx_status <= r_cu_status;               enddefault: r_nx_status <= P_IDLE;endcase
end// 读操作完成信号
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_rd_finish <= 0;else if (r_cu_status == P_DONE && r_status_cnt == 8)r_rd_finish <= 1;elser_rd_finish <= 0;       
end// 读操作运行期间
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_read_process <= 0;else if (w_read_start_pos)r_read_process <= 1;   else if (r_rd_finish)r_read_process <= 0;elser_read_process <= r_read_process;       
end// write driver
// r_cnt0 和 r_cnt1 辅助控制 lmk04803 CLK
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_cnt0 <= 0;else if (r_cu_status == P_WRITE || r_cu_status == P_READ_PRE || r_cu_status == P_READ)r_cnt0 <= r_cnt0 + 1;else r_cnt0 <= 0;       
endalways @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_cnt1 <= 0;else if (r_cu_status == P_WAIT3 || r_cu_status == P_DONE)r_cnt1 <= 0;       else if (r_cnt1 == 63 && r_cnt0 == 3)r_cnt1 <= 0;    else if (r_cnt0 == 3)r_cnt1 <= r_cnt1 + 1;elser_cnt1 <= r_cnt1;       
end// 读写操作的时候 bit 计数 ,由于读操作是 CLK 下降沿开始读,所以参考r_read_bit_cnt
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_bit_cnt <= 0;else if (r_cu_status == P_READ && r_cnt1 == 53 && r_cnt0 == 3)r_bit_cnt <= 0;    else if ((r_cu_status == P_WRITE || r_cu_status == P_READ_PRE) && r_cnt1 == 63 && r_cnt0 == 3)r_bit_cnt <= 0;      else if (r_cnt1[0] && r_cnt0 == 3)r_bit_cnt <= r_bit_cnt + 1;elser_bit_cnt <= r_bit_cnt;       
end// 读操作时候的 bit计数
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_read_bit_cnt <= 0;else if (r_read_bit_cnt == 27 && r_cnt1 == 54 && r_cnt0 == 3)r_read_bit_cnt <= 0;      else if (r_cu_status == P_READ && !r_cnt1[0] && r_cnt0 == 3)r_read_bit_cnt <= r_read_bit_cnt + 1;elser_read_bit_cnt <= r_read_bit_cnt;       
end// 遍历到最后一个寄存器时刻
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_rd_end <= 0;else if (r_cu_status == P_READ && r_rd_cnt == 31 && r_cnt1 == 54 && r_cnt0 == 2)r_rd_end <= 1;    elser_rd_end <= 0;       
end// 读取 LMK寄存器 个数计数
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_rd_cnt <= 0;else if (r_cu_status == P_READ && r_rd_cnt == 31 && r_cnt1 == 54 && r_cnt0 == 3)r_rd_cnt <= 0;else if (r_cu_status == P_READ && r_cnt1 == 54 && r_cnt0 == 3)r_rd_cnt <= r_rd_cnt + 1;    elser_rd_cnt <= r_rd_cnt;       
end// 输出的 LMK CLK 
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_lmk_clk <= 0;else if (r_cu_status == P_READ && r_cnt1 == 54 && r_cnt0 == 3)r_lmk_clk <= 0;else if (r_cnt0 == 3)r_lmk_clk <= ~r_lmk_clk; elser_lmk_clk <= r_lmk_clk;       
end// 输出的 LMK LE 
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_lmk_le <= 0;else if (r_cu_status == P_WAIT1 && r_status_cnt > 4 && r_status_cnt < 9)r_lmk_le <= 1; else if (r_cu_status == P_WAIT2 && r_status_cnt > 4 && r_status_cnt < 9)r_lmk_le <= 1;     elser_lmk_le <= 0;       
end//  使用 SYNC 引脚复用 当做回读引脚的时候,对 LMK R11 写操作配置,可以通过 VIO配置初始值
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_wrdata <= 32'h00000000;  
//    else if (r_cu_status == P_IDLE)
//       r_wrdata <= 32'hAAAA5555;    else if (r_cu_status == P_IDLE)r_wrdata <= w_lmk_R11_wr;         else if (r_cu_status == P_WRITE && r_cnt1[0]&& r_cnt0 == 3)r_wrdata <= r_wrdata << 1;    elser_wrdata <= r_wrdata;       
end// 读操作的时候需要对 R31 写操作,然后回读当前寄存器的值
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_addr_write <= 32'h00000000;  else if (r_cu_status == P_READ_PRE && r_status_cnt == 0)r_addr_write <= r_readaddr;  else if (r_cu_status == P_READ_PRE && r_cnt1[0] && r_cnt0 == 3)r_addr_write <= r_addr_write << 1; elser_addr_write <= r_addr_write ;
end// 遍历读到哪个寄存器前需要知道要读哪个寄存器的地址
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_readaddr <= 32'h00000000;  else case (r_rd_cnt) 0:   r_readaddr <= 32'h0000001F ;1:   r_readaddr <= 32'h0001001F ;2:   r_readaddr <= 32'h0002001F ;3:   r_readaddr <= 32'h0003001F ;4:   r_readaddr <= 32'h0004001F ;5:   r_readaddr <= 32'h0005001F ;6:   r_readaddr <= 32'h0006001F ;7:   r_readaddr <= 32'h0007001F ;8:   r_readaddr <= 32'h0008001F ;9:   r_readaddr <= 32'h0009001F ;10:  r_readaddr <= 32'h000A001F ;11:  r_readaddr <= 32'h000B001F ;12:  r_readaddr <= 32'h000C001F ;13:  r_readaddr <= 32'h000D001F ;14:  r_readaddr <= 32'h000E001F ;15:  r_readaddr <= 32'h000F001F ;16:  r_readaddr <= 32'h0010001F ;17:  r_readaddr <= 32'h0011001F ;18:  r_readaddr <= 32'h0012001F ;19:  r_readaddr <= 32'h0013001F ;20:  r_readaddr <= 32'h0014001F ;21:  r_readaddr <= 32'h0015001F ;22:  r_readaddr <= 32'h0016001F ;23:  r_readaddr <= 32'h0017001F ;24:  r_readaddr <= 32'h0018001F ;25:  r_readaddr <= 32'h0019001F ;26:  r_readaddr <= 32'h001A001F ;27:  r_readaddr <= 32'h001B001F ;28:  r_readaddr <= 32'h001C001F ;29:  r_readaddr <= 32'h001D001F ;30:  r_readaddr <= 32'h001E001F ;31:  r_readaddr <= 32'h001F001F ;default : r_readaddr <= 32'h00000000;endcase   
end// 回读的数据
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_readin <= 0;  else if (r_cu_status == P_READ_PRE )r_readin <= 0;     else if (r_cu_status == P_READ && r_cnt1[0] && r_cnt0 == 3)r_readin <= {r_readin[25:0],i_rd_data};  else r_readin <= r_readin;
end//回读数据有效
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_read_valid <= 0;  else if (r_cu_status == P_READ && r_cnt1 == 54 && r_cnt0 == 3)r_read_valid <= 1;      else r_read_valid <= 0;
end// 记录 回读到有效寄存器值的个数
always @ (posedge i_clk or negedge i_rstn)
beginif (!i_rstn)r_valid_cnt <= 0;  else if (r_cu_status == P_DONE)r_valid_cnt <= 0;      else if (r_read_valid)r_valid_cnt <= r_valid_cnt + 1;elser_valid_cnt <= r_valid_cnt; 
endendmodule

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

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

相关文章

【uni-app 微信小程序】新版本发布提示用户进行更新

知识准备 uni.getUpdateManager文档介绍 不支持APP与H5&#xff0c;所以在使用的时候要做好平台类型的判断&#xff0c;如何判断&#xff0c;参考条件编译处理多端差异 代码参考 export const updateApp () > {const updateManager uni.getUpdateManager()updateManag…

vue实现点击左右按钮横向滚动

html部分 <div ref"tabHeaderRef" class"flex items-center tabs_header"><div class"tab-pre" v-if"hidePre" click"leftPre"><i class"el-icon-arrow-left"></i></div><div r…

数据结构(3)单链表的模拟实现

上一节我们进行了数据结构中的顺序表的模拟式现&#xff0c;今天我们来实现一下另外一个数据结构&#xff1a;单链表。 我们在实现顺序表之后一定会引发一些问题和思考&#xff1a; 1.顺序表在头部和中间插入数据会用到循环&#xff0c;时间复杂O&#xff08;N&#xff09; …

uni-app 组成和跨端原理 【跨端开发系列】

&#x1f517; uniapp 跨端开发系列文章&#xff1a;&#x1f380;&#x1f380;&#x1f380; uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…

操作系统:中断与处理器调度

目录 1、中断与中断系统 中断概念&#xff1a; 中断装置&#xff1a; 中断相关概念&#xff1a; 中断优先级别与中断屏蔽 2、处理机&#xff08;CPU&#xff09;调度 调度相关参数&#xff1a;P62 调度算法&#xff1a; 处理机调度时机 处理机调度过程 3、调度级别与多…

两种距离度量简记

一、Lp距离/Minkowski 距离&#xff08;Minkowski distance&#xff09; 1、Lp距离&#xff1a; 特征空间中两个实例点的距离是两个实例点相似程度的反映。Lp距离是一种一般化的距离度量 设特征空间x是n维实数向量空间Rn xi&#xff0c;xj的Lp距离定义为&#xff08;p>1&…

从零开始的使用SpringBoot和WebSocket打造实时共享文档应用

在现代应用中&#xff0c;实时协作已经成为了非常重要的功能&#xff0c;尤其是在文档编辑、聊天系统和在线编程等场景中。通过实时共享文档&#xff0c;多个用户可以同时对同一份文档进行编辑&#xff0c;并能看到其他人的编辑内容。这种功能广泛应用于 Google Docs、Notion 等…

centos7 离线安装7z

1、下载7-Zip 下载地址&#xff1a;7-Zip - 程序下载 2、解压 mkdir 7zip --创建文件夹7zip mv 7z2301-linux-x64.tar.xz 7zip/ --移动 cd 7zip tar -xvJf 7z2301-linux-x64.tar.xz --解压 输入ll 查看解压后的文件 3、安装cp 7zzs /usr/local/bin/ 输入7zzs 查看是否安装成功…

顶会新宠!KAN-LSTM完美融合新方案

2024深度学习发论文&模型涨点之——KANLSTM KAN-LSTM混合预测模型是一种结合了自注意力机制&#xff08;KAN, Key-attention network&#xff09;和长短时记忆网络&#xff08;LSTM&#xff09;的深度学习模型&#xff0c;主要用于序列数据的预测任务&#xff0c;如时间序…

CondaError: Run ‘conda init‘ before ‘conda activate‘

rootautodl-container-543e4aa3a7-e596c47a:~# conda activate python37 CondaError: Run ‘conda init’ before ‘conda activate’ conda 激活虚拟环境的时候报错&#xff0c;提示需要进行初始化&#xff0c;但是初始化之后仍然不生效。 1、初始化 conda init2、重新加载环…

Java_实例变量和局部变量及this关键字详解

最近得看看Java,想学一学Flink实时的东西了&#xff0c;当然Scala语法也有这样的规定&#xff0c;简单看一下这两个吧&#xff0c;都比较容易忽视 实例变量和局部变量 实例变量和局部变量是常见的两种变量类型&#xff0c;区别 作用域&#xff1a; 实例变量&#xff1a;实例变…

代理模式的理解和实践

代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你为其他对象提供一种代理以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介的作用&#xff0c;客户端通过代理对象间接地访问目标对象。通过这种方式&#xff0c;代理模式…

Autoformer: 一种基于自动相关机制的时序预测新架构

论文题目: Autoformer:Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting 论文地址&#xff1a;https://openreview.net/pdf?idI55UqU-M11y 今天给大家介绍一篇时序预测领域的重要算法——Autoformer&#xff0c;由李华等人于2020年提出&am…

2024-12月js逆向案例-sensor-data之vmp字段之akamai_2/3.0-(下)

目录 一、初始插桩二、长串的由来三、短串的由来2024-12月akamai_2.0-sensor-data之cookie反爬分析详细教程(上)2024-12月akamai_2.0-sensor-data之cookie反爬分析详细教程(中)一、初始插桩 1、其实就是研究dFT的由来,解混淆得到如下**var dFT = ‘’‘concat’‘concat’…

GAMES101:现代计算机图形学-笔记-10

今天来聊一些基本的概念&#xff1a;相机&#xff0c;棱镜与光场。 众所周知&#xff0c;成像的方法有两种&#xff1a;合成与捕获。 像我们之前所学的内容如光栅化&#xff0c;如光线追踪&#xff0c;本质上都是合成图像的方法&#xff0c;他们只是在计算机中模拟来成像。 那…

深信服ATRUST与锐捷交换机端口链路聚合的配置

深信服ATRUST业务口原来只配置使用一个电口&#xff0c;近期出现流量达到800-900M接近端口的极限带宽。由于设备没有万光口&#xff0c;于是只好用2个光口来配置链接聚合。 下需附上深信服ATRST端口配置的截图&#xff0c;由于深信服ATRUST与锐捷交换机端口只共同支持源mac目的…

华为HarmonyOS NEXT 原生应用开发:页面路由、页面和组件生命周期函数

页面路由、组件生命周期 一、路由的基本使用 1. 如何新建页面 直接右键新建Page。【这个是最直接最常用的】新建普通ets文件&#xff0c;然后通过配置变成页面。 【该方法是遇到这种情况的解决方案】 2. 路由 - 页面之间的跳转 使用 **router.pushUrl&#xff08;{}&#xff…

Vulhub:Log4j[漏洞复现]

CVE-2017-5645(Log4j反序列化) 启动靶场环境 docker-compose up -d 靶机IPV4地址 ifconfig | grep eth0 -A 5 ┌──(root㉿kali)-[/home/kali/Desktop/temp] └─# ifconfig | grep eth0 -A 5 eth0: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 in…

电子商务人工智能指南 4/6 - 内容理解

介绍 81% 的零售业高管表示&#xff0c; AI 至少在其组织中发挥了中等至完全的作用。然而&#xff0c;78% 的受访零售业高管表示&#xff0c;很难跟上不断发展的 AI 格局。 近年来&#xff0c;电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…

`yarn list --pattern element-ui` 是一个 Yarn 命令,用于列出项目中符合指定模式(`element-ui`)的依赖包信息

文章目录 命令解析&#xff1a;功能说明&#xff1a;示例输出&#xff1a;使用场景&#xff1a; yarn list --pattern element-ui 是一个 Yarn 命令&#xff0c;用于列出项目中符合指定模式&#xff08; element-ui&#xff09;的依赖包信息。 命令解析&#xff1a; yarn list…