在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
12
返回列表 发新帖
楼主: sme-ic

[讨论] 请问cortex-m0的集成中遇到的问题

[复制链接]
发表于 2015-9-23 11:16:22 | 显示全部楼层
发表于 2015-10-9 14:50:47 | 显示全部楼层
给你说2点:
1.GPIO已经是处于总线的末端位置,想要GPIO的某个端口跳变,需要处理器对总线上的GPIO进行访问,而这个访问涉及到指令的读取,执行,总线访问的生成,最后才变成IO的跳变。其实以上的东西都是可以量化的,M0是冯诺依曼结构,指令读取和数据存取是一条总线,GPIO的访问需要至少3条指令(获取地址,获取值,访问),考虑到pipeline的加速和ahb总线的特点,完整的一次GPIO访问需要约5~7个时钟周期,若考虑到软件优化加速,不需要获取地址和值,则大概需要3~4个时钟周期完成一次GPIO跳变。
2.你如果用GPIO来测试总线的效率是非常愚蠢的行为,原因如1中所示,真要测试CPU总线的效率,就直接进行大数据的搬运,M0内部有计数器,把存储器中的数据不停的搬来搬去,然后再去看计数器中的值,就能算出总线的毛效率,最后结合冯诺依曼总线结构中取指所占总线的比例,就能算出数据总线的纯效率。
 楼主| 发表于 2015-10-16 08:31:56 | 显示全部楼层




   我不知道你这观点是怎么得出来的。1. GPIO挂在AHB总线上的话,和存储器没有差别,GPIO的写需要一个CLOCK,读由于AHB总线协议原因,从地址送出到数据被CPU读到,也是一个周期,这样连续来看,让GPIO翻转一次,只需要2个CLOCK,GPIO翻转2次,即一个周期,需要4个CLOCK。怎么会需要你说的那么多个时钟?
2. 前面说了,GPIO连接在AHB总线上时,和memory之类的时序是一致的,所以,测试总线带宽也是可行的,何以见得愚蠢?
3. 即使M0这种单总线结构(和M3有区别),考虑流水线操作,仍然能达到最快2CLOCK翻转一次GPIO,即访问任何存储器(FLASH/SRAM)最快都是2 CLOCK。
M0 AHB总线取指/读写的时序为(以时钟周期标注):
ADDR:1(指令地址)2(GPIO地址)3(指令地址)4(GPIO地址)5(指令地址)6(GPIO地址)
DATA:1(上个数据)2(取指令)    3 (写GPIO)4 (取指令)    5 (写GPIO)6 (取指令)
4. 或许,你只是把各种IP拼起来,验证完成,项目就完了。你要是深入一点,自己拿M0+busmatrix搭个环境,只挂上ROM/RAM,试试连续对RAM写入或读取,看看其总线效率,查查busmatrix是否在对SRAM读/写会浪费1~2个周期,自然能明白我说的。
 楼主| 发表于 2015-10-16 08:38:29 | 显示全部楼层


回复  sme-ic


    也有可能框图没反应实际的设计,考虑到GPIO不会用到DMA做master,其实是用本地总线 ...
Lerxi 发表于 2015-6-7 10:45




   我验证过了,不只是GPIO,包括SRAM或其它AHB外设,对BUSMATRIX来说,只要发生了SLAVE切换,就会降低效率,而不管是对外设(GPIO/TIMER/SPI等)的访问,还是程序在作运算(变量一般在SRAM中,由于要取指令和操作变量,对SRAM的访问也会发生SLAVE在FLASH与SRAM之间不停切换),都严重影响效率,这是不能接受的。所以,ST等公司的框图应该是没错的,GPIO确实是接在BUSMATRIX上的。
发表于 2015-10-17 13:41:06 | 显示全部楼层
回复 13# sme-ic

对于你的质疑,我向你一一解释1.你回答中的第二点和第三点中,不也印证了我说的cycle数?我当然知道ahb的pipeline结构可以最快使GPIO 2cycle翻转一次,你自己不也举例说明了一次GPIO翻转的,M0的ahb总线上的行为?请数一下cycle数,完全完成是不是需要7cycle左右(算上那些指令是ldr指令)。请仔细看看我上个回答中第一点中的说明,GPIO的翻转不能直接反映ahb总线效率的原因是因为M0需要取指令,而指令流中不但有ld/st指令,还有加减法,跳转指令,这些都是要消耗总线带宽,这样测试无法直接通过GPIO得出最终准确效率。
2.回答中“愚蠢”两字确实不雅,我抱歉,改成“用GPIO来测试总线效率是比较不合适的”。
3.关于你回答的第四点,我当然知道arm的那个bus_matrix在转换slave的时候会有至少一个周期的wait-state了,由于我对题主的建议就是直接测试SRAM的读写率,所以这点根本没必要写在对题主的回答中了。(程序放在SRAM里执行)
4.你第四点中的语气令我感到十分不礼貌,显得自己特别高大,好像别人都是不求甚解,浅尝辄止,只有你穷理尽微,刨根知底。本来技术问题讨论相互质疑是很正常的事情,像你这样主观臆断妄评猜测顺带嘲讽一下别人是比较不合适的。
PS:仅回复您的质疑,M0/M3,我做过不下6~7个产品,arm的一些外围IP我全都用过并量产,M0的内核我都改过(加定制指令),这样看来,我应该不仅仅是拼IP,还是比较深入的吧。
 楼主| 发表于 2015-10-19 09:04:29 | 显示全部楼层


回复  sme-ic

对于你的质疑,我向你一一解释1.你回答中的第二点和第三点中,不也印证了我说的cycle数? ...
sz8510171 发表于 2015-10-17 13:41




   1. 你承认了ahb的pipeline结构可以最快使GPIO 2cycle翻转一次,这就够了。至于你说的完全完成需要7cycle左右,另外需要ld/st指令,这和程序写法/IO硬件都有关系。我前面也说了,使用的是ST M0系列,它的IO有专用的置1/清0寄存器,因此,只要执行一次写入,IO就能够翻转,而不需要读-修改-执行这样的过程,因此,使用连续的对置1/清0寄存器进行写入,毫无疑问,是能够在GPIO上得到CPU/4的频率的,ST官方有提供例子。或许你的产品达不到这个速度,我当时使用ARM的busmatrix再加上这样的GPIO,也达不到这个速度,但ST可以做到。  2. 你也说了busmatrix在转换slave的时候会有至少一个周期的Wait state,这个问题在我看来非常严重。(当然,或许你或者大多数设计者不关心,但我认为严重影响效率。)M0在执行程序时,除了等待(查询外设/等待中断。。。)过程,都是在执行算法或者在做实时控制,这两者对效率的要求不言而谕。且不说8位机在做控制时对外设的操作没有等待周期,在换成32位后,同样在1T指令周期时,其操作延迟比8位机还大,这简直就是倒退。
3. 你说的把程序放在SRAM中,这样的弊端非常明显:
(1)程序要搬到SRAM中,浪费时间
(2)对SRAM容量有更大要求
(3)在SRAM中执行对SRAM读/写效率当然高,没有发生SLAVE切换,但除了SRAM,还有IO/TIMER/USB/ETHERNET/SPI/IIC等诸多外设,这些外设一定不会和SRAM/FLASH在同一个SLAVE,这样,访问这些外设时一定会发生SLAVE的切换,除非你能让程序从IO/TIMER/USB这些外设中执行?
(3)ST在FLASH中执行已经没有clock cycle的浪费,用事实证明了用高效的busmatrix可以解决,为什么我们就不能深入的去了解/提高我们的设计水平,而是简单的使用官方提供的IP拼凑起来整个项目,不去对时序做优化?难道一定要心安理得的采取效率低下或是浪费资源的方式来告诉自己:这样也能达到同样效果。。。
4. 你说的语气、礼貌的问题,这是相互的,也是个人理解不同。你前面回复中提到了“愚蠢”,我回复中质疑了而已,你若确实足够深入,回答理直气壮,自然是对他人最好的反击。
发表于 2015-12-22 18:06:11 | 显示全部楼层
这是构架决定的,m0用的总线是ahb lite,本来就只能支持一个master,如果想要用dma的话,那么必须要用到busmatrix来进行仲裁,一旦涉及仲裁那么额外的一个cycle就不可避免了。因此使用busmatrix就一定会牺牲性能。
不过m0也就能做做简单的控制,对时钟要求也不高,就算你每次取指令,取数据都浪费一个cycle也不是什么事。
发表于 2015-12-22 18:14:01 | 显示全部楼层
回复 1# sme-ic
你好,我想问下你用的busmatrix代码是从arm那里拿到的吗?是不是就是cmsdk里的啊?能共享给我吗,我自己也写了个busmatrix,想对比一下差别,看能不能再优化一下。
 楼主| 发表于 2015-12-23 11:46:20 | 显示全部楼层


回复  sme-ic
你好,我想问下你用的busmatrix代码是从arm那里拿到的吗?是不是就是cmsdk里的啊?能共享给 ...
madridzy 发表于 2015-12-22 18:14




   别人生成给我的,不能共享。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-1-18 13:48 , Processed in 0.029865 second(s), 17 queries , Gzip On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表