AD7606工作原理以及FPGA控制验证(串行和并行模式)

news2024/11/28 9:46:19

文章目录

  • 一、AD7606介绍
  • 二、AD7606采集原理
    • 2.1 AD7606功能框图
    • 2.2 AD7606管脚说明
  • 三、AD7606并行模式时序分析以及实现
    • 3.1 并行模式时序图
    • 3.2 并行模式时序要求
    • 3.3 代码编写
    • 3.4 仿真观察
  • 四、AD7606串行模式时序分析以及实现
    • 4.1 串行模式时序图
    • 4.2 串行模式时序要求
    • 4.3 代码编写
    • 4.4 添加仿真模型以及观察


一、AD7606介绍

  AD7606有三种,分别有8个、6个或4个通道,采样深度有16位(即最小采样的电压为5V/(2^16) = 0,00007V,实际上达不到);采用5V单电源供电,可以处理±10V 和±5V 真双极性输入信号;具有内部的2.5V基准电压;同时所有通道均能以高达200kSPS的吞吐速率采样,提供过采样功能以及串行输出和并行输出两种模式;广泛用于低速采集场景。

二、AD7606采集原理

  下图为AD7606-8的芯片封装图:
在这里插入图片描述

2.1 AD7606功能框图

  下图为AD7606-8内部的功能框图:

在这里插入图片描述
  ADC工作原理:采样:对模拟值进行采样 -> 保持:将开关保持一段时间以将电容充电到采集电压值 -> 量化 编码:将电压值转化为数字量。

2.2 AD7606管脚说明

  7606的管脚很多,我们选一些重要的管脚来说明:

管脚名称 描述
AVcc 模拟电压源,4.75V至5.25V
AGNG 接地
OS[2:0] 过采样模式引脚。逻辑输入。这些输入用来选择过采样倍率。OS2为MSB控制位,OS0则为LSB控制位。
PAR(低电平有效)/SER/BYTE SEL并行/串行/字节接口选择输入。如果此引脚与逻辑低电平相连,则选择并行接口。如果此引脚与逻辑高电平相连,则选择串行接口
RANG模拟输入范围选择输入,如果此引脚与逻辑高电平相连,则所有通道的模拟输入范围为+10V。如果此引脚与逻辑低电平相连,则所有通道的模拟输入范围为+5 V
CONVST A / CONVST B启动转换信号,CONVST A启动通道1,2,3,4;CONVST B启动通道5,6,7,8
RESET复 位 输 入 。 当设 置 为 逻 辑 高 电 平 时 , RESET上 升 沿 复 位;RESET高脉冲宽度典型值为50ns。如果在转换期间施加RESET脉冲,转换将中断。如果在读取期间施加RESET脉冲, 输出寄存器的内容将复位为0。
RD(低电平有效)/SCIK选择并行接口时为并行数据读取控制输入(RD_)/选择串行接口时为串行时钟输入(SCLK)。在并行模式下, 如果CS_和RD_均处于逻辑低电平, 则会启用输出总线。在串行模式下, 此引脚用作数据传输的串行时钟输入。CS_下降沿使数据输出线路DoutA和DoutB脱离三态, 并逐个输出转换结果的MSB。SCLK上升沿将随后的所有数据位逐个送至串行数据输出DoutA和DoutB。
CS片选。此低电平有效。在并行模式下, 如果CS和RD均处于逻辑低电平, 则会使能输出总线DB[15:0]。在串行模式下, CS使能串行数据帧传输, 并逐个输出串行输出数据的最高有效位(MSB)。
BUSY输出繁忙信号。CONVST A和CONVST B均达到上升沿之后, 此引脚变为逻辑高电平, 表示转换过程已开始。BUSY输出保持高电平, 直到所有通道的转换过程完成为止。BUSY下降沿表示转换数据正被锁存至输出数据寄存器, 经过时间t₄之后便可供读取。在BUSY为高电平时执行的数据读取操作应当在BUSY下降沿之前完成。当BUSY信号为高电平时, CONVST A或CONVSTB的上升沿不起作用。
FRSTDATAFRSTDATA输出信号指示何时在并行、字节或串行接口上回读第一通道V1。在并行模式下, 与V1结果相对应的RD下降沿随后将FRSTDATA引脚设为高电平, 表示输出数据总线可以提供V1的结果。在RD的下一个下降沿之后, FRSTDATA输出恢复逻辑低电平。在串行模式下, FRSTDATA在CS下降沿变为高电平, 因为此时将在DoutA上输出V1的MSB。在CS下降沿之后的第16个SCLK下降沿, 它恢复低电平。
DB0 - DB15读数据总线

  OS[2:0]过采样模式选择

OS2 ,OS1,OS0 说明 最大速率
000 无过采样 200Ksps
001 2倍过采样 100Ksps
010 4倍过采样 50Ksps
011 8倍过采样 25Ksps
100 16倍过采样 12.5Ksps
101 32倍过采样 6.25Ksps
110 64倍过采样 3.125Ksps
111 无效

三、AD7606并行模式时序分析以及实现

3.1 并行模式时序图

在这里插入图片描述
在这里插入图片描述

3.2 并行模式时序要求

时间名称 时间长度 描述
tRESET 50ns 高电平复位最小宽度
t2 25ns CONVST低电平脉冲最短宽度
t7 25ns RESET低电平到CONVST高电平之间最短宽度
t5 0.5ms CONVSTA和CONVSTB上升沿之间的最短延迟时间
t1 40ns CONVST上升沿到BUSY上升沿之间的最长延迟时间
tCYCLE 5us CONVST上升沿到CONVST上升沿之间的最长延迟时间
t3 25ns CONVST高电平最短时间
t4 0ns BUSY下降沿到CS下降沿最短时间
t8 0ns cs下降沿和RD下降沿最短时间
t10 16/21/25/32ns RD低电平脉冲宽度,根据Vdrive电平判断
t11 15ns RD低电平脉冲宽度最小值
t9 0ns RD上升沿到CS上升沿的最小时间
tCONV 3.45us 转换时间最低3.45us,最高4.15us

3.3 代码编写

  输入可以用一个开始信号控制启动转换:

module ad7606_ctrl_par(
    input                                               i_clk           ,   // 输入系统时钟,50m
    input                                               i_rst           ,   
    input                                               i_start         ,   // 7606开始转换控制信号  
	                                   
    input           [15:0]                              i_ad_data       ,   // ad7606 采样数据
    input                                               i_ad_busy       ,   // ad7606 忙标志位 
    input                                               i_first_data    ,   // ad7606 第一个数据标志位 	    
    output          [ 2:0]                              o_ad_os         ,   // ad7606 过采样倍率选择
    output                                              o_ad_cs         ,   // ad7606 AD cs
    output                                              o_ad_rd         ,   // ad7606 AD data read
    output                                              o_ad_reset      ,   // ad7606 AD reset
    output                                              o_ad_convstA    ,   // ad7606 AD convert startA
    output                                              o_ad_convstB    ,   // ad7606 AD convert startB
                                    
    output          [15:0]                              o_ad_ch1        ,   // AD第1通道的数据
    output                                              o_ad_ch1_valid  ,   // AD第1通道的数据有效信号
    output          [15:0]                              o_ad_ch2        ,   // AD第2通道的数据
    output                                              o_ad_ch2_valid  ,   // AD第2通道的数据有效信号
    output          [15:0]                              o_ad_ch3        ,   // AD第3通道的数据
    output                                              o_ad_ch3_valid  ,   // AD第3通道的数据有效信号
    output          [15:0]                              o_ad_ch4        ,   // AD第4通道的数据
    output                                              o_ad_ch4_valid  ,   // AD第4通道的数据有效信号
    output          [15:0]                              o_ad_ch5        ,   // AD第5通道的数据
    output                                              o_ad_ch5_valid  ,   // AD第5通道的数据有效信号
    output          [15:0]                              o_ad_ch6        ,   // AD第6通道的数据
    output                                              o_ad_ch6_valid  ,   // AD第6通道的数据有效信号
    output          [15:0]                              o_ad_ch7        ,   // AD第7通道的数据
    output                                              o_ad_ch7_valid  ,   // AD第7通道的数据有效信号
    output          [15:0]                              o_ad_ch8        ,   // AD第8通道的数据	
    output                                              o_ad_ch8_valid      // AD第8通道的数据有效信号
);

  整个操作可以用一个状态机来控制,状态定义如下:

/***************parameter*************/
localparam                                          RESET       = 4'd0 ; //复位状态
localparam                                          AD_CONSVT   = 4'd1 ; //开启转换
localparam                                          BUSY        = 4'd2 ; //等待busy
localparam                                          READ_CH1    = 4'd3 ; //读通道1数据
localparam                                          READ_CH2    = 4'd4 ; //读通道2数据
localparam                                          READ_CH3    = 4'd5 ; //读通道3数据
localparam                                          READ_CH4    = 4'd6 ; //读通道4数据
localparam                                          READ_CH5    = 4'd7 ; //读通道5数据
localparam                                          READ_CH6    = 4'd8 ; //读通道6数据
localparam                                          READ_CH7    = 4'd9 ; //读通道7数据
localparam                                          READ_CH8    = 4'd10; //读通道8数据
localparam                                          READ_DONE   = 4'd11; //读完成

  整个控制代码比较简单,这里就不全放出来了,直接看仿真:

3.4 仿真观察

  仿真给出时钟复位即可,busy信号一直给0,data固定为d‘11,我们来看各信号的时序是否满足手册要求,仿真代码如下:

`timescale 1ns / 1ps

module tb_ad7606_ctrl_par();


reg i_clk;
reg i_rst;

initial begin
    i_clk =0;
    i_rst = 1;
    #250;
    i_rst = 0;
end

always #10 i_clk = ~i_clk;

ad7606_ctrl_par u_ad7606_ctrl_par(
    .i_clk           ( i_clk     ),
    .i_rst           ( i_rst     ),
    .i_start         ( 1'b1      ),
    .i_ad_data       ( 16'd11    ),
    .i_ad_busy       ( 1'b0      ),
    .i_first_data    (  ),
    .o_ad_os         (  ),
    .o_ad_cs         (  ),
    .o_ad_rd         (  ),
    .o_ad_reset      (  ),
    .o_ad_convstA    (  ),
    .o_ad_convstB    (  ),
    .o_ad_ch1        (  ),
    .o_ad_ch1_valid  (  ),
    .o_ad_ch2        (  ),
    .o_ad_ch2_valid  (  ),
    .o_ad_ch3        (  ),
    .o_ad_ch3_valid  (  ),
    .o_ad_ch4        (  ),
    .o_ad_ch4_valid  (  ),
    .o_ad_ch5        (  ),
    .o_ad_ch5_valid  (  ),
    .o_ad_ch6        (  ),
    .o_ad_ch6_valid  (  ),
    .o_ad_ch7        (  ),
    .o_ad_ch7_valid  (  ),
    .o_ad_ch8        (  ),
    .o_ad_ch8_valid  (  )
);

endmodule

在这里插入图片描述

  放大局部来看

在这里插入图片描述

  1. 复位持续了120ns,最低时序要求是复位50ns,复位信号满足时序要求
  2. CONVST下降沿到CONVST上升沿之间为80ns,最低时序要求是25ns,满足时序要求

在这里插入图片描述

  1. CONVST高电平到CS低电平,手册写的转换时间tCONV最低3.45us、最长4.15us。我们这里取4.16us,满足最长转换时序。

在这里插入图片描述

  1. RD一个周期的时间为80ns,高低电平时间为40ns,满足时序要求最高的32ns
  2. 上一个CONVST上升沿在450ns,下一个上升沿在5470ns,一个tCYCLE时间为5.02us,满足手册要求的最长tCYCLE5us。

  因此,所有输出信号都满足了手册的时序要求,AD7606并行模式仿真验证成功,后续有AD7606模块后再下板验证。

四、AD7606串行模式时序分析以及实现

4.1 串行模式时序图

在这里插入图片描述

  串行我们使用转换期间读取模式
在这里插入图片描述
  等busy信号拉低后,就可以拉低CS信号,然后提供SCLK给AD7606,数据按照每bit的传输,用户在SCLK上升沿采样,传输第一个通道的位数据时FRSTDATA会拉高。

4.2 串行模式时序要求

  CS信号,CONVST信号和并行一致,剩下的时序如下所示:
在这里插入图片描述

4.3 代码编写

  顶层我们设置三个参数变量,分别为系统时钟,SPI时钟,和采样周期,这样就能通过这些变量来计算出我们需要的分频计数值。

module ad7606_ctrl_ser#(
    parameter   SYS_CLK_FREQ   = 100_000_000,            //系统时钟频率
                SPI_CLK_FREQ   = 20_000_000,            //SPI时钟频率
                AD_CAP_FREQ    = 200_000                //AD7606采样频率最大200K
)
(

    input                                               i_clk           ,   // 输入系统时钟,100m
    input                                               i_rst           ,   
    input                                               i_start         ,   // 7606开始转换控制信号  
	                                   
    input                                               i_ad_data_A     ,   // ad7606 1,2,3,4通道采样数据
    input                                               i_ad_data_B     ,   // ad7606 5,6,7,8通道采样数据
    input                                               i_ad_busy       ,   // ad7606 忙标志位 
    output          [ 2:0]                              o_ad_os         ,   // ad7606 过采样倍率选择
    output                                              o_ad_cs         ,   // ad7606 AD cs
    output                                              o_ad_sclk       ,   // ad7606 AD data read
    output                                              o_ad_reset      ,   // ad7606 AD reset
    output                                              o_ad_convstA    ,   // ad7606 AD convert startA
    output                                              o_ad_convstB    ,   // ad7606 AD convert startB
                                    
    output          [15:0]                              o_ad_ch1        ,   // AD第1通道的数据
    output          [15:0]                              o_ad_ch2        ,   // AD第2通道的数据
    output          [15:0]                              o_ad_ch3        ,   // AD第3通道的数据
    output          [15:0]                              o_ad_ch4        ,   // AD第4通道的数据
    output          [15:0]                              o_ad_ch5        ,   // AD第5通道的数据
    output          [15:0]                              o_ad_ch6        ,   // AD第6通道的数据
    output          [15:0]                              o_ad_ch7        ,   // AD第7通道的数据
    output          [15:0]                              o_ad_ch8        ,   // AD第8通道的数据	
    output                                              o_ad_cap_done       // AD所有通道采集数据完成信号
);

  状态机和分频系数定义如下,由于是串行输入,所以设置一个READ状态即可

 /***************parameter*************/
localparam                                          T5US_DIV    = SYS_CLK_FREQ / 200_000 -1       ; //200Kbps采样率,因此采样周期为5us
localparam                                          SPI_DIV     = SYS_CLK_FREQ / 20_000_000 -1    ; //SPI时钟分频系数
localparam                                          SPI_DIV1    = SPI_DIV/2;                        //半周期分频
localparam                                          RESET       = 4'd0 ;                            //复位状态
localparam                                          AD_CONSVT   = 4'd1 ;                            //开启转换
localparam                                          BUSY        = 4'd2 ;                            //等待busy
localparam                                          READ        = 4'd3 ;                            //读数据
localparam                                          READ_DONE   = 4'd4 ;                            //读完成

  设置两个64bit寄存器来存放几个通道的串行数据,然后再分别分配各各个通道:

reg             [63:0]                              ad_dataA        ;
reg             [63:0]                              ad_dataB        ;
assign o_ad_ch1        = ad_dataA[63:48]    ;
assign o_ad_ch2        = ad_dataA[47:32]    ;
assign o_ad_ch3        = ad_dataA[31:16]    ;
assign o_ad_ch4        = ad_dataA[15: 0]    ;
assign o_ad_ch5        = ad_dataB[63:48]    ;
assign o_ad_ch6        = ad_dataB[47:32]    ;
assign o_ad_ch7        = ad_dataB[31:16]    ;
assign o_ad_ch8        = ad_dataB[15: 0]    ;

4.4 添加仿真模型以及观察

  仿真代码如下:

`timescale 1ns / 1ps
module tb_ad7606_ctrl_ser();

reg                                                 i_clk   ;
reg                                                 i_rst   ;
wire                                                i_ad_data_A ;
wire                                                i_ad_data_B ;
wire                                                i_ad_busy   ;
wire                                                o_ad_convstA    ;
wire                                                o_ad_convstB    ;
wire                                                o_ad_cs ;
wire                                                o_ad_sclk   ;
wire                                                o_ad_reset  ;

initial begin
    i_clk =0;
    i_rst =1;
    #250;
    i_rst = 0;
end

always #5 i_clk = ~i_clk;

ad7606_ctrl_ser#(
    .SYS_CLK_FREQ( 100_000_000  ),
    .SPI_CLK_FREQ( 20_000_000   ),
    .AD_CAP_FREQ ( 200_000      )
)u_ad7606_ctrl_ser(
    .i_clk                     ( i_clk                     ),
    .i_rst                     ( i_rst                     ),
    .i_start                   ( 1'b1                      ),
    .i_ad_data_A               ( i_ad_data_A               ),
    .i_ad_data_B               ( i_ad_data_B               ),
    .i_ad_busy                 ( i_ad_busy                 ),
    .o_ad_os                   (                           ),
    .o_ad_cs                   ( o_ad_cs                   ),
    .o_ad_sclk                 ( o_ad_sclk                 ),
    .o_ad_reset                ( o_ad_reset                ),
    .o_ad_convstA              ( o_ad_convstA              ),
    .o_ad_convstB              ( o_ad_convstB              ),
    .o_ad_ch1                  (              ),
    .o_ad_ch2                  (              ),
    .o_ad_ch3                  (              ),
    .o_ad_ch4                  (              ),
    .o_ad_ch5                  (              ),
    .o_ad_ch6                  (              ),
    .o_ad_ch7                  (              ),
    .o_ad_ch8                  (              ),
    .o_ad_cap_done             (              )
);


ad7606 ad7606_inst
(
.ad_busy    (i_ad_busy      ),  //ad7606 忙标志位 输出                
.ad_cs      (o_ad_cs        ),  //ad7606 CS信号输入,低电平SPI数据线输出AD7606寄存器数据                   
.ad_sclk    (o_ad_sclk      ),  //ad7606 SCLK时钟输入           
.ad_reset   (o_ad_reset     ),  //ADC复位输入         
.ad_convsta (o_ad_convstA   ),  //ad7606 A组通道转换         
.ad_convstb (o_ad_convstB   ),  //ad7606 B组通道转换      
.ad_range   (1'b0           ),  //ad7606 模拟输入范围,设置1范围:±10V,设置0范围±5V
.ad_out_a   (i_ad_data_A    ),  //A组通道采集有效数据输出 
.ad_out_b   (i_ad_data_B    )   //B组通道采集有效数据输出
); 

endmodule

  采样周期5.07us,满足AD7606最大的5us
在这里插入图片描述

在这里插入图片描述
  采样出来的仿真模型也是正确的,至此AD7606的串行和并行验证都完成。
  本文资料获取:
AD7606串行输出verilog代码以及串行仿真模型和AD7606中文原理图
AD7606并行输出verilog代码以及AD7606中文原理图

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

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

相关文章

WWDG—窗口看门狗

WWDG—窗口看门狗 窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值 0X40时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。这个是跟独立看门狗类似的…

C练手题--Two Oldest Ages 【7 kyu】

一、原题 链接:Training on Two Oldest Ages | Codewars The two oldest ages function/method needs to be completed. It should take an array of numbers as its argument and return the two highest numbers within the array. The returned value should b…

bash反弹shell分析

目录 介绍步骤 介绍 与目标主机建立连接的原理是利用漏洞执行ShellCode。 GetShell的实质是:执行ShellCode,将目标主机的Shell重定向到攻击机。拿到Shell利于后续的渗透。 所谓的反弹Shell是指GetShell的过程由目标主机主动发起(反向连接&a…

mysql(查询)

1.单表查询 (1)查询多个字段 指定列查询基础语法:select 字段1,字段2,字段3,... from 表名; 全列查询基础语法:select * from 表名; 注意: 1)在实…

AI-Talk开发板CSK6固件烧录

一、说明 在windows系统上使用cskburn desktop工具对主控CSK6011A进行固件烧录,烧录接口为UART2(TXD:PA18,RXD:PA15),需要CSK6011A处于boot模式才能升级。 官方参考文档:cskburn桌面烧录工具 | 聆思文档中…

DETR3D: 3D Object Detectionfrom Multi-view Images via 3D-to-2D Queries

本文的主要贡献如下: 我们提出了一种基于RGB图像的简化3D物体检测模型。与现有工作在最终阶段结合来自不同相机视角的物体预测不同,我们的方法在每一层计算中融合所有相机视角的信息。据我们所知,这是首次尝试将多摄像头检测视为3D集合到集合…

软考攻略/超详细/系统集成项目管理工程师/基础知识分享06

2.2 新一代信息技术及应用 2.2.1 物联网(掌握) 物联网:是指通过信息传感设备,按约定的协议将任何物品与互联网相连接,进行信息交换和通信,以实现只能识别、定位、跟踪、监控和管理的网络 1、技术基础 物联…

Flask框架 完整实战案例 附代码解读 【3】

Flask 是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。 前面已经写过项目从新建运行安装到测试部署的全流程,其中有写Flask框架从新建到部署全流程,但是只有部分代码。本篇主要是…

国产光耦合器在提高各行业能源效率方面的作用

随着各行业对节能解决方案的需求不断增长,国产光耦合器已成为降低能耗和提高整体系统效率的关键部件。这些由本地制造商开发的组件现在不仅因其成本效益而受到认可,而且还因其能够满足需要可靠隔离和高效电源管理的工业应用的特定需求而受到认可。 通过隔…

语义传输中单智能体语义知识库

在语义传输中涉及到的智能体包括信源数据模态、信宿智能任务以及信道传输环境。单智能体系统仅涉及一个智能体,该智能体独立完成感知、决策和执行任务,通常在不需要与其他智能体直接交互的环境中运行,能自主获取环境信息,并基于自…

PHP高效进销存管理系统智能管理库存销售与采购系统小程序源码

高效进销存管理系统 —— 智能管理,轻松驾驭库存、销售与采购 🔥 【开篇:告别繁琐,拥抱智能管理】 你还在为库存管理混乱、销售数据不清、采购计划难定而烦恼吗?是时候告别那些低效的手工账本和复杂的Excel表格了&…

传输层(TCP、UDP、RDT详解)

目录 1.无连接传输:UDP UDP:User Datagram Protocol(用户数据报协议) UDP:校验和 Internet校验和的例子 2.可靠数据传输(Rdt)的原理 可靠数据传输:问题描述 1.Rdt1.0&#xff…

【JAVA】两轮充电桩设计模式实践分享

如果说数据结构和算法是程序员构建高效代码的基石,那么设计模式则是打造高质量代码的“内功心法”。掌握并应用合适的设计模式,有助于管理项目复杂性,简化维护,并加速开发进程。 因此,深入理解并合理运用设计模式&…

HTTP 请求方法(method)介绍

目录 一、GET 二、POST 三、其他方法 3.1 PUT 3.2 DELETE 3.3 HEAD 3.4 OPTIONS 3.5 TRACE 3.6 CONNECT 3.7 PATCH 3.8 LINK 和 UNLINK(扩展方法) HTTP(超文本传输协议)定义了多种请求方法,如: …

opencv计算机视觉识别图像处理c++项目实战python网课程视频教程

课程名称 《OpenCV计算机视觉识别图像处理C实战课程》 课程亮点 全面覆盖:从基础概念到高级技术,涵盖OpenCV的核心功能。实战导向:通过具体项目实践,帮助学员掌握图像处理的实际应用。双语言支持:虽然重点是C&#x…

使用神卓互联内网穿透开发支付宝支付回调环境(Java版)

支付宝支付功能在电商网站和其他在线服务中扮演着重要角色。对于使用Java作为开发语言的应用来说,集成支付宝支付回调功能是必不可少的一部分。为了能够在本地开发环境中测试这一功能,内网穿透技术可以让我们绕过公网IP的限制。下面将介绍如何利用神卓互…

Unity教程(十三)敌人状态机

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程(零)Unity和VS的使用相关内容 Unity教程(一)开始学习状态机 Unity教程(二)角色移动的实现 Unity教程(三)角色跳跃的实现 Unity教程&…

集成电路学习:什么是I/O输入输出

I/O:输入输出 I/O,全称Input/Output,即输入输出,是信息处理系统(如计算机)与外部世界(可能是人类或另一信息处理系统)之间的通信方式。具体来说,输入是系统接收的信号或数…

shell编程--正则表达式

正则表达式 正则表达式都被置于两个正斜杠之间;如/l[oO]ve/ 示例 匹配数字的脚本,用户输入创建账号的数量 语法: [[ ^[0-9]$ ]] 表示必须输入数字 #!/bin/bashwhile : do read -p "输入数字:" numif [[ $num ~ ^[…

springboot整合logback进行日志管理(下篇)

上一篇介绍了springboot整合logback的一些项目中用到的经验,本片文章继续介绍在项目中实际用到的工程经验 1、设想一下有这样一个场景:我想把我所有service层的日志单独打印到service.log中,那应该怎么做? 有人会说了可以配置一…