在上一文中介绍了以太网的各层协议;链接:https://blog.csdn.net/weixin_41838250/article/details/114686428?spm=1001.2014.3001.5502

本文主要介绍一下我项目中使用的10G-BASE-R和MAC层的具体应用;因为项目需求,直接组装了MAC数据报;然后传输。

1.10G-BASE-R

1.1   内部结构:

设计使用了Xilinx的 ten_gig_eth_pcs_pma_0 IP实现10G-BASE-R;

用户接口:XGMII

PCS:64b/66b编解码,接收路径还包括块同步、解码器、译码器和误码(比特错误率)监控;

外部端口:底层使用了serdes高速串行通道;

1.2 核配置

1:数据位宽选择:如果用32bit,则用户数据时钟为312.5Mhz;64bit,则用户数据时钟为156.25Mhz;

2:寄存器配置端口:如果选择,则使用串行MDIO进行配置;不选择则使用并口的寄存器直接赋值;笔者用FPGA,直接给寄存器赋值。

这一页:主要选择是使用核设计还是参考例程;两者区别是时钟,复位模块在内部还是在外部。笔者设计需要4个10G然后组成40G网络,因此使用的是参考例程;共用一个时钟模块。

1.3寄存器介绍

使用并口配置,共536bit位;详细介绍可见ug068 26页

关键位说明:

0位:PMA Loopback Enable;1-使能,0-不使能;

15位:PMA Reset;1-复位,0-正常;

16位:Global PMD TX Disable;0-使能,1-不使能;

110位:PCS Loopback Enable;1-使能,0-不使能;

111位:PCS Reset;1-复位,0-不复位;

512位:PMA link status;link状态

516位:PCS link 配置;1-link up 0-link down

2.MAC核

2.1内部结构

用户接口:AXI4-stream,接收,发送;

MAC与物理层互联端口:XMGII;

配置端口:AXI-Lite,配置到MDIO;

2.2 核配置

1,用户数据位宽:和物理层时钟,位宽匹配;

2,寄存器配置:如果选择,则使用AXI进行配置MDIO,这里没有使用;

3,互联端口:internal或XGMII端口,内部和外部;SDR和DDR的区别;笔者这里接的是从内部10G-BASE-R核出来的端口,因此选择的是内部。

这一页:主要选择是使用核设计还是参考例程;两者区别是时钟,复位模块在内部还是在外部。笔者设计需要4个10G然后组成40G网络,因此使用的是参考例程;共用一个时钟模块。

2.3 寄存器介绍

发送配置寄存器

0位:Transmitter Reset,发送控制器复位;1-复位,0-正常;

1位:Transmitter Enable,发送使能;1-使能,0-不使能;

2位:Transmitter VLAN Enable,VLAN帧发送使能;1-使能,0-不使能;

3位:Transmitter In-Band FCS Enable,CRC校验选择;1-由用户填充,0-核计算填充;

4位:Transmitter Jumbo Frame Enable,巨型帧发送使能;1-使能巨型帧,0-合法帧;

5位:Transmit Flow Control Enable,流控使能;1-由pause_req控制数据流,0-pause_req无效;

7位:Transmitter Preserve Preamble Enable,前导码选择;1-用户填充,0-核根据标准填充;

8位:Transmitter Interframe Gap Adjust Enable,帧间隙;1-使用tx_ifg_delay端口设置间隙,0-使用最小间隙;

9位:Transmitter LAN/WAN Mode,模式选择;1-发送器自动在帧间间隙中插入空闲数据,以将平均数据速率降低到OC-192 SONET有效负载速率(WAN模式),0-发送器使用标准以太网帧间间隙(局域网模式)。

14位:TX MTU Enable,MTU使能;1-TX MTU 作为发送最大帧,0-启用别的配置。

[30:16]位:TX MTU Size,TX MTU填入帧大小;

31位:Stacked VLAN mode enable:VLAN 标识使能;1-使能,0-不使能;

[79:32]位:发送器源MAC地址。

接收配置寄存器

0位:Receive Reset,接收控制器复位;1-复位,0-正常;

1位:Receive Enable,接收使能;1-使能,0-不使能;

2位:Receive VLAN Enable,VLAN帧接收使能;1-使能,0-不使能;

3位:Receive In-Band FCS Enable,CRC校验选择;1-校验传给用户,0-核校验丢弃;

4位:Receive Jumbo Frame Enable,巨型帧接收使能;1-使能巨型帧,0-合法帧;

5位:Receive Flow Control Enable,流控使能;1-由pause_req控制数据流,0-pause_req无效;

7位:Receive Preserve Preamble Enable,前导码选择;1-前导码给用户,0-丢弃;

8位:Receiver Length/Type Error Disable,长度/类型字段检查使能;1-不检查,0-检查;

9位:Control Frame Length Check Disable,帧长检查;1-不检查,如果帧长不合法,同样保留数据给用户;

14位:RX MTU Enable,MTU接收使能;1-RX MTU 作为接收最大帧,0-启用别的配置。

15位:Enhanced VLAN mode enable,VLAN字段检查使能;1-使能,0-不使能;

[30:16]位:RX MTU Size,TX MTU填入帧大小;

31位:Stacked VLAN mode enable:VLAN 标识使能;1-使能,0-不使能;

[79:32]位:接收送器源MAC地址。

3 系统设计

3.1架构如下:

3.2 模块代码如下:

net顶层模块

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2020/08/24 18:10:32
// Design Name:
// Module Name: net_10g_warp
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module net_40g_warp #(parameter [47:0] src_mac_addr = 48'h111111_22222,parameter [47:0] dest_mac_addr = 48'h333333_444444
)(input          sys_clk,input          sys_rst,input          net_clk_p,input          net_clk_n,input          con_pma_loop,   output [3:0]   ot_tx_resetdone,output [3:0]   ot_rx_resetdone,output [31:0]  ot_core_status,output [255:0] ot_xgmii_txd,output [31:0]  ot_xgmii_txc,output [255:0] ot_xgmii_rxd,output [31:0]  ot_xgmii_rxc,output [3:0]   ot_axis_tvalid,output [3:0]   ot_axis_tlast,output [31:0]  ot_axis_tkeep,output [255:0] ot_axis_tdata,output [3:0]   ot_axis_align_flag,output [3:0]   ot_maxis_tready,output [31:0]  ot_xmgii_flow_cnt,output [31:0]  ot_xmgii_flow_data,output [3:0]   txp,output [3:0]   txn,input  [3:0]   rxp,input  [3:0]   rxn,output         xgmii_clk,output         xgmii_rst, output [3:0]   xgmii_locked,output [3:0]   tx_tready,input  [3:0]   tx_tvalid,input  [3:0]   tx_tlast,input  [31:0]  tx_tkeep,input  [3:0]   tx_tuser,input  [255:0] tx_tdata,output [3:0]   rx_tvalid,output [3:0]   rx_tlast,output [31:0]  rx_tkeep,output [255:0] rx_tdata
);wire [3:0] rx_resetdone;wire [3:0] tx_resetdone;wire [31:0] core_status;wire [255:0] xgmii_txd;wire [31:0]  xgmii_txc;wire [255:0] xgmii_rxd;wire [31:0]  xgmii_rxc;wire [3:0]   axis_tvalid;wire [3:0]   axis_tlast;wire [31:0]  axis_tkeep;wire [255:0] axis_tdata;assign xgmii_rst =!(tx_resetdone[0] && rx_resetdone[0] && tx_resetdone[1] && rx_resetdone[1] && tx_resetdone[2] && rx_resetdone[2] && tx_resetdone[3] && rx_resetdone[3]);assign xgmii_locked[0] = core_status[7:0] ? 1'b1 : 1'b0;assign xgmii_locked[1] = core_status[15:8] ? 1'b1 : 1'b0;assign xgmii_locked[2] = core_status[23:16] ? 1'b1 : 1'b0;assign xgmii_locked[3] = core_status[31:24] ? 1'b1 : 1'b0;eth_psc_pma_ip eth_psc_pma_ip_inst(.sys_clk        (sys_clk        ),    .sys_rst        (sys_rst        ),         .refclk_p       (net_clk_p      ),.refclk_n       (net_clk_n      ),.rx_resetdone_out(rx_resetdone  ),.tx_resetdone_out(tx_resetdone  ),.xgmii_clk      (xgmii_clk      ),.xgmii_txd      (xgmii_txd      ),.xgmii_txc      (xgmii_txc      ),.xgmii_rxd      (xgmii_rxd      ),.xgmii_rxc      (xgmii_rxc      ),.txp            (txp       ),.txn            (txn       ),.rxp            (rxp       ),.rxn            (rxn       ),.sim_speedup_control(0),.core_status    (core_status ),.config_vector  ({136'd0,16'h4c4b,383'd0,con_pma_loop}),.status_vector  ( ),.pma_pmd_type   (3'b101));eth_mac_ip eth_mac_ip_inst(.xgmii_clk      (xgmii_clk      ),.xgmii_rst      (xgmii_rst      ),        .xgmii_locked   (xgmii_locked   ),.tx_aresetn     (xgmii_locked   ),.rx_aresetn     (xgmii_locked   ),.tx_tready      (tx_tready      ),.tx_tvalid      (tx_tvalid      ),.tx_tlast       (tx_tlast       ),.tx_tkeep       (tx_tkeep       ),.tx_tuser       (tx_tuser       ),.tx_tdata       (tx_tdata       ),.rx_tvalid      (axis_tvalid  ),.rx_tlast       (axis_tlast   ),.rx_tkeep       (axis_tkeep   ),.rx_tuser       (   ),.rx_tdata       (axis_tdata  ),.xgmii_txd      (xgmii_txd      ),.xgmii_txc      (xgmii_txc      ),.xgmii_rxd      (xgmii_rxd      ),.xgmii_rxc      (xgmii_rxc      ),.tx_con_vector  ({src_mac_addr, 32'h00000012}),.rx_con_vector  ({src_mac_addr, 32'h00000012}));eth_rx_align_design  #(.mac_addr       (src_mac_addr))eth_rx_align_design(.sys_clk        (xgmii_clk  ),.sys_rst        (xgmii_rst  ),.ot_axis_align_flag (ot_axis_align_flag),.ot_maxis_tready (ot_maxis_tready),.saxis_tvalid   (axis_tvalid),.saxis_tlast    (axis_tlast ),.saxis_tkeep    (axis_tkeep ),.saxis_tdata    (axis_tdata ),.maxis_tvalid   (rx_tvalid    ),.maxis_tlast    (rx_tlast     ),.maxis_tkeep    (rx_tkeep     ),.maxis_tdata    (rx_tdata     ));                  reg        runtime_1s_flag = 0;reg [31:0] runtime_1s      = 0;reg [31:0] xmgii_flow_cnt  = 0;reg [31:0] xmgii_flow_data  = 0;always @ (posedge xgmii_clk) beginif(xgmii_rst) begin runtime_1s_flag <= 0;runtime_1s      <= 0;endelse if(runtime_1s >= 32'd156_250_000) beginruntime_1s <= 0;runtime_1s_flag <= 1;end else begin runtime_1s <= runtime_1s + 1;runtime_1s_flag <= 0;end end always @ (posedge xgmii_clk) begin if(xgmii_rst) begin xmgii_flow_cnt  <= 0;xmgii_flow_data <= 0;endelse if(runtime_1s_flag) begin xmgii_flow_cnt  <= 0;xmgii_flow_data <= xmgii_flow_cnt;end         else if(tx_tready[0] && tx_tready[0])begin xmgii_flow_cnt  <= xmgii_flow_cnt + 8;xmgii_flow_data <= xmgii_flow_data;end      else begin xmgii_flow_cnt  <= xmgii_flow_cnt;xmgii_flow_data <= xmgii_flow_data;end end      assign  ot_tx_resetdone = tx_resetdone;assign  ot_rx_resetdone = rx_resetdone;assign  ot_core_status = core_status;assign  ot_xgmii_txd = xgmii_txd;assign  ot_xgmii_txc = xgmii_txc;assign  ot_xgmii_rxd = xgmii_rxd;assign  ot_xgmii_rxc = xgmii_rxc;assign  ot_axis_tvalid = axis_tvalid;assign  ot_axis_tlast  = axis_tlast;assign  ot_axis_tkeep  = axis_tkeep;assign  ot_axis_tdata  = axis_tdata;assign  ot_xmgii_flow_cnt  = xmgii_flow_cnt;assign  ot_xmgii_flow_data = xmgii_flow_data;endmodule

MAC模块

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2020/08/24 15:51:05
// Design Name:
// Module Name: eth_mac_ip
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module eth_mac_ip(input   xgmii_clk,input   xgmii_rst,    input   [3:0] xgmii_locked,input   [3:0] tx_aresetn,input   [3:0] rx_aresetn,output [3:0]   tx_tready,input  [3:0]   tx_tvalid,input  [3:0]   tx_tlast,input  [31:0]  tx_tkeep,input  [3:0]   tx_tuser,input  [255:0] tx_tdata,output [3:0]   rx_tvalid,output [3:0]   rx_tlast,output [31:0]  rx_tkeep,output [3:0]   rx_tuser,output [255:0] rx_tdata,output  [255:0] xgmii_txd,output  [31:0]  xgmii_txc,input [255:0] xgmii_rxd,input [31:0]  xgmii_rxc,input  [79:0]  tx_con_vector,input  [79:0]  rx_con_vector);genvar i;      reg [7:0] tx_ifg_delay = 0;generatefor (i=0;i<4;i=i+1)begin : gt_gen        ten_gig_eth_mac_0 xgmac_i (.reset                   (xgmii_rst          ),.tx_axis_aresetn         (tx_aresetn[i]      ),.tx_axis_tdata           (tx_tdata[64*i+:64] ),.tx_axis_tvalid          (tx_tvalid[i]       ),.tx_axis_tlast           (tx_tlast[i]        ),.tx_axis_tuser           (tx_tuser[i]        ),.tx_axis_tkeep           (tx_tkeep[8*i+:8]   ),.tx_axis_tready          (tx_tready[i]       ),       .tx_ifg_delay            (tx_ifg_delay       ),.tx_statistics_vector    ( ),.tx_statistics_valid     ( ),.pause_val               (0),.pause_req               (0),.rx_axis_aresetn         (rx_aresetn[i]      ),.rx_axis_tdata           (rx_tdata[64*i+:64] ),.rx_axis_tkeep           (rx_tkeep[8*i+:8]   ),.rx_axis_tvalid          (rx_tvalid[i]       ),.rx_axis_tuser           (rx_tuser[i]        ),.rx_axis_tlast           (rx_tlast[i]        ),.rx_statistics_vector    ( ),.rx_statistics_valid     ( ),.tx_configuration_vector (tx_con_vector      ),.rx_configuration_vector (rx_con_vector      ),.status_vector           ( ),.tx_clk0                 (xgmii_clk          ),.tx_dcm_locked           (xgmii_locked[i]    ),.xgmii_txd               (xgmii_txd[64*i+:64]),.xgmii_txc               (xgmii_txc[8*i+:8]  ),.rx_clk0                 (xgmii_clk          ),.rx_dcm_locked           (xgmii_locked[i]    ),.xgmii_rxd               (xgmii_rxd[64*i+:64]),.xgmii_rxc               (xgmii_rxc[8*i+:8]  ));end
endgenerate     endmodule

10GBASE-R模块

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2020/08/24 10:33:28
// Design Name:
// Module Name: eth_psc_pma_ip
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module eth_psc_pma_ip(input          sys_clk,    input          sys_rst,         input          refclk_p,input          refclk_n,output [3:0]   tx_resetdone_out,output [3:0]   rx_resetdone_out,output         xgmii_clk,    input  [255:0] xgmii_txd,input  [31:0]  xgmii_txc,output [255:0] xgmii_rxd,output [31:0]  xgmii_rxc,output [3:0]    txp,output [3:0]    txn,input  [3:0]    rxp,input  [3:0]    rxn,input       sim_speedup_control,output [31:0]   core_status,input  [535:0]  config_vector,output [1791:0]  status_vector,input [2:0]     pma_pmd_type
);genvar i;  // Signal declarationswire coreclk;wire [3:0] txoutclk;wire qplloutclk;wire qplloutrefclk;wire qplllock;wire [3:0] tx_resetdone_int;wire [3:0] rx_resetdone_int;wire areset_coreclk;wire gttxreset;wire gtrxreset;wire qpllreset;wire txuserrdy;wire reset_counter_done;wire txusrclk;wire txusrclk2;wire refclk;wire [3:0] rxrecclk_out;assign tx_resetdone_out = tx_resetdone_int;assign rx_resetdone_out = rx_resetdone_int;   assign xgmii_clk = coreclk;ten_gig_eth_pcs_pma_0_gt_common # (.WRAPPER_SIM_GTRESET_SPEEDUP("TRUE") ) //Does not affect hardwareten_gig_eth_pcs_pma_gt_common_block(.refclk             (refclk         ),.qpllreset          (qpllreset      ),.qplllock           (qplllock       ),.qplloutclk         (qplloutclk     ),.qplloutrefclk      (qplloutrefclk  ));// Instantiate the 10GBASER/KR shared clock/reset block ten_gig_eth_pcs_pma_0_shared_clock_and_reset ten_gig_eth_pcs_pma_shared_clock_reset_block(.areset             (sys_rst        ),.refclk_p           (refclk_p       ),.refclk_n           (refclk_n       ),.refclk             (refclk         ),.coreclk            (coreclk        ),.txoutclk           (txoutclk[0]       ),.qplllock           (qplllock       ),.areset_coreclk     (areset_coreclk ),.gttxreset          (gttxreset      ),.gtrxreset          (gtrxreset      ),.txuserrdy          (txuserrdy      ),.txusrclk           (txusrclk       ),.txusrclk2          (txusrclk2      ),.qpllreset          (qpllreset      ),.reset_counter_done (reset_counter_done));generatefor (i=0;i<4;i=i+1)begin : gt_genten_gig_eth_pcs_pma_0 ten_gig_eth_pcs_pma_i(.dclk               (sys_clk            ),.areset             (sys_rst            ),  .coreclk            (coreclk            ),.areset_coreclk     (areset_coreclk     ),    .qplllock           (qplllock           ),.qplloutclk         (qplloutclk         ),.qplloutrefclk      (qplloutrefclk      ),.txoutclk           (txoutclk[i]        ),.txusrclk           (txusrclk           ),.txusrclk2          (txusrclk2          ),.txuserrdy          (txuserrdy          ),.rxrecclk_out       (rxrecclk_out[i]    ),.gttxreset          (gttxreset          ),.gtrxreset          (gtrxreset          ),.tx_resetdone       (tx_resetdone_int[i]),.rx_resetdone       (rx_resetdone_int[i]),.reset_counter_done (reset_counter_done ),.sim_speedup_control(sim_speedup_control),.pma_pmd_type       (pma_pmd_type       ),.configuration_vector(config_vector     ),.status_vector      (status_vector[448*i+:448]  ),.core_status        (core_status[8*i+:8]),.signal_detect      (1),.tx_fault           (0), .tx_disable         ( ),.xgmii_txd          (xgmii_txd[64*i+:64] ),.xgmii_txc          (xgmii_txc[8*i+:8]   ),.xgmii_rxd          (xgmii_rxd[64*i+:64] ),.xgmii_rxc          (xgmii_rxc[8*i+:8]   ),.txp                (txp[i]             ),.txn                (txn[i]             ),.rxp                (rxp[i]             ),.rxn                (rxn[i]             ),.drp_req            ( ),.drp_gnt            (0),.drp_den_o          ( ),.drp_dwe_o          ( ),.drp_daddr_o        ( ),.drp_di_o           ( ),.drp_drdy_o         ( ),.drp_drpdo_o        ( ),.drp_den_i          (0),.drp_dwe_i          (0),.drp_daddr_i        (0),.drp_di_i           (0),.drp_drdy_i         (0),.drp_drpdo_i        (0));end
endgenerate
endmodule

八、基于FPGA的以太网协议介绍(二)相关推荐

  1. 八、基于FPGA的以太网协议介绍(一)

    以太网是一种计算机局域网技术.IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线.电子信号和介质访问层协议的内容.以太网的协议层是建立在OSI模型的基础上的,OSI ...

  2. 十四、基于FPGA的SDI协议介绍(二)

    上一文主要介绍了SDI中的PAL格式,本文主要基于XilinxFPGA的sdi IP使用展开介绍 1,SDI IP 支持协议 SD-SDI :   PAL    NTSC     HD-SDI :   ...

  3. 十四、基于FPGA的SDI协议介绍(一)

    1 ,概念 SDI接口是一种"数字分量串行接口",而HD-SDI接口是一种广播级的高清数字输入和输出端口,其中HD表示高清信号.由于SDI接口不能直接传送压缩数字信号,数字录像机. ...

  4. 基于FPGA的以太网UDP协议实现过程记录

    基于FPGA的以太网的 UDP协议的学习笔记 一.完整的以太网数据部分包括以下几部分: 前导码 帧起始界定符 以太网帧头 IP首部 UDP首部 UDP数据(有效数据) CRC校验字节 二.针对每一部分 ...

  5. 基于 FPGA 的以太网回环测试verilog实现UDP协议

    基于 FPGA 的以太网回环测试verilog实现UDP协议 verilog实现UDP协议: 该 设计使用 UDP 协议,首先通过串口助手接收 PC 发送的 UDP 数据包,然后提取其中的数据部分并使 ...

  6. 基于FPGA的以太网控制器(MAC)设计(中)

    今天给大侠带来基于FPGA的以太网控制器(MAC)设计,由于篇幅较长,分三篇.今天带来第二篇,中篇,以太网控制器(MAC)程序的实现.话不多说,上货. 导读 当前,互联网已经极大地改变了我们的生产和生 ...

  7. 基于FPGA的以太网控制器(MAC)设计(下)

    今天给大侠带来基于FPGA的以太网控制器(MAC)设计,由于篇幅较长,分三篇.今天带来第三篇,下篇,程序的仿真与测试和总结.话不多说,上货. 导读 当前,互联网已经极大地改变了我们的生产和生活.与之相 ...

  8. 基于FPGA的以太网开发

      基于FPGA的以太网开发,在调试过的FPGA玩家开来,其实算不上很难的技术!但是如果只是菜鸟级别的选手,没有调试过的话,就有些头疼了!早在自己在实习的时候,就接触到XAUI(万兆以太网口)接口,但 ...

  9. 基于FPGA的VGA协议实现

    基于FPGA的VGA协议实现 一.VGA简述 1.VCG接口 2.原理 3.显示器扫描 4.VGA时序分析 5.VGA时钟计算 6.不同分辨率的VGA参数 二.显示彩条 1.色彩原理 2.彩条输出 三 ...

最新文章

  1. uni-app 封装企业微信config
  2. 【Java】字符串(二)
  3. 1191: 冰法斗神龙 暴力枚举
  4. linux to extract contents between patterns
  5. mysql checking permissions 优化_MySQL 之数据库优化
  6. Yoshua Bengio等图神经网络的新基准Benchmarking Graph Neural Networks(代码已开源)
  7. 2019标杆案例复盘(上):数字化——金融政企篇
  8. 谷歌发布端到端AI平台,还有用于视频和表格的AutoML、文档理解API等多款工具
  9. git为私有仓库设置密码_真香!在局域网下行云流水般使用git
  10. 苹果App Store曝出Bug 你遇到了么?
  11. 与ceph的区别_Ceph分布式存储高性能设计
  12. 20172324《程序设计与数据结构》第一周学习总结
  13. 【ORACLE】字符串操作 B字符串时A的一部分
  14. 计算机高等数学试题及答案,北大计算机系考研_历年高等数学真题附答案
  15. PhysX碰撞检测之onContact和onTrigger
  16. android 5.1感叹号,关于5.1 WIFI显示感叹号
  17. 领扣LintCode问题答案-5. 第k大元素
  18. 添加背景音乐(visual stdio2019)
  19. APP开发从需求到产品—APP产品经理成长日记
  20. 泳道流程图:跨职能流程图

热门文章

  1. 达人评测 r7 7730U和R5 7530U选哪个好 锐龙r77730U和R57530U对比
  2. 热温冷冰,数据存储需要全生命周期管理
  3. Android应用安全加固
  4. 虚拟磁盘管理 无法启动服务器,运行虚拟磁盘管理器提示"RPC服务器不可用"分析与解决方案...
  5. angular项目中使用Primeng
  6. IntelliJ IDEA在Mac下格式化代码快捷键与失效原因
  7. java多线程死锁代码_java多线程死锁 编写高质量代码:改善Java程序的151个建议...
  8. oracle 与plc通信,cim系统(com系统和plc的通讯)
  9. 头文件防卫式声明/引用/static/extern/
  10. 02 C/C++创建tcl自定义命令