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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 85142|回复: 263

[资料] 详细注释-高速版-兼容ARM9软核CPU处理器(6.1已更新注释)

[复制链接]
发表于 2012-5-25 17:46:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 free-arm 于 2012-6-1 14:36 编辑

《兼容ARM9的软核处理器设计:基于FPGA》已经卖出一段时间。实际上,在后面我对这一版本进行了优化,主要是为了在FPGA上跑更高的速度。这一优化,还是非常成功的,在spartan6上可以达到近80MHz的速度。

   这一高速版本,仍然保持三级流水线,和以前的结构基本一致。主要的改动点如下:
   1,第二级的乘法使用移位操作代替;
   2,为了消除banked register对时序的影响,对有banked的寄存器r8~r14都新增加一个主寄存器Rx,它会在模式切换时,主动更新到对应模式的寄存器。
   
   鉴于乘法运算非常耗费时间,我做了两个版本,这两个版本都做了详细的注释。
   一个版本是不执行MULT和MULTL指令;它可以运行到70+MHz(Spartan6)。读者如果非要执行乘法操作,可以使用软件乘法来代替。或者已经读懂这一版的读者可以自行加上乘法的实现,以执行全指令集。
   另外一个版本在上一个版本的基础上用32*32的硬件乘法来完成这两条指令的执行。因为32*32的乘法操作,使得它运行的速度降到60+MHz(Spartan6)。这一版本相对于不带乘法的版本,只不过增加少许几行而已。它的Dhrystone比起书中来说,要略小一点。书中的可以达到1.2 DMIPS/MHz,这一版本,只能达到1.1 DMIPS/MHz。

   这两个版本的接口都和书上给出的代码的接口一致,读者完全可以在FPGA工程中无缝替换。但是注意,由于不带乘法的版本没有实现乘法指令,因此书中给出的Hello项目可以替换,Dhrystone和uClinux系统仿真不能替换执行,而带乘法的版本都可以替换执行。因为Linux系统仿真需要增加协处理器接口,因此两个版本都不能用在Linux仿真上面。

   下面给出书中的勘误,读者可以纠正。对于带给大家的不便,请予谅解。

1,103页,倒数第二行代码:sum_middle替换为sum_middle[31]; 倒数第二行文字:sum_middle也改为sum_middle[31]。
2,105页,倒数第九行"字符串字符串",有两个"字符串",去掉其中一个;其中 字符串 是带乘法指令版本执行的解压缩密码,它以s开始,以=结尾,密码包含s和=。                  
                      倒数第四行中Rm[7:0],替换为Rs[7:0];
                   倒数第三行中Rm[7:0],替换为Rs[7:0];
                   倒数第二行Rm[7:0],替换为Rs[7:0];Rm[4:0]替换为Rs[4:0];
                   倒数第一行中:{ {32{Rm[31]}}, Rm} >> Rm[4:0],替换为 { Rm, Rm} >> Rs[4:0];Rm[Rm[4:0]-1]替换为Rm[Rs[4:0]-1]。
3,107页,图5-12中,“后发生”下方的Rn替换为Rm;
4,114页,第二段中,“在L==0时”与“在L==1时”这两组词进行互换。也就是后面的两段意思描述反了;
                   第三段中LDM0替换为LDM。
5,116页,第一段和第二段的LDM0替换为LDM。
6,118页,第一行中”26种“替换为”27种”。
7, 106页,"6.MULT"下面的指令表中Rd和Rn的位置互换
8, num误为"mum"的问题。发生在 111页的 "15. MSR1"下面的指令表;112页的"16. DP2"下面的指令表和"17. LDR0"下面的指令表;113页的"18. LDR1"下面的指令表;
9, 130页,图6-10中“MOV R1,[R0]"应该改为"LDR R1,[R0]", 见下面的代码描述。


不带乘法指令的版本:(不加密,都可以下载)

arm9_compatiable_code_high.rar (12.96 KB, 下载次数: 1976 )

带有乘法指令的版本:(加密,获取密码的方法:105页,倒数第九行"字符串字符串",有两个"字符串",去掉其中一个;其中 字符串 是带乘法指令版本执行的解压缩密码,它以s开始,以=结尾,密码包含s和=。  )

arm9_compatiable_code_high_mult.rar (14.09 KB, 下载次数: 1825 )

欢迎大家试用,给出意见!希望在更多的开发板上,能够运行起来这些软核处理器。也希望能够带动更多的人,用Verilog来设计软核处理器。
 楼主| 发表于 2012-5-25 18:38:38 | 显示全部楼层
感谢大家关注。如果大家有FPGA开发板,可以实地评估一下,欢迎发出试用报告。
对于代码的阅读,verilog不同于c。不要看verilog和c都是一个一个的写出来,但c的这些函数总是按照顺序一句句的执行,而verilog的每一个实体都是同时并发,同时执行的。这种同时性,带给我们阅读和实现的麻烦。所以我们在阅读时,不妨就某个feature去challange我,看看这条feature是怎么实现的,这么简短的语句是如何做到的?这段代码无外乎实现20条指令和7种中断,不妨一条条的去challange我。
Verilog设计相对于c设计来说,是另外一片蓝海。我们既然从事这个开发,无妨深入下去,挖掘Verilog的表现力,不断写出更优秀的代码。所谓,有巧思,无难事!对于CPU设计来说,有分教:吊丝不努力,国家徒伤悲!
发表于 2012-5-25 21:55:14 | 显示全部楼层
感谢楼主分享!先收藏,再研读!正在钻研PIC的verilog,arm的体系有点令我...IC人,大家一起加油!
发表于 2012-5-26 10:31:50 | 显示全部楼层
感谢楼主分享!收了线
发表于 2012-5-26 19:46:52 | 显示全部楼层
yes!
发表于 2012-5-27 07:25:32 | 显示全部楼层
Very good,thanks
发表于 2012-5-27 07:49:05 | 显示全部楼层
不错!!!!!!!!!!!!增加了流水线!
发表于 2012-5-27 16:41:20 | 显示全部楼层
感谢作者,整个系统设计思想和其他CPU设计不同,其他CPU设计都是分成各个模块,比如译码、执行。。。比较好细分去理解,而这个系统设计阅读起来有点晕
 楼主| 发表于 2012-5-27 17:11:14 | 显示全部楼层
回复 8# cmdeng


之所以没有细分模块,是因为各级流水互相作用,比如wait_en和hold_en,都是涉及到多级流水线的相互作用。在代码中,我标注了几个大的模块区,基本上在上一版的基础上,可以弄懂整段代码的结构。如果实在不明白,可以发贴向我询问。也可以实地仿真,弄清楚某个feature的流水线关系。
发表于 2012-5-27 19:57:26 | 显示全部楼层
感谢楼主分享!先收藏,再研读!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-26 05:56 , Processed in 0.031559 second(s), 10 queries , Gzip On, Redis On.

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