搜索
bottom↓
回复: 18

《兼容ARM9的软核处理器设计:基于FPGA》

[复制链接]

出0入0汤圆

发表于 2012-5-5 09:09:14 | 显示全部楼层 |阅读模式
第六章:兼容ARM9微处理器Verilog RTL设计
本章是本书的核心。讲述了如何在不到1800行的verilog程序里,去实现上一章总结的ARMv4的架构。从现在经典的三级流水线和五级流水线开,对如何有效的实现处理器描述做了全面展开。以此为基础,逐步对兼容ARM9微处理器进行剖析,让读者从处理器内核的实现过程中,学习到Verilog RTL设计的各种技巧。

确定RTL设计的输入输出端口
经典的三级流水线架构
经典的五级流水线架构
三级流水线改进架构
适于兼容ARM9微处理器的三级架构
影响流水线架构执行的四种状况
第一级:取指阶段的Verilog RTL实现
第二级:乘法运算阶段的Verilog RTL实现
第三级:加法运算阶段的Verilog RTL实现
寄存器组的写入
CPSR/SPSR的写入
数据池的读写
第四级:读操作数据的回写
这里提供这一章设计的Verilog RTL代码下载:兼容ARM9软核处理器Verilog RTL代码



看介绍还不错, 自己设计一个ARM9


本帖子中包含更多资源

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

x

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

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2012-5-5 09:50:54 | 显示全部楼层
比较全的在这里

http://code.google.com/p/risclite/

出0入0汤圆

发表于 2012-5-5 10:53:15 | 显示全部楼层
是不是能实现一个简单的arm处理器?功能还不完善?貌似arm9 ip核还没有开源吧。

出0入0汤圆

发表于 2012-5-5 11:28:21 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2012-5-5 11:43:32 | 显示全部楼层
呵呵,ARM会不会找上门来

出0入0汤圆

发表于 2012-5-5 14:55:06 | 显示全部楼层
貌似很牛啊 有时间看看

出0入0汤圆

发表于 2012-5-5 17:07:18 | 显示全部楼层
这个作者很牛,要赞一个的,之前就看到了

出0入0汤圆

发表于 2012-5-5 18:22:22 | 显示全部楼层
学习学习!!!!

出0入0汤圆

 楼主| 发表于 2012-5-5 23:06:32 | 显示全部楼层
dosomething 发表于 2012-5-5 09:50
比较全的在这里

http://code.google.com/p/risclite/

***********************************把介绍全部转贴过来***********************************

本项目为一本关于FPGA设计的书——《兼容ARM9的软核处理器设计:基于FPGA》提供配套教程下载。该书由机械工业出版社华章分社出版。读者可以在这里找到书中对应的设计文件。



第一章: 数字电路设计模型
本章主要讲述数字电路设计的基本模型。在进行数字电路设计之前,必须建立一个数字电路模型。这个建模的过程,就是在心中建立一个电路的基本轮廓。在了解了数字电路的基本单元后,运用它们构建大致模型。

最初的模型——带有输入输出的模块
组合逻辑
时序逻辑
同步电路
同步电路时序路径
RTL描述
综合生成电路
这一章建立数字电路设计的基本概念,是非常基础性的内容,无下载文件。

第二章:Verilog RTL编程
本章讲述如何使用Verilog进行RTL编程,讲述如何使用Verilog精炼的进行RTL描述。在对Verilog的描述方法进行了基本归类后,总结了进行RTL设计的基本流程,并在最后,使用一个简单的UART串口设计实例来启发读者完成RTL设计。

Verilog语言与RTL描述
Verilog描述语句对应电路
如何进行RTL设计
RTL设计要点
UART串口通讯设计实例
本章使用Verilog设计了一个简单高效的UART控制器。作者已经对它进行了参数化。读者只需要在例化时,指出串口的波特率(波特/秒),以及开发板的工作频率(兆赫兹),即可用在自己的设计当中。下面就是它的例化方式,从这段参数化可以理解设计的参数:它支持的波特率是9600波特/秒,rxtx.v的clk端口的时钟频率是25 MHz。

rxtx
# ( .baud ( 9600 ),
     .mhz  ( 25   )  
)
u_rxtx ( ... );
它的下载方式:rxtx.v

这段串口控制器的Verilog RTL代码只有简单的100来行,非常简单实用,适于在开发板上调试使用。推荐各位读者在理解它的功能的基础上进行修改,一定会让你用开发板进行串口调试时更加得心应手。

这个rxtx.v现在支持的配置方式是:8 bit数据位,1 bit奇偶校验位,它的奇偶校验方式偶校验,以及1 bit的停止位。读者在配置PC端的控制终端时,可以按照上面的描述去配置。也可以修改代码以满足你特定的需求。

第三章:Modelsim仿真
本章讲述如何使用Modelsim对Verilog RTL设计进行仿真验证。验证是设计中重要的一步,Modelsim是最流行的仿真工具,使用Modelsim建立一个测试环境可以对RTL设计进行各种级别的验证测试。

仿真的意义
testbench文件
Modelsim仿真工具使用
UART串口仿真实例
本章讲述如何使用Modelsim进行设计仿真。但也可以使用开源的iVerilog仿真工具完成。它的下载方式是:iVerilog下载页。读者在安装完毕后,下载本章设计的tb.v和rxtx.v,链接是:uart.zip。在解压缩某个目录,例如D:\sim下后。在windows的“开始”下面,点击“运行”,然后输入cmd,点击确定。在cmd页面内,输入命令:"D:",以及"cd sim"进入解压缩目录。

如果安装正确的话,只需要输入:iverilog tb.v rxtx.v -o run,就会生成一个可执行的仿真文件:run。然后,输入vvp run,即可让刚刚生成的run进行执行,那么tb.v里面的打印语句就会在cmd窗口中输出。

如果你想生成波形,很简单,打开tb.v,在endmodule语句前面加上:

initial
begin
        $dumpfile("tb.lxt2");
        $dumpvars(0);
end
然后保存tb.v。重新运行iverilog tb.v rxtx.v -o run,重新得到run文件。然后运行vvp run -lxt2,那么就得到lxt2格式的波形文件:tb.lxt2。最后在cmd窗口中,运行gtkwave tb.lxt2,就可以进入波形观察窗口,拉入自己想要的信号,仔细分析吧。具体也可以参照博文:使用iverilog+gtkwave学习Verilog HDL

第四章:FPGA开发板原型验证
本章主要讲述如何使用FPGA开发板对设计进行原型验证。FPGA开发板作为数字设计运行的实体,具有实践出真理的价值。掌握FPGA开发板对设计进行验证,对于设计者无比重要。

FPGA内部结构
FPGA开发板
FPGA设计开发流程
FPGA设计内部单元
UART设计在Altera FPGA的下载执行
UART设计在Xilinx FPGA的下载执行
这一章有两个FPGA开发板运行的工程。一个针对Altera的DE2-115开发板,一个是Digilent的Starter kit开发板。这里提供的运行例程,只针对作者手头的Digilent公司的Nexys3开发板。这两个工程都会用到串口终端。读者当然可以使用xp系统自带的“超级终端”,但很多win7用户或觉得“超级终端”不给力的,可以下载作者提供的一个简单易用的串口终端软件:迷你终端。(注:在进行串口设置时,建议将“流量控制”设为“无”)

第一个FPGA开发板工程,使用前面两章的串口控制器,把接收到的数据+1后,发送回串口中。在书中使用的是Altera公司的DE2-115开发板。这里提供的是:Nexys3开发板的工程数据包。

第二个FPGA开发板工程,会把“迷你终端”发送的数据,保存入FPGA内部的Block RAM内,在开发者按动某个按钮后,顺序把保存的数据通过串口回送入“迷你终端”。在书中使用的是Digilent的starter kit开发板。这里提供的是:Nexys3开发板的工程数据包。

第五章:ARM9微处理器编程模型
本章主要对ARM9处理器架构进行介绍,使读者对ARMv4这一套运行在众多智能手机上的流行架构有个切实的了解。本章从建立微处理器的基本模型开始,从实现的角度对ARMv4架构的方方面面进行了探讨。在总结出了7种中断和20条指令后,对于下一章执行做了全面的总结和铺垫。

ARM公司历史
ARM处理器架构
微处理器基本模型
ARMv4架构模式
ARMv4架构内部寄存器
ARMv4架构的异常中断
ARMv4的架构支持的ARM指令集
ARM指令与中断分析
这里提供ARMv4的指令集对照表(excel格式)。读者可以对指令集的区分一目了然,下载地址:arm9.xls。

第六章:兼容ARM9微处理器Verilog RTL设计
本章是本书的核心。讲述了如何在不到1800行的verilog程序里,去实现上一章总结的ARMv4的架构。从现在经典的三级流水线和五级流水线开,对如何有效的实现处理器描述做了全面展开。以此为基础,逐步对兼容ARM9微处理器进行剖析,让读者从处理器内核的实现过程中,学习到Verilog RTL设计的各种技巧。

确定RTL设计的输入输出端口
经典的三级流水线架构
经典的五级流水线架构
三级流水线改进架构
适于兼容ARM9微处理器的三级架构
影响流水线架构执行的四种状况
第一级:取指阶段的Verilog RTL实现
第二级:乘法运算阶段的Verilog RTL实现
第三级:加法运算阶段的Verilog RTL实现
寄存器组的写入
CPSR/SPSR的写入
数据池的读写
第四级:读操作数据的回写
这里提供这一章设计的Verilog RTL代码下载:兼容ARM9软核处理器Verilog RTL代码

第七章:Hello world--兼容ARM9处理器内核运行的第一个程序
本章介绍简单的ROM code生成流程,并让它在兼容ARM9处理器内核上运行。KEIL是嵌入式开发中流行的工具,它的后续RealView MDK也因为它良好的特性受到嵌入式设计工程师的欢迎。本章帮助读者编写简单的printf("Hello world")打印程序,以此为契机,建立简单的SoC设计工程。

基于FPGA的SoC设计流程
使用RealView MDK编译Hello World程序
Modelsim仿真输出Hello World
建立Hello World的FPGA设计工程
这一章使用ARM公司的Keil RealView MDK作为嵌入式软件开发工具。读者只需在评估版下载页面上填写个人信息,即可下载该软件的评估版,可以产生小于32 KB大小的ROM code。

在安装完毕Keil RealView MDK后,在安装目录下,会找到examples目录。在这个目录里面,会有Hello子目录,里面放着一个简单的hello world打印项目。读者可以从这里下载。读者可以按照书中的指导,对hello项目进行修改,也可以在这里直接下载修改后的Hello项目。

在准备了ROM code后,我们进入仿真阶段。书中采用的是Modelsim作为仿真工具,这里却使用前面提到的iVerilog开源仿真工具。读者下载仿真包,里面包含了两个简单的文件:tb.v和arm9_compatiable_code.v。读者需要打开tb.v,对里面的parameter BINFILE = "D:/keil/Hello/Obj/hello.bin";语句进行修改,使得仿真获取的bin文件指向读者在hello目录下生成的hello.bin。

修改tb.v结束后,打开cmd界面,进入sim_hello.zip的解压缩目录。然后运行:iverilog tb.v arm9_compatiable_code.v -o run;最后运行vvp run,即可见到打印出hello world字样。由于tb.v里没有自动结束语句,读者需要输入ctrl+C键,然后输入finish,强制结束。读者接下来要做的是,对hello工程的源文件hello.c进行修改,打印出你想要的字符串。在Keil RealView MDK进行重编译后,只需运行vvp run,即可打印出你想要的字符串。接下来,读者可以按照书中的指导,使得仿真支持中断,这里,不再提供参考。

如果你能够进行仿真,那么在FPGA开发板上执行将是顺理成章、水到渠成的事情了。这里,提供在Nexys3开发板上的例子,它是上面仿真的翻版。在这个例子里,采用了Block RAM作为ROM和RAM,使用前面开发的串口程序。读者可以下载这个FPGA工程,作为你在FPGA开发板上执行打印hello world的一个参考。下载地址:hello world在Nexys3开发板上的例程。建议读者在这个例子的基础上逐步增加一些自己的东西,例如中断的执行,打印一些其他异常符号等等。

第八章:Dhrystone Benchmark--兼容ARM9处理器内核性能测试
Dhrystone Benchmark是为各种嵌入式内核测试“体质”的代码。本章结合ARM公司给出的优化方法,使用RealView MDK对Dhrystone 2.1代码进行编译。然后使用Modelsim进行仿真,并用FPGA开发板结合串口,打印出真实的测试结果。

Dhrystone 2.1介绍
移植Dhrystone 2.1进行编译
Modelsim仿真运行Dhrystone Benchmark
在线可编程的FPGA SoC设计工程
Dhrystone Benchmark在开发板中运行
同上一章一样,本章也将使用Keil RealView MDK自带的Dhrystone 2.1测试项目,对兼容ARM9软核处理器进行测试。读者可以再这里下载DHRY的源项目。然后,按照书中的指导,对它进行修改,让它更加适于兼容ARM9软核处理器,也可直接在这里下载修改后的DHRY项目。

在编译了软件后,读者可以按照上一章的方法对它进行仿真。仿真文件包里面包含了一个tb.v,以及arm9_compatiable_code.v,它的下载方式:DHRY仿真包。使用iverilog仿真软件对该仿真包进行仿真,可能需要十来分钟。最后的DMIPS/MHz结果,也会随着Keil的版本不同而不同。例如,作者采用最新的Keil 4.23版,将得到Dhrystone 2.1的DMIPS/MHz结果为:1.16 DMIPS/MHz。在写作此书时,作者采用的是4.10版本,那时的DMIPS/MHz结果为:1.21 DMIPS/MHz。

同上一章一样,经过仿真以后,在FPGA开发板上重现这一测试过程。作者给出一个参考例程:Nexys3开发板上的Dhrystone 2.1测试项目。

第九章:ucLinux仿真--结合Skyeye,启动不带MMU的操作系统
Skyeye是ARM9处理器的软件模拟器,通过它解析ucLinux内核,可以在软件平台上运行嵌入式软件。本章建立了Modelsim的仿真环境,加载同样的ucLinux内核,可以打印出同Skyeye一样的启动信息。在这个过程中,用户可以通过查看波形,从RTL设计工程师的角度解析嵌入式操作系统。

ARM7TDMI-S处理器内核
以ARM7TDMI为核心的单片机
uClinux嵌入式操作系统
SkyEye硬件模拟平台
Modelsim下仿真uClinux启动过程
本章将在仿真器中启动uClinux操作系统。这个启动过程以软件模拟器SkyEye为参考,整个仿真包已经发布在网上了,下面是链接地址:uClinux仿真包。

第十章:Linux OS--结合mini2440开发板,启动带MMU的嵌入式操作系统
Mini2440 ARM9开发板是一种流行的嵌入式开发工具。本章从开发板中得到含有操作系统及文件系统的NAND flash的镜像,然后在Modelsim下建立testbench环境,从该镜像中读出bootloader的第一条指令开始,一步步的启动Linux操作系统。这个过程涉及到带MMU功能模块的处理器的工作机理,读者在本章中可以了解到Linux操作系统的硬件工作环境。

ARM920T处理器内核
S3C2440A 32-bit微控制器
Mini2440 ARM9开发板
NAND flash仿真模型
为兼容ARM9处理器内核增加协处理器指令
建立仿真Linux操作系统的testbench
Mini2440是由广州友善之臂计算机科技有限公司推出的一块基于ARM9的开发板。本章完全参照它的启动过程。仿真包也已经发布在网上,下载地址是:Linux操作系统仿真包。

谢谢大家购买我的书!希望大家学习愉快!

出0入0汤圆

 楼主| 发表于 2012-5-5 23:07:42 | 显示全部楼层
配套代码下载

http://code.google.com/p/risclite/downloads/list

出0入0汤圆

发表于 2012-5-5 23:15:30 | 显示全部楼层
又是这哥们儿,开源精神值得鼓励,不过东西的确没有多少学习价值。
对于初学者,太难,入门是头等大事。对于已经开始ic设计的,参考价值不大。
做个毕业设计或者出点论文还行,其他只适合爱好者或者是某些有钱没处花的研究所搞点“核高基”骗骗国家的钱。
顺便说一下,龙芯基本就是这个路子

出0入0汤圆

发表于 2012-5-5 23:25:28 | 显示全部楼层
看来学FPGA要VHDL和verilog都学啊

出0入0汤圆

 楼主| 发表于 2012-5-6 00:10:38 | 显示全部楼层

http://bbs.eetop.cn/thread-326358-1-1.html

参与处理器设计对于FPGA开发者的好处


我来归纳总结几点,大家看看有什么创新运用:
   1,交流Verilog RTL设计技巧。Verilog是一门语言,RTL设计更是其中限制严格的应用。既然是门语言,就有对语言的精通和生疏的区别了。但由于我们各自出于不同的行业,每个人就算总结了很精到的设计技巧,也由于行业的陌生感而无法交流。处理器设计即可打破这种限制。因为不管我们出于何行何业,一个性能强劲的CPU都能在你的设计中帮到你。而且由于处理器本身设计的高度凝练,需要的技巧度更高,各自能够发挥的空间也非常广阔。初学者不愁在这个过程中学不到东西,资深者不愁在这片天空里得不到施展。这个过程本身就是“渔”和“鱼”兼得的过程。而且你在参与后完成的作品能够直接用在你后来的设计中,多好的事情!

  2,有助于我们调试FPGA设计。我在本书中给出了一个hello world的FPGA设计。程序虽然简单,但意义比较深远。为什么呢?因为FPGA内部就好比遥远的火星,是另外一个世界。人们探测火星,都是通过发射一个火星探测器,让火星探测器把火星的内部状况发射回来,以此来了解火星。现在有了软核处理器,我们也可在FPGA这颗火星内部放一个探测器。我们既然能轻松的从FPGA里面发出一个“hello world”的信息,那么我们也可轻松的改我们的C程序,让它把内部的状态计算出来,告诉我们。软核处理器就是FPGA内部世界的“空间站”。我们调试FPGA设计的时候,把软核处理器一起放入,通过编写C语言来控制我们目标FPGA程序的运作,这不就是一个完全属于你自己的chipscope嘛。

出0入0汤圆

发表于 2012-5-7 16:18:06 | 显示全部楼层
还没走到这一步,先支持一下楼主。

出0入0汤圆

发表于 2012-8-3 20:54:57 | 显示全部楼层
仰慕啊。。大牛就是大牛。。。

出0入0汤圆

发表于 2012-8-3 21:18:43 | 显示全部楼层
有空了好好研究,提高一下自己。

出0入0汤圆

发表于 2012-8-3 21:38:53 | 显示全部楼层
原来大牛也在啊!我离校之前正好在书店转,然后看到了你的书,买了一本,简单浏览了一下,写的挺不错的。

出0入0汤圆

发表于 2012-8-28 14:50:58 | 显示全部楼层
必然的趋势。。。。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-10-3 23:18

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

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