紫光同创PGL22G开发平台试用连载(5)基于紫光同创PGL22GFPGA设计一个32位CPU

FPGA开发圈 2020-11-23 00:00

 基于PGL122G FPGA  设计32位CPU,提供的灵活性允许根据需要开启或禁止处理器、IP内核以及软件平台的高级功能,并且可以对许多独立参数进行精细调整,直到在软件一级满足应用的要求。此外,利用建模工具可以识别任何性能关键的软件功能并将其分流至适当的硬件加速器或协处理器来完成。基于 FPGA 的五级流水线 CPU 的总体结构模型,实现了取指IF、指令译码ID、指令执行EXE、存储MEM,取指周期设计了PC寄存器和指令存储器,实现了取指令功能;译码周期设计了控制器CU、寄存器堆等部件,完成了20条指令的译码功能;指令执行周期主要对运算器ALU的设计,实现了对数据的运算操作;存储周期完成了数据存储器的设计,用于存储周期的读写操作;结果写回周期,通过设计多路器,实现将正确的结果写回到目的寄存器中。

32位CPU内核结构:寄存器组(①)、NVIC(②)、中断和异常(③)、储存器映射(④)、总线接口(⑤)、调试支持(⑥)、指令集。

    

  可配置处理系统的配置(或定制)的层面包括:

  处理器配置:

  •乘法器、除法器、浮点单元以及其它。
  •指令或数据缓冲配置。
  •协处理器或硬件加速器。

  系统配置
  •I/O外设选择、定制、DMA选择。
  •存储器外设选择、定制。

  应用配置

  •RTOS选择、定制。
  •应用库/中间件定制

      

 控制器设计

module CtrlUnit(

        input [31:0] instr,

        input [31:0] rdata1, rdata2,

        input [31:0] pc,ram_data,hi,lo,alu_r,cop_data,mul_out,

        input [31:0] exc_addr,

        input clk,

        output mtc0,eret,teq_exc,

        output reg [2:0] mdu,

        output reg reg_wena,

        output ram_wena,

        

        output reg [3:0] cause,

        output [4:0] rs,rt,rd,waddr,

        output reg [31:0] wdata,reg_data,

        output [31:0] ram_addr,

        output reg [31:0] pc_in,

        

        output reg [31:0] alu_a,alu_b,

        output reg [3:0] alu_op

        );

    

    

    //******MIPS-55*********//

    parameter   //SPECIAL OP LIST   5-0

                ADDU    =   6'b100001,

                SUBU    =   6'b100011,

                ADD     =   6'b100000,

                SUB     =   6'b100010,

                AND     =   6'b100100,

                OR      =   6'b100101,

                XOR     =   6'b100110,

                NOR     =   6'b100111,

                SLT     =   6'b101010,

                SLTU    =   6'b101011,

                SRL     =   6'b000010,

                SRA     =   6'b000011,

                SLL     =   6'b000000,

                SLLV    =   6'b000100,

                SRLV    =   6'b000110,

                SRAV    =   6'b000111,

                JR      =   6'b001000,

                JALR    =   6'b001001,

                MULT    =    6'b011000,

                MULTU   =   6'b011001,

                DIV     =   6'b011010,

                DIVU    =   6'b011011,

                MFHI    =   6'b010000,

                MFLO    =   6'b010010,

                MTHI    =   6'b010001,

                MTLO    =   6'b010011,

                BREAK   =   6'b001101,

                SYSCALL =   6'b001100,

                TEQ     =   6'b110100,

                //SPECIAL 2 func

                CLZ        =   6'b100000,

                MUL        =   6'b000010,

                //REGIMM OP LIST 20-16

                BLTZ    =   5'b00000,

                BGEZ    =   5'b00001,

                //COP0 OP LIST

                ERET    =   6'b011000,  //5-0&&25TH=1

                MFC0    =   5'b00000,   //20-16

                MTC0    =   5'b00100,

                //OPCODE FIELD  31-26

                ADDI    =   6'b001000,

                ADDIU   =   6'b001001,

                ANDI    =   6'b001100,

                ORI     =   6'b001101,

                XORI    =   6'b001110,

                LW      =   6'b100011,

                SW      =   6'b101011,

                BEQ     =   6'b000100,

                BNE     =   6'b000101,

                BLEZ    =   6'b000110,

                BGTZ    =   6'b000111,

                SLTI    =   6'b001010,

                SLTIU   =   6'b001011,

                LUI     =   6'b001111,

                J       =   6'b000010,

                JAL     =   6'b000011,

                LB      =   6'b100000,//    Load Byte Function=6'h24    

                LBU     =   6'b100100,//    1Load Byte Unsigned

                LH      =   6'b100001,//    Load high

                LHU     =   6'b100101,//    Load High Unsigned

                SB      =   6'b101000,//    Send Byte

                SH      =   6'b101001,//    Send High

                

                SPECIAL =   6'b000000,

                SPECIAL2=    6'b011100,

                REGIMM  =   6'b000001,

                COP0    =   6'b010000;  

    //ALU OPCODE                

    parameter   _ADDU   =   4'b0000;    //r=a+b unsigned

    parameter   _ADD    =   4'b0010;    //r=a+b signed

    parameter   _SUBU   =   4'b0001;    //r=a-b unsigned

    parameter   _SUB    =   4'b0011;    //r=a-b signed

    parameter   _AND    =   4'b0100;    //r=a&b

    parameter   _OR     =   4'b0101;    //r=a|b

    parameter   _XOR    =   4'b0110;    //r=a^b

    parameter   _NOR    =   4'b0111;    //r=~(a|b)

    

    parameter   _LUI    =   4'b1000;    //r={b[15:0],16'b0}

    parameter   _SLT    =   4'b1011;    //r=(a-b<0)?1:0 signed

    parameter   _SLTU   =   4'b1010;    //r=(a-b<0)?1:0 unsigned

    parameter   _SRA    =   4'b1100;    //r=b>>>a

    parameter   _SLL    =   4'b1110;    //r=b<<a

    parameter   _SRL    =   4'b1101;    //r=b>>a

    

    parameter    _SYSCALL=   4'b1000,

                _BREAK    =   4'b1001,

                _TEQ    =   4'b1101;

            

    wire [5:0]  op        =  instr[31:26];

    assign         rs        =  instr[25:21];

    assign         rt        =  instr[20:16];

    assign        rd        =  instr[15:11];

    wire [5:0]  func    =  instr[5:0];

    

    wire [4:0]  shamt   =  instr[10:6];

    wire [15:0] imm     =  instr[15:0];

    wire [25:0] addr    =  instr[25:0];

    

    parameter   SIGN    =   1'b1;

    parameter   UNSIGN  =   1'b0;

    wire     imm_sign    =   (op==ANDI||op==ORI||op==XORI)?UNSIGN:SIGN;

    

    wire [31:0] shamt_ext        =   {27'b0,shamt};

    wire [31:0] imm_ext            =   imm_sign?{{(16){imm[15]}},imm}:{16'b0,imm};

    reg  [31:0] load_data,clz_data;

    

    assign    waddr    =    (op==SPECIAL||op==SPECIAL2)?    rd:    (op==JAL)    ?5'b11111:rt;

    

    always@(*)begin

        case(op)

            SB:     reg_data    =   {24'b0,rdata2[7:0]};

            SH:     reg_data    =   {16'b0,rdata2[15:0]};

            SW:     reg_data    =   rdata2;

            default:reg_data    =    rdata2;

        endcase

        

        case(op)

            LB:     load_data   =   {{24{ram_data[7]}},ram_data[7:0]};

            LBU:    load_data   =   {24'b0,ram_data[7:0]};

            LH:     load_data   =   {{16{ram_data[15]}},ram_data[15:0]};

            LHU:    load_data   =   {16'b0,ram_data[15:0]};

            LW:     load_data   =   ram_data;

            default:load_data   =   ram_data;

        endcase

        

        if(op==SPECIAL)

            case(func)

                SYSCALL:cause    =    _SYSCALL;

                BREAK:    cause    =    _BREAK;

                TEQ:    cause    =    _TEQ;

                default:cause    =    5'b0;

            endcase

        else             cause    =    5'b0;

        

        /*

            1    mult

            2    multu

            3    div    

            4    divu

            5    mthi

            6    mtlo

            7    mul

        */

        

        if(op==SPECIAL)

            case(func)

                MULT:    mdu        =    3'h1;

                MULTU:    mdu        =    3'h2;

                DIV:    mdu        =    3'h3;

                DIVU:    mdu        =    3'h4;

                MTHI:    mdu        =    3'h5;

                MTLO:    mdu        =    3'h6;

                default:mdu        =    3'h0;

            endcase

        else             mdu        =    3'h0;

    end

    

    wire [31:0] npc                =   pc+4;

    

    wire [31:0] pc_branch        =   npc    +    {{(14){imm[15]}},imm,2'b00};

    wire [31:0] pc_jmp            =    {npc[31:28],addr,2'b00};

    assign    ram_addr    =   rdata1  +   imm_ext;

    assign    eret        =    op==COP0 && func==ERET;

    wire    mfc0        =    op==COP0 && rs==MFC0;

    assign    mtc0        =    op==COP0 && rs==MTC0;

    assign    teq_exc        =    rdata1==rdata2;

    

    parameter   ENA     =   1'b1;

    parameter   DIS     =   1'b0;

            

    wire mem_load   =   op==LB || op==LH || op==LBU || op==LHU || op==LW;

    assign ram_wena =   op==SW || op==SH || op==SB;

    

    integer i;    

    

    always@(*)begin

        

        case(op)

            SPECIAL: case(func)

                MULTU,

                DIV,

                DIVU,

                JR,

                MTHI,

                MTLO,

                BREAK,

                SYSCALL:reg_wena    =   DIS;

                default:reg_wena    =   ENA;    

            endcase

            COP0:       reg_wena    =   rs==MFC0?ENA:DIS;

            SPECIAL2,

            LB,

            LBU,

            LH,

            LHU,

            ADDI,

            ADDIU,

            ANDI,

            ORI,

            XORI,

            LW,

            SLTI,

            SLTIU,

            LUI,

            JAL:        reg_wena    =   ENA;            

            default:    reg_wena    =   DIS;

        endcase

        

        case(op)

            SPECIAL:case(func)

                JALR:    wdata   =   npc;

                MFHI:   wdata   =   hi;

                MFLO:   wdata   =   lo;

                default:wdata   =   alu_r;

            endcase

            SPECIAL2:begin

                if(func==CLZ) casez(rdata1)

                    32'b1???????????????????????????????:   wdata   =       32'h0;

                    32'b01??????????????????????????????:   wdata   =       32'h1;

                    32'b001?????????????????????????????:   wdata   =       32'h2;

                    32'b0001????????????????????????????:   wdata   =       32'h3;

                    32'b00001???????????????????????????:   wdata   =       32'h4;

                    32'b000001??????????????????????????:   wdata   =       32'h5;

                    32'b0000001?????????????????????????:   wdata   =       32'h6;

                    32'b00000001????????????????????????:   wdata   =       32'h7;

                    32'b000000001???????????????????????:   wdata   =       32'h8;

                    32'b0000000001??????????????????????:   wdata   =       32'h9;

                    32'b00000000001?????????????????????:   wdata   =       32'ha;

                    32'b000000000001????????????????????:   wdata   =       32'hb;

                    32'b0000000000001???????????????????:   wdata   =       32'hc;

                    32'b00000000000001??????????????????:   wdata   =       32'hd;

                    32'b000000000000001?????????????????:   wdata   =       32'he;

                    32'b0000000000000001????????????????:   wdata   =       32'hf;

                    32'b00000000000000001???????????????:   wdata   =       32'h10;

                    32'b000000000000000001??????????????:   wdata   =       32'h11;

                    32'b0000000000000000001?????????????:   wdata   =       32'h12;

                    32'b00000000000000000001????????????:   wdata   =       32'h13;

                    32'b000000000000000000001???????????:   wdata   =       32'h14;

                    32'b0000000000000000000001??????????:   wdata   =       32'h15;

                    32'b00000000000000000000001?????????:   wdata   =       32'h16;

                    32'b000000000000000000000001????????:   wdata   =       32'h17;

                    32'b0000000000000000000000001???????:   wdata   =       32'h18;

                    32'b00000000000000000000000001??????:   wdata   =       32'h19;

                    32'b000000000000000000000000001?????:   wdata   =       32'h1a;

                    32'b0000000000000000000000000001????:   wdata   =       32'h1b;

                    32'b00000000000000000000000000001???:   wdata   =       32'h1c;

                    32'b000000000000000000000000000001??:   wdata   =       32'h1d;

                    32'b0000000000000000000000000000001?:   wdata   =       32'h1e;

                    32'b00000000000000000000000000000001:   wdata   =        32'h1f;

                    32'b00000000000000000000000000000000:    wdata   =       32'h20;

                endcase

                 else if(func==MUL)    wdata    =    mul_out;

                 else                wdata   =   alu_r;

            end

            JAL:                    wdata   =   npc;

            LW,LB,LH,LBU,LHU:        wdata   =   load_data;

            COP0:    if(rs==MFC0)    wdata   =   cop_data;

                    else            wdata   =   alu_r;

            default:                wdata   =   alu_r;

        endcase

        //Below is OK

        

        case(op)

            SPECIAL: case(func)

                SLL,

                SRL,

                SRA:begin

                    alu_a   =   shamt_ext;

                    alu_b   =   rdata2;

                end

                default:begin

                    alu_a   =   rdata1;

                    alu_b   =   rdata2;

                end

            endcase

            ADDI,

            ADDIU,

            ANDI,

            ORI,

            XORI,

            SLTI,

            SLTIU,

            LUI:begin

                    alu_a   =   rdata1;

                    alu_b   =   imm_ext;

            end

            default:begin

                    alu_a   =   rdata1;

                    alu_b   =   rdata2;

            end

        endcase

        

        //PC Source     

        case(op)

            SPECIAL: case(func)

                SYSCALL,

                TEQ,

                BREAK:  pc_in  =   exc_addr;

                JALR,

                JR:     pc_in  =   rdata1;   

                default:pc_in  =   npc;

            endcase

            COP0: case(func)

                ERET:   pc_in  =   exc_addr;

                default:pc_in  =   npc;

            endcase

            REGIMM: case(rt)

                BLTZ:if(rdata1[31])

                        pc_in  =   pc_branch;

                    else

                        pc_in  =   npc;

                BGEZ:if(!rdata1[31])

                        pc_in  =   pc_branch;

                    else

                        pc_in  =   npc;

                default:pc_in  =   npc;

            endcase

            J,

            JAL:        pc_in  =   pc_jmp;

            BEQ:if(rdata1==rdata2)

                        pc_in  =   pc_branch;

                else    pc_in  =   npc;

            BNE:if(rdata1!=rdata2)

                        pc_in  =   pc_branch;

                else    pc_in  =   npc;

            BLEZ:if(rdata1[31] || rdata1==32'b0)

                        pc_in  =   pc_branch;

                else    pc_in  =   npc;

            BGTZ:if(!rdata1[31] && rdata1!=32'b0)

                        pc_in  =   pc_branch;

                else    pc_in  =   npc;

            default:    pc_in  =   npc;

        endcase

            

        case(op)

            SPECIAL:case(func)

                ADDU:       alu_op  =   _ADDU;

                SUBU:       alu_op  =   _SUBU;

                ADD:        alu_op  =   _ADD;

                SUB:        alu_op  =   _SUB;

                AND:        alu_op  =   _AND;

                OR:         alu_op  =   _OR;

                XOR:        alu_op  =   _XOR;

                NOR:        alu_op  =   _NOR;

                SLT:        alu_op  =   _SLT;

                SRL:        alu_op  =   _SRL;

                SLL:        alu_op  =   _SLL;

                SRA:        alu_op  =   _SRA;

                SLTU:       alu_op  =   _SLTU;

                SRLV:       alu_op  =   _SRL;

                SLLV:       alu_op  =   _SLL;

                SRAV:       alu_op  =   _SRA;

                default:    alu_op  =   _ADDU;

            endcase

            ORI:            alu_op  =   _OR;

            XORI:           alu_op  =   _XOR;

            BEQ:            alu_op  =   _SUBU;

            BNE:            alu_op  =   _SUBU;

            ANDI:           alu_op  =   _AND;

            ADDIU:          alu_op  =   _ADDU;

            ADDI:           alu_op  =   _ADD;

            SLTI:           alu_op  =   _SLT;

            SLTIU:          alu_op  =   _SLTU;

            LUI:            alu_op  =   _LUI;

            default:        alu_op  =   _ADDU;

        endcase

        

    end

endmodule

PC寄存器设计

    input clk,

    input rst,

    input ena,

    input [31:0] data_in,

    output [31:0] data_out

    );

    

    reg [31:0] data=32'b0;

 

    always @(posedge clk or posedge rst) begin

        if(rst) data<=32'h00400000;        //reset key

        else begin

            if(ena) data<=data_in;        //enable ,input

        end

    end

    

    assign data_out    =   data;

    

Endmodule

 

Regfiles设计

module RegFiles(

        input clk,

        input rst,

        input we,

        input [4:0] raddr1,

        input [4:0] raddr2,

        input [4:0] waddr,

        input [31:0] wdata,

        output [31:0] rdata1,

        output [31:0] rdata2

        );

    

    reg [31:0] data [0:31];

    

    always@(posedge clk or posedge rst) begin

        if(rst)  for(i=0;i<32;i=i+1) begin

            data[i]<=32'b0;

        end

        else begin

            if(we&&waddr!=5'b0) data[waddr]<=wdata;

        end

    end

    

Endmodule

 

ALU设计

module alu(

        input [31:0] a,        //OP1

        input [31:0] b,        //OP2

        input [3:0] aluc,    //controller

        output [31:0] r,    //result

        output zero,

        output carry,

        output negative,

        output overflow);

        

    parameter Addu    =    4'b0000;    //r=a+b unsigned

    parameter Add    =    4'b0010;    //r=a+b signed

    parameter Subu    =    4'b0001;    //r=a-b unsigned

    parameter Sub    =    4'b0011;    //r=a-b signed

    parameter And    =    4'b0100;    //r=a&b

    parameter Or    =    4'b0101;    //r=a|b

    parameter Xor    =    4'b0110;    //r=a^b

    parameter Nor    =    4'b0111;    //r=~(a|b)

    parameter Lui1    =    4'b1000;    //r={b[15:0],16'b0}

    parameter Lui2    =    4'b1001;    //r={b[15:0],16'b0}

    parameter Slt    =    4'b1011;    //r=(a-b<0)?1:0 signed

    parameter Sltu    =    4'b1010;    //r=(a-b<0)?1:0 unsigned

    parameter Sra    =    4'b1100;    //r=b>>>a

    parameter Sll    =    4'b1110;    //r=b<<a

    parameter Srl    =    4'b1101;    //r=b>>a

    

    parameter bits=31;

    parameter ENABLE=1,DISABLE=0;

    

    reg [32:0] result;

    wire signed [31:0] sa=a,sb=b;

    

    always@(*)begin

        case(aluc)

            Addu: begin

                result=a+b;

            end

            Subu: begin

                result=a-b;

            end

            Add: begin

                result=sa+sb;

            end

            Sub: begin

                result=sa-sb;

            end

            Sra: begin

                if(a==0) {result[31:0],result[32]}={b,1'b0};

                else {result[31:0],result[32]}=sb>>>(a-1);

            end

            Srl: begin

                if(a==0) {result[31:0],result[32]}={b,1'b0};

                else {result[31:0],result[32]}=b>>(a-1);

            end

            Sll: begin

                result=b<<a;

            end

            And: begin

                result=a&b;

            end

            Or: begin

                result=a|b;

            end

            Xor: begin

                result=a^b;

            end

            Nor: begin

                result=~(a|b);

            end

            Sltu: begin

                result=a<b?1:0;

            end

            Slt: begin

                result=sa<sb?1:0;

            end

            Lui1,Lui2: result = {b[15:0], 16'b0};

            default:

                result=a+b;

        endcase

    end

    

    assign r=result[31:0];

    assign carry = result[32];

    assign zero=(r==32'b0)?1:0;

    assign negative=result[31];

    assign overflow=result[32];

Endmodule

 

RAM设计

module ram(

        input clk,

        input wena,

        input [8:0] addr,

        input [31:0] data_in,

        output [31:0] data_out

        );

    

    reg [31:0] state [0:512];

    always@(posedge clk) begin

        if(wena) begin

            if(addr!=0) state[addr]<=data_in;

        end

    end 

 

    assign data_out=state[addr];endmodule

 Pango Design Suite 仿真


扫码免费申请试用

推荐阅读

紫光同创PGL22G开发平台试用连载(3)——驱动OV5640 摄像头实现sobel算子边缘检测算法

紫光同创PGL22G开发平台试用连载(2)——基于SD卡的音频MP3播放器

紫光同创PGL22G开发平台试用连载(1)——开发板硬件软件初步评估篇

紫光同创PGL22G开发平台试用连载-(4)以太网测试工程三

紫光同创PGL22G开发平台试用连载(3)---以太网测试工程二

紫光同创PGL22G开发平台试用连载-(2)以太网测试工程一

紫光同创PGL22G开发平台试用连载-(1)软硬件初步体验

紫光同创PGL22G开发平台试用连载(8)---程序密码之程序篇

紫光同创PGL22G开发平台试用连载(7)---程序密码之理论篇

紫光同创PGL22G开发平台试用连载(6)---边缘检测之综合篇

紫光同创PGL22G开发平台试用连载(5)---边缘检测之算法篇

紫光同创PGL22G开发平台试用连载(4)---边缘检测之串口通信篇

紫光同创PGL22G开发平台试用连载(3)---重点功能初探

紫光同创PGL22G开发平台试用连载(2)---基本流程dome

紫光同创PGL22G开发平台试用连载(1)---软件和器件

紫光同创PGL22G开发平台试用连载(1)-FPGA参数分析和对比

紫光同创PGL22G开发平台试用连载(2)---PDS软件试用

紫光同创PGL22G开发平台试用连载(3)---在FPGA上实现DW8051 MCU

FPGA开发圈 这里介绍、交流、有关FPGA开发资料(文档下载,技术解答等),提升FPGA应用能力。
评论
  • 一个真正的质量工程师(QE)必须将一件产品设计的“意图”与系统的可制造性、可服务性以及资源在现实中实现设计和产品的能力结合起来。所以,可以说,这确实是一种工程学科。我们常开玩笑说,质量工程师是工程领域里的「侦探」、「警察」或「律师」,守护神是"墨菲”,信奉的哲学就是「墨菲定律」。(注:墨菲定律是一种启发性原则,常被表述为:任何可能出错的事情最终都会出错。)做质量工程师的,有时会不受欢迎,也会被忽视,甚至可能遭遇主动或被动的阻碍,而一旦出了问题,责任往往就落在质量工程师的头上。虽然质量工程师并不负
    优思学院 2025-01-09 11:48 115浏览
  • 在当前人工智能(AI)与物联网(IoT)的快速发展趋势下,各行各业的数字转型与自动化进程正以惊人的速度持续进行。如今企业在设计与营运技术系统时所面临的挑战不仅是技术本身,更包含硬件设施、第三方软件及配件等复杂的外部因素。然而这些系统往往讲究更精密的设计与高稳定性,哪怕是任何一个小小的问题,都可能对整体业务运作造成严重影响。 POS应用环境与客户需求以本次分享的客户个案为例,该客户是一家全球领先的信息技术服务与数字解决方案提供商,遭遇到一个由他们所开发的POS机(Point of Sal
    百佳泰测试实验室 2025-01-09 17:35 112浏览
  • Snyk 是一家为开发人员提供安全平台的公司,致力于协助他们构建安全的应用程序,并为安全团队提供应对数字世界挑战的工具。以下为 Snyk 如何通过 CircleCI 实现其“交付”使命的案例分析。一、Snyk 的挑战随着客户对安全工具需求的不断增长,Snyk 的开发团队面临多重挑战:加速交付的需求:Snyk 的核心目标是为开发者提供更快、更可靠的安全解决方案,但他们的现有 CI/CD 工具(TravisCI)运行缓慢,无法满足快速开发和部署的要求。扩展能力不足:随着团队规模和代码库的不断扩大,S
    艾体宝IT 2025-01-10 15:52 49浏览
  • HDMI 2.2 规格将至,开启视听新境界2025年1月6日,HDMI Forum, Inc. 宣布即将发布HDMI规范2.2版本。新HDMI规范为规模庞大的 HDMI 生态系统带来更多选择,为创建、分发和体验理想的终端用户效果提供更先进的解决方案。新技术为电视、电影和游戏工作室等内容制作商在当前和未来提供更高质量的选择,同时实现多种分发平台。96Gbps的更高带宽和新一代 HDMI 固定比率速率传输(Fixed Rate Link)技术为各种设备应用提供更优质的音频和视频。终端用户显示器能以最
    百佳泰测试实验室 2025-01-09 17:33 117浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球中空长航时无人机产值达到9009百万美元,2024-2030年期间年复合增长率CAGR为8.0%。 环洋市场咨询机构出版了的【全球中空长航时无人机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球中空长航时无人机总体规模,包括产量、产值、消费量、主要生产地区、主要生产商及市场份额,同时分析中空长航时无人机市场主要驱动因素、阻碍因素、市场机遇、挑战、新产品发布等。报告从中空长航时
    GIRtina 2025-01-09 10:35 99浏览
  • 在过去十年中,自动驾驶和高级驾驶辅助系统(AD/ADAS)软件与硬件的快速发展对多传感器数据采集的设计需求提出了更高的要求。然而,目前仍缺乏能够高质量集成多传感器数据采集的解决方案。康谋ADTF正是应运而生,它提供了一个广受认可和广泛引用的软件框架,包含模块化的标准化应用程序和工具,旨在为ADAS功能的开发提供一站式体验。一、ADTF的关键之处!无论是奥迪、大众、宝马还是梅赛德斯-奔驰:他们都依赖我们不断发展的ADTF来开发智能驾驶辅助解决方案,直至实现自动驾驶的目标。从新功能的最初构思到批量生
    康谋 2025-01-09 10:04 99浏览
  • 车机导航有看没有懂?智能汽车语系在地化不可轻忽!随着智能汽车市场全球化的蓬勃发展,近年来不同国家地区的「Automotive Localization」(汽车在地化)布局成为兵家必争之地,同时也是车厂在各国当地市场非常关键的营销利器。汽车在地化过程中举足轻重的「汽车语系在地化」,则是透过智能汽车产品文字与服务内容的设计订制,以对应不同国家地区用户的使用习惯偏好,除了让当地车主更能清楚理解车辆功能,也能进一步提高品牌满意度。客户问题与难处某车厂客户预计在台湾市场推出新一代车款,却由于车机导航开发人
    百佳泰测试实验室 2025-01-09 17:47 27浏览
  • 职场是人生的重要战场,既是谋生之地,也是实现个人价值的平台。然而,有些思维方式却会悄无声息地拖住你的后腿,让你原地踏步甚至退步。今天,我们就来聊聊职场中最忌讳的五种思维方式,看看自己有没有中招。1. 固步自封的思维在职场中,最可怕的事情莫过于自满于现状,拒绝学习和改变。世界在不断变化,行业的趋势、技术的革新都在要求我们与时俱进。如果你总觉得自己的方法最优,或者害怕尝试新事物,那就很容易被淘汰。与其等待机会找上门,不如主动出击,保持学习和探索的心态。加入优思学院,可以帮助你快速提升自己,与行业前沿
    优思学院 2025-01-09 15:48 102浏览
  • 在智能网联汽车中,各种通信技术如2G/3G/4G/5G、GNSS(全球导航卫星系统)、V2X(车联网通信)等在行业内被广泛使用。这些技术让汽车能够实现紧急呼叫、在线娱乐、导航等多种功能。EMC测试就是为了确保在复杂电磁环境下,汽车的通信系统仍然可以正常工作,保护驾乘者的安全。参考《QCT-基于LTE-V2X直连通信的车载信息交互系统技术要求及试验方法-1》标准10.5电磁兼容试验方法,下面将会从整车功能层面为大家解读V2X整车电磁兼容试验的过程。测试过程揭秘1. 设备准备为了进行电磁兼容试验,技
    北汇信息 2025-01-09 11:24 100浏览
  • 1月9日,在2025国际消费电子展览会(CES)期间,广和通发布集智能语音交互及翻译、4G/5G全球漫游、随身热点、智能娱乐、充电续航等功能于一体的AI Buddy(AI陪伴)产品及解决方案,创新AI智能终端新品类。AI Buddy是一款信用卡尺寸的掌中轻薄智能设备,为用户带来实时翻译、个性化AI语音交互助手、AI影像识别、多模型账户服务、漫游资费服务、快速入网注册等高品质体验。为丰富用户视觉、听觉的智能化体验,AI Buddy通过蓝牙、Wi-Fi可配套OWS耳机、智能眼镜、智能音箱、智能手环遥
    物吾悟小通 2025-01-09 18:21 34浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2025-01-09 09:58 81浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦