搜索
bottom↓
回复: 63

[资料][交流]AVR32 UC3工程师快速入门指南——内核章节 5-29 更新

[复制链接]

出0入296汤圆

发表于 2010-5-26 09:48:58 | 显示全部楼层 |阅读模式

>> 说在前面的话
<font color=brown>
    AVR32 UC3系列由于中文资料匮乏,官方资料又稍显艰涩,因而,研究和学习难度
较大,尤其是内核。我在写书的时候希望将这一内核结构表述得尽可能浅显易懂,一目
了然,特使用本贴进行读者测试。

    测试的主要方法是,我放出一些图片,希望大家仅凭借图片,说出你获得的信息,
看懂或者看不懂并不是最重要的,关键是希望大家能把看到图片以后的尝试理解或者
思维的过程告诉我,这会帮助我重新修改这些图片,或者能有效地加入文字说明,而不
会显得太罗索。
   
    感谢大家的参与。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入296汤圆

 楼主| 发表于 2010-5-26 09:49:09 | 显示全部楼层

图片一:流水线结构



<font color=red> 根据【13楼】 Cliff  意见第一次修正后的版本


<font color=red> 【28楼】 dr2001 和 Cliff  意见第二次修正后的版本


<font color=red> 根据dr2001意见第三次修正

出0入296汤圆

 楼主| 发表于 2010-5-26 09:49:23 | 显示全部楼层

<font color=red>图片二:流水线EX对 内部RAM(IRAM)的访问



第一个修订版本


第二个修订版本



<font color=red>图片三:外部HSB主机和CPU EX同时访问IRAM的仲裁规则



根据 【12楼】 Cliff 意见第一次修改后的版本



<font color=red>图片四:一个有趣的思考,IF通过HSB主机接口读取IRAM中的程序



第一个修订版本

出0入296汤圆

 楼主| 发表于 2010-5-26 09:49:35 | 显示全部楼层

<font color=red>图片五:CPU EX访问HMATRIX上的其他HSB从机设备




<font color=red>第一次修正

出0入0汤圆

发表于 2010-5-26 09:51:49 | 显示全部楼层
我板凳

出0入0汤圆

发表于 2010-5-26 09:56:52 | 显示全部楼层
我地板

出0入296汤圆

 楼主| 发表于 2010-5-26 10:04:48 | 显示全部楼层
<font color=blue>希望大家能针对每一幅图片给出有效的反馈,谢谢了。

出0入0汤圆

发表于 2010-5-26 10:07:23 | 显示全部楼层
花了一辈子学习杀龙的本领,
出师之后却发现这个世界根本没有龙

出0入296汤圆

 楼主| 发表于 2010-5-26 10:16:49 | 显示全部楼层
to 【7楼】 _yun_yun_ 晕晕
    呵呵,您想表达的意思我能理解。但是本贴仅仅就技术本身进行纯粹的讨论。
对于AVR32在中国的前景,众看官都自有判断。感兴趣的欢迎参与,对AVR32不看好的
也欢迎顶一下。

出0入20汤圆

发表于 2010-5-26 10:21:09 | 显示全部楼层
唯一能说明的是, 傻孩子绝对是ATMEL的一个好雇员.

出0入0汤圆

发表于 2010-5-26 10:33:27 | 显示全部楼层
我没看过多少AVR32的文档,就根据图片说我的理解:

图片一:流水线结构
1、AVR32是3级流水线架构的(这个思维过程就不用说明了吧)
2、总线仲裁机制满复杂的,应该也会比较高效。(因为我看好好几个“主机”“从机”,然后又一个矩阵)
3、存取单元和下面SRAM仲裁的双向箭头是什么含意呢?LS不单单需要访问SRAM,对外设是怎么处理的?图片上没有?

图片二:流水线EX对 内部RAM(IRAM)的访问
1、读取是直接的,而写入是有不确定的延迟的(因为写入有一个队列,再加上仲裁)
2、因为有了队列,内核的执行效率得到提高(内核不需要等待写入完成,再处理下一条指令)

出0入296汤圆

 楼主| 发表于 2010-5-26 10:40:29 | 显示全部楼层
to 【10楼】 Cliff
图片一:
1、三级流水线没错,看来我意思表达清楚了
2、嗯……
3、双向箭头我是想表达“读/写”的意思,LS下面有两个箭头啊,一个到IRAM前面的仲裁“盒子”,
   一个到HSB?你能说说为什么你没有注意到么?这个理解上的误区说明图片的表述需要修改。

图片二:
1、理解正确
2、理解正确
^_^

出0入0汤圆

发表于 2010-5-26 10:45:52 | 显示全部楼层
更新好快啊!

图片三:外部HSB主机和CPU EX同时访问IRAM的仲裁规则
圆圈表示状态,箭头表示状态转移,数字表示状态转移所需要满足的条件
但一开始有个困惑是:咦!初始状态是哪个?没标出来?我从哪里开始看?
从状态图说明,状态转移是要有开销的,否则为什么CPUEX占用IRAM后,不是马上返回IDLE,而是必须满一定时钟周期才可以呢?
而外设则与CPUEX不同,它是直接返回的。这就导致IO速度可能会受影响:例如对IO口的翻转,就不可能做到一个时钟周期翻转一次

图片四:一个有趣的思考,IF通过HSB主机接口读取IRAM中的程序
没有把HMATRIX表现出来,这个图片的理解就不够清晰:下面那么多虚线的箭头,到底是什么呢?

图片五:CPU EX访问HMATRIX上的其他HSB从机设备
图片下方:读/写 HSB 从机设备
怎么是读写呢?难道不是写吗?哪来的读?队列本身就是写操作的队列,读操作不从队列走,下面应该是“写HSB从机设备”吧?

出0入0汤圆

发表于 2010-5-26 10:53:33 | 显示全部楼层
回复【11楼】Gorgon Meducer 傻孩子
3、双向箭头我是想表达“读/写”的意思,ls下面有两个箭头啊,一个到iram前面的仲裁“盒子”,
   一个到hsb?你能说说为什么你没有注意到么?这个理解上的误区说明图片的表述需要修改。
-----------------------------------------------------------------------

那可能是2个箭头的位置问题吧
第一个箭头位于读取寄存器文件下方,甚至偏左的位置,使我以为这个箭头只是针对“读取寄存器”
而第二个箭头,只是针对“LS”
我没有把“存取单元”作为一个整体,没理解这两个箭头是针对这个整体来说的
或者说,第一张图流水线EX阶段(写到这里发现前面IF,ID都写了,EX没写,当然如果有上下文的话更好理解,如果没有上下文,应该还是说明一下EX更严谨些),在EX阶段里面是分了好多模块的,你如果箭头位于Load/Store模块的右侧,那我估计不会有理解问题;如果你放在下面(因为这是一个很长的长方形,而上面又叠了两个同样的长方形),我就有点搞不清楚这个箭头的作用范围是最后一个长方形了 -_-b
不晓得我这么说算是说清楚没有

出0入296汤圆

 楼主| 发表于 2010-5-26 10:59:59 | 显示全部楼层
to 【12楼】 Cliff
图片三:
应该说,的确少一个开始状态,这个我会补上,不过不难理解,就是从IDLE开始的。
至于CPU EX占用IRAM以后返回的问题,是这样的,有一个寄存器CPUCR[COP]用来设置
CPU EX占用IRAM至少保持多长时间;当CPU EX操作IRAM超过这个时间,释放IRAM以后
就会立即返回IDLE状态;当CPU EX操作IRAM小于这个时间的时候,就会等到这个时间
过去,才会释放,这应该是一个保证CPU EX高优先级的措施。对于IO的操作,是通过
另外一条特殊的总线Local Bus来实现的。看来我需要在图一中加入这条总线。

图片四:
HMATRIX就是那个HSB,我把标签修改一下。虚线看来传达了错误的意思,这里只是想
表达——经过了HMATRIX……

图片五:
CPU EX访问HMATRIX和CPU EX访问IRAM是不同的:访问IRAM只缓冲写操作;访问HSB读写
都要缓冲。我希望图片传达的意思足够清晰,你看看还需要怎样修改呢?我想听听你的
意见。

出0入296汤圆

 楼主| 发表于 2010-5-26 11:01:50 | 显示全部楼层
to 【13楼】 Cliff
    嗯,你这个理解和我最初担心的情形一样。我想想看如何修改哈。谢谢你的思考。

出0入0汤圆

发表于 2010-5-26 11:06:53 | 显示全部楼层
声明:我没怎么看过AVR32的手册,因此我只说看了图后的理解。供参考。

简要反馈:
1#图,流水线结构。
- Core为三级流水线结构。
- ALU和MUL都只完成REG->REG操作。
- Load/Store单元完成REG-MEM-REG的操作。但是Load/Store路径分开表述可能更好。
- REG File读路径暗示,EX阶段每周期Issue至多一条指令。
- REG File写路径暗示,EX阶段每周期可能有多于一条指令进行REG写回。
- 进而,可以推测EX部分执行周期数不定,无依赖指令可能可以并行执行。
- Core对外有三个访问接口,其中,取指x1,存取x2。进而,Core是哈佛架构的可能性很大。
- Core和IRAM之间是一个3层结构,可能存在两层仲裁。Core Master (x2)- (HMar仲裁)- IRAM Slave(x1)- IRAM内部Matrix(一个HM Slave,一个Core)- IRAM。

出0入0汤圆

发表于 2010-5-26 11:13:00 | 显示全部楼层
我觉得看这些图片需要3重境界:

第1重是让了解“内幕”的人看懂并觉得没有问题

第2重是让真正希望了解AVR32并着手开发的人参考,他们往往看了之后会产生问题:比如 图片三:外部HSB主机和CPU EX同时访问IRAM的仲裁规则,可能他就会有疑惑:为什么CPUEX和外设,仲裁规则不一样呢?(只是举个例子不一定恰当)
这种疑惑应该会在书里得到解答。但是,不应该是在几章以后才会找到答案,最好能在同一章内就找到解答。
这是理想状态,只能说是一个努力方向吧。
比如上面疑惑的解答就是14楼说的“这应该是一个保证CPU EX高优先级的措施”,如果这句话出现在同一章里面,那就比较好;如果仅出现在前言、介绍之类里面,那就不好了

第3重,则是让门外汉也能看懂(这个要求太高了),或者说,是普及性质的,而不是开发参考性质的


不知道这本书是主要定位于第二重还是第三重呢?

出0入0汤圆

发表于 2010-5-26 11:16:18 | 显示全部楼层
图二,EX对内部RAM。
- IRAM本身至少有两个对外接口,期间存在仲裁关系。
- Core的MEM写操作具有顺序写缓存;读取操作是直接请求。
联想:
- Core提供额外的写缓存控制机制。
- 写缓存可能导致数据不一致。操作外设:写后读。要么人工清写缓存;要么关闭写缓存;要么AVR32具有基于区域的内存属性管理,避免类似问题。

出0入296汤圆

 楼主| 发表于 2010-5-26 11:19:34 | 显示全部楼层
to 【16楼】 dr2001
    谢谢,你的理解非常关键和专业。

- Core为三级流水线结构。
    对的

- ALU和MUL都只完成REG->REG操作。
    对的

- Load/Store单元完成REG-MEM-REG的操作。但是Load/Store路径分开表述可能更好。
    实际上存取并不分开,都是一个指令周期实现……(如果出现读取上的延时,流水线挂起)

- REG File读路径暗示,EX阶段每周期Issue至多一条指令。
    一个指令周期

- REG File写路径暗示,EX阶段每周期可能有多于一条指令进行REG写回。
    与读取在同一个指令周期内完成

- 进而,可以推测EX部分执行周期数不定,无依赖指令可能可以并行执行。
    EX指令周期数的确并不固定,不过并不支持无依赖指令的并行执行

- Core对外有三个访问接口,其中,取指x1,存取x2。进而,Core是哈佛架构的可能性很大。
    没错

- Core和IRAM之间是一个3层结构,可能存在两层仲裁。Core Master (x2)- (HMar仲裁)- IRAM Slave(x1)- IRAM内部Matrix(一个HM Slave,一个Core)- IRAM。
    应该说,IRAM本身存在两重仲裁,第一个是HSB 从机仲裁结构,一个是HSB从机访问请求与内部EX访问请求的仲裁结构

出0入296汤圆

 楼主| 发表于 2010-5-26 11:21:33 | 显示全部楼层
to 【17楼】 Cliff
    着重第二重,努力接近第三重
    你所需要的文字补充都会在图片的同一页里面出现
    你觉得这些图片能满足那一重的需要?有什么好点子?

出0入296汤圆

 楼主| 发表于 2010-5-26 11:24:42 | 显示全部楼层
to 【18楼】 dr2001  
图二,EX对内部RAM。
- IRAM本身至少有两个对外接口,期间存在仲裁关系。
- Core的MEM写操作具有顺序写缓存;读取操作是直接请求。
联想:
- Core提供额外的写缓存控制机制。
- 写缓存可能导致数据不一致。操作外设:写后读。要么人工清写缓存;要么关闭写缓存;要么AVR32具有基于区域的内存属性管理,避免类似问题。
--------------------------------------------------------------
您对图二的理解没有错。
EX操作IRAM时,如果读取的地址和先前一个被缓冲在写入请求队列中的操作地址相同,系统会自动处理:
保证对应的地址被写入以后再读取——这一期间CPU流水线挂起。
这些内容会出现在书的文字描述中。

出0入0汤圆

发表于 2010-5-26 11:27:18 | 显示全部楼层
想起了小时候的看图说话

出0入296汤圆

 楼主| 发表于 2010-5-26 11:27:39 | 显示全部楼层
to 【22楼】 super373
    要的就是这个效果。

出0入0汤圆

发表于 2010-5-26 11:28:40 | 显示全部楼层
图三,仲裁
比较清晰,没太多好说的。
- CPU对IRAM的占用是略微贪婪的。具有相对高的优先级。
- 4条件描述,在满足等待的条件下,CPU可以打断别的主机对IRAM的操作请求。该操作条件比较令人疑惑。

图四,思考。
显然,根据上述逻辑,在IF Burst取指时,优先保证Ex的操作。
至少,保证EX的数据Load在CPUCR[CPL]周期内能开始操作。

图五,EX访问Mar从机。
- 一定是缓存的,一定是顺序的。
没什么问题。

出0入0汤圆

发表于 2010-5-26 11:29:52 | 显示全部楼层
回复【14楼】Gorgon Meducer 傻孩子
图片五:
图片五:
CPU EX访问HMATRIX和CPU EX访问IRAM是不同的:访问IRAM只缓冲写操作;访问HSB读写
都要缓冲。我希望图片传达的意思足够清晰,你看看还需要怎样修改呢?我想听听你的
意见。
-----------------------------------------------------------------------

你的意思是,IRAM是不经过HMATRIX的?或者说,IRAM不是HMATRIX的一个HSB从设备?
这么说,反过来看图片1,确实在图片1里面,IRAM是独立的,有自己的仲裁,然后再连到HMATRIX的。

如果你希望在图片5表达出“访问IRAM只缓冲写操作;访问HSB读写都要缓冲”的意思,那是不是可以把IRAM和HMATRIX都画上去
就像图片1那样搞2个箭头

不过,你所说的访问HSB读也要缓冲,到底是什么含意呢?

先说说我在看了你回复后对图片5的理解:
读取的话,如果外设(HMATRIX)或IRAM没准备好,肯定是要流水线挂起的。
写入的话,所谓的队列,其实跟CACHE有相似之处,只是CACHE更侧重于批量数据传输,FIFO侧重单个数据传输,所以写入就不需要等待写入完成,不需要挂起流水线
疑问是,FIFO就是1个?不是HSB和IRAM各一个?

出0入296汤圆

 楼主| 发表于 2010-5-26 11:33:52 | 显示全部楼层
to 【24楼】 dr2001  
    对于条件4,的确如此,可以直接打断。

对于图四,我想传达的思考是,如果IF现在占有了IRAM,但是EX里面有一个请求去操作IRAM,
那么在EX获得IRAM之前,由于流水线无法继续,IF也无法继续读取指令,这个时候是不是内核
会处于一种暂时的死锁状态呢?

答案:当流水线挂起的时候,IF会释放对HSB从机的控制权,因此不会发生死锁。

出0入296汤圆

 楼主| 发表于 2010-5-26 11:37:07 | 显示全部楼层
to 【25楼】 Cliff
    EX对IRAM的访问和对HSB的访问不是同一个接口。与此同时,IRAM自己有一个HSB 从机接口
连接到HMATRIX上,方便其他HSB主机来访问IRAM,比如DMA……

    图片5仅仅描述EX对HSB其它从机的访问,因此不需要加入对IRAM的内容。而且EX不会傻乎乎的
通过HSB绕一个圈子去访问IRAM……因为EX的HSB主机根本没有通路到IRAM的HSB从机接口……

    所谓对HSB地读取也要缓冲,就是字面上的意思……

出0入0汤圆

发表于 2010-5-26 11:40:52 | 显示全部楼层
回复【19楼】Gorgon Meducer  傻孩子
-----------------------------------------------------------------------

【EX指令周期数的确并不固定,不过并不支持无依赖指令的并行执行】
那建议REG Write那里,不要三个直接连接到REG File上,而是和REG Read一样,先归并,一条线去REG File。
这样的表述在表达:REG读,计算,REG写三步,是一个完全顺序化的操作,只不过执行阶段有三种部件来具体操作。
进而读者的推断就更可能倾向于,即便三个EX的子流水可能不等周期,但在不等的情形下,会以插等待的方法完成顺序执行。不会产生并行指令执行的假设。
  
【应该说,IRAM本身存在两重仲裁,第一个是HSB 从机仲裁结构,一个是HSB从机访问请求与内部EX访问请求的仲裁结构】
咱们的理解无冲突。
我认为需要额外说明:处理器内存地址实际上不等地位。也就是IRAM操作和其余地址操作会被交给Core的不同端口,有不同的处理规约。

出0入296汤圆

 楼主| 发表于 2010-5-26 11:44:41 | 显示全部楼层
to 【28楼】 dr2001
    谢谢你的建议。我想【25楼】 Cliff的疑问就是因为缺少这个说明:
“IRAM操作和其余地址操作会被交给Core的不同端口,有不同的处理规约。”

对于流水线的结构,AVR32 UC3内核的官方文档里面有一个图就是这么画EX的,
我不敢轻易去修改结构,不过相应的,我会增加必要的文字来说明。不过,不
排除AVR32 UC3内核支持一定程度的并行执行,而且这一操作对用户也是透明的,
而且AVR32有两个内核AVR32A和AVR32B,不排除UC3的内核(AVR32A)在某些结构
上保留了AVR32B(AP7系列)的特点,只是没有开启。

出0入0汤圆

发表于 2010-5-26 11:53:33 | 显示全部楼层
回复【26楼】Gorgon Meducer  傻孩子
-----------------------------------------------------------------------

【答案:当流水线挂起的时候,IF会释放对HSB从机的控制权,因此不会发生死锁。】
我觉得该图没有表达这个意思,或者说体现该问题。

因为我的理解,IRAM,矩阵的仲裁不需要CPU计算能力参与。
即便CPU流水线全部挂起,在一定周期之后,EX的IRAM访问满足,流水线回复,CPU处理IF的仲裁丢失也没问题。
况且,读者并不清楚,挂起流水线的时候,是Clock Gating,还是插Idle。是全部流水线一起,还是分级操作。

出0入0汤圆

发表于 2010-5-26 11:57:37 | 显示全部楼层
回复【29楼】Gorgon Meducer  傻孩子
-----------------------------------------------------------------------

流水线结构以官方文档为准吧。呵呵。主要是文字说清楚就好。

补充:
EX对HSB的访问,建议文字说明:强顺序,非阻塞写/阻塞读的。即对HSB内存地址的读写操作一定会按照指令序发生;写操作是非阻塞的,用来提高Core效率;读是阻塞的,简化处理器设计。

对IRAM的访问,读写策略同上;因为是MEM,因此可以乱序读,但是硬件保证写缓存内数据和读地址不冲突,保证内存数据一致性。DMA时候的一致性,另外讨论。

出0入296汤圆

 楼主| 发表于 2010-5-26 11:59:08 | 显示全部楼层
to 【30楼】 dr2001
    的确没有体现,这个图只是引起思考,相应的问题会出现在文字说明中。
而且,这个疑问中出现的死锁,也只是暂时死锁,意在思索EX获得IRAM之前
这段时间,是不是流水线会被挂起——这应该是一个对SRAM中执行代码效率
的思考。

出0入296汤圆

 楼主| 发表于 2010-5-26 12:17:40 | 显示全部楼层
to 【31楼】 dr2001
    恩~你说得不错,吃饭去了,回来再讨论。

出0入9汤圆

发表于 2010-5-26 12:26:05 | 显示全部楼层
mark

出0入296汤圆

 楼主| 发表于 2010-5-26 13:37:08 | 显示全部楼层
饭后回来顶一下,今天晚上将更新新的图片。

出0入296汤圆

 楼主| 发表于 2010-5-27 22:06:43 | 显示全部楼层

<font color=red>图片六:指令流改变后执行下一条指令前的延迟(一)
<font color=brown>
   注:所谓的指令流改变是指由于中断、函数调用,相对/绝对跳转,这一过程显然对流水线有所影响。
       本图展示的是一个普通的情况(跳转后的指令对齐到了WORD)。


<font color=red>修正错误后的版本



<font color=red>图片六:指令流改变后执行下一条指令前的延迟(二)
<font color=brown>
   注:本图展示了一个特殊的情况(跳转后的指令没有对齐到WORD)


<font color=red>修正错误后的版本

出0入0汤圆

发表于 2010-5-28 00:02:52 | 显示全部楼层
属于门外汉,一头雾水。

出0入0汤圆

发表于 2010-5-28 08:41:48 | 显示全部楼层
回复【36楼】Gorgon Meducer  傻孩子
-----------------------------------------------------------------------

Nice,本次的图含义清晰。
- AVR32是不定长指令。类似于ARM的Thumb-2,有16Bit和32Bit两类。
- 32Bit指令支持非对齐访问;但是IF取指始终是32Bit对齐的。
- Branch指令导致流水线清空,重新Fetch。

- 非对齐32Bit接16Bit指令,16Bit会重新Issue Fetch。
- 对齐16Bit接16Bit,两条指令合成32Bit对齐。同上。
即指明IF是32Bit取指;IF只关注当前指令,如果预取的本条指令包含条指令,IF不会缓存下条指令。

图示修改建议:
- word是容易产生混淆定义,建议用32Bit Align之类的确定性描述。
- 坐标轴建议增加数字等,说明地址/时钟的数据,方便读者理解。
- 指令对齐的排列组合建议分布在不同的位置:16+16,跨/不跨32Bit边界;16+32,32指令对齐/不对齐;etc。

出0入0汤圆

发表于 2010-5-28 09:14:24 | 显示全部楼层
谁还敢用AT的片子,被搞惨了。

出0入296汤圆

 楼主| 发表于 2010-5-28 09:21:30 | 显示全部楼层
to 【38楼】 dr2001
    看来图片传达了一个错误的理解:
    即指明IF是32Bit取指;IF只关注当前指令,如果预取的本条指令包含下条指令,IF不会缓存下条指令。
    正确的应该是,如果 预取的本条指令包含下条指令,则IF会缓存下条指令。我会修正图片的。
------------------------------------------------------------------------------------------
图示修改建议:
- word是容易产生混淆定义,建议用32Bit Align之类的确定性描述。
    这个会在文字中有说明,而且书在最初的章节就约定过,如果没有特殊说明,WORD就表示32bits

- 坐标轴建议增加数字等,说明地址/时钟的数据,方便读者理解。
    地址坐标上有刻度,如果标注地址,我想过,不太好表达
    时间轴单位是clock,而且有纬度线(虚线)
    我是希望图片尽可能简洁

- 指令对齐的排列组合建议分布在不同的位置:16+16,跨/不跨32Bit边界;16+32,32指令对齐/不对齐;etc。
    16 + 16 和 16 + 32 只要跳转后的指令对齐到WORD都是一样的
    区别就在于跳转后是不是对齐到了WORD。



to 【39楼】 pldjn
    本贴纯技术。

出0入296汤圆

 楼主| 发表于 2010-5-28 09:35:57 | 显示全部楼层
to 【37楼】 hsztc
    什么地方一头雾水?这些图片就是为了方便所谓“门外汉”理解的,如果你一头雾水,
请帮助我们改进图片,看看要不要增加什么内容?谢谢

出0入0汤圆

发表于 2010-5-28 10:16:53 | 显示全部楼层
回复【40楼】Gorgon Meducer  傻孩子
-----------------------------------------------------------------------

由于开始的图表述的内容有歧义,所以才会导致后边需要更多的内容把事情说清楚。
既然IF本身是32Bit对齐取指,并且有内部缓存下条指令,那么就不需要更多的说明了。

出0入296汤圆

 楼主| 发表于 2010-5-28 12:56:49 | 显示全部楼层
to 【42楼】 dr2001
   证实了一个消息 AVR32 UC3的内核支持不相关的指令并行执行。

出0入0汤圆

发表于 2010-5-28 13:21:42 | 显示全部楼层
回复【44楼】Gorgon Meducer  傻孩子
-----------------------------------------------------------------------

这种事情是好事儿啊,为啥没见手册宣传呢?难怪在Pipeline图上会有三个REG写通道,并非是空穴来风。

出0入0汤圆

发表于 2010-5-28 13:35:27 | 显示全部楼层
关注!

出0入10汤圆

发表于 2010-5-28 13:35:49 | 显示全部楼层
学习贴

出0入296汤圆

 楼主| 发表于 2010-5-28 15:50:58 | 显示全部楼层
to 【45楼】 dr2001  
    在内核文档一个不起眼的角落写着……呵呵,很炯……

出0入0汤圆

发表于 2010-5-28 16:20:09 | 显示全部楼层
经简单查阅DOC32000 RevB,您引用的那段只是阐述了LS在完成R-M-W类型指令的时候,会有这样的效果。我们并不好主观外推。只能说AVR32的流水线在部分情况下具有并行功能。

是否在别的情形下也有?有待进一步研究手册。

出0入296汤圆

 楼主| 发表于 2010-5-28 19:16:44 | 显示全部楼层
to 【50楼】 dr2001
   你说得没有错,我应该更严谨才对。

出0入0汤圆

发表于 2010-5-28 22:54:09 | 显示全部楼层
简单扫了一下DOC32002 RevF,看起来是AVR32A Core TRM;同时简单参考DOC32059 UC3B的手册,有以下几点:

图一看起来未能直观明确表达各个Core Interface之间的关系。
手册中,IRAM是Core的一部分。HSB/S是和Core的Data Memory Controller相连的。即内存访问的层次和图中所直观表达的有出入。(Core的Data Memory Interface的用途尚未明确)。
对这点,建议文字附加说明,图示至多用虚线表达内核覆盖的内容。(当然,此图重点在于表达内核,不应对此做更多要求。)
描述清楚该问题,对理解后来的IRAM仲裁状态机也是有益的;至少容易解释一点。

对IF取指的理解可能有问题。
- IF是有内部FIFO的;在FIFO空时,写入并读出看起来是0延迟的。目前没有图表述此问题。
- IF的数据Load是连续的,Burst with Unspecified length。
因此,图六的表述,可能是有问题的。尚需核对文档做进一步澄清。

对于指令并行的问题,手册中明确指出,AVR32A内核是指令序,in order的。
目前看只有mems那三个指令,存在并行可能。手册上看,实际上该操作貌似是丢给内存控制器操作完成的??相当于Issue一个内存控制器的协处理指令,该指令的副作用是Stall处理器,如果有内存访问。

另外,IRAM的Write Buffer从AVR32A手册中推算,只有一个Word。建议图示不要用过长的队列。

还有一点,HSB/M写那个Buffer的图,建议增加字符强调其异步性,对指令执行和数据操作有时序要求的情况,需要Issue一条内存读。

出0入296汤圆

 楼主| 发表于 2010-5-29 00:22:08 | 显示全部楼层
to 【52楼】 dr2001
    谢谢你读得这么仔细。
对于图一,从目前来说传达的信息量已经足够,毕竟文字才是主体。另外,内存访问层次和图中表达有出入?
这个我不明白?图中,已经强调了,EX对IRAM以及HSB/S对IRAM的访问都是经过一个中间仲裁过程的,手册里面
说的很艰涩,其实Data Memory Interface就是我图中的那个IRAM仲裁。IRAM是内核的一个部分,这会在最初的
“内核设计草稿”章节中用详细的文字描述AVR32A内核的设计思路。

对于IF取址的问题,其实你仔细看图六和图七,明显可以看出存在FIFO,而且IF也是对指令进行缓冲的。而且
在IF得Burst with Unspecified length问题上,AVR32A内核实际上还有一个小BUG,这个会在HMATRIX章节详细
阐述。
另外,手册上明确说了,多周期指令实际上是由ID阶段发出子指令控制实现的。

至于IRAM的Buffer深度,你能说说你是如何推算的么?这个信息IC设计并不愿透露,图中,我是通过波浪线屏蔽
来说明长度未知的。

BTW,你注意下,图片其实我已经修订过几个版本了,都顺次贴在后面。

出0入0汤圆

发表于 2010-5-29 08:50:32 | 显示全部楼层
呵呵,我看的都是最后修改的图。

对图一所表示的流水线结构,这个是没有问题的。我上文表述可能不够清晰,重新表述一下。
图一所示的仲裁顺序和逻辑关系,我认为是清晰的。对于IF发起的请求,是矩阵先裁,然后IRAM裁。

我认为不够明晰的地方:
- 按照图一布局,实际上除左下的Matrix和右边的LocalBus之外,其余的都是Core的内部组成部分。
但图示所示的东西,给人的直观结论是IRAM是Core之外的独立实体。即便写了Internal,这个词既可以理解为Core的Internal,也可以理解为Chip的Internal。我当时一看这个图,直接取后者。
- 另外,从AVR32A手册看,EX出来的实际上只有一个总线;到Data Mem Ctrl才非对称化。和图一的表述实际上也不完全一致。
这些不影响图对其标题所示内容的表达,只是如果要满足和TRM严谨对应的话,值得修正。

对于IF FIFO的表述,图六-一实际上无法分辨FIFO/Buffer。我们可以说,他可能有一个32Bit的Buffer。
图六-二表述的,我认为是有Buffer的,因为对其取指缓存了下条指令。但是,接下来的32Bit取指插了一个等待周期,这很难让我认为IF存在更深的FIFO机制。
图六的描述不能说一定是有问题的,也许事实就是如此呢?

另外看起来IF Stall的话,是Stall FIFO呢,还是整个流水线,这个问题挺好玩。貌似AVR23A手册有语焉不详的提及。

IRAM WR Buf深度,参考手册AVR32UC DOC32002 RevF:
- 6.5,第四款,提到一个确定性的1 Clock延迟。
- 8.18,RMW指令操作IRAM,操作周期是1/2 Clock,确定性的。1不定Clock用于写缓存清空。
- 8.19,指令清单,中间的st.w / ld.w之间插入了一个显式NOP,说明指令周期。
综上,IRAM的WR Buffer应该只有一个32Bit Word。或者说不多于一个最大的单指令操作Slot。

出0入296汤圆

 楼主| 发表于 2010-5-29 13:43:18 | 显示全部楼层
to 【54楼】 dr2001  
    图一目的只是标出内核所有的输入输出,对于应用开发无影响的透明部分,避免
出现——阻止不必要的信息。比如,EX对外界,应用开发上,只需要知道有一个HSB/M
和一个到内部SRAM接口就可以了。更多的信息并没有好处。本书是快速入门指南,一切
服务于应用和快速入门,复杂的汇编指令和寻址方式我都不会去讲。SR寄存器的结构我
也只会一笔代过——这是服务于“面向应用开发”和“快速入门”这个主题的。更详细
的内容,工程师在入门以后可以自己去研究。
  有一个大原则:内核和处理器细节,尽可能交给编译器;外设的操作尽可能交给
Framework;系统的调度和多任务,尽可能交给操作系统。当然,最后一条已经超出这
本书的范畴了。

    图六传达的信息准确,FIFO就只有一个32bits的预取缓冲……虽然手册上没有写清
楚,但是这个信息是可靠的。IF的STALL是因为ID还没有完成所有的工作——比如多指令
周期的指令实际上需要ID不停的发生微指令到EX。如果EX STALL,ID肯定STALL,所以IF
STALL;同样,EX工作,但是ID没有完成,IF也STALL。这是一个低成本内核。

    IRAM的深度,你的论据准确,我会尝试到IC去问这个问题。

出0入296汤圆

 楼主| 发表于 2010-5-29 19:36:37 | 显示全部楼层
to 【54楼】 dr2001
    经过仔细计算,根据章节 6.4.1 EX stage HSB master interface章节8.18 Read-modify-write instructions以及8.19 Code example的表述,发现EX HSB/M缓冲深度为1级,IRAM写入Buffer深度为1级;另外,发现之前一处错误,EX HSB/M接口对读取并不缓冲,也是直接执行的,只不过在执行读取操作之前,会把写入缓冲中的操作全部清空(完成)。

    再次更新图片。这次阅读数据手册发现一些以前没有注意的有意思特性。并且对EX的LS并行处理机制有了更清晰地认识。

出0入0汤圆

发表于 2010-5-31 16:32:01 | 显示全部楼层
MARK,所有的--[ 广告时间 ] B、《AVR32 UC3工程师快入门指南》 书名都少了一个速字哦!

出0入296汤圆

 楼主| 发表于 2010-6-1 09:51:38 | 显示全部楼层
to 【57楼】 21_MCUEL  
    我现在也改不了签名了……

出0入0汤圆

发表于 2012-1-7 12:52:58 | 显示全部楼层
请问下,关于你即将出的那本书怎么还没有出呢

出0入0汤圆

发表于 2012-11-14 14:23:37 | 显示全部楼层
有空好好看看,学习了。

出0入0汤圆

发表于 2013-8-13 22:27:41 来自手机 | 显示全部楼层
mark……
顶一个…

出0入0汤圆

发表于 2013-12-4 23:58:05 | 显示全部楼层
顶一下。。。。学习啦

出0入0汤圆

发表于 2014-3-9 11:47:54 | 显示全部楼层

看看。。。。。。。。。。。。。

出0入0汤圆

发表于 2014-3-11 23:02:46 | 显示全部楼层
看看!!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 11:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表