【学习笔记】7、存储器、复杂可编程器件和现场可编程门阵列

news2024/11/25 7:06:54
  • 可编程逻辑器件PLD
  • 复杂可编程逻辑器件CPLD
  • 现场可编程门阵列FPGA

7.1 只读存储器(ROM)

7.1.1 ROM的结构

  • ROM存储器 = 存储阵列 + 地址译码器 + 输出控制电路
    • 存储阵列,由许多存储单元(1bit)组成。每次读出一组数据,组=字。一个字的位数称为字长。
    • 地址译码器,将地址代码转换成 相应字单元的控制信号。从存储矩阵中选出指定的存储单元。将数据送到输出控制电路。
    • 输出控制电路,三态缓冲器。与系统数据总线连接。(驱动数据总线 或者 保持高阻状态)

在这里插入图片描述

  • 下图中,地址 A 1 A 0 = 01 A_1A_0=01 A1A0=01,地址译码器给出 Y 3 Y 2 Y 1 Y 0 = 1101 Y_3Y_2Y_1Y_0=1101 Y3Y2Y1Y0=1101
  • 字线, Y 1 Y_1 Y1是低电平。 Y 1 Y_1 Y1字线与位线交接处有 二极管的,二极管都会被导通。
  • 位线,在二极管导通后,会被拉低成0。位线的状态会被传给输出控制电路。
  • 最终输出 D 3 D 2 D 1 D 0 = 1101 D_3D_2D_1D_0=1101 D3D2D1D0=1101
  • 可以发现,读出的数值,取决于字线和位线之间是否有二极管连接。
    在这里插入图片描述
  • 存储器的容量(密度)= 字线数 * 位线数。(字数*字长)

7.1.2 二维译码

  • 译码电路,随着输入地址宽度的增加,译码电路的复杂度呈指数级增加。
  • 二维译码= 行译码+列译码
    • 地址为8位宽度时,一维译码电路的输出端 需要有 2 8 = 256 2^8=256 28=256个输出口。译码电路内部变的非常复杂。
    • 地址为8位宽度时,二维译码电路,行译码变成4位( 2 4 = 16 2^4=16 24=16个译码器输出口),列译码变成4位( 2 4 = 16 2^4=16 24=16个数据选择器输入口)

7.1.3 可编程ROM

  • 只读存储器ROM(Read-Only Memory)

    • 固定ROM(掩膜ROM)。出厂前已经写入存储阵列。
    • 可编程ROM(PROM) (Programmable ROM)
      • 一次可编程ROM(PROM)。金属熔丝二极管,一次性编程。
      • 光可擦除可编程存储器(EPROM)(Erasable PROM)。SIMOS管。透明石英盖板,紫外线或X射线照射擦除。不装透明石英盖板,不可擦除,OTP EPROM。
      • 电可擦除可编程存储器(EEPROM)(Electrical Erasable PROM)。Flotox Mos。
      • 闪烁存储器(FLASH Memory)。快闪叠栅MOS。

7.1.4 集成电路MOS

  • AT27C010,128Kx8,OTP EPROM。
  • C E ‾ \overline{CE} CE片选信号
  • O E ‾ \overline{OE} OE输出使能信号
  • P G M ‾ \overline{PGM} PGM编程信号

7.2 随机存取存储器(RAM)

  • 随机存取存储器RAM (Random Access Memory)
    • 静态随机存取存储器SRAM (Static RAM)(触发器存储,两个稳态)
      • 同步静态随机存取存储器SSRAM
    • 动态随机存取存储器DRAM (Dynamic RAM)(电容存储,需要定时刷新,否则会逐渐消散)

7.2.1 静态随机存取存储器

普通 SRAM(异步)

  • 普通(异步)SRAM = 存储阵列+地址译码+输入输出控制电路
    • 存储阵列的存储单元是 锁存器。只要不断电,SRAM可以永久保存数据。
    • 大多数SRAM的读周期和写周期是相同的。10纳秒左右。

在这里插入图片描述

FIFO SRAM

  • FIFO SRAM。数据输入/输出分开,无地址输入端(改成:读地址指针计数器+写地址指针计数器)。
    • 输出信号:空,半满,满
    • FIFO SRAM 常用作 “数据缓冲器”。适合长时间连续高速数据采集。
      在这里插入图片描述

同步静态随机存取存储器 SSRAM

  • SSRAM:基于SRAM的高速RAM。
    • 需要时钟脉冲输入,在节拍控制下完成读写。

    • 地址寄存器。寄存地址线上的地址。

    • 输入寄存器。寄存数据线上的数据。

    • 读写控制逻辑电路。

    • 丛发(burst 快速连续发生)控制逻辑电路。减少外部总线的占用时间,提高效率。

      • 丛发控制计数器是2位的计数器。叠加在输入的地址之上。地址最低2位 b i t [ 1 : 0 ] bit[1:0] bit[1:0]从00变化到11,超过11后,会回到00。
      • 输入一个地址,可自动连线读取/写入以此向后4个地址的数据。不需要外部输入这些连续的地址。
    • 速度快于SRAM。

    • 应用:超高速缓冲存储器Cache。
      在这里插入图片描述

SDR
  • 单倍速率(Single Data Rate)SDR SRAM
    • 就是前文的 SSRAM。只在时钟上升沿 传输数据,共用读写数据总线(读写不能同时)。
DDR
  • 双倍速率(Double Data Rate)DDR SRAM
    • 在SSRAM的基础上,在时钟上升沿和下降沿 都进行数据传输。依然共用读写数据总线(读写不能同时)。
    • 后续升级改善,有DDR Ⅱ。
QDR
  • 四倍速率(Quad Data Rate)QDR SRAM
    • 在SSRAM的基础上,在时钟上升沿和下降沿 都进行数据传输。提供读数据总线和写数据总线(读写同时)。
    • 后续升级改善,有QDR Ⅱ。
  • 重要指标,容量,时钟工作频率。

7.2.3 动态随机存取存储器

DRAM的基本结构

  • SRAM的存储单元,由锁存器(或者触发器)构成。一个锁存器的结构就很复杂,需要多个MOS管。占用较大的体积。SRAM的集成度很难提高。
  • DRAM的存储单元,由一个MOS管和一个电容器构成。体积小。
    • 电容存储电荷,高电平1,低电平0。
    • 电容器存在漏电流,需要定期补充电荷。称为“刷新”或者再生。

在这里插入图片描述

  • DRAM的集成度很高,容量大。需要的地址线也多。
  • DRAM大都采用行地址、列地址分时送入的方法。
    • 1M字大小的空间( 2 20 = 1048576 字 2^{20}=1048576字 220=1048576),需要20根地址线。当采用分时传入行列地址时,只需要10根地址线。
    • 行地址选通信号 R A S ‾ \overline{RAS} RAS
    • 列地址选通信号 C A S ‾ \overline{CAS} CAS

DRAM的操作

  • DRAM的操作较为复杂:
    • 读写操作

      • (1) R A S ‾ \overline{RAS} RAS拉低,送入行地址,再拉高。
      • (2) C A S ‾ \overline{CAS} CAS拉低,送入列地址,再拉高。
      • (3) W E ‾ \overline{WE} WE拉低,使能读写。
      • (4) O E ‾ \overline{OE} OE拉低,读操作时,输出使能。
        在这里插入图片描述
    • 页模式操作

      • 同一行的所有列构成的存储单元。
      • 选定行地址之后,不用再改变行地址。 R A S ‾ \overline{RAS} RAS始终拉低。
        在这里插入图片描述
    • R A S ‾ \overline{RAS} RAS只刷新操作

      • 刷新地址由外部地址计数器提供
      • 只刷新 行地址 指定的行的所有存储单元。
      • 列地址的 C A S ‾ \overline{CAS} CAS保持高电平
      • 不进行读写操作。
      • 每行刷新间隔15.6us。刷新操作小于100ns。
        在这里插入图片描述

同步动态随机存取存储器 SDRAM

SDR
  • 同步DRAM(SDRAM)
DDR
  • 双倍数据速率DRAM (DDR SDRAM),目前电脑使用的内存条即使用的这个技术。
QDR
  • 四倍数据传输速率DRAM (QDR SDRAM)

7.2.4 存储容量的扩展

字长(位线数)的扩展

  • 地址线宽度不变
  • 每个地址对应的数据位宽,扩大
    在这里插入图片描述

字数(字线数)的扩展

  • 地址线宽度变大,(增加地址译码器)
  • 每个地址对应的数据位宽不变
    在这里插入图片描述

7.3 复杂可编程逻辑器件(CPLD)

  • 简单PLD:PAL、GAL等
  • 复杂PLD:CPLD
    • 早期使用EPROM编程技术
    • 后来使用EEPROM和FLASH编程技术,支持“在系统可编程(ISP)”
  • 在系统可编程ISP : 未编程的ISP器件,可以直接焊接在电路中,可通过计算机的数据传输端口和专用的编程电缆对ISP器件进行多次编程。
  • 编程电路和升压电路已经集成在ISP器件内部。

7.3.1 CPLD的结构

  • 更多的 输入信号

  • 更多的 乘积单元

  • 更多的 宏单元

  • CPLD中的逻辑块:相当于一个GAL器件(参考6.7小节)。与或阵列+OLMC
    在这里插入图片描述

  • CPLD的结构如下:
    在这里插入图片描述

7.3.2 CPLD的编程简介

  • CPLD的内部可编程单元,用于CPLD的各种逻辑功能的实现
  • CPLD的内部可编程单元,大都采用EEPROM或者FLASH编程技术
  • 绝大多数CPLD支持ISP。
  • Altera公司的CPLD
    • MAX7000S(5V)
    • MAX7000A(3.3V)
    • MAX7000B(2.5V)
  • Xilinx公司的CPLD
    • XC9500
  • Lattice公司的CPLD
  • 不同公司的ISP接口不完全相同,但都支持JTAG标准编程。
    在这里插入图片描述

7.4 现场可编程门阵列

  • CPLD使用“与或”阵列实现逻辑函数
  • FPGA使用查找表LUT实现逻辑函数。
  • FPGA中的LUT和触发器的数量非常多,能够实现更大规模,更复杂的逻辑电路

7.4.1 FPGA的查找表LUT和数据选择器MUX

  • FPGA中:
    • 组合逻辑基本电路是LUT和数据选择器。
    • 时序逻辑基本电路是触发器
  • (1)LUT(查找表LookUpTable)本质是一个SRAM。
    • 普通(异步)SRAM = 存储阵列+地址译码+输入输出控制电路
    • 可以理解为,根据地址An…A0,在SRAM中读出数据Dm…D0
    • 大多LUT是 : 4输入变量,1输出结果

在这里插入图片描述

  • (2)数据选择器(参考4.4.3)
    在这里插入图片描述

  • (3)扩展LUT逻辑函数的输入变量个数,通过数据选择器MUX实现LUT的级联。

    • 数据选择器级联,LUT输出接在MUX上,因而LUT也实现了级联。
      在这里插入图片描述
  • HDL语言描述一个逻辑电路,FPGA开发软件算出所有可能结果(真值表),写入LUT(SRAM)

    • LUT因而具有逻辑功能 F = f ( A , B , C , D ) F=f(A,B,C,D) F=f(A,B,C,D)
  • FPGA上电之后,从外部PROM中读入编程数据,写入各种可编程单元中(包括查找表LUT)。

7.4.2 FPGA的结构

可配置逻辑块CLB

  • 可配置逻辑块CLB,内部由多个微片Slice 组成
  • 一个微片Slice 由两个逻辑单元LC 组成
  • 一个逻辑单元LC(logic cell),由查找表LUT,进位及控制逻辑,D触发器构成。
    在这里插入图片描述

输入输出模块IOB

  • 一个IOB对应一个封装引脚
  • IOB可以配置为引脚输入,输出,双向。
  • VCCO是输出VCC电压
  • VREF是输入参考电压
  • 输出信号O,可经过数据选择器,再到输出缓冲器。也可以直接到输出缓冲器
  • 输入信号I,来自输出缓冲器
  • 多个IOB组成一个Bank,一般有8个bank

在这里插入图片描述

可编程布线资源

  • 局部布线资源:进出CLB的连线资源

    • CLB到通用布线矩阵GRM
    • CLB到自己,输出到输入,高速反馈连接
    • CLB到相邻CLB,直接快速连接,避免了通过GRM产生的延时。
  • 通用布线资源:通用布线矩阵GRM+与之连线

    • 是FPGA主要的内部资源
    • GRM是 行线资源 与 列线资源 互联 的 开关矩阵
  • I/O布线资源:CLB与IO块外围之间,附加的布线资源,“万能环” VersaRing

    • 实现引脚的交换和锁定
    • 使引脚的位置变动和内部逻辑无关
  • 专用布线资源

    • 横向片内三态总线
    • 纵向进位链
  • 全局布线资源

    • 分配时钟信号
    • 其他贯穿整个器件的高扇出信号
    • 分为主次两级
      • 主全局布线资源,与高扇出时钟信号输入引脚,构成4个专用全局时钟网络,驱动CLB,IOB,RAM的时钟引脚。
      • 次全局布线资源,24根干线,12根穿越芯片顶部,12根穿越芯片底部,不受时钟引脚限制,使用灵活
        在这里插入图片描述

7.4.3 FPGA编程简介

配置数据

  • 配置数据(编程数据):FPGA的存储单元中的数据(用于配置CLB,IOB,布线资源)。
  • 不同规模的FPGA,配置数据量不同。
  • 配置数据由FPGA开发软件生成。
    在这里插入图片描述

装载配置数据的引脚

  • 专用引脚
引脚描述
M0,M1,M2输入,用于指定配置模式
CCLK输入或者输出,配置时钟。(1)从配置模式时,为输入。(2)主配置模式时,为输出。(3)配置完成后为输入,处于"无关x"状态
PROGRAM输入,低电平时,开始配置过程
DONE双向,由低到高表示配置装载完成。(1)输入低电平,可以推迟启动工作。(2)输出为开漏。
V C C I N T V_{CCINT} VCCINT输入,内部核心逻辑电源引脚
V C O O V_{COO} VCOO输入,IO输出驱动电源引脚
  • 非专用引脚
引脚描述
INIT双向(开漏),(1)低电平时,表示配置存储单元 正在清零。(2)结束后,可作为用户IO。
BUSY/DOUT输出,(1)从并模式下,busy控制装载速率。(2)串行模式下,多个器件链式配置,DOUT作为向下一级传递数据流的出口。(3)结束后,可作为用户IO。
D0/DIN,D1,D2,D3,D4,D5,D6,D7输入或者输出,(1)从并模式下,配置数据输入。(2)串行模式下,DIN为输入。(3)结束后,可作为用户IO。
WRITE输入,(1)从并模式下,写使能,低电平有效。(2)结束后,可作为用户IO。
CS输入,(1)从并模式下,片选信号,低电平有效。(2)结束后,可作为用户IO。
  • M 2 M 1 = 00 M_2M_1=00 M2M1=00, 配置模式是“主 串”,CCLK输出,数据宽1位,DOUT串行输出, M 0 = 1 M_0=1 M0=1时,相关引脚上拉

  • M 2 M 1 = 11 M_2M_1=11 M2M1=11, 配置模式是“从 串”,CCLK输入,数据宽1位,DOUT串行输出, M 0 = 0 M_0=0 M0=0时,相关引脚上拉

  • M 2 M 1 = 01 M_2M_1=01 M2M1=01, 配置模式是“从 并”,CCLK输入,数据宽8位,DOUT不输出, M 0 = 0 M_0=0 M0=0时,相关引脚上拉

  • 主串模式电路,PROGRAM 由外部控制,DONE起始低电平用于存储芯片的片选信号,FPGA的CCLK输出道存储芯片的CLK。
    在这里插入图片描述

7.5 EDA技术和可编程器件的例题

例1 定时器

  • 设计一个定时器,定时时间为24s,递减计时,每隔1s定时器减1。
  • 2个外部控制开关,复位,暂停
复位nRst暂停nPAUSE功能
0x定时器复位,置初值24
11定时器开始计时
10定时器暂停计时
  • 定时器减到0后,定时器保持不变,同时发出警报信号。
  • 输入时钟脉冲的频率为1Hz,输出为8421BCD码。

设计

  • HDL描述分为3个部分:
    • 第一部分,定义输入信号(复位nRST,暂停nPAUSE,时钟CP),定义输出(定时器的十位,定时器的个位),报警Alarm。
    • 第二部分,连续复制语句assign(定时器减到0时,报警Alarm=1)。
    • 第三部分,时序逻辑电路,过程块always(计数器计数,处理操作,十位和个位按照8421BCD码方式递减计数)。
  • 打篮球的规则,进攻方只能进攻24秒,这和本定时器的功能设计是一致的。本模块的命令是篮球24秒。
module basketball24(TimerH,TimerL,Alarm,nRST,nPAUSE,CP);
    input nRST,nPAUSE,CP;
    wire nRST,nPAUSE,CP;
    output [3:0] TimerH,TimerL;
    reg    [3:0] TimerH,TimerL;
    output Alarm;
    //输出报警信号
    assign Alarm = ({TimerH,TimerL}==8'h00)&(nRST == 1'b1);
    //计数处理
    always @(posedge CP or negedge nRST or negedge nPAUSE)//异步复位,异步暂停
        begin
            if(~nRST)
                {TimerH,TimerL} <= 8'h24;//复位初值24
            else if(~nPAUSE)
                {TimerH,TimerL} <= {TimerH,TimerL};//暂停
            else if({TimerH,TimerL} == 8'h00)//定时时间到,保持0不变
                {TimerH,TimerL} <= {TimerH,TimerL};
            else if(TimerL==4'h0)
                begin 
                   TimerH <= TimerH - 1'b1; 
                   TimerL <= 4'h9;
                end
            else
                begin
                    TimerH <= TimerH;
                    TimerL <= TimerL -1b'1;
                end
        end
endmodule

例2 时分秒电子钟

  • 按照24小时制计时
  • 输出时分秒的8421BCD码
  • 计时输入脉冲频率为1Hz
  • 具有分钟,小时的校正功能,校正输入脉冲频率为1Hz
  • 采用分层设计。

在这里插入图片描述

设计

在这里插入图片描述

  • 顶层模块(top_clock.v)
    • 分钟计数分为 十位 和 个位。
      在这里插入图片描述
module top_clock(Hour,Minute,Second,CP,nCR,EN,Adj_Min,Adj_Hour);
    input CP,nCR,EN,Adj_Min,Adj_Hour;
    output [7:0] Hour,Minute,Second;
    wire [7:0] Hour,Minute,Second;
   supply1 Vdd;
   wire MinL_EN,MinH_EN,HOur_EN;//定义中间变量

   //60秒计数器
   counter10  U1(Second[3:0],nCR,EN,CP);
   counter6   U2(Second[7:4],nCR,(Second[3:0] == 4'h9),CP);
   
   //Adj_Min = 1时,校准分钟,立即使能分钟的个位计数,下一个时钟,分钟个位加一。
   //Adj_Min = 0时,当秒数为59时,使能分钟的个位计数,下一个时钟(60s),分钟个位加一。
   assign MinL_EN = Adj_Min? Vdd : (Second==8'h59); 

   //Adj_Min = 1 且分钟的个位数为9时,立即使能分钟的十位计数,下一个时钟,分钟十位加一。
   //或者,分钟的个位计数到了9,秒数计到了59,使能分钟的十位计数,下一个时钟,分钟十位加一。
   assign MinH_EN = (Adj_Min && (Minute[3:0] == 4'h9))  || (Minute[3:0] == 4'h9) && (Second == 8'h59);

   //60分钟计数器
   counter10   U3(Minute[3:0],nCR,MinL_EN,CP); //分计数器个数
   counter6    U4(Minute[7:4],nCR,MinH_EN,CP); //分计数器十位

   //Adj_hour = 1时,校准小时,立即使能小时的个位计数,下一个时钟,小时个位加一。
   //Adj_hour = 0时,当分钟数为59,秒数为59时,使能小时的个位计数,下一个时钟(60min),小时个位加一。
   assign Hour_EN = Adj_Hour ? Vdd : (Minute == 8'h59) && (Second == 8'h59);

   //24小时计数器
   counter24  U5(Hour[7:4],Hour[3:0],nCR,Hour_EN,CP);//小时计数器 十位 个位
endmodule
  • counter10.v BCD 0-9
module counter10(Q,nCR,EN,CP);
    input CP,nCR,EN;
    output [3:0] Q;
    reg [3:0] Q;
    always @ (posedge CP or negedge nCR)
        begin
            if(~CR) Q <= 4'b0000; //异步清零
            else if(~EN) Q <= Q;  //暂停计数
            else if(Q == 4'b1001) Q <= 4'b0000;
            else Q <= Q + 1'b1; //计数+1
        end
endmodule
  • counter6.v BCD 0-5
module counter6(Q,nCR,EN,CP);
    input CP,nCR,EN;
    output [3:0] Q;
    reg [3:0] Q;
    always @ (posedge CP or negedge nCR)
        begin
            if(~CR) Q <= 4'b0000; //异步清零
            else if(~EN) Q <= Q;  //暂停计数
            else if(Q == 4'b0101) Q <= 4'b0000;
            else Q <= Q + 1'b1; //计数+1
        end
endmodule
  • counter24.v BCD 0-23
module counter23(CntH,CntL,nCR,EN,CP);
    input CP,nCR,EN;
    output [3:0] CntH,CntL;
    reg [3:0] CntH,CntL;
    reg CO;

    always @ (posedge CP or negedge nCR)
        begin
             if(~nCR) {CntH,CntL} <= 8'h00;
             else if(~EN) {CntH,CntL} <= {CntH,CntL};
             else if((CntH>2) || (CntL>9) ||( (CntH == 2) && (CntL >=3)) {CntH,CntL} <= 8'h00;
             else if((CntH == 2) && (CntL < 3)) begin CntH <= CntH; CntL <= CntL + 1'b1; end
             else if(CntL == 9) begin CntH <= CntH+1'b1; CntL <= 4'b0000; end
             else begin CntH <= CntH; CntL <= CntL + 1'b1; end
        end
endmodule

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

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

相关文章

HTML实现俄罗斯方块

本篇文章主要讲使用HTML、CSS和JavaScript实现一个简单的俄罗斯方块游戏&#xff0c;包含基本的游戏逻辑、行消除功能以及暂停和继续游戏的控制。 使用工具 本篇文章有用到ChatGPT-4o代码纠错&#xff0c;国内免翻且稳定&#xff0c;感兴趣的大佬试试。 传送门&#xff1a;36…

认知杂谈20

今天分享 有人说的一段争议性的话 I I 程序员的高薪舒适圈&#xff1a;光鲜背后的挑战 一说起程序员这个职业&#xff0c;很多人马上就会想到高薪&#xff0c;觉得他们过着白领的生活。确实&#xff0c;程序员一般都能拿到比好多行业都高的工资&#xff0c;工作时间也比较稳…

谷粒商城实战笔记-232-商城业务-认证服务-框架效果演示-xxl-sso-徐雪里

文章目录 一&#xff0c;膜拜大神许雪里二&#xff0c;用开源框架xxl-sso演示单点登录1&#xff0c;我是老板&#xff0c;我有三个网站2&#xff0c;配置域名3&#xff0c;下载xxl-sso代码4&#xff0c;服务规划5&#xff0c;配置修改5.1 xxl-sso-server redis配置修改5.1 xxl-…

使用FModel提取黑神话悟空的资产

使用FModel提取黑神话悟空的资产 前言设置效果展示闲聊可能遇到的问题没有相应的UE引擎版本选项 前言 黑神话悟空昨天上线了&#xff0c;解个包looklook。 本文内容比较简洁&#xff0c;仅介绍解包黑神话所需的专项配置&#xff0c;关于FModel的基础使用流程&#xff0c;请见…

Python3学习(一)

目录 Python版本 标识符 保留字 注释 缩进 多行语句 同一行显示多条语句 import 与 from...import 变量 数据类型 Number&#xff08;数字&#xff09; 数字类型 数值运算 String&#xff08;字符串&#xff09; bool&#xff08;布尔类型) List&#xff08;列…

废品回收小程序,开启上门回收模式

废品回收一直是一个热门行业&#xff0c;市场发展空间巨大。随着科技的发展&#xff0c;废品回收也与时俱进&#xff0c;进行了转型&#xff01;“互联网上门回收”的新模式&#xff0c;运用信息技术的力量&#xff0c;让废品回收变得更加高效便捷&#xff0c;同时也为回收行业…

秋招红队面试经验分享

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》 《Java代码审计》 《Web安全…

【JS|第25期】探索HTTP POST请求:请求体的演变与应用

日期&#xff1a;2024年8月16日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

OpenLayers3, 缩放、平移、复位操作

文章目录 一、前言二、代码示例 一、前言 本文基于OpenLayers3实现地图缩放、平移和复位操作 二、代码示例 <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htm…

【YOLO5 项目实战】(4)红外目标检测

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO5 项目实战】&#xff08;1&#xff09;YOLO5 环境配置与测试 【YOLO5 项目实战】&#xff08;2&#xff09;使用自己的数据集训练目标检测模型 【YOLO5 项目实战】&#xff08;3&#xff09;P…

12 程序控制语句:循环控制(while、do-while、for、多重嵌套循环、死循环)

目录 1 while 循环 1.1 基本语法 1.2 流程图 1.3 计数循环 1.3.1 实现原则 1.3.2 案例&#xff1a;循环输出语句 1.3.3 案例&#xff1a;循环输出数字 7~15 1.3.4 案例&#xff1a;倒序输出数字 56 ~ 43 1.3.5 案例&#xff1a;输出 10&#xff08;包括 10&…

SAP 预扣税配置步骤文档【Withholding Tax]

1. 配置预扣税的基本概念 预扣税是对某些支付进行扣除的税&#xff0c;可能适用于各种财务交易&#xff08;例如&#xff0c;供应商支付、股息支付等&#xff09;。预扣税通常包括几种类型&#xff0c;如个人所得税、企业所得税和其他税务种类。 2. 配置步骤 以下是一般的预…

Notion使用详解

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 Notion是一款集笔记、任务管理、知识库、文档协作等多功能于一体的生产力工具。其灵活性和可定制性使得它在个人和团队协作中都非常受欢迎。本教程将详细介绍如何使用Notion的基本功能&#xff0c;帮助你快速上手并充分…

Open3D mesh 模型切片

目录 一、概述 1.1简述 1.2实现步骤 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始mesh 3.2切片后的mesh Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&#xff09;-CSDN博客 一…

Python高光谱遥感数据处理与机器学习深度应用

高光谱遥感信息对于我们认识世界具有重要意义。尽管大部分物质在人眼中看似无异&#xff0c;然而高光谱遥感的观察下&#xff0c;它们呈现出独特的"光谱特征"。这种能够窥见事物的"本质"能力具备着革命性的潜能&#xff0c;对精准农业、地球观测、艺术分析…

php与nginx的高速缓存

memcache PHP的加速模块 本部分是对php的内存加速的配置 1. memcache安装 609 phpize # 生成./configure文件610 yum install -y autoconf # 安装包611 ls612 phpize613 ls614 ./configure615 make && make install616 ls /usr/local/php/lib/php/extensions…

网络UDP报文详细解析

目录 一、简介二、详细介绍三、其他相关链接1、TCP报文段的详细图总结2、TCP三次握手和四次挥手详解3、socket通信原理及相关函数详细总结4、网络包IP首部详细解析 一、简介 本文主要介绍UDP报文格式。 二、详细介绍 UDP是一种无连接、不可靠的用户数据报协议&#xff0c;其…

【软件文档大全】软件开发常用文档(程序开发过程-实施-运维-安全-交付-资质-标书)

软件项目常用文档有哪些&#xff1f; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划&#xff0c;用户需求调查单&#xff0c;用户需求说明书&#xff0c;概要设计说明书&#xff0c;技术解决方案…

2.pandas--读取文件夹中所有excel文件进行合并

文章目录 代码对应的本地文件文件夹目录三个文件夹中的内容test01.xlsxtest02.xlsxtest03.xlsx 三个文件合并后得到merge.xlsx文件文件内容 生成result.xlsx文件内容 代码 import glob import pandas as pddf_merge pd.DataFrame() # 创建一个空的DataFramefolder_path &qu…

接口隔离原则(Interface Segregation Principle

接口隔离原则&#xff08;Interface Segregation Principle&#xff09; 基本介绍 1&#xff09;客户端不应该依赖它不需要的接口&#xff0c;即一个类对另一个类的依赖应该建立在最小的接口上2&#xff09;先看一张图 3&#xff09;类 A 通过接口 Interface1 依赖类 B&#…