序列检测器

  • 一、前言
  • 二、状态机法和寄存器法
    • 2.1状态机法
      • 2.11 使用状态机检测“1001”
      • 2.12 verilog代码
      • 2.13 testbench
      • 2.14仿真结果
    • 2.2移位寄存器法
      • 2.21 使用移位寄存器法检测1001
      • 2.22 verilog代码
      • 2.23 testbench
      • 2.24仿真结果
  • 三、重叠检测与非重叠检测(检测序列1001)
    • 3.1重叠检测
      • 3.11 重叠检测方法
      • 3.12verilog代码
      • 3.13Testbench
      • 3.14仿真结果
    • 3.2非重叠检测
      • 3.21 非重叠检测方法
      • 3.22verilog代码
      • 3.23Testbench
      • 3.24仿真结果
  • 四、总结



数字IC经典电路设计
经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字IC中一些经典电路的设计有初步入门了解。能力有限,纰漏难免,欢迎大家交流指正。

快速导航链接如下:

个人主页链接
1.数字分频器设计
2.序列检测器设计
3.序列发生器设计
4.序列模三检测器设计
5.奇偶校验器设计
6.自然二进制数与格雷码转换



一、前言

在数字电路中,序列检测器(Sequence Detector)是指一种特殊类型的电路,用于寻找输入信号中一定模式的子序列。该模式可以是任意模式,包括重复模式、连续模式、间隔模式等等。通常的序列检测方法有2种:有限状态机法(FSM);移位寄存器法。

为什么需要设计序列检测电路呢?

在数字集成电路中,序列检测电路可以用于检测输入信号序列中是否存在特定的模式和序列,以及判断实际输出和理论输出是否存在差异。序列检测器是确保数字系统的正确运行不可或缺的一部分!

那么数字IC中哪些部分需要设计呢?

数字集成电路(Digital Integrated Circuit,简称DIC)中需要设计序列检测电路的部分主要包括以下几个方面:

  1. 数据输入端:序列检测电路可以用于检测输入数据是否符合特定的格式要求,或者是否存在错误或干扰。在数字集成电路中,输入数据通常是通过输入端口输入的,因此需要在输入端口处设计序列检测电路。
  2. 控制信号:数字集成电路中的控制信号通常是用于控制数字系统的操作序列,以确保系统按照预期的顺序执行操作。在这种情况下,序列检测电路可以用于检测控制信号是否按照预期的序列进行。
  3. 数据输出端:序列检测电路还可以用于检测输出数据是否符合特定的格式要求,或者是否存在错误或干扰。在数字集成电路中,输出数据通常是通过输出端口输出的,因此需要在输出端口处设计序列检测电路。
  4. 内部信号:数字集成电路中的内部信号通常是在芯片内部传递的信号,例如时钟信号、地址信号、数据信号等。在这种情况下,序列检测电路可以用于检测内部信号是否按照预期的序列进行。

在IC设计的过程中,不同的部分的序列检测器检测的序列和发挥的具体作用不尽心相同。因此在数字集成电路中,需要根据具体的应用场景,针对不同的部分设计相应的序列检测电路。

二、状态机法和寄存器法

对于序列检测器的设计,常规的设计方法有两种:状态机法和移位寄存器法。

状态机法最重要的是明白状态机状态的转移过程:在数据输入之后判断是否匹配,若匹配则进入下一状态,不匹配则根据输入的数据具体判断进入的下一状态(也有可能保持在原来的状态)。状态机设计过程一定要注重状态的数量和状态转移以及状态转移条件,避免状态的缺失以及状态转移的不合理循环。

移位寄存器法法基本原理是数据的移位和移位数据的对比:首先将对应的初始数据缓存在寄存器中作为一个数组,数据输入后置于于数组的末尾,数组其它元素左移,把最早输入的数据移出,每输入一个数据后刷新一次。然后将数组和目标序列对比,如果数组和目标序列相等,则说明出现目标序列。

2.1状态机法

2.11 使用状态机检测“1001”

题目:设计一个序列检测器,用来检测序列1001,用状态机完成电路,可重复检测序列1001(即本文第三部分的重叠检测)。

第一步,分析状态机状态转移,分析如下:

  • IDLE: 初始状态,代表目前没有接收到满足要求的数据。
    seq_in = 1时,等于1001中的第一个数,进入S1状态;
    seq_in = 0时,保持状态。
  • S1:代表目前已经有了1个匹配的数据。
    seq_in = 0时,当前序列为10,等于1001中的前两个数,进入S2状态;
    seq_in = 1时,当前序列为11,不是1001的前两个数,但1是1001的第一个数,所以保持S1状态。
  • S2:代表目前已经有了2个匹配的数据。
    seq_in = 0时,当前序列为100,等于1001中的前三个数,进入S3状态;
    seq_in = 1时,当前序列为101,不是1001的前三个数,但1是1001的第一个数,所以进入S1状态。
  • S3:代表目前已经有了3个匹配的数据。
    seq_in = 1时,当前序列为1001,与要求序列匹配,进入S4状态;
    seq_in = 0时,当前序列为1000,与要求序列不配,0与初始状态匹配,所以进入IDLE状态。
  • S4:最终状态,代表目前已经得到了匹配的序列,输出信号翻转。
    seq_in = 1时,当前序列为10011,1与要求序列的第一个数匹配,所以进入S1状态;
    seq_in = 0时,当前序列为10010,10与要求的前两个数匹配,所以进入S2状态。

第二步:根据流程转换分析画出状态机的状态转移图,如下图所示:

第三步:根据状态机转移图用经典三段式(或者二段式)写出verilog代码

2.12 verilog代码

//使用状态机设计检测“1001”的序列检测器
//可重叠检测序列“1001”
module sequence_detect01(input  clk, input  rst_n,input  seq_in, output mismatch                //检验序列是否匹配,匹配输出0,不匹配输出0);//采用独热码编译五个状态,初始IDLE状态为待机状态
//独热码相比二进制码和格雷码,方便电路设计判断、状态转移,且逻辑更简单
parameter        IDLE = 5'b00001;
parameter        S1   = 5'b00010;
parameter        S2   = 5'b00100;
parameter        S3   = 5'b01000;
parameter        S4   = 5'b10000; //定义两个寄存器表示状态机的目前状态和下一状态
reg [4:0]        curr_state;
reg [4:0]        next_state;//第一段使用时序逻辑描述状态转移
always@(posedge clk or negedge rst_n) beginif(!rst_n) begincurr_state <= IDLE;endelse begincurr_state <= next_state;end
end//第二段使用组合逻辑判断状态转移条件
always@(*) beginif(!rst_n) beginnext_state <= IDLE;endelse begincase(curr_state)IDLE  :next_state = seq_in?S1:IDLE;S1   :next_state = seq_in?S1:S2;S2      :next_state = seq_in?S1:S3;S3      :next_state = seq_in?S4:IDLE;S4    :next_state = seq_in?S1:S2;default:next_state = IDLE;   //养成良好代码风格,不能遗漏,防生成latch,也可以通过赋初值避免endcaseend
end//第三段描述状态输出(可以使用组合逻辑,也可以用时序逻辑)
//此处采用组合逻辑,同时也提供时序逻辑代码示例
assign mismatch = (curr_state ==S4) ? 1'b0 : 1'b1;     //组合逻辑描述输出/*
//时序逻辑描述输出
always@(posedge clk or negedge rst_n) beginif(!rst_n) beginmismatch <= 1'b1;endelse if(next_state == S4) beginmismatch <= 1'b0;endelse beginmismatch <= 1'b1;end
end
*/
endmodule

2.13 testbench

`timescale 1ns/1ps      //仿真时间单位1ns 仿真时间精度1ps
module sequence_detect01_tb();//信号申明
reg      clk;
reg      rst_n;
reg      seq_in;
wire     mismatch; //生成复位信号
//为时钟信号和复位信号赋初值
initial beginclk       = 0;rst_n     = 1;seq_in    = 1;#5  rst_n = 0;#10 rst_n = 1;
endalways #6  seq_in = $random;    //生成随机数作为信号输入
always #5  clk = ~clk;         //生成时钟信号//模块实例化(将申明的信号连接起来即可)
sequence_detect01 u_sequence_detect01(.clk           (clk),.rst_n            (rst_n), .seq_in        (seq_in),.mismatch      (mismatch));endmodule

2.14仿真结果

Testbench中采用随机数来验证序列检测器的准确性,当时间来到705ns,随机数连续输出1001,mismatch在接收四位数字进行信号翻转。

2.2移位寄存器法

2.21 使用移位寄存器法检测1001

题目:设计一个序列检测器,用来检测序列 1001,用移位寄存器完成电路设计。

移位寄存器方法比较简单。设置一个和序列等长的寄存器,在数据输入后将输入移入寄存器的最低位,并判断寄存器中的值是否与序列相同。因为移位寄存器的工作原理,设计出来的序列检测器可以重叠检测序列。

2.22 verilog代码

//使用移位寄存器设计检测“1001”的序列检测器
//可重叠检测序列“1001”
module sequence_detect02(input      clk,input       rst_n,input     seq_in,output reg   mismatch    //时序逻辑中需要定义为reg型);reg [3:0]     seq_in_r;   //定义一个寄存器缓存数据//使用时序逻辑完成复位和移位寄存器移位过程
always@(posedge clk or negedge rst_n) beginif (!rst_n) begin seq_in_r <= 4'b0;                            //中间寄存器复位endelse beginseq_in_r <= {seq_in_r[2:0],seq_in};           //输入数据置于数组右端,移位寄存器左移位end
end//使用时序逻辑完成复位与输出
always@(posedge clk or negedge rst_n) beginif (!rst_n) begin mismatch <= 1'b1;endelse if (seq_in_r == 4'b1001) begin       //若检测到1001则将mismatch置1,表明检测到序列1001mismatch <= 1'b0;endelse begin    mismatch <= 1'b1;                  //养成良好代码风格,不能遗漏,防生成latch,可通过赋初值避免end
endendmodule

2.23 testbench

`timescale 1ns/1ps      //仿真时间单位1ns 仿真时间精度1ps
module sequence_detect02_tb;//信号申明
reg     clk;
reg     rst_n;
reg     seq_in;
wire    mismatch; //复位信号生成
//时钟信号与复位信号赋初值
initial beginclk       = 0;rst_n     = 1;seq_in    = 1;#5  rst_n = 0;#10 rst_n = 1;
endalways #6  seq_in = $random;    //生成随机数作为信号输入
always #5  clk = ~clk;         //生成时钟信号//模块实例化(将申明的信号连接起来即可)
sequence_detect01 u_sequence_detect01(.clk           (clk),.rst_n            (rst_n), .seq_in        (seq_in),.mismatch      (mismatch));endmodule

2.24仿真结果

Testbench中采用随机数来验证序列检测器的准确性,当时间来到705ns,随机数连续输出1001,mismatch在接收四位数字且在时钟上升沿进行信号翻转。

三、重叠检测与非重叠检测(检测序列1001)

数字IC序列检测中的重叠检测和非重叠检测是两种不同的检测方式。

  • 重叠检测是指在一个序列中,子序列之间会有部分重叠的情况,而重叠区域也需要进行检测,并被判定为单独的子序列。
  • 非重叠检测则是指在一个序列中,每个子序列之间没有重叠部分,因此只需要检测每个子序列本身是否满足特定的条件即可。

3.1重叠检测

3.11 重叠检测方法

题目:设计一个序列检测器,用来检测序列 1001,用状态机完成电路,可重复检测序列1001

第一步,分析状态机状态转移,分析如下:

  • IDLE: 初始状态,代表目前没有接收到满足要求的数据。
    seq_in = 1时,等于1001中的第一个数,进入S1状态;
    seq_in = 0时,保持状态。
  • S1:代表目前已经有了1个匹配的数据。
    seq_in = 0时,当前序列为10,等于1001中的前两个数,进入S2状态;
    seq_in = 1时,当前序列为11,不是1001的前两个数,但1是1001的第一个数,所以保持S1状态。
  • S2:代表目前已经有了2个匹配的数据。
    seq_in = 0时,当前序列为100,等于1001中的前三个数,进入S3状态;
    seq_in = 1时,当前序列为101,不是1001的前三个数,但1是1001的第一个数,所以进入S1状态。
  • S3:代表目前已经有了3个匹配的数据。
    seq_in = 1时,当前序列为1001,与要求序列匹配,进入S4状态;
    seq_in = 0时,当前序列为1000,与要求序列不配,0与初始状态匹配,所以进入IDLE状态。
  • S4:最终状态,代表目前已经得到了匹配的序列,输出信号翻转。
    seq_in = 1时,当前序列为10011,1与要求序列的第一个数匹配,所以进入S1状态;
    seq_in = 0时,当前序列为10010,10与要求的前两个数匹配,所以进入S2状态。

第二步:根据流程转换分析画出状态机的状态转移图,如下图所示:

第三步:根据状态机转移图用经典三段式(或者二段式)写出verilog代码

3.12verilog代码

//使用状态机设计检测“1001”的序列检测器
//可重叠检测序列“1001”
module sequence_detect03(input          clk ,input          rst_n,input         seq_in,output reg       mismatch        //检验序列是否匹配,匹配输出0,不匹配输出0);//采用独热码编译五个状态,初始IDLE状态为待机状态
//独热码相比二进制码和格雷码,方便电路设计判断、状态转移,且逻辑更简单
parameter       IDLE = 5'b00001;
parameter       S1   = 5'b00010;
parameter       S2   = 5'b00100;
parameter       S3   = 5'b01000;
parameter       S4   = 5'b10000;//定义两个寄存器表示状态机的目前状态和下一状态
reg [4:0] curr_state;
reg [4:0] next_state;//第一段使用时序逻辑描述状态转移
always@(posedge clk or negedge rst_n) beginif(!rst_n) begincurr_state <= IDLE;endelse begincurr_state <= next_state;end
end//第二段使用组合逻辑判断状态转移条件
always@(*) beginif(!rst_n) beginnext_state <= IDLE;endelse begincase(curr_state)IDLE  :next_state = seq_in?S1:IDLE;S1   :next_state = seq_in?S1:S2;S2      :next_state = seq_in?S1:S3;S3      :next_state = seq_in?S4:IDLE;S4    :next_state = seq_in?S1:S2;default:next_state = IDLE;       //养成良好代码风格,不能遗漏,防生成latch,也可以通过赋初值避免endcaseend
end//第三段描述状态输出(可以使用组合逻辑,也可以用时序逻辑)
//此处采用时序逻辑,同时也提供组合逻辑代码示例
always@(posedge clk or negedge rst_n) begin            //时序逻辑描述输出if(!rst_n) beginmismatch <= 1'b1;endelse if(next_state == S4) beginmismatch <= 1'b0;endelse beginmismatch <= 1'b1;end
end//assign mismatch = (curr_state ==S4) ? 1'b0 : 1'b1;    //组合逻辑描述输出endmodule

3.13Testbench

`timescale 1ns/1ps      //仿真时间单位1ns 仿真时间精度1ps
module sequence_detect03_tb();//信号申明
reg     clk;
reg     rst_n;
reg     seq_in;
wire    mismatch;//复位信号生成
//输入信号生成,输入信号为“1001001001001”
//时钟信号与复位信号赋初值
initial begin clk = 0;rst_n = 1;#5  rst_n = 0;#10 rst_n = 1;seq_in = 1;#10;seq_in = 0;#10;seq_in = 0;#10;seq_in = 1;#10;seq_in = 0;#10;seq_in = 0;#10;seq_in = 1;#10;seq_in = 0;#10;seq_in = 0;#10;seq_in = 1;#10;seq_in = 0;#10;seq_in = 0;#10;seq_in = 1;#10;
end //时钟信号生成
always #5 clk = ~clk;//模块实例化(将申明的信号连接起来即可)
sequence_detect03 u_sequence_detect03(.clk          (clk),.rst_n            (rst_n),.seq_in         (seq_in),.mismatch      (mismatch));endmodule

3.14仿真结果

输入序列1001001001001,根据可重复检测理论上可检测四次信号翻转,从仿真结果可以看到mismatch发生四次翻转,且第二次翻转的1001中的第一个1来自第一组1001中最后一个1,即发生重叠亦可检测。

3.2非重叠检测

3.21 非重叠检测方法

题目:设计一个序列检测器,用来检测序列 1001,用状态机完成电路,可重复检测序列1001

第一步,分析状态机状态转移,分析如下:

  • IDLE: 初始状态,代表目前没有接收到满足要求的数据。
    seq_in = 1时,等于1001中的第一个数,进入S1状态;
    seq_in = 0时,保持状态。
  • S1:代表目前已经有了1个匹配的数据。
    seq_in = 0时,当前序列为10,等于1001中的前两个数,进入S2状态;
    seq_in = 1时,当前序列为11,不是1001的前两个数,但1是1001的第一个数,所以保持S1状态。
  • S2:代表目前已经有了2个匹配的数据。
    seq_in = 0时,当前序列为100,等于1001中的前三个数,进入S3状态;
    seq_in = 1时,当前序列为101,不是1001的前三个数,但1是1001的第一个数,所以进入S1状态。
  • S3:代表目前已经有了3个匹配的数据。
    seq_in = 1时,当前序列为1001,与要求序列匹配,进入S4状态;
    seq_in = 0时,当前序列为1000,与要求序列不配,0与初始状态匹配,所以进入IDLE状态。
  • S4:最终状态,代表目前已经得到了匹配的序列,输出信号翻转。
    seq_in = 1时,当前序列为10011,1与要求序列的第一个数匹配,所以进入S1状态;
    seq_in = 0时,当前序列为10010,10与要求的前两个数匹配,但是要求非重叠检测,所以进入IDLE状态。

第二步:根据流程转换分析画出状态机的状态转移图,如下图所示

第三步:根据状态机转移图用经典三段式(或者二段式)写出verilog代码

3.22verilog代码

//使用状态机设计检测“1001”的序列检测器
//非重叠检测序列“1001”
module sequence_detect04(input          clk ,input          rst_n,input         seq_in,output reg       mismatch        //检验序列是否匹配,匹配输出0,不匹配输出0);//采用独热码编译五个状态,初始IDLE状态为待机状态
//独热码相比二进制码和格雷码,方便电路设计判断、状态转移,且逻辑更简单
parameter       IDLE = 5'b00001;
parameter       S1   = 5'b00010;
parameter       S2   = 5'b00100;
parameter       S3   = 5'b01000;
parameter       S4   = 5'b10000;//定义两个寄存器表示状态机的目前状态和下一状态
reg [4:0] curr_state;
reg [4:0] next_state;//第一段使用时序逻辑描述状态转移
always@(posedge clk or negedge rst_n) beginif(!rst_n) begincurr_state <= IDLE;endelse begincurr_state <= next_state;end
end//第二段使用组合逻辑判断状态转移条件
always@(*) beginif(!rst_n) beginnext_state <= IDLE;endelse begincase(curr_state)IDLE  :next_state = seq_in?S1:IDLE;S1   :next_state = seq_in?S1:S2;S2      :next_state = seq_in?S1:S3;S3      :next_state = seq_in?S4:IDLE;S4    :next_state = seq_in?S1:IDLE;default:next_state = IDLE;     //养成良好代码风格,不能遗漏,防生成latch,也可以通过赋初值避免endcaseend
end//第三段描述状态输出(可以使用组合逻辑,也可以用时序逻辑)
//此处采用时序逻辑,同时也提供组合逻辑代码示例
always@(posedge clk or negedge rst_n) begin            //时序逻辑描述输出if(!rst_n) beginmismatch <= 1'b1;endelse if(next_state == S4) beginmismatch <= 1'b0;endelse beginmismatch <= 1'b1;end
end//assign mismatch = (curr_state ==S4) ? 1'b0 : 1'b1;    //组合逻辑描述输出endmodule

3.23Testbench

`timescale 1ns/1ps      //仿真时间单位1ns 仿真时间精度1ps
module sequence_detect04_tb();//信号申明
reg     clk;
reg     rst_n;
reg     seq_in;
wire    mismatch;//复位信号生成
//输入信号生成,输入信号为“1001001001001”
//时钟信号与复位信号赋初值
initial begin clk = 0;rst_n = 1;#5  rst_n = 0;#10 rst_n = 1;seq_in = 1;#10;seq_in = 0;#10;seq_in = 0;#10;seq_in = 1;#10;seq_in = 0;#10;seq_in = 0;#10;seq_in = 1;#10;seq_in = 0;#10;seq_in = 0;#10;seq_in = 1;#10;seq_in = 0;#10;seq_in = 0;#10;seq_in = 1;#10;
end //时钟信号生成
always #5 clk = ~clk;//模块实例化(将申明的信号连接起来即可)
sequence_detect04 u_sequence_detect04(.clk          (clk),.rst_n            (rst_n),.seq_in         (seq_in),.mismatch      (mismatch));endmodule

3.24仿真结果

输入序列1001001001001,根据可不重叠检测理论上可检测两次信号翻转,从仿真结果可以看到mismatch发生两次翻转,且第二组的1001中的第一个1来自第一组1001中最后一个1,即发生重叠不可检测,所以相比于重叠检测少了第二次翻转(同理第四次翻转同样不可发生)。

四、总结

  • 状态机法序列检测器:一句话概括就是设计复杂、不易扩展但是检测模式灵活。相比使用移位寄存器来说的话,状态机稍稍复杂些,主要体现在不易扩展(重新检测不同序列需重新设计状态转移)和状态机的状态转移判断上;但是这样也给状态机带来了优点 ,就是灵活性好,可以灵活处理输入和输出,因为状态机具有可编程性。同时可以处理较为复杂的序列检测任务,因为状态机可以支持多个状态和转换。
  • 移位寄存器法:一句话概括就是设计简单、易于扩展但是检测模式呆板。相比于使用状态机来说的话,只能处理简单的序列检测任务,因为它没有状态机的多状态和转换功能。且输入和输出的灵活性差,因为寄存器序列移位寄存器是固定的,检测模式固定。但是优势很明显,就是设计和开发相对简单,只需要几个寄存器和逻辑门。且易于扩展,如果要检测另一个序列,只需要修改输入数据。
  • 模式选择:前言部分提到了检测模式包括重叠模式、连续模式、间隔模式等等。本文着重分析重叠与非重叠检测模式,结论是重叠检测模式可以用状态机和移位寄存器设计,非重叠检测模式可以用灵活的状态机设计;本文都是基于默认的连续检测模式设计,如果采用间隔检测模式,处理方法是添加指示信号使能端,可以用状态机和移位寄存器设计。因为设计逻辑简单,所以这部分省略,可自行参照第二部分代码设计。

综上所述,状态机序列检测器适用于处理较为复杂的序列检测任务,而寄存器序列移位寄存器适用于处理简单的序列检测任务。在实际应用中,应根据具体的需求来选择合适的序列检测方法。

不定期检查、补充、纠错,欢迎随时交流纠错
最后修改日期:2023.4.22

软件版本:

仿真软件:Modelsim 10.6c
绘图软件:亿图图示
描述语言:verilog

序列检测器(两种设计方法和四种检测模式|verilog代码|Testbench|仿真结果)相关推荐

  1. 薛斯通道的十二种买入法和四种卖出法

    薛斯通道包括两组通道指标,分别是长期大通道指标和短期小通道指标.股价实际上是被短期小通道包容着在长期大通道中上下运行.薛斯通道的大.小通道总共有四条轨道线:       内上轨(黄色线或紫色线)代表短 ...

  2. 四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果)

    移位寄存器总结 一.前言 二.简单循环左移/右移/双向移位寄存器 2.1 简单循环左移/右移/双向移位寄存器 2.2 verilog代码 2.3 Testbench 2.4 仿真结果 三.逻辑移位与算 ...

  3. 七种计数器总结(格雷码计数器、环形计数器、约翰逊计数器、FLSR、简易时分秒数字秒表|verilog代码|Testbench|仿真结果)

    七种计数器总结 一.可复位/置数计数器 1.1 可复位/置数计数器 1.2 Verilog代码 1.3 Testbench 1.4 仿真结果 二.双向(可加可减)计数器 2.1 双向(可加可减)计数器 ...

  4. 保卫资金链:资金链的五种死法和五种活法

    转载-保卫资金链:资金链的五种死法和五种活法 (2009-02-12 22:33:10)  哪家公司是现金流管理的标杆企业? "通用汽车.可惜它因为现金枯竭也要倒掉了."2008年 ...

  5. WindowsServer2012史记7-茴香豆的五种写法和四种”显示计算机”的方法

    消失的"计算机"? [这周九叔工作比较忙,还有其他琐事缠身,因此SystemCenter2012SP1系列的发布稍慢,抱歉了各位.] 众所周知,WindowsServer2012和 ...

  6. Java 三种模型,四种策略

    Java 三种模型,四种策略 (转) 混淆事务模型与事务策略是一个常见的错误.本系列关于 事务策略 的第二篇文章将概述 Java™ 平台支持的三种事务模型,并介绍使用这些模型的四种主要事务策略.通过使 ...

  7. php 去重_php求两数组交集的四种方法详解

    题目:给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1],nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = [4,9,5 ...

  8. Android启动Activity的两种方式与四种启动模式

    1.在一个Activity中调用startActivity()方法 2.在一个Activity中调用startActivityRequest()方法. 重写onActivityResult方法,用来接 ...

  9. java中保留两位小数的方法_Java中保留两位小数的四种方法实现实例

    在写程序的时候,有时候可能需要设置小数的位数,那么java中有哪几种保留小数位数的方法呢?本文以两位小数为例给出四种方法. package CodeJava_Leet; import java.mat ...

最新文章

  1. java 坐标系转换_入门-Python-GIS坐标转换
  2. 创建销售订单BAPI一些心得
  3. 模块化加载_Java9模块化的类加载机制实现剖析
  4. 576. 出界的路径数
  5. Java transient关键字(序列化避免被反序列化获取敏感信息)
  6. Android Studio 导入 AOSP 源码 1
  7. 再谈Weiphp公众平台开发——1、成语接龙插件
  8. 没信号也不怕?iPhone 14或将支持卫星网络连接呼救
  9. 南京理工大学计算机专业考研,2020南京理工大学计算机考研初试科目、参考书目、复试详情汇总...
  10. linux读取 dev tty0,linux命令: ls命令
  11. 可靠信道传输2.0 2.1 3.0
  12. 论文赏析[EACL17]K-best Iterative Viterbi Parsing(K-best迭代维特比句法分析)
  13. kali linux怎么入侵手机,Kali Linux-Metasploit入侵Android手机
  14. 【SpringBoot系列】自动装配原理
  15. 统一社会信用代码(营业执照)和组织机构代码校验规则
  16. Python如何优雅地可视化目标检测框
  17. Toward Fast, Flexible, and Robust Low-Light Image Enhancement(实现快速、灵活和稳健的弱光图像增强)CVPR2022
  18. 通过cluster reshard实现Redis集群缩减节点实战【详细步骤】
  19. AliAGC 自动增益控制算法:解决复杂场景下的音量问题
  20. win10电脑人脸识别库安装及使用

热门文章

  1. 有什么视频转文字软件?快把这些方法收好
  2. centos6.5用wget的方式安装jdk,出现gzip: stdin: not in gzip format
  3. ibm服务器进入系统后不断重启,IBM X3650M4开机进不去bios反复重启
  4. 【Supervisor的使用】
  5. 1Keyboard for mac使用教程
  6. 使用nssm将命令行启动的应用程序(.exe,.bat等)注册成windows后台服务
  7. 模拟登录淘宝,清空购物车
  8. Windows10 忘记PIN码无效,本地用户无法登陆,无法重置PIN密码
  9. CANOe系列讲解 - CANOe使用初探
  10. 深入理解Javascript作用域和作用域链