csr空间和指令外设空间有什么不同

TI公司的仿真器同SEED仿真器的区别 

纜不同于TI,无需另外投资可以方便更换。 5)SEED的仿真器同TI的仿真器一样可以仿

DSP的仿真器同单片机的不同,仿真器中没有DSP提供IEEE标准的JTAG口对DSP進行仿真调

试,所以仿真器必须有仿真对象及目标系统。目标系统就是你的产品上面必须有DSP。

仿真器提供JTAG同目标系统的DSP相接通过DSP实現对整个目标系统的调试。 

请认真阅读“安装手册”常见问题是硬件的I/O口地址同主机的声卡或网卡有冲突,你可

以改变仿真器的I/O口地址也可以改变声卡或网卡的I/O口地址

仿真工作正常对于DSP的基本要求 

1)仿真器连接是否正常? 2)仿真器的I/O设置是否正确 3)XDSPP仿真器的电源是否正确

? 4)目标系统是否正确 5)仿真器是否正常?6)DSP工作的基本条件是否具备 

建议使用目标板测试。 

CCS是开放的软件平台它可以支持不同的硬件接口,因此不同的硬件接口必须通过标准的

骤将I/O口设为240,PCI接口板插入主机后主机将自动激活相应的Driver。 5)对于Si

为378或278注意主机BIOS中并口的型式必須同, 

DSP的速度尽快EPROM或flash的速度较慢,而DSP片内的RAM很快片外的RAM也较快。为

了使DSP充分发挥它的能力必须将程序代码放在RAM中运行。为了方便的將代码从ROM中搬

到RAM中在不带flash的DSP中,TI在出厂时固化了一段程序在上电后完成从ROM或外设

的电平。根据中断配置决定boot的方式为存储器加载还是串口加载其中ROM的地址可以为

三个中的一个,ROM可以为8位 

1)仔细检查boot的控制字是否正确。 2)仔细检查外部管脚设置是否正确 3)仔细检查he

x文件是否转换正确。 4)用仿真器跟踪boot过程分析错误原因。 

DSP在RESET后许多的寄存器的初值一般同用户的要求不一致,例如:等待寄存器SP,

中断定位寄存器等需要通过初始化程序设置为用户要求的数值。 初始化程序的主要作用

DSP有哪些数学库及其它应用软件 

TI公司为了方便客户开发DSP,茬它的网站上提供了许多程序的示例和应用程序如MATH库

TI有许多的Third Party可以通过DSP上的多种算法软件。可以通过TI的网页搜索你所需的

算法找到通過算法的公司,同相应的公司联系注意这些算法都是要付费的。 

eXpressDSP是一种实时DSP软件技术它是一种DSP编程的标准,利用它可以加快你开发DS

P软件的速度 以往DSP软件的开发没有任何标准,不同的人写的程序一般无法连接在一起

DSP软件的调试工具也非常不方便。使得DSP软件的开发往往滯后于硬件的开发 eXpre

和第三方支持四部分。利用该技术可以使你的软件调试,软件进程管理软件的互通及

算法的获得,都便的容易這样就可以加快你的软件开发进程。 

3)DSP算法标准可以保证你的程序可以方便的同其它利用eXpressDSP技术的程序连接在一起

同时也保证你的程序的延續性。 

3G技术和internate的发展要求处理器的速度越来越高,体积越来越小DSP的发展正好

能满足这一发展的要求。因为传统的其它处理器都有不哃的缺陷。MCU的速度较慢;CPU

体积较大功耗较高;嵌入CPU的成本较高。 DSP的发展使得在许多速度要求较高,算法

较复杂的场合取代MCU或其它处悝器,而成本有可能更低 

选择DSP可以根据以下几方面决定: 

1)速度: DSP速度一般用MIPS或FLOPS表示,即百万次/秒钟根据您对处理速度的要求选

择适合嘚器件。一般选择处理速度不要过高速度高的DSP,系统实现也较困难 

2)精度: DSP芯片分为定点、浮点处理器,对于运算精度要求很高的处理可选择浮点处

理器。定点处理器也可完成浮点运算但精度和速度会有影响。 

3)寻址空间: 不同系列DSP程序、数据、I/O空间大小不一与普通MCU鈈同,DSP在一个指

令周期内能完成多个操作所以DSP的指令效率很高,程序空间一般不会有问题关键是数

据空间是否满足。数据空间的大小鈳以通过DMA的帮助借助程序空间扩大。 

4)成本: 一般定点DSP的成本会比浮点DSP的要低速度也较快。要获得低成本的DSP系统

尽量用定点算法,用萣点DSP 

5)实现方便: 浮点DSP的结构实现DSP系统较容易,不用考虑寻址空间的问题指令对C语

言支持的效率也较高。 

6)内部部件:根据应用要求选擇具有特殊部件的DSP。如:C2000适合于电机控制;OMAP

适合于多媒体等 

要了解DSP芯片的性能,本网中的"DSP及相关器件"中有介绍 

2)DSP适合于数据处理,数据處理的指令效率较高 

3)DSP均为16位以上的处理器,不适合于低档的场合 

4)DSP可以同时处理的事件较多,系统级成本有可能较低 

5)DSP的灵活性较好,夶多数算法都可以软件实现 

6)DSP的集成度较高,可靠性较好 

可以处理较多的任务。 

1.通过仿真器编写:在我们的网页上有相关的软件在销售仿真器时我们也提供相关软件

。其中LF240x的编写可以在CCS中加入一个插件F24x的编写需要在windows98下的DOS窗中

进行。具体步骤见软件中的readme有几点需要注意: a.必须为MC方式; b.F206的工作

2.提供串口编写:TI的网页上有相关软件。注意只能编写一次因为编写程序会破坏串口

3.在你的程序中编写:TI的网页仩有相关资料。 

1.通过编程器编写:将OUT文件通过HEX转换程序转换为编程器可以接受的格式再由编程

2.通过DSP软件编写:您需要根据Flash的说明,编写Flash嘚编写程序将应用程序和编写

对于C5000,片内的BOOT程序在上电后将数据区的内容搬移到程序区的RAM中,因此FLAS

H必须在RESET后放在数据区由于C5000,数据區的空间有限一次BOOT的程序不能对于4

8K。解决的方法如下: 

2.用户初试化程序发出一个I/O命令(如XF)将FLASH译码到程序区的高地址。开放数据

3.用户初试化程序中包括第二次BOOT程序(此程序必须用户自己编写)将FLASH中没有B

4.开始运行用户处理程序。 

DSP外接存储器的控制方式 

对于一般的存储器具有RD、WR和CS等控制信号许多DSP(C3x、C5000)都没有控制信号直

接连接存储器,一般采用的方式如下: 

GEL文件的功能同emuinit.cmd的功能基本相同用于初始化DSP。泹它的功能比emuinit的

功能有所增强GEL在CCS下有一个菜单,可以根据DSP的对象不同设置不同的初始化程序

使用TI公司模拟器件与DSP结合使用的好处。 

1)在使用TI公司的DSP的同时使用TI公司的模拟可以和DSP进行无缝连接。器件与器件之

间不需要任何的连接或转接器件这样即减少了板卡的尺寸,也降低了开发难度 

2)同为TI公司的产品,很多器件可以固定搭配使用少了器件选型的烦恼 

3)TI在CCS中提供插件,可以用于DSP和模拟器件的开发非常方便。 

C语言中可以嵌套汇编语言 

可以。在ANSI C标准中的标准用法就是用C语言编写主程序用汇编语言编写子程序,中断

服务程序一些算法,然后用C语言调用这些汇编程序这样效率会相对比较高

在定点DSP系统中可否实现浮点运算

当然可以,因为DSP都可以用C,只要是可以使用c语言的場合都可以实现浮点运算 

JTAG头的使用会遇到哪些情况

4)仿真多片DSP。在使用菊花链的时候第一片DSP的TDO接到第二片DSP的TDI即可。注意当

串联DSP比较多的時候信号线要适当的增加驱动。 

头文件一般用于定义程序中的函数、参数、变量和一些宏单元,同库函数配合使用因

此,在使用库時必须用相应的头文件说明。 

1)2000系列dsp的中断向量只能从0000H处开始所以在我们调试程序的时候,要把DSP选择

为MP(微处理器方式)把片内的Flash屏蔽掉,免去每次更改程序都要重新烧写Flash工

2)3x系列dsp的中断向量也只能在固定的地址 

3)5000,6000系列dsp的中断向量可以重新定位但是它只能被重新定位箌Page0范围内的

有源晶振与晶体的区别,应用范围及用法 

1)晶体需要用DSP片内的振荡器在datasheet上有建议的连接方法。晶体没有电压的问题

可以适应於任何DSP,建议用晶体 2)有源晶振不需要DSP的内部振荡器,信号比较稳定

有源晶振用法:一脚悬空,二脚接地三脚接输出,四脚接电压 

程序经常跑飞的原因 

1)程序没有结尾或不是循环的程序。 

3)在看门狗动作的时候程序会经常跑飞 

4)程序编制不当也会引起程序跑飞。 

最近BBS上关於FLASH和BOOT的讨论很活跃我也多次来此请教。前几天自制的DSP板引导成

功早就打算写写这方面的东西。我用的DSP是5416以其为核心,做了一个相对獨立的子

系统(硬件、软件、算法)目前都已基本做好。 下面把在FLASH引导方面做的工作向大

家汇报一下希望能对大家有所帮助。本人经驗和文笔都有限写的不好请大家谅解。 硬

中断向量表在0xFF(片内DARAM),数据空间使用0xFFF(片内DARAM

) 因为FLASH是贴片的,所以需要自己编一个数据搬移程序把要主程序搬移到FLASH中

。在写入FLASH数据时还应写入引导表的格式数据。最后在数据空间的0xFFFF处写入引导

主程序的程序空间和中断向量表重合的物理空间以免覆盖。 烧写时同时打开主程序和

搬移程序的PROJECT,先LOAD主程序再LOAD搬移程序,然后执行搬移程序烧写OK! 附:

搬移程序(仅供参考) 

toolf...er=C24XSOFTWARE上可以下载到这个工具。我们仿真器自带的光盘中也有此烧写程

序 在使用这个工具时注意: 

二、进入cc中,在tools图标下有烧寫工具; 

1、关于FLASH时钟的选择此烧写工具默认最高频率进行FLASH的操作。根据目标系统的工

倍频存盘后,在相应的目录下(tic2xx/algos/相应目录)运行buildall.bat僦可以完成

修改了再进行相应的操作即可。 

2、若是你所选的频率不是最高频率还需要设定你自已的timings.xx来代替系统默认的最

中修改相应的位置。存盘后在相应的目录下运行buildall.bat就可以完成修改了。 

3、对于TMS320LF240XA系列还要注意:由于这些DSP的FLASH具有加密功能,加密地址为

程序空间的0x40-0X43H程序禁止写入此空间,如果写了此空间的数据被认为是加密位

,断电后进入保护FLASH状态使FLASH不可重新操作,从而使DSP报废烧写完毕后一定要

進行Program passwords的操作,如果不做加密操作就默认最后一次写入加密位的数据作为

1)、一般调试时在RAM中进行; 

2)、程序烧写时,避开程序空间0x40-0x43H加密区程序最好小于32k; 

4)、断电后,下次重新烧写时需要往word0~word3输入已设的密码再unlock,成功后可

以重新烧写了; 

6、VCPP管脚接在+5V上是应直接接的,中間不要加电阻 

8.注意*.cmd文件的编写时应该避开40-43H单元,好多客户由于没有注意到这里而把FALSH

c54x的外部中断是电平响应还是沿响应

是沿响应,准确嘚说它要检测到100(一个clk的高和两个clk的低)的变化才可以。 

watchdog是一个计数器溢出时会复位你的DSP,不disable的话你的系统会动不动就re

1,系统中要求多个鈈同频率的时钟信号时,首选可编程时钟芯片; 

2,单一时钟信号时选择晶体时钟电路; 

3,多个同频时钟信号时,选择晶振; 

4,尽量使用DSP片内的PLL降低爿外时钟频率,提高系统的稳定性; 

C程序的代码和数据如何定位

.stack 为C程序系统堆栈保留存储空间用于保存返回地址、函数间的参数传递、存儲局

部变量和保存中间结果; 

1)输入/输出定义:.obj文件:链接器要链接的目标文件;.lib文件:链接器要链接的库文

件;.map文件:链接器生成的交叉索引攵件;.out文件:链接器生成的可执行代码;链接器选

1,DSP片上外设种类及其应用日趋复杂 

2,提供一组标准的方法用于访问和控制片上外设 

3,免除用户编写配置和控制片上外设所必需的定义和代码 

1,用于配置、控制和管理DSP片上外设 

3,CSL库函数大多数是用C语言编写的,并已对代码的大小和速度进行了優化 

4,CSL库是可裁剪的:即只有被使用的CSL模块才会包含进应用程序中 

5,CSL库是可扩展的:每个片上外设的API相互独立增加新的API,对其他片上外设没囿影

1,片上外设编程的标准协议:定义一组标准的APIs:函数、数据类型、宏; 

2,对硬件进行抽象提取符号化的片上外设描述:定义一组宏,用于访問和建立寄存器及其

3,基本的资源管理:对多资源的片上外设进行管理; 

5,使片上外设容易使用:缩短开发时间增加可移植. 

4)长时间超常工作会损壞DSP器件; 

5)输出信号电平一般无需变换 

特点:3.3V供电,需进行方向控制 

应用:数据、地址和控制总线的驱动 

特点:5V供电,无需方向控制 

应用:适用于信号方向灵活、且负载单一的应用如McBSP等外设信号的电平变换 

特点:实现2选1,5V供电无需方向控制 

应用:适用于多路切换信号、苴要进行电平变换的应用,如双路复用的McBSP 

3.3V供电但输入容限为5V,并且延迟较大:>7ns适用于少量的对延迟要求不高的输入

未用的输入/输絀引脚的处理

1,未用的输入引脚不能悬空不接,而应将它们上拉活下拉为固定的电平 

1)关键的控制输入引脚如Ready、Hold等,应固定接为适当的状態,Ready引脚应固定接

为有效状态,Hold引脚应固定接为无效状态 

2)无连接(NC)和保留(RSV)引脚,NC 引脚:除非特殊说明这些引脚悬空不接,RSV引

脚:应根据數据手册具体决定接还是不接 

3)非关键的输入引脚,将它们上拉或下拉为固定的电平,以降低功耗 

2,未用的输出引脚可以悬空不接 

3,未用的I/O引脚:洳果确省状态为输入引脚则作为非关键的输入引脚处理,上拉或下拉

为固定的电平;如果确省状态为输出引脚则可以悬空不接


}

CSR公司日前宣布推出第二代Bluetooth?Smart平台以便为开发员开发低功耗无线配件产品提供更大的灵活性。其中CSR ?Energy?系列平台CSR1010? 及CSR1011?可为一系列设备的开发提供完整的端到端解决方案,包括HID设备如无线远程遥控器、鼠标及创新型“应用配件”

CSR公司低功耗无线产品部总监Paul Williamson表示:“Google宣布的这条消息对Bluetooth Smart技术的推广具有重偠的里程碑意义,为开发员开发低功耗无线创新设备及更多功能的移动应用提供了巨大的机会为了使开发员能够充分利用这个机遇,CSR特提供更加灵活且功能强大的平台包括CSR1010 与CSR1011,以协助他们创造出可使消费者享受无缝连接体验的设备”

Bluetooth Smart技术使之前受限于功耗、尺寸及无線标准复杂性的应用实现了低功耗连接及基本的数据传输。基于CSR 经认可的Bluetooth Smart射频CSR1010及CSR1011平台与第一代平台相比拥有大量改进功能。

提供更大内存空间以加载更高级及更灵活的应用程序新平台提供128 KB内存较第一代平台增加一倍,同时客户程序应用空间增加五倍为开发

简单优化功耗CSR新平台采用?Energy?硬件调制解调器。通过调制解调器及超低功耗可编程I/O控制器可与传感器及外设直接交互,而无需借助集成式微处理器哃时可以降低功耗并缩短数据传输延迟时间。新平台具有的这些特性可确保系统级功耗最小化从而在最短的开发时间内获得最佳产品性能。

简化设计流程且授权费用低CSR平台整合了一个阻抗为50欧的单端输出引脚不必使用不平衡变压器,且同时降低了物料清单及印刷电路板設计的复杂性简化了设计流程。此外该平台提供的单芯片开关电源可通过广泛的电池电源直接操控,无需通过低效的外部稳压器进行控制

CSR还提供一系列软件开发套件、应用程序示例及硬件布局设计示例,为客户开发Bluetooth Smart解决方案提供一个更为灵活、快速的研发环境与其怹供应商提供的SDK许可均价2000美元相比,CSR Bluetooth Smart SDK及开发工具(包括编译器)授权费最低仅499美元。

CSR还提供一套针对CSR1010 及CSR1011平台的可立即使用的参考设计资料均获得蓝牙技术联盟(Bluetooth SIG)认证且符合FCC及ETSI协从标准。

游戏外设制造商美加狮已选用CSR1011平台用于其C.T.R.L.R无线游戏手柄、R.A.T.M无线移动游戏鼠标及M.O.U.S.9无线鼠标CSR两款新平台现已全球上市。

最近项目用到了STM8S103K3T6的beep功能调试时遇到了无法更改寄存器BEEP_CSR的值的问题,造成无法开启beep功能;网上一搜全是提到OPTION BYTE的设置问题不管用IAR或者stvp烧写前设置,还是在程序中操作FLASH通过软件方式改变OPTION BYTE,都没有作用自己翻看最新版的手册,里面讲的也是前后沖突英文版的也是言归正传,项目中就是在PD4脚接的无源蜂鸣器没什么问题;手册中也可能为了兼容多个型号说的不够详细,前后冲突茬手册DocID15441 Rev 13的第4.9章说要设置op(option data简写)的ARF7位打开复用但是在第8.1章又说AFR7是保留位,无作用在第八章中

还是芯片厂商都无可厚非的从中受益。如果抛开品牌、各家产品的外型国产 TWS 耳机除了华为最新的产品搭载自己的麒麟 A1 芯片外,绝大多数厂商的芯片主要来自台湾的联发科以及美國的高通而通过对于市面上的一些 TWS 耳机拆解,你会进一步发现其方案主要是基于 AB1526 以及 CSR8675 这两款产品这两颗蓝牙 SoC 究竟有什么魔力,为何绝夶多数的 TWS 耳机都采用这两个产品方案AB1526 是联发科收购的一家名叫络达科技的产品,这是一款全集成的单芯片支持蓝牙 4.2 双模认证,支持 HFP1.6 和 AAC 解码器并且可以支持自定义双 MiC 的宽频语音,可以获得良好的降噪和回声消除功能通过下图的硬件系统框图可以看到

台积电发布9月份企業社会责任(CSR)电子报,其中全部12吋厂铜离子排放浓度提前达标,台积电表示这是继完成高浓度含铜废液再制铜棒后的另一大创举。囼积电积极实践绿色制造去年起评估、测试“废水浓缩再生高浓度铜再电镀”系统建置,希望借由树脂与再生浓度选用与调配测试透過阳离子树脂塔吸附低浓度铜离子,再用强酸提浓后以电镀方式将铜离子再制为铜棒。台积电预期待系统建置完成,可望100%取代既有的放流处理流程实现零含铜废液排放、资源利用再生愿景。目前台积电以“源头分流、中间处理、次产物价值提升”铜离子减废减污3部曲,持续优化处理效率、削减废液排放浓度并将废弃物成功浓缩制成高价值产物。今年9月全部12吋晶圆厂已提前达成削减排放

  5月9日丅午,IPC—国际电子工业联接协会?在北京召开IPC CSR企业社会责任专题会议来自国内外企业、社会组织和媒体等机构的30余位CSR负责人参加了此次會议。下面就随工业控制小编一起来了解一下相关内容吧  IPC-1401标准技术组副主席、富士施乐CSR经理刘美华女士在《建立可持续采购体系,提升企业竞争力: IPC-1401供应链社会责任管理体系指南》的演讲中向来宾简要介绍了1401标准融入采购管理体系提供战略方法论为价值链创造商业價值提升供应链竞争力。随后刘美华女士结合富士施乐的实践经验向来宾做了报告《推动CSR采购实践,助力供应商可持续发展 IPC-1401指南经验分享》中环联合认证中心的技术总监顾江源先生

2018年5月10日,中国上海—5月9日下午,IPC—国际电子工业联接协会?在北京召开IPC CSR企业社会责任专题会議来自国内外企业、社会组织和媒体等机构的30余位CSR负责人参加了此次会议。IPC-1401标准技术组副主席、富士施乐CSR经理刘美华女士在《建立可持續采购体系提升企业竞争力: IPC-1401供应链社会责任管理体系指南》的演讲中向来宾简要介绍了1401标准融入采购管理体系提供战略方法论,为价徝链创造商业价值提升供应链竞争力随后,刘美华女士结合富士施乐的实践经验向来宾做了报告《推动CSR采购实践助力供应商可持续发展 IPC-1401指南经验分享》。中环联合认证中心的技术总监顾江源先生在《社会责任绩效评估

    Wi-Fi?、 蓝牙?及Bluetooth Smart连接方案为物联网应用的开发消除准入壁垒     CSR公司日前发布了几款即将推出的面向新型ARM? mbed?操作系统(OS)的连接方案产品细节,这些方案将使开发人员能够更加轻松、快速地开發出完整的物联网(IoT)解决方案

}

0 RISC-V和其他开放架构有何不同

如果仅從“免费”或“开放”这两点来评判RISC-V架构并不是第一个做到免费或开放的处理器架构。

在开始之前我们先通过论述几个具有代表性的開放架构,来分析RISC-V架构的不同之处以及为什么其他开放架构没能取得足够的成功

  • 采用免费开放的32/64位 RISC架构。

  • 用Verilog HDL(硬件描述语言)实现了基於该架构的处理器源代码

OpenRISC被应用到很多公司的项目之中。可以说OpenRISC是应用非常广泛的一种开源处理器实现。

OpenRISC的不足之处在于其侧重于实現一种开源的CPU Core而非立足于定义一种开放的指令集架构,因此其架构的发展不够完整指令集的定义也不具备上节中提到的RISC-V架构的优点,哽加没有上升到成立专门的基金会组织的高度OpenRISC更多的时候被认为是一个开源的Core,而非一种优美的指令集架构此外,OpenRISC的许可证为GPL这意菋着所有的指令集改动都必须开源(而RISC-V则无此约束)。

SPARC架构作为经典的RISC微处理器架构之一SPARC最早于1985年由Sun电脑所设计。SPARC也是SPARC国际公司的注册商标之一这家公司于1989年成立,目的是向外界推广SPARC架构以及为该架构进行兼容性测试该公司为了推广SPARC的生态系统,SPARC国际公司将标准开放并授权予多家生产商采用,包括德州仪器、Cypress半导体和富士通等由于SPARC架构也对外完全开放,因此也出现了完全开放源码的LEON处理器。不僅如此Sun公司还于1994年推动SPARC

由于SPARC架构的初衷是面向服务器领域而设计,其最大的特点是拥有一个大型的寄存器窗口符合SPARC架构的处理器需要實现从72到640个之多的通用寄存器,每个寄存器宽度为64bits组成一系列的寄存器组,称之为寄存器窗口

这种寄存器窗口的架构,由于可以切换鈈同的寄存器组快速地响应函数调用与返回因此,能够产生非常高的性能但是这种架构由于功耗面积代价太大,而并不适用于PC与嵌入式领域处理器而SPARC架构也不具备模块化的特点,使得用户无法裁剪和选择很难作为一种通用的处理器架构对商用的x86和ARM架构形成替代。

设計这种超大服务器CPU芯片又非普通公司与个人所能涉足而有能力设计这种大型CPU的公司也没有必要投入巨大的成本来挑战x86的统治地位。随着Sun公司的衰弱SPARC架构现在基本上退出了人们的视野。感兴趣的读者请在网络上自行搜索文章《再见SPARC处理器再见Sun》

关于RISC-V在伯克利大学诞生的經历,本节在此不做重复赘述

因为多年来在CPU领域已经出现过多个免费或开放的架构,很多高校也在科研项目中推出过多种指令集架构洇此,当笔者第一次听说RISC-V之时以为又是一个玩具,或纯粹学术性质的科研项目而不以为意

直到笔者亲自通读了一遍RISC-V的架构文档,不禁為其先进的设计理念所折服同时,RISC-V架构的各种优点也得到了众多专业人士的青睐好评和众多商业公司的相继加盟并且2016年RISC-V基金会的正式啟动在业界引起了不小的影响。如此种种使得RISC-V成为至今为止最具备革命性意义的开放处理器架构。

1 简单就是美——RISC-V架构的设计哲学

RISC-V架构莋为一种指令集架构在介绍细节之前,让我们先了解设计的哲学所谓设计的“哲学”便是其推崇的一种策略,譬如说我们熟知的日本車的设计哲学是经济省油美国车的设计哲学是霸气外漏等。RISC-V架构的设计哲学是什么呢是“大道至简”。

笔者最为推崇的一种设计原则便是:简单就是美简单便意味着可靠。无数的实际案例已经佐证了“简单即意味着可靠的”真理反之越复杂的机器越则越容易出错。

所谓大道至简在IC设计的实际工作中,笔者曾见过最简洁的设计实现安全可靠也曾见过最繁复的设计长时间无法稳定收敛。最简洁的设計往往是最可靠的在大多数的项目实践中一次次的得到检验。

IC设计的工作性质非常特殊其最终的产出是芯片,而一款芯片的设计和制慥周期均很长无法像软件代码那样轻易的升级和打补丁,每一次芯片的改版到交付都需要几个月的周期不仅如此,芯片的一次制造成夲费用高昂从几十万美金到百千万美金不等。这些特性都决定了IC设计的试错成本极为高昂因此能够有效的降低错误的发生就显得非常嘚重要。

现代的芯片设计规模越来越大复杂度越来越高,并不是说要求设计者一味的逃避使用复杂的技术而是应该将好钢用在刀刃上,将最复杂的设计用在最为关键的场景在大多数有选择的情况下,尽量选择简洁的实现方案

笔者在第一次阅读了RISC-V架构文档之时,不禁擊节赞叹拍案惊奇,因为RISC-V架构在其文档中不断地明确强调其设计哲学是“大道至简”,力图通过架构的定义使得硬件的实现足够简单其简单就是美的哲学,可以从几个方面容易看出后续小节将一一加以论述。

1.1 无病一身轻——架构的篇幅

在处理器领域目前主流的架構为x86与ARM架构,笔者曾经参与设计ARM架构的应用处理器因此需要阅读ARM的架构文档,如果对其熟悉的读者应该了解其篇幅经过几十年的发展,现代的x86与ARM架构的架构文档长达几百数千页打印出来能有半个桌子高,可真是“著作等身”

之所以现代x86与ARM架构的文档长达数千页,且蝂本众多一个主要的原因是因为其架构的发展的过程也伴随了现代处理器架构技术的不断发展成熟。

并且作为商用的架构为了能够保歭架构的向后兼容性,其不得不保留许多过时的定义或者在定义新的架构部分时为了能够将就已经存在的技术部分而显得非常的别扭。玖而久之就变得极为冗长

那么现代成熟的架构是否能够选择重新开始,重新定义一个简洁的架构呢可以说是几乎不可能。其中一个重偠的原因便是其无法向前兼容从而无法得到用户的接受。试想一下如果我们买了一款新的搭配新的处理器的电脑或者手机回家之前所囿的软件都无法运行而变砖,那肯定是无法让人接受的

而现在才推出的RISC-V架构,则具备了后发优势由于计算机体系结构经过多年的发展巳经成为比较成熟的技术,多年来在不断成熟的过程中暴露的问题都已经被研究透彻因此新的RISC-V架构能够加以规避,并且没有背负向后兼嫆的历史包袱可以说是无病一身轻。

目前的“RISC-V架构文档”分为“指令集文档”(riscv-spec-v2.2.pdf)和“特权架构文档”(riscv-privileged-v1.10.pdf)“指令集文档”的篇幅为145頁,而“特权架构文档”的篇幅也仅为91页熟悉体系结构的工程师仅需一至两天便可将其通读,虽然“RISC-V的架构文档”还在不断地丰富但昰相比“x86的架构文档”与“ARM的架构文档”,RISC-V的篇幅可以说是极其短小精悍

图1 RISC-V基金会网站上的架构文档

1.2 能屈能伸——模块化的指令集

RISC-V架构楿比其他成熟的商业架构的最大一个不同还在于它是一个模块化的架构。因此RISC-V架构不仅短小精悍,而且其不同的部分还能以模块化的方式组织在一起从而试图通过一套统一的架构满足各种不同的应用。

这种模块化是x86与ARM架构所不具备的以ARM的架构为例,ARM的架构分为A、R和M三個系列分别针对于Application(应用操作系统)、Real-Time(实时)和Embedded(嵌入式)三个领域,彼此之间并不兼容

但是模块化的RISC-V架构能够使得用户能够灵活選择不同的模块组合,以满足不同的应用场景可以说是“老少咸宜”。譬如针对于小面积低功耗嵌入式场景用户可以选择RV32IC组合的指令集,仅使用Machine Mode(机器模式);而高性能应用操作系统场景则可以选择譬如RV32IMFDC的指令集使用Machine Mode(机器模式)与User Mode(用户模式)两种模式。而他们共哃的部分则可以相互兼容

1.3 浓缩的都是精华——指令的数量

短小精悍的架构以及模块化的哲学,使得RISC-V架构的指令数目非常的简洁基本的RISC-V指令数目仅有40多条,加上其他的模块化扩展指令总共几十条指令

本章将对RISC-V的指令集架构多方面的特性进行简要介绍。

2.1 模块化的指令子集

RISC-V嘚指令集使用模块化的方式进行组织每一个模块使用一个英文字母来表示。RISC-V最基本也是唯一强制要求实现的指令集部分是由I字母表示的基本整数指令子集使用该整数指令子集,便能够实现完整的软件编译器其他的指令子集部分均为可选的模块,具有代表性的模块包括M/A/F/D/C如表1所示。

为了提高代码密度RISC-V架构也提供可选的“压缩”指令子集,由英文字母C表示压缩指令的指令编码长度为16比特,而普通的非壓缩指令的长度为32比特以上这些模块的一个特定组合“IMAFD”,也被称为“通用”组合由英文字母G表示。因此RV32G表示RV32IMAFD同理RV64G表示RV64IMAFD。

为了进一步减少面积RISC-V架构还提供一种“嵌入式”架构,由英文字母E表示该架构主要用于追求极低面积与功耗的深嵌入式场景。该架构仅需要支歭16个通用整数寄存器而非嵌入式的普通架构则需要支持32个通用整数寄存器。

通过以上的模块化指令集能够选择不同的组合来满足不同嘚应用。譬如追求小面积低功耗的嵌入式场景可以选择使用RV32EC架构;而大型的64位架构则可以选择RV64G。

除了上述的模块还有若干的模块包括L、B、P、V和T等。这些扩展目前大多数还在不断完善和定义中尚未最终确定,因此本文在此不做详细论述

2.2 可配置的通用寄存器组

RISC-V架构支持32位或者64位的架构,32位架构由RV32表示其每个通用寄存器的宽度为32比特;64位架构由RV64表示,其每个通用寄存器的宽度为64比特

RISC-V架构的整数通用寄存器组,包含32个(I架构)或者16个(E架构)通用整数寄存器其中整数寄存器0被预留为常数0,其他的31个(I架构)或者15个(E架构)为普通的通鼡整数寄存器

如果使用了浮点模块(F或者D),则需要另外一个独立的浮点寄存器组包含32个通用浮点寄存器。如果仅使用F模块的浮点指囹子集则每个通用浮点寄存器的宽度为32比特;如果使用了D模块的浮点指令子集,则每个通用浮点寄存器的宽度为64比特

2.3 规整的指令编码

茬流水线中能够尽早尽快的读取通用寄存器组,往往是处理器流水线设计的期望之一这样可以提高处理器性能和优化时序。这个看似简單的道理在很多现存的商用RISC架构中都难以实现因为经过多年反复修改不断添加新指令后,其指令编码中的寄存器索引位置变得非常的凌亂给译码器造成了负担。

得益于后发优势和总结了多年来处理器发展的教训RISC-V的指令集编码非常的规整,指令所需的通用寄存器的索引(Index)都被放在固定的位置如图2所示。因此指令译码器(Instruction Decoder)可以非常便捷的译码出寄存器索引然后读取通用寄存器组(Register FileRegfile)。

图2 RV32I规整的指囹编码格式

2.4 简洁的存储器访问指令

与所有的RISC处理器架构一样RISC-V架构使用专用的存储器读(Load)指令和存储器写(Store)指令访问存储器(Memory),其怹的普通指令无法访问存储器这种架构是RISC架构的常用的一个基本策略,这种策略使得处理器核的硬件设计变得简单

存储器访问的基本單位是字节(Byte)。RISC-V的存储器读和存储器写指令支持一个字节(8位)半字(16位),单字(32位)为单位的存储器读写操作如果是64位架构还鈳以支持一个双字(64位)为单位的存储器读写操作。

RISC-V架构的存储器访问指令还有如下显著特点:

  • 为了提高存储器读写的性能RISC-V架构推荐使鼡地址对齐的存储器读写操作,但是地址非对齐的存储器操作RISC-V架构也支持处理器可以选择用硬件来支持,也可以选择用软件来支持

  • 由於现在的主流应用是小端格式(Little-Endian),RISC-V架构仅支持小端格式有关小端格式和大端格式的定义和区别,本文在此不做过多介绍若对此不甚叻解的初学者可以自行查阅学习。

  • 很多的RISC处理器都支持地址自增或者自减模式这种自增或者自减的模式虽然能够提高处理器访问连续存儲器地址区间的性能,但是也增加了设计处理器的难度RISC-V架构的存储器读和存储器写指令不支持地址自增自减的模式。

  • RISC-V架构采用松散存储器模型(Relaxed Memory Model)松散存储器模型对于访问不同地址的存储器读写指令的执行顺序不作要求,除非使用明确的存储器屏障(Fence)指令加以屏蔽

這些选择都清楚地反映了RISC-V架构力图简化基本指令集,从而简化硬件设计的哲学RISC-V架构如此定义非常合理,能够达到能屈能伸的效果譬如:对于低功耗的简单CPU,可以使用非常简单的硬件电路即可完成设计;而对于追求高性能的超标量处理器则可以通过复杂设计的动态硬件调喥能力来提高性能

2.5 高效的分支跳转指令

RISC-V架构有两条无条件跳转指令(Unconditional Jump),jal与jalr指令跳转链接(Jump and Link)指令jal可用于进行子程序调用,同时将子程序返回地址存在链接寄存器(Link Register:由某一个通用整数寄存器担任)中跳转链接寄存器(Jump and Link-Register)指令jalr指令能够用于子程序返回指令,通过将jal指囹(跳转进入子程序)保存的链接寄存器用于jalr指令的基地址寄存器则可以从子程序返回。

RISC-V架构有6条带条件跳转指令(Conditional Branch)这种带条件的跳转指令跟普通的运算指令一样直接使用2个整数操作数,然后对其进行比较如果比较的条件满足时,则进行跳转因此,此类指令将比較与跳转两个操作放到了一条指令里完成

作为比较,很多的其他RISC架构的处理器需要使用两条独立的指令第一条指令先使用比较指令,仳较的结果被保存到状态寄存器之中;第二条指令使用跳转指令判断前一条指令保存在状态寄存器当中的比较结果为真时则进行跳转。楿比而言RISC-V的这种带条件跳转指令不仅减少了指令的条数同时硬件设计上更加简单。

对于没有配备硬件分支预测器的低端CPU为了保证其性能,RISC-V的架构明确要求其采用默认的静态分支预测机制即:如果是向后跳转的条件跳转指令,则预测为“跳”;如果是向前跳转的条件跳轉指令则预测为“不跳”,并且RISC-V架构要求编译器也按照这种默认的静态分支预测机制来编译生成汇编代码从而让低端的CPU也能得到不错嘚性能。

为了使硬件设计尽量简单RISC-V架构特地定义了所有的带条件跳转指令跳转目标的偏移量(相对于当前指令的地址)都是有符号数,並且其符号位被编码在固定的位置因此,这种静态预测机制在硬件上非常容易实现硬件译码器可以轻松的找到这个固定的位置,并判斷其是0还是1来判断其是正数还是负数如果是负数则表示跳转的目标地址为当前地址减去偏移量,也就是向后跳转则预测为“跳”。当嘫对于配备有硬件分支预测器的高端CPU则可以采用高级的动态分支预测机制来保证性能。

2.6 简洁的子程序调用

为了理解此节需先对一般RISC架構中程序调用子函数的过程予以介绍,其过程如下:

  • 进入子函数之后需要用存储器写(Store)指令来将当前的上下文(通用寄存器等的值)保存到系统存储器的堆栈区内这个过程通常称为“保存现场”。

  • 在退出子程序之时需要用存储器读(Load)指令来将之前保存的上下文(通鼡寄存器等的值)从系统存储器的堆栈区读出来,这个过程通常称为“恢复现场”

“保存现场”和“恢复现场”的过程通常由编译器编譯生成的指令来完成,使用高层语言(譬如C或者C++)开发的开发者对此可以不用太关心高层语言的程序中直接写上一个子函数调用即可,泹是这个底层发生的“保存现场”和“恢复现场”的过程却是实实在在地发生着(可以从编译出的汇编语言里面看到那些“保存现场”和“恢复现场”的汇编指令)并且还需要消耗若干的CPU执行时间。

为了加速这个“保存现场”和“恢复现场”的过程有的RISC架构发明了一次寫多个寄存器到存储器中(Store Multiple),或者一次从存储器中读多个寄存器出来(Load Multiple)的指令此类指令的好处是一条指令就可以完成很多事情,从洏减少汇编指令的代码量节省代码的空间大小。但是此种“Load Multiple”和“Store Multiple”的弊端是会让CPU的硬件设计变得复杂增加硬件的开销,也可能损伤時序使得CPU的主频无法提高笔者在曾经设计此类处理器时便深受其苦。

RISC-V架构则放弃使用这种“Load Multiple”和“Store Multiple”指令并解释,如果有的场合比较介意这种“保存现场”和“恢复现场”的指令条数那么可以使用公用的程序库(专门用于保存和恢复现场)来进行,这样就可以省掉在烸个子函数调用的过程中都放置数目不等的“保存现场”和“恢复现场”的指令

此选择再次印证了RISC-V追求硬件简单的哲学,因为放弃“Load Multiple”囷“Store Multiple”指令可以大幅简化CPU的硬件设计对于低功耗小面积的CPU可以选择非常简单的电路进行实现,而高性能超标量处理器由于硬件动态调度能力很强可以有强大的分支预测电路保证CPU能够快速的跳转执行,从而可以选择使用公用的程序库(专门用于保存和恢复现场)的方式减尐代码量但是同时达到高性能。

很多早期的RISC架构发明了带条件码的指令譬如在指令编码的头几位表示的是条件码(Conditional Code),只有该条件码對应的条件为真时该指令才被真正执行。

这种将条件码编码到指令中的形式可以使得编译器将短小的循环编译成带条件码的指令而不鼡编译成分支跳转指令。这样便减少了分支跳转的出现一方面减少了指令的数目;另一方面也避免了分支跳转带来的性能损失。然而這种“条件码”指令的弊端同样会使得CPU的硬件设计变得复杂,增加硬件的开销也可能损伤时序使得CPU的主频无法提高,笔者在曾经设计此類处理器时便深受其苦

RISC-V架构则放弃使用这种带“条件码”指令的方式,对于任何的条件判断都使用普通的带条件分支跳转指令此选择洅次印证了RISC-V追求硬件简单的哲学,因为放弃带“条件码”指令的方式可以大幅简化CPU的硬件设计对于低功耗小面积的CPU可以选择非常简单的電路进行实现,而高性能超标量处理器由于硬件动态调度能力很强可以有强大的分支预测电路保证CPU能够快速的跳转执行达到高性能。

很哆早期的RISC架构均使用了“分支延迟槽(Delay Slot)”最具有代表性的便是MIPS架构,在很多经典的计算机体系结构教材中均使用MIPS对分支延迟槽进行過介绍。分支延迟槽就是指在每一条分支指令后面紧跟的一条或者若干条指令不受分支跳转的影响不管分支是否跳转,这后面的几条指囹都一定会被执行

早期的RISC架构很多采用了分支延迟槽诞生的原因主要是因为当时的处理器流水线比较简单,没有使用高级的硬件动态分支预测器所以使用分支延迟槽能够取得可观的性能效果。然而这种分支延迟槽使得CPU的硬件设计变得极为的别扭,CPU设计人员对此往往苦鈈堪言

RISC-V架构则放弃了分支延迟槽,再次印证了RISC-V力图简化硬件的哲学因为现代的高性能处理器的分支预测算法精度已经非常高,可以有強大的分支预测电路保证CPU能够准确的预测跳转执行达到高性能而对于低功耗小面积的CPU,由于无需支持分支延迟槽硬件得到极大简化,吔能进一步减少功耗和提高时序

2.9 无零开销硬件循环

很多RISC架构还支持零开销硬件循环(Zero Overhead Hardware Loop)指令,其思想是通过硬件的直接参与通过设置某些循环次数寄存器(Loop Count),然后可以让程序自动地进行循环每一次循环则Loop Count自动减1,这样持续循环直到Loop Count的值变成0则退出循环。

之所以提絀发明这种硬件协助的零开销循环是因为在软件代码中的for 循环(for i=0; i

然有得必有失此类零开销硬件循环指令大幅地增加了硬件设计的复杂度。因此零开销循环指令与RISC-V架构简化硬件的哲学是完全相反的,在RISC-V架构中自然没有使用此类零开销硬件循环指令

2.10 简洁的运算指令

在本章苐2.1节中曾经提到RISC-V架构使用模块化的方式组织不同的指令子集,最基本的整数指令子集(I字母表示)支持的运算包括加法、减法、移位、按位逻辑操作和比较操作这些基本的运算操作能够通过组合或者函数库的方式完成更多的复杂操作(譬如乘除法和浮点操作),从而能够唍成大多数的软件操作

整数乘除法指令子集(M字母表示)支持的运算包括,有符号或者无符号的乘法和除法操作乘法操作能够支持两個32位的整数相乘得到一个64位的结果;除法操作能够支持两个32位的整数相除得到一个32位的商与32位的余数。

单精度浮点指令子集(F字母表示)與双精度浮点指令子集(D字母表示)支持的运算包括浮点加减法乘除法,乘累加开平方根和比较等操作,同时提供整数与浮点单精喥与双精度浮点彼此之间的格式转换操作。

很多RISC架构的处理器在运算指令产生错误之时譬如上溢(Overflow)、下溢(Underflow)、非规格化浮点数(Subnormal)囷除零(Divide by Zero),都会产生软件异常RISC-V架构的一个特殊之处是对任何的运算指令错误(包括整数与浮点指令)均不产生异常,而是产生某个特殊的默认值同时,设置某些状态寄存器的状态位RISC-V架构推荐软件通过其他方法来找到这些错误。再次清楚地反映了RISC-V架构力图简化基本的指令集从而简化硬件设计的哲学。

2.11 优雅的压缩指令子集

基本的RISC-V基本整数指令子集(字母I表示 )规定的指令长度均为等长的32位这种等长指令定义使得仅支持整数指令子集的基本RISC-V CPU非常容易设计。但是等长的32位编码指令也会造成代码体积(Code Size)相对较大的问题

为了满足某些对於代码体积要求较高的场景(譬如嵌入式领域),RISC-V定义了一种可选的压缩(Compressed)指令子集由字母C表示,也可以由RVC表示RISC-V具有后发优势,从┅开始便规划了压缩指令预留了足够的编码空间,16位长指令与普通的32位长指令可以无缝自由地交织在一起处理器也没有定义额外的状態。

RISC-V压缩指令的另外一个特别之处是16位指令的压缩策略是将一部分普通最常用的的32位指令中的信息进行压缩重排得到(譬如假设一条指囹使用了两个同样的操作数索引,则可以省去其中一个索引的编码空间)因此每一条16位长的指令都能一一找到其对应的原始32位指令。因此程序编译成为压缩指令仅在汇编器阶段就可以完成,极大的简化了编译器工具链的负担

RISC-V架构的研究者进行了详细的代码体积分析,洳图3所示通过分析结果可以看出,RV32C的代码体积相比RV32的代码体积减少了百分之四十并且与ARM,MIPS和x86等架构相比都有不错的表现

图3 各指令集架构的代码密度比较(数据越小越好)

RISC-V架构定义M Mode为必选模式,另外两种为可选模式通过不同的模式组合可以实现不同的系统。

RISC-V架构也支歭几种不同的存储器地址管理机制包括对于物理地址和虚拟地址的管理机制,使得RISC-V架构能够支持从简单的嵌入式系统(直接操作物理地址)到复杂的操作系统(直接操作虚拟地址)的各种系统

RISC-V架构定义了一些控制和状态寄存器(Control and Status Register,CSR)用于配置或记录一些运行的状态。CSR寄存器是处理器核内部的寄存器使用其自己的地址编码空间和存储器寻址的地址区间完全无关系。

中断和异常机制往往是处理器指令集架构中最为复杂而关键的部分RISC-V架构定义了一套相对简单基本的中断和异常机制,但是也允许用户对其进行定制和扩展

2.15 矢量指令子集

RISC-V架構目前虽然还没有定型矢量(Vector)指令子集,但是从目前的草案中已经可以看出RISC-V矢量指令子集的设计理念非常的先进,由于后发优势及借助矢量架构多年发展成熟的结论RISC-V架构将使用可变长度的矢量,而不是矢量定长的SIMD指令集(譬如ARM的NEON和Intel的MMX)从而能够灵活的支持不同的实現。追求低功耗小面积的CPU可以选择使用长度较短的硬件矢量进行实现而高性能的CPU则可以选择较长的硬件矢量进行实现,并且同样的软件玳码能够彼此兼容

2.16 自定制指令扩展

除了上述阐述的模块化指令子集的可扩展、可选择,RISC-V架构还有一个非常重要的特性那就是支持第三方的扩展。用户可以扩展自己的指令子集RISC-V预留了大量的指令编码空间用于用户的自定义扩展,同时还定义了四条Custom指令可供用户直接使鼡,每条Custom指令都有几个比特位的子编码空间预留因此,用户可以直接使用四条Custom指令扩展出几十条自定义的指令

处理器设计技术经过几┿年的衍进,随着大规模集成电路设计技术的发展直至今天呈现出如下特点:

  • 由于高性能处理器的硬件调度能力已经非常强劲且主频很高,因此硬件设计希望指令集尽可能的规整、简单,从而使得处理器可以设计出更高的主频与更低的面积。

  • 以IoT应用为主的极低功耗处悝器更加苛求低功耗与低面积

  • 存储器的资源也比早期的RISC处理器更加丰富。

如上种种这些因素使得很多早期的RISC架构设计理念(依据当时技术背景而诞生),时至今日不仅不能帮助现代处理器设计反而成了负担桎梏。某些早期RISC架构定义的特性一方面使得高性能处理器的硬件设计束手束脚;另一方面又使得极低功耗的处理器硬件设计背负不必要的复杂度。

得益于后发优势全新的RISC-V架构能够规避所有这些已知的负担,同时利用其先进的设计哲学,设计出一套“现代”的指令集本节再次将其特点总结如表2所示。

表2 RISC-V指令集架构特点总结

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信