当前位置:首页 > 指令集
  • 51单片机指令集设计实例

    当你编写完一个程序后,通过软件调试,你可以看到程序的指令集,从指令集你就能知道单片机内部是如何工作的,比如数据存取的寄存器与地址,下面是电工之家找的一篇指令集,讲的蛮好的。 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX(Move External RAM)对外部RAM的数据传送; XCH(Exchange)字节交换; XCHD(Exchange low-order Digit)低半字节交换; PUSH(Push onto Stack)入栈; POP (Pop from Stack)出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC(Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap)低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移; JC (Jump if the Carry flag is set)有进位则转移; JNC (Jump if Not Carry)无进位则转移; JB (Jump if the Bit is set)位为1则转移; JNB (Jump if the Bit is Not set) 位为0则转移; JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位; NOP (No Operation)空操作; 五、位操作指令(1种助记符) CLR 位清零; SETB(Set Bit)位 置1 。 8种常用伪指令 1.ORG 16位地址 ; 此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址。 2.[标号:] DB 字节数据项表; 将项表中的字节数据存放到从标号开始的连续字节单元中。例如:SEG: DB 88H,100,“7”,“C” 3.[标号:]DW 双字节数据项表; 定义16位地址表,16地址按低位地址存低位字节,高位地址存高位字节。 例如:TAB: DW 1234H,7BH 4.名字 EQU 表达式 或名字=表达式; 用与给一个表达式赋值或给字符串起名字。之后名字可用做程序地址,数据地址或立即数地址使用。名字必须是一字母开头的字母数字串。 例如:COUNT=10 或 SPACE EQU 10H 5.名字 DATA 直接字节地址; 给8位内部RAM单元起个名字,名字必须是一字母开头的字母数字串。同一单元可起多个名字。 例如:ERROR DATA 80H 6.名字 XDATA 直接字节地址; 给8位外部RAM起个名字,名字规定同DATA伪指令。 例如:IO_PORT XDATA 0CF04H 7.名字 BIT 位指令; 给一可位寻址的位单元起个名字,规定同DATA伪指令。 例如:SWT BIT 30H 8.[标号:]END; 指出源程序到此结束,汇编对其后的程序语句不予理睬。源程序只在主程序最后使用一个END。 1.数据传送指令(30条) MOV A,Rn 寄存器送 A 1 1 E8--EF MOV A,data 直接字节送A 2 1 E5 MOV A,@Ri 间接RAM 送A 1 1 E6--E7 MOV A,#data 立接数送 A 2 1 74 MOV Rn,A A 送寄存器 1 1 F8--FF MOV Rn,data 直接数送寄存器 2 2 A8--AF MOV Rn,#data 立即数送寄存器 2 1 78--7F MOV data,A A 送直接字节 2 1 F5 MOV data,Rn 寄存器送直接字节 2 1 88—8F MOV data,data 直接字节送直接字节 3 2 85 MOV data,@Ri 间接 Rn 送直接字节 2 2 86;87 MOV data,#data 立即数送直接字节 3 2 75 MOV @Ri,A A 送间接 Rn 1 2 F6;F7 MOV @Ri,data 直接字节送间接Rn 1 1 A6;A7 MOV @Ri,#data 立即数送间接 Rn 2 2 76;77 MOV DPTR,#data16 16 位常数送数据指针 3 1 90 MOV C,bit 直接位送进位位 2 1 A2 MOV bit,C 进位位送直接位 2 2 92 MOVC A,@A+DPTR A+DPTR 寻址程序存贮字节送 A 3 2 93 MOVC A,@A+PC A+PC 寻址程序存贮字节送A 1 2 83 MOVX A,@Ri 外部数据送A(8 位地址) 1 2 E2;E3 MOVX A,@DPTR 外部数据送A(16 位地址) 1 2 E0 MOVX @Ri,A A 送外部数据(8 位地址) 1 2 F2;F3 MOVX @DPTR,A A 送外部数据(16 位地址) 1 2 F0 PUSH data 直接字节进栈道,SP 加1 2 2 C0 POP data 直接字节出栈,SP 减1 2 2 D0 XCH A,Rn 寄存器与 A 交换 1 1 C8—CF XCH A,data 直接字节与A 交换 2 1 C5 XCH A,@Ri 间接Rn 与A 交换 1 1 C6;C7 XCHD A,@Ri 间接Rn 与A 低半字节交换 1 1 D6;D7 2.逻辑运算指令(35条) ANL A,Rn 寄存器与到A 1 1 58—5F ANL A,data 直接字节与到A 2 1 55 ANL A,@Ri 间接RAM与到A 1 1 56;57 ANL A,#data 立即数与到A 2 1 54 ANL data,A A与到直接字节 2 1 52 ANL data,#data 立即数与到直接字节 3 2 53 ANL C,bit 直接位与到进位位 2 2 82 ANL C,/bit 直接位的反码与到进位位 2 2 B0 ORL A,Rn 寄存器或到A 1 1 48—4F ORL A,data 直接字节或到A 2 1 45 ORL A,@Ri 间接RAM或到A 1 1 46;47 ORL A,#data 立即数或到A 2 1 44 ORL data,A A或到直接字节 2 1 42 ORL data,#data 立即数或到直接字节 3 2 43 ORL C,bit 直接位或到进位位 2 2 72 ORL C,/bit 直接位的反码或到进位位 2 2 A0 XRL A,Rn 寄存器异或到A 1 1 68—6F XRL A,data 直接字节异或到A 2 1 65 XRL A,@Ri 间接RAM异或到A 1 1 66;67 XRL A,#data 立即数异或到A 2 1 64 XRL data,A A异或到直接字节 2 1 62 XRL data,#data 立即数异或到直接字节 3 2 63 SETB C 进位位置 1 1 1 D3 SETB bit 直接位置 1 2 1 D2 CLR A A清0 1 1 E4 CLR C 进位位清 0 1 1 C3 CLR bit 直接位清 0 2 1 C2 CPL A A求反码 1 1 F4 CPL C 进位位取反 1 1 B3 CPL bit 直接位取反 2 1 B2 RL A A循环左移一位 1 1 23 RLC A A 带进位左移一位 1 1 33 RR A A右移一位 1 1 03 RRC A A 带进位右移一位 1 1 13 SWAP A A 半字节交换 1 1 C4 3.算术运算指令(24条) ADD A,Rn 寄存器加到A 1 1 28—2F ADD A,data 直接字节加到A 2 1 25 ADD A,@Ri 间接RAM 加到A 1 1 26;27 ADD A,#data 立即数加到A 2 1 24 ADDC A,Rn 寄存器带进位加到 A 1 1 38—3F ADDC A,data 直接字节带进位加到A 2 1 35 ADDC A,@Ri 间接RAM 带进位加到A 1 1 36;37 ADDC A,#data 立即数带进位加到 A 2 1 34 SUBB A,Rn 从A 中减去寄存器和进位 1 1 98—9F SUBB A,data 从A 中减去直接字节和进位 2 1 95 SUBB A,@Ri 从A 中减去间接RAM 和进位 1 1 96;97 SUBB A,#data 从A 中减去立即数和进位 2 1 94 INC A A加1 1 1 04 INC Rn 寄存器加 1 1 1 08—0F INC data 直接字节加1 2 1 05 INC @Ri 间接RAM 加1 1 1 06;07 INC DPTR 数据指针加1 1 2 A3 DEC A A减1 1 1 14 DEC Rn 寄存器减 1 1 1 18—1F DEC data 直接字节减1 2 1 15 DEC @Ri 间接RAM 减1 1 1 16;17 MUL AB A乘B 1 4 A4 DIV AB A被B除 1 4 84 DA A A十进制调整 1 1 D4 4.转移指令(22条) AJMP addr 11 绝对转移 2 2 *1 LJMP addr 16 长转移 3 2 02 SJMP rel 短转移 2 2 80 JMP @A+DPTR 相对于DPTR 间接转移 1 2 73 JZ rel 若A=0 则转移 2 2 60 JNZ rel 若A≠0 则转移 2 2 70 JC rel 若C=1 则转移 2 2 40 JNC rel 若C≠1 则转移 2 2 50 JB bit,rel 若直接位=1 则转移 3 2 20 JNB bit,rel 若直接位=0 则转移 3 2 30 JBC bit,rel 若直接位=1 则转移且清除 3 2 10 CJNE A,data,rel 直接数与 A 比较,不等转移 3 2 B5 CJNE A,#data,rel 立即数与 A 比较,不等转移 3 2 B4 CJNE @Ri,#data,rel 立即数与间接RAM比较,不等转移 3 2 B6;B7 CJNE Rn,#data,rel 立即数与寄存器比较不等转移 3 2 B8—BF DJNZ Rn,rel 寄存器减 1 不为0 转移 2 2 D8—DF DJNZ data,rel 直接字节减1 不为 0 转移 3 2 D5 ACALL addr 11 绝对子程序调用 2 2 *1 LCALL addr 16 子程序调用 3 2 12 RET 子程序调用返回 1 2 22 RETI 中断程序调用返回 1 2 32 NOP 空操作 1 1 00

    时间:2021-03-05 关键词: 51单片机 指令集 设计实例

  • 51单片机指令集设计实例

    当你编写完一个程序后,通过软件调试,你可以看到程序的指令集,从指令集你就能知道单片机内部是如何工作的,比如数据存取的寄存器与地址,下面是电工之家找的一篇指令集,讲的蛮好的。   一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX(Move External RAM)对外部RAM的数据传送; XCH(Exchange)字节交换; XCHD(Exchange low-order Digit)低半字节交换; PUSH(Push onto Stack)入栈; POP (Pop from Stack)出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC(Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap)低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移; JC (Jump if the Carry flag is set)有进位则转移; JNC (Jump if Not Carry)无进位则转移; JB (Jump if the Bit is set)位为1则转移; JNB (Jump if the Bit is Not set) 位为0则转移; JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位; NOP (No Operation)空操作; 五、位操作指令(1种助记符) CLR 位清零; SETB(Set Bit)位 置1 。 8种常用伪指令 1.ORG 16位地址 ; 此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址。 2.[标号:] DB 字节数据项表; 将项表中的字节数据存放到从标号开始的连续字节单元中。例如:SEG: DB 88H,100,“7”,“C” 3.[标号:]DW 双字节数据项表; 定义16位地址表,16地址按低位地址存低位字节,高位地址存高位字节。 例如:TAB: DW 1234H,7BH 4.名字 EQU 表达式 或名字=表达式; 用与给一个表达式赋值或给字符串起名字。之后名字可用做程序地址,数据地址或立即数地址使用。名字必须是一字母开头的字母数字串。 例如:COUNT=10 或 SPACE EQU 10H 5.名字 DATA 直接字节地址; 给8位内部RAM单元起个名字,名字必须是一字母开头的字母数字串。同一单元可起多个名字。 例如:ERROR DATA 80H 6.名字 XDATA 直接字节地址; 给8位外部RAM起个名字,名字规定同DATA伪指令。 例如:IO_PORT XDATA 0CF04H 7.名字 BIT 位指令; 给一可位寻址的位单元起个名字,规定同DATA伪指令。 例如:SWT BIT 30H 8.[标号:]END; 指出源程序到此结束,汇编对其后的程序语句不予理睬。源程序只在主程序最后使用一个END。 1.数据传送指令(30条) MOV A,Rn 寄存器送 A 1 1 E8--EF MOV A,data 直接字节送A 2 1 E5 MOV A,@Ri 间接RAM 送A 1 1 E6--E7 MOV A,#data 立接数送 A 2 1 74 MOV Rn,A A 送寄存器 1 1 F8--FF MOV Rn,data 直接数送寄存器 2 2 A8--AF MOV Rn,#data 立即数送寄存器 2 1 78--7F MOV data,A A 送直接字节 2 1 F5 MOV data,Rn 寄存器送直接字节 2 1 88—8F MOV data,data 直接字节送直接字节 3 2 85 MOV data,@Ri 间接 Rn 送直接字节 2 2 86;87 MOV data,#data 立即数送直接字节 3 2 75 MOV @Ri,A A 送间接 Rn 1 2 F6;F7 MOV @Ri,data 直接字节送间接Rn 1 1 A6;A7 MOV @Ri,#data 立即数送间接 Rn 2 2 76;77 MOV DPTR,#data16 16 位常数送数据指针 3 1 90 MOV C,bit 直接位送进位位 2 1 A2 MOV bit,C 进位位送直接位 2 2 92 MOVC A,@A+DPTR A+DPTR 寻址程序存贮字节送 A 3 2 93 MOVC A,@A+PC A+PC 寻址程序存贮字节送A 1 2 83 MOVX A,@Ri 外部数据送A(8 位地址) 1 2 E2;E3 MOVX A,@DPTR 外部数据送A(16 位地址) 1 2 E0 MOVX @Ri,A A 送外部数据(8 位地址) 1 2 F2;F3 MOVX @DPTR,A A 送外部数据(16 位地址) 1 2 F0 PUSH data 直接字节进栈道,SP 加1 2 2 C0 POP data 直接字节出栈,SP 减1 2 2 D0 XCH A,Rn 寄存器与 A 交换 1 1 C8—CF XCH A,data 直接字节与A 交换 2 1 C5 XCH A,@Ri 间接Rn 与A 交换 1 1 C6;C7 XCHD A,@Ri 间接Rn 与A 低半字节交换 1 1 D6;D7 2.逻辑运算指令(35条) ANL A,Rn 寄存器与到A 1 1 58—5F ANL A,data 直接字节与到A 2 1 55 ANL A,@Ri 间接RAM与到A 1 1 56;57 ANL A,#data 立即数与到A 2 1 54 ANL data,A A与到直接字节 2 1 52 ANL data,#data 立即数与到直接字节 3 2 53 ANL C,bit 直接位与到进位位 2 2 82 ANL C,/bit 直接位的反码与到进位位 2 2 B0 ORL A,Rn 寄存器或到A 1 1 48—4F ORL A,data 直接字节或到A 2 1 45 ORL A,@Ri 间接RAM或到A 1 1 46;47 ORL A,#data 立即数或到A 2 1 44 ORL data,A A或到直接字节 2 1 42 ORL data,#data 立即数或到直接字节 3 2 43 ORL C,bit 直接位或到进位位 2 2 72 ORL C,/bit 直接位的反码或到进位位 2 2 A0 XRL A,Rn 寄存器异或到A 1 1 68—6F XRL A,data 直接字节异或到A 2 1 65 XRL A,@Ri 间接RAM异或到A 1 1 66;67 XRL A,#data 立即数异或到A 2 1 64 XRL data,A A异或到直接字节 2 1 62 XRL data,#data 立即数异或到直接字节 3 2 63 SETB C 进位位置 1 1 1 D3 SETB bit 直接位置 1 2 1 D2 CLR A A清0 1 1 E4 CLR C 进位位清 0 1 1 C3 CLR bit 直接位清 0 2 1 C2 CPL A A求反码 1 1 F4 CPL C 进位位取反 1 1 B3 CPL bit 直接位取反 2 1 B2 RL A A循环左移一位 1 1 23 RLC A A 带进位左移一位 1 1 33 RR A A右移一位 1 1 03 RRC A A 带进位右移一位 1 1 13 SWAP A A 半字节交换 1 1 C4 3.算术运算指令(24条) ADD A,Rn 寄存器加到A 1 1 28—2F ADD A,data 直接字节加到A 2 1 25 ADD A,@Ri 间接RAM 加到A 1 1 26;27 ADD A,#data 立即数加到A 2 1 24 ADDC A,Rn 寄存器带进位加到 A 1 1 38—3F ADDC A,data 直接字节带进位加到A 2 1 35 ADDC A,@Ri 间接RAM 带进位加到A 1 1 36;37 ADDC A,#data 立即数带进位加到 A 2 1 34 SUBB A,Rn 从A 中减去寄存器和进位 1 1 98—9F SUBB A,data 从A 中减去直接字节和进位 2 1 95 SUBB A,@Ri 从A 中减去间接RAM 和进位 1 1 96;97 SUBB A,#data 从A 中减去立即数和进位 2 1 94 INC A A加1 1 1 04 INC Rn 寄存器加 1 1 1 08—0F INC data 直接字节加1 2 1 05 INC @Ri 间接RAM 加1 1 1 06;07 INC DPTR 数据指针加1 1 2 A3 DEC A A减1 1 1 14 DEC Rn 寄存器减 1 1 1 18—1F DEC data 直接字节减1 2 1 15 DEC @Ri 间接RAM 减1 1 1 16;17 MUL AB A乘B 1 4 A4 DIV AB A被B除 1 4 84 DA A A十进制调整 1 1 D4 4.转移指令(22条) AJMP addr 11 绝对转移 2 2 *1 LJMP addr 16 长转移 3 2 02 SJMP rel 短转移 2 2 80 JMP @A+DPTR 相对于DPTR 间接转移 1 2 73 JZ rel 若A=0 则转移 2 2 60 JNZ rel 若A≠0 则转移 2 2 70 JC rel 若C=1 则转移 2 2 40 JNC rel 若C≠1 则转移 2 2 50 JB bit,rel 若直接位=1 则转移 3 2 20 JNB bit,rel 若直接位=0 则转移 3 2 30 JBC bit,rel 若直接位=1 则转移且清除 3 2 10 CJNE A,data,rel 直接数与 A 比较,不等转移 3 2 B5 CJNE A,#data,rel 立即数与 A 比较,不等转移 3 2 B4 CJNE @Ri,#data,rel 立即数与间接RAM比较,不等转移 3 2 B6;B7 CJNE Rn,#data,rel 立即数与寄存器比较不等转移 3 2 B8—BF DJNZ Rn,rel 寄存器减 1 不为0 转移 2 2 D8—DF DJNZ data,rel 直接字节减1 不为 0 转移 3 2 D5 ACALL addr 11 绝对子程序调用 2 2 *1 LCALL addr 16 子程序调用 3 2 12 RET 子程序调用返回 1 2 22 RETI 中断程序调用返回 1 2 32 NOP 空操作 1 1 00

    时间:2021-03-03 关键词: 51单片机 指令集 设计实例

  • RISC-V处理器是如何设计指令集的?有何特别之处

    20 世纪 90 年代末,RISC 和 CISC 爆发了一场大战,自那以后,大家却说 RISC 和 CISC 的区别没那么重要了了。许多人表示,指令集也就那么回事,对 CPU 没什么太大的影响。但其实不然,指令集决定了我们可以轻松为微处理器做哪些优化。本文将介绍 RISC-V 处理器是如何设计指令集的,这样的设计具有什么好处。 20 世纪 90 年代末,RISC 和 CISC 爆发了一场大战,自那以后,大家却说 RISC 和 CISC 的区别没那么重要了了。许多人表示,指令集也就那么回事,对 CPU 没什么太大的影响。 但其实不然,指令集决定了我们可以轻松为微处理器做哪些优化。 我最近一直在了解有关 RISC-V 指令集架构 (ISA) 的更多信息,说起来,关于 RISC-V ISA 有几件事给我留下了非常深刻的印象: 它是一种 RISC 指令集,体积小,易于学习。不管是任何人,只要有兴趣学习微处理器,选它准没错。 它在大学数字化设计教学中占据重要地位:为什么大学要学 RISC-V 经过巧妙地设计,它允许 CPU 设计生产者使用 RISC-V ISA 打造高性能微处理器。 无需授权费,且被设计成允许简单的硬件实现,按道理,专业爱好者可以在合理的时间内完成他自己的 RISC-V CPU 设计。 易于修改和使用的开源设计:The Berkely Out-of-Order (BOOM) RISC-V 处理器 压缩指令和宏融合 然而,在 CPU 设计中有两项特别的创新,这些创新从许多方面使添加更多复杂指令的策略变得多余: ·压缩指令——在内存中压缩指令,并在 CPU 的第一阶段进行解压。 ·宏融合——将两个或两个以上由 CPU 读取的简单指令融合成一个复杂指令。 实际上 ARM 已经采用了这两种策略,而 x86 CPU 则采用了后者,所以这不能算是 RISC-V 的新招术。 然而,关键是 RISC-V 从这些策略中获得了更大的优势,这里面有两个重要原因: 它从一开始就添加了压缩指令。在 ARM 上使用的是 Thumb2 压缩指令格式,这就必须将其作为一个单独的 ISA 来添加以完成改造,这需要一个内部模式切换和单独的解码器来进行处理。RISC-V 压缩指令可以添加到具有 400 个额外逻辑门 (AND、OR、NOR、NAND 门) 的 CPU 上。 2.RISC 执着地控制独特指令的数量得到了回报,如此就有了更多的空间来容纳压缩指令。 指令编码 这一部分需要进行一些解释。指令在 RISC 体系结构上通常是 32 位(即比特)宽的。这些比特需要用来编码不同的信息。例如,下面这样一条指令: ADD x1, x4, x8 # x1 ← x4 + x8 这条指令将累加寄存器 x4 和 x8 的内容,然后将结果存储在 x1 中。我们需要多少比特来编码,这取决于我们有多少寄存器。RISC-V 和 ARM64 有 32 个寄存器。可以用 5 比特表示数字 32: 2⁵ = 32 因为我们需要指定 3 个不同的寄存器,所以我们需要总共 15 比特 (3×5) 来编码操作数 (累加操作的输入)。 因此,我们想要在指令集中支持的东西越多,那么就会消耗掉那 32 比特中更多的比特。当然,我们可以使用 64 位指令,但是这会消耗太多的内存,从而降低性能。 通过刻意压低指令的数量,RISC-V 节省下更多的空间来添加表示我们正在使用的压缩指令的比特。如果 CPU 看到指令中的某些位被设置为 1,它就知道这条指令应该作为一条压缩指令来进行解释。 为什么不能在代码中直接编写此宏操作? 因为我们的 ISA 不包含对它的支持!记住,可用的比特数是有限的。为什么不把说明写长一点呢?不行,那样会消耗太多的内存,并且会更快填满宝贵的 CPU 缓存。 然而,如果我们在 CPU 内部制造这些半复杂的长指令,也没有什么可担心的。CPU 在任何时候所面对的指令最多也不过几百条。所以在每条指令上浪费个 128 比特不是什么大问题。每个人都有足够的硅。 因此,当解码器得到一条正常指令时,它通常会把它转换成一个或多个“微”操作。这些“微”操作是 CPU 实际要处理的指令。它们可以非常地“宽广”,包含很多额外的有用信息。称之为“微”似乎有些讽刺,因为它们其实很“广”。然而事实上“微”指的是它们做的任务数量有限。 RISC-V 设计策略 RISC-V 利用了我们当今对现代 CPU 的了解,并用这些知识指导了他们在设计时的选择。例如,我们知道: 如今,CPU 内核会提前做分支预测。它们的预测正确率超过 90%。 CPU 内核是超标量体系结构的,这意味着它们在并行执行多条指令。 使用无序执行做到超标量体系结构。 它们是流水线式的。 这意味着不再需要像 ARM 所支持的条件执行等之类的事情。在 ARM 上支持它会消耗掉指令格式中的一些字节。RISC-V 可以节省这些比特。 条件执行的最初目的是避免分支,因为它们不利于流水线。CPU 要想快速运行,通常会预取下一条指令,这样在前一条指令完成第一阶段后,它就可以快速地选取下一条指令。 但是使用条件转移,当你开始填充流水线时,你不知道下一条指令将在哪里。然而,超标量 CPU 可以简单地并行执行两个分支。 这也是 RISV-C 没有状态寄存器的原因。因为这会导致指令之间的依赖性。每条指令越独立,就越容易与另一条指令并行运行。 RISC-V 策略基本上是,我们如何使 ISA 尽可能简单,使 RISC-V CPU 的最小实现尽可能简单,而无需做出影响 CPU 性能的设计决策。 来源:AI前线 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

    时间:2021-03-02 关键词: 处理器 RISC-V 指令集

  • 如何设计RISC-V指令集?

    20 世纪 90 年代末,RISC 和 CISC 爆发了一场大战,自那以后,大家却说 RISC 和 CISC 的区别没那么重要了了。许多人表示,指令集也就那么回事,对 CPU 没什么太大的影响。但其实不然,指令集决定了我们可以轻松为微处理器做哪些优化。本文将介绍 RISC-V 处理器是如何设计指令集的,这样的设计具有什么好处。 20 世纪 90 年代末,RISC 和 CISC 爆发了一场大战,自那以后,大家却说 RISC 和 CISC 的区别没那么重要了了。许多人表示,指令集也就那么回事,对 CPU 没什么太大的影响。 但其实不然,指令集决定了我们可以轻松为微处理器做哪些优化。 我最近一直在了解有关 RISC-V 指令集架构 (ISA) 的更多信息,说起来,关于 RISC-V ISA 有几件事给我留下了非常深刻的印象: 它是一种 RISC 指令集,体积小,易于学习。不管是任何人,只要有兴趣学习微处理器,选它准没错。 它在大学数字化设计教学中占据重要地位:为什么大学要学 RISC-V 经过巧妙地设计,它允许 CPU 设计生产者使用 RISC-V ISA 打造高性能微处理器。 无需授权费,且被设计成允许简单的硬件实现,按道理,专业爱好者可以在合理的时间内完成他自己的 RISC-V CPU 设计。 易于修改和使用的开源设计:The Berkely Out-of-Order (BOOM) RISC-V 处理器  RISC 的复仇 当我开始更深入地理解 RISC-V 时,意识到 RISC-V 是一种根本性的转变,它回到了许多人认为已经过时的计算时代。在设计方面,RISC- V 就像乘着时光机穿越回了上世纪八九十年代的经典 RISC 时代。 近年来,许多人指出 RISC 和 CISC 的区别不再重要,因为像 ARM 这样的 RISC CPU 已经添加了太多的指令,很多指令相当复杂,以至于它现在更像是一个混合的 RISC CPU,而不是纯粹的 RISC CPU。而那些 RISC CPU 也是如此,比如 PowerPC。 相比之下,RISC- V 是 RISC CPU 真正的硬核。事实上,如果你在网上看过大家就 RISC- V 的讨论,会发现有人声称 RISC-V 出自一些老学究式的 RISC 激进分子之手,他们拒绝与时俱进。 前 ARM 工程师 Erin Shepherd 几年前就 RISC-V 写过一篇评论,内容很有意思: RISC-V ISA 过分追求极简主义。它非常强调最小化指令数、规范化编码这些事。这种对极简主义的追求导致了错误的正交性 (例如针对分支、调用和返回重用同一条指令) 和对冗余指令的需求,这在指令大小和数量这两个方面影响了代码密度。 我向大家简单介绍一下背景。让代码更小对性能有好处,因为这样就可以更容易将正在运行的代码保存在高速 CPU 缓存中。 本文在此批评的是,RISC-V 设计者太过于追求拥有小的指令集。尽管,这是 RISC 最初的目标之一。然而,这样做的弊端是,实际上程序在完成工作时将需要更多的指令,从而消耗更多的内存空间。多年来,人们普遍认为 RISC 处理器应该增加更多的指令,变得更像 CISC。其理论依据是,更专门化的指令可以替代对多个通用指令的使用。 压缩指令和宏融合 然而,在 CPU 设计中有两项特别的创新,这些创新从许多方面使添加更多复杂指令的策略变得多余: ·压缩指令——在内存中压缩指令,并在 CPU 的第一阶段进行解压。 ·宏融合——将两个或两个以上由 CPU 读取的简单指令融合成一个复杂指令。 实际上 ARM 已经采用了这两种策略,而 x86 CPU 则采用了后者,所以这不能算是 RISC-V 的新招术。 然而,关键是 RISC-V 从这些策略中获得了更大的优势,这里面有两个重要原因: 它从一开始就添加了压缩指令。在 ARM 上使用的是 Thumb2 压缩指令格式,这就必须将其作为一个单独的 ISA 来添加以完成改造,这需要一个内部模式切换和单独的解码器来进行处理。RISC-V 压缩指令可以添加到具有 400 个额外逻辑门 (AND、OR、NOR、NAND 门) 的 CPU 上。 2.RISC 执着地控制独特指令的数量得到了回报,如此就有了更多的空间来容纳压缩指令。 指令编码 这一部分需要进行一些解释。指令在 RISC 体系结构上通常是 32 位(即比特)宽的。这些比特需要用来编码不同的信息。例如,下面这样一条指令: ADD x1, x4, x8 # x1 ← x4 + x8 这条指令将累加寄存器 x4 和 x8 的内容,然后将结果存储在 x1 中。我们需要多少比特来编码,这取决于我们有多少寄存器。RISC-V 和 ARM64 有 32 个寄存器。可以用 5 比特表示数字 32: 2⁵ = 32 因为我们需要指定 3 个不同的寄存器,所以我们需要总共 15 比特 (3×5) 来编码操作数 (累加操作的输入)。 因此,我们想要在指令集中支持的东西越多,那么就会消耗掉那 32 比特中更多的比特。当然,我们可以使用 64 位指令,但是这会消耗太多的内存,从而降低性能。 通过刻意压低指令的数量,RISC-V 节省下更多的空间来添加表示我们正在使用的压缩指令的比特。如果 CPU 看到指令中的某些位被设置为 1,它就知道这条指令应该作为一条压缩指令来进行解释。 压缩指令——二到一 这表示,我们可以将两条 16 位宽的指令装入一个 32 位字,而不是一个 32 位字只装入一条指令。当然,并不是所有的 RISC-V 指令都可以用 16 位格式表示。因此,32 位指令的子集是根据它们的效用和使用频率来挑选的。未压缩指令可以接受 3 个操作数 (输入),而压缩指令只能接受 2 个操作数。因此,压缩后的 ADD 指令应该如下所示:(# 号后为注释) C.ADD x4, x8 # x4 ← x4 + x8 RISC-V 汇编程序使用前缀 c. 来指示一条指令应该被汇编程序转换成一个压缩指令。但实际上你不需要去写它。RISC-V 汇编程序将能够在适当的时候选择是压缩指令还是非压缩指令。 基本上,压缩指令减少了操作数的数量。三个寄存器操作数将消耗 15 比特,而留给我们指定操作的就只剩下 1 比特了!因此,将操作数减少到两个,我们就能剩下 6 比特来指定操作码 (要执行的操作)。 这实际上接近于 x86 汇编的工作方式,在 x86 汇编中没有足够的比特来保留 3 个寄存器操作数。取而代之的是,x86 使用一些比特来允许像 ADD 这样的指令从内存和寄存器中读取输入。 宏融合——一到二 但是,当我们将指令压缩与宏融合结合起来看时,才能发现真正的收益。你看,如果 CPU 得到一个包含有两个 16 比特的压缩指令的 32 比特的字,它可以把这些合并成一条单一的复杂指令。 这听起来很荒谬,我们不是又回到原点了吗? 我们是不是又回到 CISC 风格的 CPU,这不正是我们试图要避免的吗? 不是的,因为我们避免用大量复杂的指令、x86 和 ARM 策略填充 ISA 规范。相反,我们基本上是通过各种简单指令的组合来间接地表达一整套复杂指令。 在正常情况下,宏融合存在一个问题:虽然两条指令可以被一条指令替换,但它们仍然会消耗两倍的内存空间。但是使用指令压缩,我们不会消耗更多的空间。我们做到了两全其美。 让我们来看看艾琳·谢泼德的一个例子。在她批评 RISC-V ISA 时,展示了一个简单的 C 函数。为了解释起来更清楚一些,我把它重新写了下来,内容如下: int get_index(int *array, int i) { return array[i]; } 在 x86 上编译成: mov eax, [rdi+rsi*4]ret 当你在编程语言中调用函数时,参数通常会根据既定的约定传递给寄存器中的函数,这将取决于你所使用的指令集。在 x86 上,第一个参数放在寄存器 rdi 中,第二个放在 rsi 中。按照惯例,返回值必须放在寄存器 eax 中。 第一条指令将 rsi 的内容乘以 4。它包含了变量 i。为什么乘?因为数组是由整数元素组成的,所以它们之间的间距为 4 个字节。因此,数组中的第三个元素的字节偏移量实际上是 3×4 = 12。 然后,我们把它添加到 rdi,它包含数组的基址。于是,我们得到了数组第 i 个元素的最终地址。我们读取该地址的存储单元的内容,并将其存储在 eax 中:大功告成。 在 ARM 上与之很相似: LDR r0, [r0, r1, lsl #2]BX lr ; return 这里我们不是乘以 4,而是将寄存器 r1 向左平移 2 位,这就相当于乘以 4。这也可能是更本真地表示了 x86 代码中所发生的情况。在 x86 上,你只能乘以 2、4、8,所有这些其实都可以通过左移 1、2、3 位来实现。 我想,x86 描述中的剩余内容你肯定都能猜得到了。现在让我们进入 RISC-V,真正有趣的内容开始喽!(# 号后为注释) SLLI a1, a1, 2 # a1 ← a1

    时间:2021-02-20 关键词: 嵌入式 RISC-V 指令集

  • 开源CPU RISC-V总部迁往瑞士:不受美国钳制 技术更中立

    这几年来开源CPU指令集RISC-V风生水起,大有拳打ARM脚踢X86的劲头,支持RISC-V的公司也越来越多。RISC-V基金会起源于美国,但是最近他们的总部已经搬到了瑞士,寻求技术中立。 在2019年,美国出于自己的政治目的,多次打压华为,严禁美国公司与华为做生意,ARM、X86处理器一度断供华为,哪怕ARM公司并非美国公司,也一样受到了美国法规的限制。 RISC-V是一种开源的CPU指令集,2010年诞生于加州大学伯克利分校,当时的Krste Asanovic教授(它是CPU架构领域的大师级学者)希望寻找一个合适的CPU指令架构。 比较之后,它认为X86架构复杂臃肿、ARM架构需要授权费、开源的OpenRISC架构又太老旧了,所以他最终决定自己做个开源CPU架构,在2015年最终成立了RISC-V基金会。 如今的RISC-V基金会成员也扩大到了300多家成员,包括Google、HP、西数等公司都开始支持RISC-V架构,而且越来越受中国公司的关注,阿里去年就推出了RISC-V指令集的多款芯片。 RISC-V指令集本身是开源的,不会有禁止使用的可能,但RISC-V基金会总部此前是在美国的,会受到美国法规限制,这件事也让RISC-V联盟的多位成员担心。 早在去年11月份,RISC-V基金会首席执行官 Calista Redmond就宣布将总部从美国迁移到瑞士,后者是永久中立国。 当时Calista Redmond表示,此举是为了确保美国以外的大学、政府和公司可以帮助开发其开源技术。 她还表示基金会的全球合作迄今为止没有受到任何限制,但成员们现在“对可能的地缘政治破坏感到担忧”。“ 对于RISC-V这一决定,当时美国相关部门非常不满,不过RISC-V现在还是将总部搬离美国了。

    时间:2020-04-28 关键词: CPU 基金会 risc-v 总部 指令集

  • MIPS 路在何方?

    与RISC-V师出同门,一个如日中天,一个无人再提,MIPS这些年都经历了什么? 曾经能与Arm、X86比肩的MIPS,如何日落西山,屡遭“卖身”,最后被后辈收入麾下? 但日渐边缘化的MIPS在开源计划又再度搁浅之后? 这个RISC先锋的未来成为很多从业者关注的重点。 眼见他平地起,眼见他日落西山 作为业界最为经典的精简指令集架构之一,MIPS是出现最早的商业RISC架构芯片之一,过去曾有一段不短的时间,与 Arm、X86架构在各领域拥有相提并论的地位。 1980年,精简指令集RISC诞生,1984年,斯坦福大学前校长John LeRoy Hennessy与他的团队一起创立了MIPS。 他们的商业模式就是将做好的芯片设计方案授权给其他厂商,让他们可以方便地制造出高性能的CPU。 MIPS企业成立早期也生产自己的处理器,而且他们在设计上非常具有前瞻性,成立第二年就推出了第一个处理器设计R2000;三年后推出了R3000,其中R3000是其在市场上首款流行起来的产品,销售超过百万颗,后续的R3000A更是创造了过亿销售的记录;甚至在1991年就推出了64bit的设计R4000,要知道其竞争对手Arm到了2012年才大范围推广64bit处理器设计。 回顾历史,MIPS在90年代曾经一度辉煌过,Pacemips、IDT和东芝等半导体公司都采用MIPS的设计来制造芯片,其生产的芯片也被Sony和Nintendo的游戏机,Cisco的路由器和SGI超级计算机等终端设备采用,尤其是家用路由器市场,到现在每年生产的超过160亿微处理器中,99%是RISC处理器。 过去也曾当作高效能计算架构使用到超算平台上。 但错失了智能手机时代,以及Arm的巧攻,使MIPS迎来了“失落的十年”(2007到2017)。 由于MIPS的产品从设计之初就以Intel的X86为对标产品,主打高性能;反观Arm,从诞生开始就瞄准嵌入式低功耗领域。 这个由老学究创立的企业由于对商业的敏感度不足,当Arm开始联合高通、苹果、联发科等公司面向智能手机市场打造移动处理器芯片的时候,MIPS依然沉浸在高清盒子、打印机等小众产品市场。 归根结底,还是学院派和商业派的区别使然。 终于在21世纪,智能手机市场大爆发的年代,Arm一下子走上舞台中央,而MIPS由于聚焦在中高端并没有功耗的优势,限制了其在智能手机上大展拳脚。 MIPS的迟缓导致他们失去了最关键的十年。 另一个击败MIPS的因素是授权方式,MIPS收取IP授权要比指令集授权更贵,而且允许添加指令,这就使得大佬们纷纷自行设计MIPS核心、添加指令、发布开发工具,碎片化严重。 而Arm反其道行之,指令集授权远远比IP授权要贵,控制了碎片化。 当时Arm还极有眼光的设计了全世界最好用、最便宜的USB调试工具,吸引了一批码农,从而构建了巨大的Arm开源软件库。 当然致使其衰落还有一个因素是授权模式和费用。 由于Arm一直在低功耗嵌入式领域的聚焦,使其授权方式极具灵活性,主要是IP授权的多,因为架构授权要贵很多,很好的控制了碎片化,且在价格上颇具优势,也因此吸引了更多厂商(TI、LSI等)以及学生的关注和加入,Arm的生态系统得以很好的完善; 而MIPS主要是架构授权,并且允许添加指令,码农们纷纷自行设计,导致碎片化严重,再加上由于后期MIPS经营不善,架构的改朝换代缓慢,且未能配合主流操作系统与设备生态优化潮流,这就失去了IP授权所具备的推出速度,软件高兼容的特点。 因此MIPS逐渐被市场抛弃,只好目送Arm一步步走向成功。 最终由于Arm体系对嵌入式领域和移动设备市场的不段蚕食,再加上MIPS逐年的经营不善,最后曾经风光一时的企业无奈走向破产。 MIPS几经转手,命途多舛 MIP是在2012年底被Arm和Imagination瓜分收购,而Imagination和Arm为何又要收购日落西山的MIPS? 对于Arm来说,MIPS的专利相当有价值,特别是64位和多线程相关的专利。 因为Arm的64位架构跟MIPS 64位有70-80%的相似度,如果此时不参与收购,那么日后很可能陷入和MIPS专利拥有者长久的专利诉讼战,仅仅只用3.5亿美元就解决这个潜在的隐患,Arm乐意之至。 所以Arm收购了其接近500项专利。 收购MIPS,Imagination是为了加强自身的CPU业务,并且看中了MIPS强大的产品集以及安卓架构的支持和对中国的授权。 因此Imagination则收购了MIPS公司实体和82项与MIPS处理器核心架构有关的核心专利。 同时Intel作为Imagination的第一大股东,收购MIPS从侧面也可以牵制Arm的发展。 但在苹果采用自家GPU开始,Imagination业务一度告急,为了专注GPU同时减少负重,Imagination只好抛售MIPS。 可是,Imagination卖着卖着自己却先被Canyon Bridge收购,MIPS也随即由Tallwood Venture Capital拿下。 后来创企Wave Computin又从Tallwood手中再次接盘MIPS,Wave Computing 的创始团队有不少是出自于MIPS,如CEO Derek Meyer曾是MIPS副总裁。 虽然MIPS大多数专利被Arm收购了,但是仍有350多项专利。 然而MIPS几年之间多次被收购,辗转于各个公司之间,致使其支持的力度和开发的持续性都受到了影响。因此业内有观点认为,“MIPS架构的认可度并没有下降,但是影响力下降明显”。 Arm早些年能够获得成功的一个主要原因是同时拥有了CPU和GPU,这两者的结合让他们在移动时代所向披靡。 而只有CPU的MIPS和原来只有GPU的Imagination的下场,都揭露了现在市场的集成化优势。 晶圆代工产业的流行,IP供应商的崛起,通过厂商之间的整合来解决大部分问题,提供更简便的解决方案,这在以前乃至对未来的物联网时代都显得非常重要。 发力的AI领域Wave Computing,其年轻又新鲜的DPU架构结合MIPS,除了布局边缘计算外,也将可能带给市场一个完整的计算架构。 然而RISC家族的另一成员RISC-V的火爆,再次将MIPS无情打压。 Arm之后又迎RISC-V,开源也是昙花一现 数十年内,以英特尔为代表的CISC架构、Arm架构、MIPS架构你争我斗,好不精彩,谁能想到RISC-V的异军突起,以其极具灵活和开放的特点打乱了整个市场,且发展势头猛进,令各大架构群体无不有所忌惮。 正当外界几乎快要忘却MIPS这枚昔日巨星时,2018年底,大胆的新东家Wave Computing宣布对最新的R6指令集进行开源,旨在加速MIPS指令集架构的普及,帮助已逐渐边缘化的MIPS指令集架构重回正轨。 Wave的高级副总裁兼首席商务官Lee Flanagin在一份声明中说: 在MIPS Open下开发的基于MIPS的解决方案将补充我们现有和未来的MIPS IP核,Wave将继续在全球范围内创建和授权MIPS IP核,作为我们整个系统、解决方案和IP组合的一部分。 这将确保当前和新的MIPS客户拥有广泛的解决方案,可以从中选择他们的SoC设计,并且还可以访问充满活力的一个MIPS开发社区和生态系统。 MIPS许可业务总裁Art Swift称自2000年以来,基于MIPS内核的芯片已经出货了85亿个,广泛的客户都在坚持使用MIPS,包括Microchip,Mobileye,MediaTek和日本领先的Denso Denso。 而MIPS的32/64位R6是承袭了MIPS三十余年的技术积累,可谓树大根深。 纵观整个行业的架构形势,对国内公司来说,X86架构已然没有优势了,Arm也授权购买,如今开源的CPU指令集有RISC-V及MIPS两个选择了。 但“开源不等于免费”,其实MIPS OPEN的真正意义在于加强推广MIPS内核与生态系统,开放ISA指令集。 业界认为MIPS Open是开发与创收的平衡点,因为它就是扩展使用者及生态双赢的商业模式。 UltraSoC首席执行官Rupert Baines表示,“考虑到RISC-V的势头,MIPS开源是一个有趣,精明的举动。 ”他表示,“MIPS已经拥有大量优质工具和软件环境。 这是一种放大MIPS自身优势的智能方式,而且不会损失太多。 ” MIPS最大的优势在于,它是一个经过多年验证、曾经大量出货的经典架构,至今仍得到许多电子工程师的尊重,有大量的资料和参考书籍可以学习。 另外,MIPS还提供专利保护和中央授权避免ISA碎片化,这两者都是RISC-V所缺乏的。 对于MIPS本身而言,MIPS未来的成功很大程度上取决于生态建设和社区发展。 但相比于现在如日中天的Arm和后起之秀RISC-V,能否及时响应使用者的需求,集聚足够多的“人气”,能否绝地求生也让业界为其捏一把汗。 然而现在有传言因为受wave computing 的AI芯片进展的影响,MIPS也遭受了无妄之灾,早前还爆出了公司停止了MIPS的开源相关项目,这家“命途多舛”的企业又一次走到了分叉口。 MIPS的遗产还有哪些? 当然,由于MIPS不可动摇的“历史地位”还是保存了一批忠实用户。截止目前,仍然有部分公司在采用MIPS架构设计处理器和SoC。国人较为熟悉的如龙芯、君正、珠海炬力等,还有上海芯联芯今年也取得了MIPS在中国的独家商业经营权。可以说MIPS的未来发展,与中国是息息相关的。 中科院计算所从2001年开始研制龙芯系列处理器,2002年龙芯1号流片成功,2003年龙芯2B流片成功,2004年龙芯2C流片成功,2006年龙芯2E流片成功,2007年龙芯2F流片成功,龙芯2F为龙芯第一款产品芯片,2009年龙芯3A流片成功。 为了将龙芯处理器的研发成果产业化,2010年由中国科学院和北京市政府共同牵头出资,正式成立龙芯中科技术有限公司。 十几年过去了,龙芯也进化出了龙芯2H,2J,3A3000,3B3000等新处理器。 龙芯自创立之初便是要做独立自主的CPU,在当时的情况下,Arm架构不允许更改设计,X86架构几乎属于非卖品,因此MIPS是最好的选择。所以龙芯买下了MIPS授权,基于MIPS做自主设计,打造自己的指令集。早期的龙芯基本上都是MIPS架构,变化极少。龙芯3早期型号是基于MIPS64 R3的,后来通过不断的扩充指令集形成了现在龙芯使用的LoongISA指令集,所以我们现在可以说龙芯3已经不是MIPS架构,但是龙芯3至今还兼容MIPS64 R3指令集。 但龙芯的LoongISA只支持到MIPS64 R2/R3,不兼容MIPS 64 R5/R6。 现在龙芯3A3000的主频已经达到了1.5GHz,各项性能也有了突飞猛进的发展,如果单从架构上说其实龙芯架构已基本上很先进了。 本月底,龙芯将发布3A4000和3B4000处理器芯片。 北京君正也是如此,北京君正的团队来自于方舟科技,并延续了方舟科技的发展方向,一直强调自主研发CPU内核。 方舟科技是倪光南帮助成立的,以倪光南为首的老一辈科技工作者深受毛泽东时代自力更生精神的鼓舞,对自主研发抱有满满的热情,为了中国能有自己的芯片可谓殚精竭虑。 所以君正也是采用的MIPS架构,早期君正在mp3/mp4时代发展还不错,但到了平板时代,对软件和生态系统依赖性增强,而君正所采用的MIPS架构在当时已无优势,也蹉跎了几年光景。 时间来到2018年12月,一家专营自主可控的创新型IP供应商与IC 设计服务公司上海芯联芯成立,并且在今年5月初,上海芯联芯宣布从Wave Computing取得MIPS Technology中国地区独家的商业经营权以及MIPS的全部技术,包括基础架构、近百颗32位/64位CPU内核与相关工具授权、编译器/验证套件的全部原始代码、优化Fab流程中现有CPU核效能、开发新CPU核和衍生芯等。 在得到MIPS独家商业经营权和技术后,公司既可以自行开发新的CPU内核,也可以将CPU内核进行授权,中国客户可以藉此授权开发完整自主的CPU内核。 芯联芯董事长表示: “作为当年硅谷MIPS创始工程团队成员之一,在90年代,我从硅谷率先为MIPS到中国市场开彊辟土,如今创芯业再披战袍,对RISC架构和处理器的性能及效能始终充满信心。 MIPS的Multi-thread,虚拟化,低功耗和小芯片尺寸等优势, 在现代和未来的CPU处理器中仍然占据主导地位。 我们将这些优势扩展到ASIC服务中,以协助客户更有竞争力去抢占市场先机。 中国区经过25年的发展,有将近50个授权客户。 现在中国可以基于开放的RISC架构与芯联芯近百颗CPU核开发自主可控的CPU。”

    时间:2020-01-09 关键词: MIPS 处理器 龙芯 指令集

  • 分析机构:RISC-V内核出货量未来几年将飙升

    分析机构Semico Research在其近来新发的,名为“ RISC-V市场分析:新兴市场”的报告中指出,预计到2025年,市场将总共消费624亿个RISC-V CPU内核,其中预计工业领域将是最大的细分市场,拥有167亿个内核。Semico预测,在包括计算机,消费者,通讯,运输和工业市场在内的细分市场 ,RISC-V CPU内核的复合年增长率(CAGR)在2018年至2025年之间的平均复合年增长率将高达146.2%。 RISC-V基金会首席执行官Calista Redmond表示:“ Semico的报告证明了RISC-V在各种行业中的商业采用和实施所具有的惊人增长潜力。” “在RISC-V基金会,我们很自豪地见证了一个包含开源软件和芯片的设计在CPU市场迎来如此令人难以置信的转变”,她进一步指出。 Semico对RISC-V生态系统和广阔市场中的公司进行了调查,以分析RISC-V CPU内核的市场潜力。他们主要分析了五个主要终端市场(计算机,消费类,通信,运输和工业)中25个应用程序的数据,并对高级性能多核SoC,价值多核SoC,基本SoC和FPGA四个产品类别进行预测。 Semico研究部总裁Jim Feldhan表示:“看到各种规模的公司都在踊跃投入设计各种RISC-V解决方案以满足多样化性能和体积要求的应用时,我们感到非常惊讶和兴奋。急需现在已经相当大的RISC-V采用率,我们预测,到2025年,市场将总共消耗624亿个RISC-V内核,这表明RISC-V正在迅速成为被主流采用的架构。” Semico在对2018年至2025年RISC-V CPU内核的多个市场的CAGR预测中指出,通信行业将看到最大的CAGR,这是由于5G的部署以及随着5G的采用而推动的众多产品和应用程序发展。而在交通运输领域,由于汽车行业对电气化的日益关注以及对安全性,乘舱内体验,驾驶员辅助和无线通信的关注,基于CPU设计的系统需求也越来越多,这将驱使交通运输的复合年增长率估计位居第二。Semico不仅发现组织正在设计针对各种性能和批量应用程序的RISC-V解决方案,他们同时也发现在SoC设计中,RISC-V核的个数已经覆盖了从一到两个到1000多个核。 规避风险,RISC-V基金会将迁往瑞士 据路透社最新报道,非营利组织RISC-V基金会的首席执行官 Calista Redmond在接受路透社采访时说到,为了确保美国以外的大学,政府和公司可以帮助开发其开源技术,他们计划将其总部迁往瑞士。 她进一步指出,基金会的全球合作迄今没有任何限制,但成员“对可能的地缘政治破坏感到担忧” “从全球各地,我们听到了一个观点,那就是说如果公司不在美国,我们会更自在”,Calista Redmond 说,而基金会董事会一致批准了这一举动,但他们拒绝透露是哪些成员促使了这一举动。 RISC-V基金会成立于2015年,为核心芯片架构设定标准,并控制谁可以在产品上使用RISC-V商标,就像其他组织对Wi-Fi和Bluetooth芯片一样。 他们也不拥有或控制该技术。 超过325家公司或其他实体付款成为会员,包括美国和欧洲的芯片供应商,例如高通公司和NXP半导体公司,以及中国的阿里巴巴集团控股有限公司和华为技术有限公司。 克林顿政府负责出口管理的商务副部长威廉·赖因希说,由于美国限制与一些中国技术公司的交易,该基金会从特拉华州( Delaware )迁往瑞士可能预示着技术的进一步飞跃( flight)。 这里面有一个向政府传达的信息,那就是如果您过于紧缩,这类事情将会发生。在全球供应链世界中,企业有选择的余地,其中的一种选择就是去海外。 美国商务部在给路透社的一份声明中说,其控制措施旨在维护美国的国家安全,并“确保不良行为者不能获取损害美国公民或利益的技术,同时促进创新以促进美国继续保持技术领先地位。 ”该部门表示,它定期与私营企业举行会议,以评估市场状况及其法规的效果。 美国一些共和党议员表示,他们担心美国将失去对RISC-V芯片体系结构的影响力,该体系结构可用于为几乎每种类型的电子设备制造微处理器,从而使其成为现代经济的重要组成部分。 而该技术来自加州大学伯克利分校的实验室,受益于五角大楼国防高级研究计划局(DARPA)的资助。 立法者警告说,基金会的中国会员可能会影响该技术的发展,以帮助中国的半导体产业。 威斯康星州共和党代表迈克•加拉格尔(Mike Gallagher)对路透表示: “中国正试图绕过我们的出口管制系统,以支持像华为这样企业,我们不能让它成功。 ” 阿肯色州共和党参议员汤姆•科顿(Tom Cotton)则表示,转移确保该基金的总部,以能够保留中国会员,这种 做做法是短视的。 他也强调,如果使用美国公共资金来开发该技术,那也是完全令人发指的。 但Redmond在接受路透社采访后提到,在后续电子邮件中表示,鉴于这项技术是开源的,任何人都可以使用,她不认为此举会违背美国国家利益。 DARPA发言人则告诉路透社,该机构打算将其资助的RISC-V工作公开提供给世界各地的公司和学者。 应用协会的主席摩根·里德(Morgan Reed)则将RISC-V基金会的工作比作中美公司共同开发Wi-Fi芯片标准的努力。 RISC-V基金会在去年12月的一次会议上宣布,它将寻求一个“中立”的国家落地,然后于今年初做出正式决定前往瑞士的决定,这一决定引起了公众的广泛关注。 雷德蒙德说,预计此举将在瑞士获得最终批准。 雷德蒙德说,自创建以来,中国公司就可以使用RISC-V体系结构,该体系结构是公开可用的。 阿里巴巴在七月声称已经开发了迄今为止最快的RISC-V处理器。 该公司也拒绝对此事发表评论。 代表此类团体的两名律师表示,RISC-V基金会的举动表明了中美之间的紧张局势,使得美国更难成为技术标准团体的落户地。 律师们说,目前尚不清楚是否允许标准组织与华为合作。 但这些团体担心,美国当局可能会在某些技术讨论和技术转让上为难中国。 其中一位代表多个标准组织工作的律师布拉德·比德尔(Brad Biddle)说。 6月,包括负责SD存储卡以及以太网和HDMI电缆的监督管理机构在内的二十多个标准组织致信美国商务部长威尔伯·罗斯(Wilbur Ross),要求澄清与华为合作的规则。 这些组织警告罗斯,限制华为可能会导致标准制移出美国,从而带来“严重风险”,这可能终结了长期存在的趋势—;—;即总部位于美国的组织为世界其他地区设定了事实上的标准,他们写道。 美国商务部在八月份发表了一份咨询意见,试图澄清这一问题,但标准律师表示,规则仍然令人困惑。 RISC-V基金会的雷德蒙德(Redmond)尚未看到国际合作的“可信威胁”。她告诉路透社:“但是,我们正在通过成立公司来针对这种类型的行为采取保险政策。 ” 董事会目前的七个成员均位于北美。 雷德蒙德说,此举之后,基金会的董事会将扩大,欧洲和亚洲成员也将增加。 路透社无法证实是否有中国公司计划加入董事会。 确实为标准组织工作的律师安德鲁·厄普德格罗夫(Andrew Updegrove)说,无论RISC-V基金会的总部在哪里,美国对将美国原产技术转让给中国公司的限制仍然适用。 该基金会的首席技术官拉斯·雷格(Lars Reger)说,在基金会的成员之一的荷兰恩智浦半导体公司说,他们的客户要求该公司详细说明芯片技术的来源。因为他们不希望在未来的贸易纠纷中被切断。 在回应路透社的问题时,华为发言人表示:“我们支持RISC-V基金会,将瑞士确定为开源开发的中立场所。 对业界来说,使开源尽可能开放是重要的。 ”他说,RISC-V“很适合华为关于这个异构开放世界的愿景。 ”

    时间:2019-12-20 关键词: 美国 CPU 处理器 risc-v 指令集

  • 改动寥寥几行代码:AMD锐龙Matlab性能暴涨最多258%

    我们知道,一款硬件产品性能如何,不仅仅取决于硬件本身的设计,也要看驱动、软件的支持与优化,很多时候一些简单的优化调整就可以带来意想不到的效果。 比如说流行、权威的数学计算环境Matlab,就针对Intel处理器有一项特殊优化,检测到是Intel处理器后就会利用Intel MKL(路径内核库),并调用AVX2指令集,获得理想性能。 而对于非Intel处理器,比如说检测到是AMD,Matlab就只会使用古老的SSE指令集,结果就是性能天差地别。 Reddit网友Nedflanders1976研究后发现,AMD锐龙、线程撕裂者处理器在Matlab上也能开启AVX2指令集,从而获得性能暴涨! 根据这位网友给出的教程,方法非常简单。Windows系统下可以创建一个只有如下四行代码的bat批处理文件,AMD处理器用户通过它启动Matlab,就可以开启AVX2指令集。 @echo off set MKL_DEBUG_CPU_TYPE=5 call "%MKLROOT%binmklvars.bat" MKL_DEBUG_CPU_TYPE=5 matlab.exe 以上是临时方法,如果想永久生效,只需在高级系统属性里找到MKL_DEBUG_CPU_TYPE,将这个环境变量的值改为5,但注意任何使用MKL的程序都会受到影响。 Linux用户也很简单,临时方法是输入以下命令并启动Matlab,永久方法则是编辑配置脚本并加入以下命令: export MKL_DEBUG_CPU_TYPE=5 根据实测,AMD锐龙处理器经过这样一番修改后,Matlab性能可以提升少则17%,多则258%!

    时间:2019-12-17 关键词: AMD matlab 锐龙 撕裂者 avx2 指令集

  • ARM出货超过1500亿:杀入自定义指令集、剑指RISC-V

    近日,在一年一度的 ARM Techcon 2019 大会上,ARM 宣布推出一项全新的功能 Arm Custom instructions,该功能允许客户在特定的 CPU 内核中加入自定义指令功能,从而来加速特定的用例、嵌入式和物联网应用程序。 ARM 拥抱自定义指令集 据了解,Arm Custom Instructions 功能适用于 Cortex-M33 内核及以后的 Cortex-M CPU 系列。从 2020 上半年起,所有使用上述 CPU 内核的 Arm 客户都可以免费使用自定义指令功能;也就是说,Arm 不会对新的或既有授权厂商收取额外费用,同时让系统单芯片(SoC)设计人员在没有软件碎裂风险下,得以针对特定嵌入式与物联网应用加入自己的指令。 另外,通过对 CPU 进行修改来启用 Arm 自定义指令,为处理器保留编码空间,以便设计人员可以轻松添加自定义数据路径扩展,同时保持现有软件生态系统的完整性。此功能与现有的协处理器接口一起使 Cortex-M33 CPU 可以使用针对机器学习(ML)和人工智能(AI)等边缘计算进行了优化和各种类型的加速器进行扩展。 Cortex-M 是是 ARM 公司多种系列产品中的其中一个,该处理器系列是一系列可向上兼容的高能效、易于使用的处理器,这些处理器旨在帮助开发人员满足将来的嵌入式应用的需要,比如说以更低的成本提供更多功能、不断增加连接、改善代码重用和提高能效。雷锋网了解到,Arm Cortex-M 系列针对成本和功耗敏感的 MCU 和终端应用(如智能测量、人机接口设备、汽车和工业控制系统、大型家用电器、消费性产品和医疗器械)的混合信号设备进行过优化,也可以与智能手机和 PC 的应用程序中的 Cortex-A 性能内核配合使用。 不过,Arm Cortex-M 处理器的内核主要还是应用在低功耗嵌入式处理器(比如说 IoT 终端设备所用的处理器)中,已许可给 40 个以上的 ARM 合作伙伴,包括恩智浦、意法半导体、德仪和东芝等供应商,每年的出货量可达数亿级别。 在发布会上,Arm 宣布已经与不少合作伙伴进行合作来支持自定义指令集,这些合作伙伴包括 IAR-Systems、恩智浦、芯科科技、ST 意法半导体等。 对于 Arm 的这一动作,Arm CEO Simon Segars 表示: 这将使你们所有人都能更快地行动起来。添加此功能后,我们对如何支持工具流程进行了很多思考。Arm 于 7 月宣布了其灵活设计计划,过去两年中签署的 Arm 处理器许可中有 75% 现在包括了该计划,开发人员可以在此调整设计,而不必不断返回 Arm 进行审批……随着我们迈向第五波计算浪潮,我期待更多的创造力。定制说明更进一步。Arm 设计了一种方法,可以支持智能集成和快速开发完全集成的自定义 CPU 指令,而不会产生软件碎片。 另外,ARM 方面表示,新增的 Arm Custom Instructions 功能,结合此前 Arm 推出的 Arm Flexible Access 计划,都是为了致力于增强芯片合作伙伴的灵活性和差异化,以支持机器学习、人工智能、自驾车、5G 与物联网等全新边缘运算的机会—;—;为此,Arm Custom Instructions 在未来的 Arm Cortex-M CPU 上将变成标准功能,使这款 CPU 成为 Arm 历来最成功的 CPU 之一。 Arm 显然感受到了压力 在移动互联网时代,Arm 显然是绝对的主流;就在这次大会上,Arm CEO Simon Segars 也表示,成立近 30 年来,在 1000 多个合作伙伴的推动下,Arm 核心的出货量已经超过 1500 亿。 但显然,随着移动互联网时代的结束和 IoT 时代的到来,Arm 已经感受到了来自 RISC-V 的压力。 RISC-V 是一个精简指令集架构(ISA),源自加州大学伯克利分校 2010 年的一个新项目,其架构简单、完全开源,且可通过扩展指令做定制化。推出几年后受到了全球范围内巨头们的支持,英伟达、西部数据、谷歌、高通、微软、华为、阿里巴巴等都加入了 RISC-V 基金会。并且,在印度政府的大力资助下,RISC-V 还成为了印度的国家指令集—;—;当然在中国市场 RISC-V 也颇受关注。 实际上,RISC-V 作为新的开源指令集架构已经引发了全球的关注,而去年 Arm 建立网站对 RISC-V 攻击的行为表明了 Arm 对于这个新架构的担心,Arm 还对 RISC-V 质疑称可扩展指令集会带来碎片化的问题。 但显然,RISC-V 的优势也让 Arm 忌惮不已。雷锋网在采访非营利性组织 RISC-V 基金会中国顾问委员会主席方之熙之后认为,让 Arm 真正感到焦虑的,是 RISC-V 的灵活性,这种灵活性能够更好地满足未来市场的需求;基于 RISC-V 的灵活性,它能够在 IoT、专用芯片、数据中心、边缘计算市场发挥出性能、功耗、安全性的优势。 在雷锋网看来,Arm 加入自定义指令集的本质,正是为了增强自身内核架构的灵活性,从而在 IoT 时代与和 RISC-V 正面竞争。 当然,RISC-V 的发展确实存在一些问题,比如碎片化风险,生态系统的建设还处于早期阶段,同时,想要设计相对复杂的 RISC-V 芯片仍然需要工具链的支持。反过来看,RISC-V 的劣势其实也正是 Arm 目前的优势所在—;—;在发布会上,Arm 强调称,Arm Custom Instructions 为集成客户工作负载加速提供了最低成本(和风险)的途径,因为它不会对影响到现有的 CPU 特性,并且仍然允许客户使用他们已经熟悉的现有标准工具。 对于 Arm 作出的改变,它的客户已经表达了正面回应;比如说,恩智浦高级副总裁兼 MICR 产品事业部总经理 Geoff Lees 就表示: Arm 的新自定义指令功能,使像恩智浦这样的芯片供应商能够为其客户提供针对特定应用的全新指令优化,以提高性能,功耗和静态代码大小,以适应新兴的嵌入式应用程序……此外,所有这些改进都在广泛的 Cortex-M 生态系统中实现,因此客户的现有软件投资得以最大化。 总结 其实,除了宣布在 CPU 内核中加入自定义指令,ARM 还在 TechCon 2019 大会上宣布更改其免费开源物联网操作系统 Mbed OS 的合作伙伴治理模型,与诸多合作伙伴成立自动驾驶汽车计算联盟,还宣布与 Unity Technologies 合作来支持各种 3D 内容创作—;—;但总体来看,Arm 对自定义指令集的拥抱,成为本次大会的最大看点。 而从整个行业来看,Arm 对自定义指令集的拥抱,将增加 AI + IoT 时代芯片架构发展的不确定性和变数—;—;但对客户来说,更激烈的竞争未必不是一件好事。

    时间:2019-10-25 关键词: MIPS ARM 指令集

  • 挑战两大霸主!这个指令集架构会是“中国芯”崛起的希望?

    芯片作为信息时代最底层的技术,它的重要性不言而喻,但目前芯片的指令集架构却被ARM和X86两大霸主垄断。为了打破这一市场格局,近几年RISC-V越来越受到人们的关注。 对此,中国工程院院士、中科院计算技术研究所研究员倪光南曾在“第十五届中国(南京)软件产品和信息服务交易会”上表示,未来RISC-V很可能成为世界主流的CPU之一,从而在CPU领域形成Intel、ARM、RISC-V三分天下的格局。 那么,究竟什么是RISC-V? RISC-V一般被念做“risk five-V”,就是罗马数字5。大多数人提到RISC-V,都会说它是开源芯片。其实,这种说法是错误的。 准确来讲,RISC-V是一个基于“精简指令集(RISC)”原则的开源指令集架构。通俗来讲,就是指令集。对于CPU来说,就是介于软件和底层硬件之间的一套程序指令的合集。而指令集存储于CPU内部,引导CPU进行运算,并帮助CPU更高效地运行。 图:PC电脑里面的CPU芯片(中央处理器) 现代的芯片设计规模越来越大,复杂度也越来越高。然而,并不是说要求设计者一味地逃避使用复杂的技术,而是应该将好钢用在刀刃上,将最复杂的设计用在最为关键的场景。在大多数有选择的情况下,尽量选择简洁的实现方案。 而与ARM和X86相比,RISC-V可谓是“大道至简”。作为一种后发技术,尽管RISC-V仍然处于刚刚起步阶段,但它的代码极为简洁,并且支持模块化和可扩展性,这对于企业设计是非常有利的。 图:RISC-V与ARM、X86的对比 或许,正是因为看到了RISC-V具有“精简、低功耗、模块化、可扩展” 等技术优势,近几年相继吸引了IBM、NXP、西部数据、英伟达、高通、三星、谷歌、华为与特斯拉等100多家科技公司加入到RISC-V基金会阵营,而行业也在不断围绕它构建生态系统。比如,阿里巴巴旗下的平头哥半导体有限公司于2019年7月发布了号称业界最强的高性能RISC-V处理器——玄铁910。 事实上,就中国当前发展现状来看,研发RISC-V是恰逢其实: 1、宏观环境:在中美贸易摩擦之后,那些知识产业受制于人的行业发展刻不容缓,而芯片产业就是其中之一。由于目前芯片的架构基本都是在ARM和X86的基础之上,我国约90%的芯片都是靠进口,这表现出来的主要问题就是缺乏自主知识产权,缺乏统一的指令集标准。 2、政策驱动:就算没有贸易摩擦,国家也是高度重视芯片产业,高层在政府工作报告中提出“加快制造强国建设,推动集成电路、第五代移动通信、飞机发动机、新能源汽车、新材料等产业发展”,把推动集成电路放在建设制造强国的首位强调。因此,寻求一种新的开源指令集架构作为各国发展芯片产业达到自主可控成为必然。 3、新技术加速场景渗透运用:在2003年互联网时代,随着PC的普及,Intel的x86芯片大获全胜;而到了2009年移动互联网时代,随着移动终端的普及,ARM芯片又大获全胜;现如今,随着大数据、物联网、人工智能等新兴技术不断深化,新的指令集架构将有望在新兴领域占有一席之地。 总之,RISC-V正在逐渐进军主流市场,在众多设计领域崭露头角,并获得了越来越多的芯片制造商、工具供应商、大学和代工厂的支持。未来,随着这一指令集架构的逐渐成熟和更多的大公司加入,RISC-V将非常有希望去挑战ARM和X86对市场的统治,从云计算到物联网,成为当今这个互联网世界最基本和不可或缺的“轮子”之一。  

    时间:2019-09-23 关键词: CPU ARM x86 risc-v 编辑视点 指令集

  • IBM完全开源Power指令集 性能最强CPU免费用

    在日前的OpenPOWER峰会上,蓝色巨人IBM宣布完全开源Power Command Set指令集,也就是说旗下的Power处理器现在对外界完全开放了,这是继RISC-V、MIPS之后又一个开源CPU指令集,但性能比其他开源CPU强大太多。 在当前的处理器市场上,X86指令集牢牢占据PC及服务器市场,是一种高性能CPU架构,是X86指令集是私有的,目前主要是AMD、Intel持有。 在低功耗处理器上,ARM则是一统江湖,从嵌入式芯片再到手机处理器,ARM架构都是最常见的,近年来还开始进军数据中心服务器市场。与X86相比,ARM指令集是开放授权的,但并不开源。 开源的CPU指令集主要有MIPS及最近几年崛起的RISC-V,MIPS曾经也是赫赫有名,不输ARM,但是近年来发展式微,卖过两次之后现在到了Wave Computing公司手中,今年4月份正式开源。 RISC-V则是根正苗红的开源CPU指令集,相比其他处理器指令集历史较短,但包袱也更少,所以近年来发展很快,也受到了国内企业的重视,不过它的缺点就在于积累少,生态还不完整。 说回IBM的Power指令集,它也是一款历史悠久的CPU指令集了,苹果早期的电脑就是使用了Power架构,现在IBM的大型机使用的还是自家的Power处理器,最新一代是Power 9,最多可以拥有24个核心96线程(Power支持单核四线程技术),最高频率可以达到3.3GHz。 目前TOP500超算排名第一及第二的超算使用的就是Power9处理器及NVIDIA的加速卡,所以在高性能方面Power处理器的实力还是非常强大的。 不过Power处理器的问题也在于越来越少的厂商支持,主要是靠IBM自己维持了,独木难支的IBM在2013年联合NVIDIA等公司成立了OpenPower基金会,参与的组织就可以获得Power处理器授权,不过这时候并不是完全开放的,制造Power处理器依然要交钱获得授权。 现在IBM是完全开源了,不需要参与OpenPower基金会也可以使用Power指令集,IBM甚至把OpenPower基金会的运营也交给了Linux基金会。 与RISC-V、MIPS等开源指令集相比,Power指令集最大的优势就是性能强大,而RISC-V等指令集主要面向低功耗的IoT设备等,所以对HPC高性能运算、AI人工智能、深度学习等需要高性能的领域来说,Power开源又提供了一次良好的发展机会。

    时间:2019-09-12 关键词: IBM 处理器 power 开源 指令集

  • IBM开源Power指令集:国产高性能CPU迎来新机遇?

    当地时间8月20日周二,IBM在美国圣地亚哥的OpenPower峰会上,正式宣布开源旗下高性能CPU——Power处理器的指令集架构(ISA)作为开放标准。此外,作为该计划的一部分,OpenPower基金会将成为Linux基金会的一个部门。Power指令集架构正式开源随着IBM向OpenPower基金会提供了Power ISA许可,开发者可借此确保在Power上运行的软硬件的协同定义,鼓励他们构建新的硬件、借助领先的企业功能来处理数据密集型工作负载、为AI和混合云创建新的软件应用程序、并获得独特的硬件优势。除了开放源代码的Power ISA之外,IBM还将提供多种其它技术,包括Power ISA的软核实现(softcore implementation)、与架构无关的开放式相干加速处理器接口(OpenCAPI)、以开放式内存接口(OMI)的参考设计。据介绍,IBM为开源社区贡献了一个新开发的软核。在很短的时间内,一位IBM工程师能够在Power ISA上开发出一个软核,并将其安装在Xilinx FPGA上运行。这一软核实现将在本周的北美OpenPower峰会上得到展示。此外,OpenCAPI和OMI技术也有助于最大化处理器和连接设备之间的内存带宽,对于克服AI等新兴工作负载的性能瓶颈至关重要。IBM OpenPower总经理Ken King表示:“随着今日的发布,IBM正在向着通过开放技术和开源来推动整个行业的创新而迈出了重要的一步。”值得一提的是,在2018年,IBM还耗资340多亿美元收购了Red Hat红帽公司,这是一家专注开源领域长达25年之久的软件公司。Red Hat是开源生态系统的主要玩家,以Linux发行版而闻名。而为了推动新疗法的研究进展,帮助人类更快地攻克癌症。IBM在不久前还开源了3个治疗癌症的人工智能项目。此次Power ISA的开源可以说是IBM对于开源社区的又一重大贡献。需要指出的是,目前OpenPower芯片的底层物理架构还没有开源。OpenPower进入全新阶段2013年8月,IBM联合Google、NVIDIA、Mellanox等公司成立OpenPower联盟,致力于将IBM的Power系列CPU架构对外开放授权,以抗衡日益强大的Intel X86以及ARM等CPU体系的威胁。IBM当时宣布开放了Power架构周围技术,如处理器规格、固件、软件和技术自由许可,将和合作伙伴一起使用共享、协作开发模式。在此基础上,IBM还牵头成立了OpenPower基金会,旨在促进高端Power架构的Power8及更高版本产品发展,促进和鼓励基于IBM Power架构的协作创新。支持成员定制Power处理器、系统平台、固件和中间件软件,进行优化,满足其业务和组织需求。在那时,OpenPower联盟成员需要支付相对高昂的许可费才能获得Power的授权,而现在,随着Power ISA的开源,开发者无需支付版税以及专利费就能够获得Power ISA,并且有可能在此基础上研发出拥有专利权的技术和产品。OpenPower基金会欢迎指令集的开放,认为此举对开源社区来说就是福音。OpenPower基金会执行董事Hugh Blemings在公告中说:“通过让Power ISA采用开放模式......并将它提供给日益壮大的开放技术群体,我们能够帮助开放软硬件领域的创新能够加速发展。”作为这项工作的一个延伸,IBM将使OpenPower基金会并入Linux基金会,成为其一个部门,归其管理。OpenPower基金会现在让OpenBMC、CHIPS Alliance、OpenHPC及其他多个项目和组织加入Linux基金会。将该基金会移交给业界最负盛名的开源软件组织有望提供另一股推动力,从长远来看促使OpenPower得到采用。值得注意的是,去年11月底,Linux基金会和RISC-V基金会宣布将共同合作加速推广RISC-V ISA的开发及采用,Linux基金会还将为RISC-V生态系统提供大量资源,包括培训计划、基础工具以及社区扩展、营销和法律专业知识。这种合作关系将使RISC-V能够进一步发展其开源生态系统。而现在,拥有Power ISA的OpenPower基金会已成为Linux基金会的一个部门,接下来Linux基金会必然也将会大力推广Power ISA。那么Linux基金会将如何处理这两个架构之间的竞争关系呢?这是一个需要思考的问题。Power ISA开源带来的机遇与挑战有业内人士表示,IBM开源Power ISA主要是为了应对另外两大开源处理器架构——MIPS和RISC-V的挑战。特别是RISC-V架构,自去年以来备受国内厂商追捧,并且目前已有非常多的厂商推出了基于RISC-V架构的芯片。不过,相对于在功耗、能效上更具优势的RISC-V架构来说,IBM的Power架构则在性能上有着较大的优势。资料显示,早在1980年,IBM就推出了基于Power架构的原型机。Power架构采用的也是精简指令集(RISC)。相比X86架构,Power架构在硬件上的最大特点是采用对称多处理器技术(Symmetric Multiprocessing,SMP),可以保障内存访问任何一个CPU时速度都是一样的。但是Intel的X86架构做不到,它对于一个CPU访问自己部分的内存速度很快,但是在访问其他CPU的内存时速度明显变慢。这样的性能差距在高端应用中,特别是核数越多的处理器性能差距就越大,因此IBM的Power架构主要应用于高端服务器市场而且应用前景非常广泛,在国内银行等关键行业都有重要应用。资料显示,目前IBM最新的Power架构处理器是Power 9,基于14nm FinFET SOI工艺,单个核心可以支持4线程或者8线程,分别能最多配置24、12个核心,逻辑线程总数最多都是96个。并且,Power 9还采用了一流I/O子系统技术,包括下一代NVIDIA NVLink、PCIe Gen4和OpenCAPI的处理器。这些顶尖技术为Power 9带来了非凡的性能表现,最高可提供相当于X86服务器9.5倍的I/O带宽,其性能内核约为X86的两倍,支持的RAM相当于X86的2.6倍,内存带宽相当于X86的1.8倍。目前美国能源部的超级计算机Summit和Sierra系统里面运行的就是Power 9芯片。而根据今年6月17日在德国法兰克福举行的国际超级计算大会发布的最新全球超级计算机TOP 500名单显示,虽然美国能源部下属橡树岭国家实验室开发的“顶点”和美国能源部下属劳伦斯利弗莫尔国家实验室开发的“山脊”分别夺得了第一和第二。足见IBM的Power处理器的性能强大。在目前国产X86架构的高性能CPU的发展遭遇较大的背景之下,可以预见的是,Power ISA的开源或将有助于推动国产高性能CPU的发展。2013年4月,由上海市国资委下属上海联和投资有限公司和台湾威盛集团所属公司合资成立了上海兆芯集成电路有限公司,中方国资占据控股地位(持股约80%)。上海兆芯因此也顺利从威盛那里获得了X86架构的授权。不过,随着威盛与Intel的X86授权协议于2018年4月到期,威盛已经无法在使用Intel新的X86专利及相关软件,这也意味着兆芯未来的X86产品升级或将遇阻,虽然其可能仍然可以使用旧的X86专利。2016年,AMD与中国天津海光先进技术投资有限公司(THATIC)成立合资公司,可以利用AMD的X86技术和 SoC IP 用于芯片开发。不过在今年6月,AMD CEO 苏姿丰( LisaSu)证实,AMD与天津海光的合作仅限于AMD的第一代Ryzen和EPYC的Zen架构,AMD新推出的Zen 2微架构设计则无权使用。这也意味着海光后续也将无法获得新的X86专利授权以及AMD的SoC IP授权。另外,不久前美国商务部还将中科曙光及其下属的海光列入了出口管制的“实体名单”。这也使得为国产高性能X86 CPU的发展蒙上了一层阴影。而此次IBM Power指令集的开源,或将成为推动国产高性能CPU的发展一条新的可选之路。虽然IBM是美国企业,但是开源的Power指令集将基本不会受到美国“禁令”的影响,这与同样源自美国的开源的RSIC-V指令集一样。不过需要指出的是,虽然基于Power指令集的处理器具有效率高、性能强劲等特点,但对于国内厂商来说,真要引进消化并不容易。毕竟Power CPU相比常规处理器要复杂太多,而且IBM并未开源Power芯片的底层物理架构,所有单纯的通过Power指令集来开放自己的CPU还是有着很高的难度。另外在生态上,Power也远不如Arm和X86完善。成立于2013年的苏州中晟宏芯信息科技有限公司(下称“中晟宏芯”),其员工主要来自中科院计算所和IBM,2014年中晟宏芯在工信部电子司和苏州政府的扶持下,加入IBM发起的OpenPower基金会,获得IBM Power CPU的授权,并且得到了IBM、中科院计算所提供的技术支持。在2015年6月发布了第一款IBM授权Power架构的服务器芯片产品CP1。然而,这款芯片似乎并未得到应用,而这家企业在2015年年底就传出了“欠薪事件”。2016年6月,中晟宏芯宣布已拿到IBM服务器处理器芯片Power 8芯片架构和指令系统的永久授权,并可以基于该芯片进行自主创新。甚至IBM已同意中晟宏芯可以删除Power 8的安全模块,代之以国产的安全模块系统,以符合中国政府在安全方面的监管要求。按照计划,中晟宏芯可以在2019年完全实现Power芯片的消化吸收再创新,并制成完全国产化的Power系列CPU。然而到目前为止,中晟宏芯的自研Power系列CPU仍不见踪迹。随着现在Power指令集的开源,中晟宏芯之前所获得的竞争优势,到现在来看已经是耗尽了大半。对于其他国产芯片厂商来说,Power指令集的开源,或将是一个新的机遇,但是挑战也是巨大的。

    时间:2019-09-10 关键词: IBM power 开源 指令集

  • 寒武纪宣布云端AI芯片思元270:自主指令集 性能提升4倍

    在AI人工智能芯片领域独树一帜的寒武纪科技今天宣布,将在8月29-31日的2019世界人工智能大会上,首次展示新一代云端AI芯片“思元270”。 据悉,思元270集成了寒武纪在芯片架构领域的一系列创新性技术,处理非稀疏深度学习模型的理论峰值性能提升至上一代MLU100的4倍,达到128TOPS(INT8),同时兼容INT4和INT16运算,理论峰值分别达到256TOPS和64TOPS,并支持浮点运算和混合精度运算。 思元270还采用了寒武纪自主研发的MLUv02指令集,可支持视觉、语音、自然语言处理、传统机器学习等高度多样化的人工智能应用,同时集成了面向视觉应用的视频和图像编解码硬件单元。 寒武纪还准备了思元270训练版板卡,可通过8位或16位定点运算,提供卓越的AI训练性能。 除了思元270,寒武纪还会借机展示AI芯片在智能制造、智慧交通、5G等看领域的应用,比如基于思元100的机动车安全技术检验监管智能审核系统、车辆非现场违法智能审核系统等等。

    时间:2019-09-05 关键词: 云端 人工智能 AI 寒武纪 思元270 指令集

  • 寒武纪宣布云端AI芯片思元270,采用自主指令集

    在AI人工智能芯片领域独树一帜的寒武纪科技宣布,将在8月29-31日的2019世界人工智能大会上,首次展示新一代云端AI芯片“思元270”。据悉,思元270集成了寒武纪在芯片架构领域的一系列创新性技术,处理非稀疏深度学习模型的理论峰值性能提升至上一代MLU100的4倍,达到128TOPS(INT8),同时兼容INT4和INT16运算,理论峰值分别达到256TOPS和64TOPS,并支持浮点运算和混合精度运算。 思元270还采用了寒武纪自主研发的MLUv02指令集,可支持视觉、语音、自然语言处理、传统机器学习等高度多样化的人工智能应用,同时集成了面向视觉应用的视频和图像编解码硬件单元。 寒武纪还准备了思元270训练版板卡,可通过8位或16位定点运算,提供卓越的AI训练性能。   除了思元270,寒武纪还会借机展示AI芯片在智能制造、智慧交通、5G等看领域的应用,比如基于思元100的机动车安全技术检验监管智能审核系统、车辆非现场违法智能审核系统等等。

    时间:2019-08-16 关键词: ai芯片 寒武纪 思元270 指令集

  • ARM指令集语法详解

    ARM指令也称ARM汇编指令集,是用来操作及控制ARM处理器及其相关设备的32bit的汇编指令,相对于16bit的thumb指令集而言功能更加强大,包含指令与伪指令。现将常用指令归纳汇总如下: 一、指令、伪指令 指令:是机器码的助记符,经过汇编器编译为机器码后,可以由CPU执行。 伪指令:用来指导汇编器编译指令,是汇编器的产物,最终不会生成机器码。 二、ARM指令的编写风格 汇编代码大写:在Windows中的IDE开发环境中一般都大写。 汇编代码小写:在Linux环境中,最好遵循GNU风格,即指令一般用小写。 三、ARM汇编代码文件后缀的大小写问题 Windows环境:因为Windows不区分大小写,所以汇编文件后缀大写、小写编译过程没有区别,即test.S与test.s编译结果一致。 Linux环境:Linux环境是严格区分大小写的,test.S与test.s会被当成不同的文件来处理(处理过程也不一致)。后缀小写的test.s文件,在编译阶段不进行预处理操作,所以不能在这里面写预处理的语句(不能有宏定义等,不常用);后缀大写的test.S文件,会进行预处理、汇编等操作,所以我们可以在这里面加入预处理的命令(比较常用)。 四、ARM汇编指令的格式 ARM汇编指令的格式比较固定、简单,即是:“操作码目标寄存器,操作数1,操作数2,……操作数n”。 例如将十六进制数0xaf放到寄存器r0中,我们用汇编代码可以这样写“mov r0,#0xaf”。这里的“mov”就是操作码(指令),实现的功能是将“0xaf”这个数存放到寄存器中“r0”中,“r0”也即是目标寄存器,“#0xaf”也即是操作数。在这里,“#0xaf”表示立即数(立即寻址方式指令中给出的数称为立即数立即数,亦即是直接参与运算不需处理的数),立即数需要用“#”来标识。 五、ARM指令分类 ARM指令可以分为程序状态寄存器操作指令、寄存器装载与存储指令、算术与逻辑指令、移位指令、乘法指令、比较指令、分支指令、浮点数指令、伪指令。 1、程序状态寄存器操作指令 程序状态寄存器操作指令包含msr、mrs两个指令。 (1)msr实现将通用寄存器(r0-r15)的值复制到状态寄存器(cpsr及spsr)中,用于更改处理器的工作模式及状态。例如, MSR CPSR, R0 ;复制 R0 到 CPSR 中 MSR SPSR, R0 ;复制 R0 到 SPSR 中 (2)mrs实现将状态寄存器(cpsr及spsr)的值复制到通用寄存器(r0-r15)中,用于读取处理器的工作模式及状态。例如, MRS R0, CPSR ; 复制 CPSR 到 R0 中 MRS R0, SPSR ; 复制 SPSR 到 R0 中 2、寄存器装载与存储指令 常用寄存器装载与存储指令操作指令包含ldr、str、ldm、stm四个指令,其中ldm、stm可以实现多个数据的传输。 (1)ldr实现将所在内存地址的值装载到寄存器中。 ldr rd, [rbase] ;rbase的值存储到rd寄存器 (2)str实现将寄存中的值存储在相应内存地址中。 str rd, [rbase] ;存储 rd 到 rbase 所包含的有效地址 (3)ldm实现将内存的值存储在相应寄存器地址中。常用于数据出栈。 ldmfd sp!, {r0-r3} ;将内存的数据出栈到r0-r3 (4)stm实现将寄存中的值存储在相应内存地址中。常用于数据入栈。 stmfd sp, {r0-r3} ;将寄存器r0-r3压栈 3、算术与逻辑指令 常用算术与逻辑指令包含and、orr、eor三个逻辑指令和adc、add、bic、mov、mvn、rsb、sub六个算术指令,共计九个指令。 (1)and实现逻辑与,相当于c语言中的位与。 and r0, r1, #0x01 ; r0=r1 & 0x01 (2)orr实现逻辑或,相当于c语言中的位或。 orr r0, r1, #0x01 ; r0=r1 | 0x01 (3)eor实现异或,相当于c语言中的异或。 eor r0, r1, #0x01 ; r0=r1 ^ 0x01 (4)bic实现清零操作。 bic r0, r0, #0x0f ; r0 = r0 & ~(0x0f)技术将低4bit清零 (5)mov实现数据的搬移,相当于c语言中的赋值(如果后面是立即数,这个立即数的范围一般是0~255(8bit))。 mov r0,#0x01 ; r0 = 0x01 mov r0,r1 ; r0 = r1 (6)mvn实现数据的取反并搬移,相当于c语言的取反在赋值。 mvn r0,#1 ; r0 = (~1) = -2 mvn r0,r1 ; r0 = (~r1) = -(r1 + 1) (7)rsb实现反向减法。 rsb r0, r1, #20 ; r0 = 20 - r1 rsb r0, r1, r2 ; r0 = r2 - r1 (8)add实现算术加法。 add r0, r1, #0x01 ; r0 = r1 + 0x01 (9)sub实现算术减法。 sub r0, r1, #0x01 ; r0=r1 - 0x01 4、移位指令 移位指令包含lsl、asl两个左移指令和lsr、asr、ror、rrx四个右移指令,共计六个指令。 (1)lsl实现逻辑左移,与asl作用等同。 mov r1, #0x21 ;将立即数0x21放到r1 mov r0, r1, lsl#3 ;将r1左移3位,然后放入r0中 (2)asl实现算术左移,与lsl作用等同。 mov r1, #0x21 ;将立即数0x21放到r1 mov r0, r1, asl#3 ;将r1左移3位,然后放入r0中 (3)lsr实现逻辑右移。 mov r1, #0x21 ;将立即数0x21放到r1 mov r0, r1, lsr#3 ;将r1右移3位,然后放入r0中 (4)asr实现算术右移。 mov r1, #0x21 ;将立即数0x21放到r1 mov r0, r1, asr#3 ;将r1右移3位,然后放入r0中 (5)ror实现循环右移。 mov r1, #0x21 ;将立即数0x21放到r1 mov r0, r1, ror#3 ;将r1右移3位,移出的位放依次放到高位,然后放到r0中 (6)rrx实现带扩展的循环右移 mov r1, #0x21 ;将立即数0x21放到r1 mov r0, r1, rrx#3 ;将r1右移3位,移出的位放依次放到高位(借一位构成33bit),然后放到r0中 5、乘法指令 乘法指令操作指令包含mla、mul两个指令。 (1)mla是三目乘法指令(有三个操作数)。例如: mla r0, r1,r2,r3 ;r0 = (r1 * r2) + r3 (2)mul是两目乘法指令(有两个操作数)。例如: mul r0, r1, r2 ;r0 = r1 * r2 6、比较指令 常用比较指令包含cmp、cmn两个指令。 (1)cmp实现比较功能,例如,cmp r0, r1 ;r0-r1 (2)cmn实现取负的值的比较功能,例如,cmn r0, r1 ;r0-(-r1) 7、分支指令 分支指令包含b、bl两个指令。 (1)b为不带连接的分支指令,当程序从当前位置调到分支程序中执行,将无法再返回到当前位置的下一条指令处。例如: .start .loop mov r0,#0x01 ;将0x01加载到r0寄存器 ………… b loop ; ;调到loop mov r1,#0x01 ;将0x01加载到r1寄存器 程序将一直在loop这里循环(相当于while循环),“mov r1,#0x01”永远得不到执行。 (2)bl为带连接的分支指令(branch and link),跳转前把返回地址放入lr中,以便用于函数调当程序从当前位置调到分支程序中执行,执行完分支程序将再返回到当前位置的下一条指令处继续执行。例如: .start .loop mov r0,#0x01 ;将0x01加载到r0寄存器 ………… bl loop ;调到loop mov r1,#0x01 ;将0x01加载到r1寄存器 程序执行完loop后调到下一行的“mov r1,#0x01”处执行。 8、浮点数指令 浮点数指令很多,常用指令有abs、cmf、dvf、mvf、muf、ldf、suf、adf几个指令,用于处理浮点数的加载、加、减、乘、除。 9、伪指令 伪指令操作指令包含adr、adrl、align、dcx、equx、opt六个指令,用于描述指定汇编代码的对齐方式、宏定义等。 六、常用GNU伪指令 global _start @ 给_start外部链接属性 .section .text @ 指定当前段为代码段 .ascii .byte .short .long .word .quad .float .string @ 定义数据 .align 4 @ 以4字节对齐 .balignl 16 0xabcdefgh @ 16字节对齐填充 .equ @ 类似于C中宏定义 .end @标识文件结束 .include @ 头文件包含 .arm / .code32 @声明以下为arm指令 .thumb / .code16 @声明以下为thubm指令 ldr 大范围的地址加载指令 adr 小范围的地址加载指令 adrl 中等范围的地址加载指令 nop 空操作 七、常用的8种寻址方式的指令实现 1、寄存器寻址 寄存器寻址就是利用寄存器中的数值作为操作数,是一种执行效率较高的寻址方式。例如: mov r1, r2 ;r1 = r2 2、立即(立即数)寻址 立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就是在指令中给出,只要取出指令也就渠道了操作数。这个操作数被称为立即数,对应的寻址方式也叫作立即寻址。例如: mov r0, #0xff00 ; r0 = 0xff00 3、寄存器移位寻址 将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。例如: mov r0, r1, lsl #3 ; r0 = r1 << 3 4、寄存器间接寻址 寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如: ldr r0, [r1] ;将内存地址存在r1这个寄存器中的内存地址里的值给r0 5、基址寻址 基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。常用于查表、数组操作、功能部件寄存器访问等。例如: LDRR2,[R3,#0x0C];读取R3+0x0C地址上的内容,放入R2 6、块拷贝寻址 多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。例如, STMIAR0!,{R1-R7} ;将R1~R7的数据保存到存储器中 7、多寄存器寻址 利用一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多16个通用寄存器的值 ldmia r1!, {r2-r7, r12} ;一次访问多个寄存器 8、堆栈寻址 堆栈是一种数据结构,按先进后出的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。例子, stmfd sp!, {r2-r7, lr} 八、常用指令后缀 同一指令经常附带不同后缀,变成不同的指令。经常使用的后缀有: 1、B(byte)功能不变,操作长度变为8位 2、H(half word)功能不变,长度变为16位 3、S(signed)功能不变,操作数变为有符号 4、条件执行后缀 5、“!”与“^”的作用 例如ldr可以加“b”、“h”、“s”变成 ldrb、ldrh、ldrsb、ldrsh用于表示加载8bit数据、16bit数据、有符号8bit数据、有符号16bit数据。 条件执行后缀,可以参看下表例。特点是条件后缀是否成立取决于当前代码的前面的代码,只影响当前代码的执行。   感叹号的作用就是r0的值在ldm过程中发生的增加或者减少最后写回到r0去,也就是说ldm时会改变r0的值。例如, ldmia r0, {r2 - r3} ;不会改变r0的值 ldmia r0!, {r2 - r3} ;会改变r0的值 ^的作用是在目标寄存器中有pc时,会同时将spsr写入到cpsr,一般用于从异常模式返回。 ldmfd sp!, {r0 - r6, pc} ;spsr不会写入到cpsr ldmfd sp!, {r0 - r6, pc}^ ;spsr写入到cpsr

    时间:2019-06-08 关键词: ARM 汇编 基础教程 指令集

  • 芯片自主可控,RISC-V将是至关重要吗?

    导语:从政策层面来说,要实现国产RISC-V自主可控发展,必须完善扶持机制,否则将举步维艰。从企业自身来说要做到三点,一是,不能以盈利为目的进行RISC-V IP核的开发,否则只会适得其反;二是,一定要以市场为导向,找准自己的市场定位和客户群,且在IP核开发时就跟市场衔接好;三是赶紧行动,如果等上个三五年,就真的难有机会了。 目前,全球微处理器指令集架构被Arm和Intel X86垄断。RISC-V指令集的横空出世,有可能打破这一格局,并给大陆处理器IP带来“自主可控”的发展契机。然而,美国和台湾RISC-V指令集IP已开始商用,大陆厂商为何迟迟不动?如何才能跟上节奏? Arm和X86垄断成型,RISC-V以“开源”制胜 在探讨本土厂商如何发展RISC-V之前,先了解一下什么是RISC-V指令集,相比Arm和Intel X86,RISC-V有哪些自己的优势。微处理器指令集架构(ISA)是沟通软硬件运算之间的桥梁,是处理器的灵魂,它包括复杂指令集运算(CISC)、精简指令集运算(RISC)、显式并行指令集运算(EPIC)和超长指令字指令集运算(VLIW)四个种类。 其中Intel X86属于CISC复杂指令集架构,ARM属于RISC精简指令集架构,RISC-V与Arm同宗同源,也属于RISC架构,因其是RISC的第五个版本,故称为RISC-V(five)。 自RlSC-V 2010年在伯克利大学诞生以来,业界出现最多的一个声音就是,RISC-V可能改变现有的由Arm和Intel X86主导的处理器架构竞争格局,尤其将会对Arm在消费类、IOT等嵌入式市场造成冲击。今年6月,Arm还建立专门的网站riscv-basics.com对RISC-V从“成本、生态系统、碎片化风险、安全性和设计保证”五个方面进行攻击,彰显出Arm对RISC-V这个潜在对手的高度重视。 相比Intel X86和Arm架构,RISC-V究竟有哪些竞争优势呢? 首先是功能优势: 1、RISC-V架构的篇幅很短,不用背负向后兼容的历史包袱; 2、模块化的灵活设计,RISC-V可根据特定应用场景对指令集进行裁剪或修改; 3、RISC-V支持可扩展定制指令; 4、RISC-V硬件设计与编译器实现起来非常简单。 其次是开源的优势,也是RISC-V进攻Arm的核心武器。 美国和台湾正积极布署,大陆企业却仍在观望 如上所述,RISC-V开源的特性、极简的架构与模块化哲学,将给开发者带来极大的便利。然而,相比Arm和Intel X86,RISC-V也有自身的短板——生态不完善。 2016年成立的RISC-V基金会吸引了IBM、NXP、西部数据、英伟达、高通、三星、谷歌、特斯拉、华为、中天微、中兴微、阿里、高云、中科院计算所等国内外150多家企业与科研机构的加入,但真正宣布基于RISC-V指令集开发IP核的企业仍是凤毛麟角。而在这极少数的企业当中,大陆企业又明显少于美国和台湾企业,更多仍处于观望状态。

    时间:2019-05-19 关键词: 芯片 risc-v 技术前沿 指令集

  • IBM新款大型主机用CPU 号称500亿指令集/s

    IBM日前宣布将在9月10日推出新款大型计算机主机(mainframe ),搭载96颗5.2GHz频率速度的微处理器,号称每秒可处理500亿指令集(50 billion per )。 根据IBM表示,该公司新款处理器在512mm2的面积内包含了14亿颗晶体管,是由IBM美国纽约州Poughkeepsie的工程师团队所设计,采用45纳米绝缘上覆硅(silicon-on-insulator)制成,在该公司 Fishkill的12吋晶圆厂生产。 该大型主机处理器采用了IBM的嵌入式技术,因此可在高速微处理器上配置密集高速缓存,以提升芯片性能。不过IBM的发言人表示,目前处理器的基准检验(benchmark)相关资料尚未能提供。 IBM即将推出的大型主机产品zEnterprise ,号称是该公司史上最强的商用系统,每秒可处理的指令集数目是1970年代最强系统的1万7,000倍。此外,搭配处理器的新软件亦针对高数据量工作做了优化,数据密集与工作的处理效能号称可提升六成。不过该系统的价格信息尚未公布。 而虽然zEnterprise的效能比前一代系统z10高出六成,但两者所消耗电力却相差不多;IBM指出,新系统能源使用效益的改善,是透过微处理器设计的演进所达成。采用45纳米制程,以及更高效率的电源转换、分配,再加上先进的与散热控制韧体,能根据温度、湿度与空气密度等环境条件进行调节。 zEnterprise 主要是支持工作量庞大的企业,例如银行或零售业;IBM引述Berg Insight的市场研究资料指出,目前全球行动银行与相关金融业务的活跃使用者,预计将由2009年的5,500万人增加,在2015年增加到8.94亿人。 IBM在zEnterprise产品在线的研发投资,据说超过了15亿美元,并与主要客户合作进行了三年以上的测试。该公司位于美国德州奥斯汀、德国、以色列与印度等地的实验室,也都对z196处理器的开发贡献了心力。

    时间:2019-04-16 关键词: IBM 主机 嵌入式处理器 新款 指令集

  • 32位精简指令集架构的AT91M42800A的设计与应用

    1 引言 目前,嵌入式产品逐步占领了PC市场,而其核心部分——处理器的性能则决定了产品的设计和性能。在32位嵌入式处理器中, 由ATMEL 公司生产的AT91系列芯片之一AT91M42800A是基于ARM7TDMI 处理器内核的16/32位微控制器,它除具有ARM处理器的低功耗、低成本、高性能等优点外,还具有非常丰富的片内资源,特别适合于嵌入式产品的设计开发。 2 AT91M42800A 的基本特性 AT91M42800A采用32位精简指令集(RISC)架构,因此,它既支持16位Thumb指令集,又支持32位的Arm指令集。它采用三级流水线结构,可在同一时间内,一条指令在执行,第二条指令在译码,第三条指令在取指,这样,在每个周期都有一条指令在执行,因此,指令执行速度很快。AT91M42800A的基于先进微控制器总线结构(AMBA)的模块化设计方法具有综合、快速、高性能价格比的特点。该微控制器的内部工作寄存器很多,非常适合实时控制应用。其主要特点如下:●内核电压和锁相环电压为2.7~3.6V, I/O口操作电压为2.7~5.5V; ●内部带有8kB静态RAM; ●具有完全可编程外部总线接口(EBI),且多达8个片选,寻址空间很大; ●内含8通道外设数据控制器(PDC); ●带有54个可编程I/O口; ●内含6通道16位定时/计数器; ●具有2个通用串行异步接收/发送器(USART)和2个主/从SPI接口; ●内含3个系统定时器; ●时钟可由32768 Hz 晶体和内部锁相环(PLL)电路产生,最高可编程至33MHz,也可由外部时钟信号提供; ●内置嵌入式在线仿真电路(Embedded ICE)?可通过JTAG口对AT91M42800A进行测试。 3 基本组成系统 由AT91M42800A构成的最基本的系统至少应包括以下几个部分: (1)程序存储器(ROM) 由于AT91M42800A 内部没有ROM,因此,必须外扩一片程序存储器。应当注意的是:AT91M42800A的8位总线和16位总线的FLASH接法不同,具体接法如图1所示。 (2)数据存储器?RAM? 如果设计的系统比较复杂,数据比较多,当单片机内部8kB SRAM不能满足要求时,还要外扩一片数据存储器。AT91M42800A能够支持两种“写”方式,但对8位数据总线和16位数据总线的操作也是不同的,因此,对于不同的存储器,其接法不同。对于8位总线的存储器,只需接D0~D7,将D8~D15悬空,并将其地址线对接,而单片机的NWE/NWR0接到存储器的NWE上。对于16位总线的存储器,则将其数据线对接,A1~A17接存储器的A0~A16,并将其NWE/NWR0接存储器的NWE,NUB/NWR1接存储器的NUB,NLB/A0接存储器的NLB。外扩的RAM 的接法与外扩FLASH的接法类似。 (3)时钟发生电路 AT91M42800A的时钟既可以外接晶体,也可外接时钟信号。当外接晶体时,由于其内带振荡电路,因此,外接32.768 kHz 的晶体后,可产生慢时钟(SLCK)。由于SLCK频率低,所以系统的功耗也很低。若想提高系统的工作频率,则可通过PLLA或PLLB对其倍频,以达到所要求的工作频率。如果所需频率不能通过PLL倍频得到,则可由外接时钟信号来提供。当外接时钟信号时,可直接把时钟信号接到XIN引脚上,XOUT引脚悬空。 (4)显示电路 显示电路可采用数码管显示或液晶显示,由于液晶显示的功耗低,故常采用这种显示方式。该设计选用的液晶显示模块为LCM103。 (5)电源及复位电路 AT91M42800A内部带有看门狗(WatchDog)电路,也可以外加WatchDog电路。本文中的例子采用的就是外加WatchDog电路的接法,所选用的器件是MAXIM公司生产的MAX6316LUK29CY。 4 典型应用 由于单片机AT91M42800A具有低功耗、高性能、片内资源丰富、寻址空间大等优点,所以适合现场总线产品的开发,其简要硬件原理图如图2所示。图中只给出主要器件的主要引脚接法,电源电路及其它引脚限于篇幅图中未画,读者在实际的设计过程中可自行设定。 图2 现场总线开发实例 5 存储器空间分配 在本设计中,由于ARM7TDMI处理器的地址空间非常大(可达4G字节)。因此,在重映射前,可将地址最低的4MB分配给内部存储器,最高的4M 分配给内部外设,其余中间的地址空间(从0x00400000到0xFFFCFFFF)留给外部扩展的设备,这部分设备可由AT91M42800A 的八个片选来选择。笔者选择的AT91M42800A开发环境为ADS1.1,由于在实际的嵌入式系统中,ADS1.1提供的缺省存储器映射不能满足要求,而用户的目标硬件有多个存储器设备,且位于不同的位置,如上例中,AT91M42800A的四个片选分别给了外扩FLASH、外扩的RAM、以及FB3050的内部寄存器片选和存储器片选,因此需要通过Scat-ter 文本文件来指定一段代码或数据在加载和运行时在存储器的不同位置,这个文本文件在命令行中由-scatter开关指定。在arm linker菜单的output 子菜单下有link type一项。link type 选项中,只要选择 scatter,并指定scatter.scf 文件的存储位置就可以了。在下面的例子中,FLASH中的代码和数据存储在0x04000000起始的、长度为32kB的地址空间中。 由于Start. s:汇编引导程序代码在执行重映射后,中断向量表将存放在内部RAM中,其地址范围为0x00000000到0x00000018,因此,用于存放数据的实际地址是从0x00000020开始的。存放在外扩RAM中的代码放在ext_ram.c中,以下类似。上例的scatter 文本文件代码如下: FLASH 0x04000000 0x8000 { FLASH 0x04000000 0x8000 { Start.o (Reset, +First) * (+RO) } RAM ON CHIP 0x0020 0x2000 { *(+RW,+ZI) } RAM OFF CHIP 0x8000000 0x40000 { ext ram.o(+RW,+ZI) } FB3050 SEND 0x30000000 0x00ff { sendbuf.o(+RW,+ZI) } FB3050 RECEIVE 0x30004000 0x00ff { receive buf.o?+RW?+ZI? } } 6 调试要点 在设计调试过程中,AT91M42800A还有几个特殊的引脚需要特别注意。 BMS:此引脚用来选择引导存储器的数据宽度,如果引导存储器是8位的,应将其上拉,而如果为16位则要下拉。 NTRI:此引脚用来选择三态模式。如果要进入三态模式,应使NTRI引脚在NRST上升沿到来之前保持10个慢时钟周期的低电平,否则,则应将NTRI上拉。 NWAIT:此引脚在调试AT91M42800A时,应将其上拉,否则,系统将进入等待状态。 MODE0、MODE1:这两个引脚用来选择AT91M42800A的4种操作模式,当模式改变时,必须进行复位才能有效。其设置方法如表1所列。 表1 操作模式设置 MODE0 MODE1 操 作 模 式 0 0 通用模式(时钟由片上振荡电路产生) 0 1 边界扫描模式 1 0 通用模式(时钟由外时钟信号通过XIN引脚) 1 1 保留7 结束语 AT91M42800A是一款处理能力非常强、性能价格比非常高的嵌入式微控制器,它具有32位处理器的处理能力,但却只有16位处理器的价格。它丰富的片上资源和强大的扩展能力为嵌入式系统的开发设计提供了很大灵活性。

    时间:2019-03-28 关键词: 电源技术解析 32位 at91m42800a 指令集

  • ARM指令集

    arm指令集可以分为6类,即跳转指令、数据处理指令、程序状态寄存器(psr)传输指令、load/store指令、协处理器指令和异常中版产生指令。下面分别对这6种指令进行介绍。  1.跳转指令  在arm中有两种方式可以实现程序的跳转:一种是刀‘转指令;另一种是直接向pc寄存器(r15)中写入目标地址值。  通过直接向pc寄存器中写入目标地址值可以实现在46b地址空间中任意跳转,这种跳转指令又称为长跳转。如果在长跳转指令之前使用mov lr,pc等指令,则可以保存将来返回的地址值,这样就实现了在46b地址空间中的子程序调用。  在arm版本5及以上的体系中,实现了arm指令集和thumb指令集的混合使用。指令使用目标地址值的bit[0]来确定目标程序的类型。bit[0]的值为1时,目标程序为thumb指令;bit[0]值为0时,目标程序为arm指令。  在arm版本5以前的体系中,传送到pc寄存器中的目标地址值的低两位bits[1∶0]被忽略,跳转指令只能在arm指令集中执行,即程序不能从arm状态切换到thumb状态。非t系列arm版本5体系不含thumb指令,当程序试图切换到thumb状态时,将产生未定义指令异常中断。  arm跳转指令可以从当前指令向前或向后的32mb地址空间跳转。这类跳转指令有以下4种。  (1)b 跳4专指令  b〔条件) (地址)  b指令属于arm指令集,是最简单的分支指令。一旦遇到一个b指令,arm处理器将立即跳转到给定的地址,从那里继续执行。注意:存储在分支指令中的实际值是相对当前r15的值的一个偏移量,而不是一个绝对地址。它的值由汇编器来计算,是24位有符号数,左移两位后有符号扩展为32位,表示的有效偏移位为26位(+/- 32 mb)。  (2)bl 带返回的跳转指令  bi,〔条件) (地址)  bl指令也属于arm指令集,是另一个分支指令。就在分支之前,在寄存器r14中装载上r15的内容,因此可以重新装载r14到r15中来返回到这个分支之后的那个指令处执行,它是子例程的一个基本但强力的实现。  (3)blx 带返回和状态切换的跳转指令  blx <地址>  blx指令有两种格式,第1种格式的blx指令记作blx(1)。blx(1)从arm指令集跳转到指令中指定的目标地址,并将程序状态切换到thumb状态,该指令同时将pc寄存器的内容复制到lr寄存器中。  blx(1)指令属于无条件执行的指令。  第2种格式的blx指令记作blx(2)。blx(2)指令从arm指令集跳转到指令中指定的目标地址,目标地址的指令可以是arm指令,也可以是thumb指令。目标地址放在指令中的寄存器<dest>中,该地址的bit[0]值为0,目标地址处的指令类型由cpsr中的t位决定。该指令同时将pc寄存器的内容复制到lr寄存器中。  (4)bx 带状态切换的跳转指令  bx(条件) (dest)  bx指令跳转到指令中指定的目标地址,目标地址处的指令可以是arm指令,也可以是thumb指令。目标地址值为指令的值和0xfl·ffffff做“与”操作的结果,目标地址处的指令类型由寄存器决定。  欢迎转载,信息来源维库电子市场网()

    时间:2019-01-14 关键词: ARM 嵌入式处理器 指令集

  • 英特尔展示新的SunnyCove平台,使用10nm Ice Lake处理器!

    前段时间英特尔宣布将在12月11日举行一次活动,公布一个前瞻性架构,之前有分析认为英特尔要公布自己的独显GPU计划,但这已经被官方否认,这次活动主要还是跟处理器有关。从现场曝光的一些信息来看,英特尔展示了一款新的SunnyCove平台,使用的应该是10nm工艺的Ice Lake冰湖处理器,这款处理器拥有全新的指令集,重点是加密算法,7-Zip性能提升高达75%。     12月11日会具备一次前瞻性的架构活动,不过这只是一场小型活动,仅邀请了几家媒体,会议上可与Intel的工程师与技术人员近距离接触,具体会说些什么现在还不太清楚,不过Hothardware发了一张现场的图片,随后又删除了,但是手快的人早就保存下来了。     从曝光的图片来看,英特尔展示的平台代号为Sunnycove,处理器信息没公布,不过公认为是10nm工艺的Ice Lake处理器。按照英特尔之前公布的消息,Ice Lake是第二代10nm工艺,而且是架构升级的Tock节点,现在英特尔展示的主要是Ice Lake在加密解密方面的内容,这个处理器具备全新的ISA指令集,包括Vector-AES及SHA-NI,架构创新之处主要是加速大多数常见的加密算法,其中7-Zip性能提升了75%。 现在曝光的Ice Lake架构、指令集升级应该只是一部分内容,未来详细内容还有待英特尔揭秘。 对于Ice Lake冰湖处理器,之前曝光的主要是核显部分,EU单元数量相比现在会有大幅增加,之前有一款Ice Lake-U使用的是Gen 11 LP架构,它配备了64SP,共有8组,总计512个流处理器单元,规模要比现在的核显高得多,目前GT2核显是24组EU单元, 至于Ice Lake的CPU架构,此前有爆料显示与kaby Lake架构的Y70相比,Ice Lake冰湖处理器的L1指令缓存还是32KB,不过数据缓存从32KB增加到了48KB,L2缓存则从256KB翻倍到了512KB,L3缓存是4MB,因此从缓存系统上来说,冰湖处理器的L1数据缓存增加了50%、L2缓存增加了100%。

    时间:2018-12-12 关键词: 英特尔 加密算法 10nm ice lake处理器 指令集

首页  上一页  1 2 下一页 尾页
发布文章

技术子站