|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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来设计软核处理器。 |
|