开源处理器核OpenRisc的FPGA平台移植
Name:Peihe Jiang EETOP ID:vipjph
———————————————————————————————————————
10月初参加了这个开发板的试用活动,应该是最后一个报名,最后一个收到开发板的了。开始的时候是惊喜,而后确是一丝的迷茫与担心,毕竟我还停留在FPGA和嵌入式的入门级水平。20天的时间说长不长说短不短,20天前信誓旦旦的说要学多少多少东西,20天后发现自己的进步不算大,FPGA的开发也不算成功。但对Xilinx以及avent的各种产品及工具的了解确实上了一个台阶。
———————————————————————————————————————
一、初识LX9
第一次打开快递的时候,最大的惊喜在于FPGA的开发板竟然可以得如此的小巧精致,而且板子价格不算高。以前用的开发板都显得很笨重,而且连接下载线、电源线等等都很麻烦。这款LX9集下载调试电源于一个手机大小的板子,而且做工精良,实在是令人折服。虽然这款板子不像其他开发板有丰富的接口,但对于开发者来说,有了必要的串口、网口、按键以及LED,一般的开发就足够了。
开发板本身携带了嵌入式的演示程序,通电后LED就会闪烁,只要按照Configuration_ Guide所说明的步骤,逐步安装ISE、usb-uart驱动、digilent adept、plug-in,很快就可以使程序运行起来,并完成对LED、DDR、GPIO、SPI、CDCE913等的各模块的测试。另外,这款开发板还附有WebServer程序,只要设置好IP,就可以用IE登陆了。
这里特别要说的是avent的各种参考资料写的真是明白,真想不到可以用如此简单的英语和插图写出如此复杂的操作过程。这也让我对以后的英语阅读不再恐惧。这对初学者以及开发板的初级使用者来说,上手很快。
二、OpenRisc简介
OR1200是OpenRisc系列RISC处理器内核的一员。OpenRisc由OpenCores组织负责开发和维护,是免费、开源的Risc处理器内核家族。OpenRisc包括OpenRisc1000和OpenRisc2000,OpenRisc2000目前还处于计划阶段。
OpenRisc1000(以下简称OR1K)的指令系统包括3大部分:OpenRisc基本指令集、OpenRisc向量/DSP扩展指令集和OpenRisc浮点扩展指令集。OpenRisc指令集包括:32位整数指令、基本DSP指令、32位Load和Store指令、程序流程控制指令和特殊指令。
OR1K的开发工作于1999年开始,第一个发行版本是OpenRisc1001,发行于2000年4月,由VHDL语言描述。支持ORBIS32指令集和基本DSP指令的OR1200出现于2001年7月,2002年8月基本成熟,改进和维护一直持续到现在。
OR1200是一种32位、标量、哈佛体系结构、5级流水的Risc,支持虚拟存储器和基本DSP功能。默认的缓存是单通道直接映射的8KB数据缓存和单通道直接映射的8KB指令缓存,每个缓存的分组尺寸是16字节,默认的存储器管理单元由基于64个散列入口的单通道直接映射的数据后备式转换缓冲区和基于64个散列入口的单通道直接映射的指令后备式转换缓冲区组成。辅助功能包括用于实时调试的调试单元,高分辨率滴答计数器、可编程中断管理寄存器和电源管理。其数据和地址总线接口符合Wishbone标准。
OR1200的标准组成的结构框图如下图所示。
三、Xilinx FPGA的移植
这里我们使用的是Xilinx公司的开发工具ISE12.4,将ORP_SOC向Xilinx FPGA移植的步骤如下。
① 修改ORP_SOC以适合FPGA的开发环境,一是修改OR1200_defines.v定义所需要子模块配置,以及RAM和FIFO所试用的资源类型,从而使得合理的占用FPGA资源。此外,还需手工修改部分RAM;二是添加PLL对所需要的时钟进行适当的分/倍频,同时提高时钟信号的质量。
② 对RTL进行综合,生成网表。
③ 指定每一个输入输出对应的FPGA管脚和输入输出逻辑类型。
④ 编译生成的网标文件。
⑤ 进行静态时序分析,以检查设计是否满足预定的时钟要求。
将ORP_SOC目录下的.old目录全部删除,添加所有.v文件到xsv_fpga_top项目中。修改ORP_SOC源码。
修改OR1200_defines.v如下:
(1) 关闭‵define OR1200_ASIC。
(2) 对于RAM类型,打开‵define OR1200_ALTERA_LPM,关闭其他选项。
(3) 打开‵define OR1200_NO_DC和‵define OR1200_NO_IC,这是因为目前OR1200_ic部分仍有bug。
(4) 关闭‵define OR1200_NO_DMMU和‵define OR1200_NO_IMMU。
(5) 关闭‵define OR1200_ASICMULTP2_32×32,打开‵define OR1200_GENERIC_MULTP2_32×32,使乘法器试用FPGA的内部DSP资源。
(6) 关闭‵define OR1200_CLKDIV_2_SUPPORTED和‵define OR1200_CLKDIV_ 4_SUPPORTED,使外部SRAM和Flash的工作频率和处理器核心相同。
(7) 对于寄存器文件,打开OR1200_RFRAM_DUALPORT。关闭其他选项。
其他选项试用默认。
修改eth_defines.v:
打开‵define ETH_ALTERA_ALTSYNCRAM,试用FPGA内部RAM资源。
对于UART控制器模块,数据接受和发送FIFO模块都需要修改,使用ISE直接生成即可。
相应的RTL代码修改后,绑定管脚,而后编译,综合,下载至开发板。从而完成OpenRisc的移植工作。
四、后记
一直对openrisc充满兴趣,利用这段时间对openrisc有了一定的了解,但时间毕竟还是太短,而且穿插着各种考试,最终还是未能得到满意的结果。试用报告写得比较匆忙,不足之处请多多包涵。
总之,通过20天的试用,对xilinx、avent、openrisc都有了更深层次的认识。十分感谢jack能够提供这次试用的机会,感谢eetop提供了这么好的平台让我们进步。
本视频基于Xilinx公司的Artix-7FPGA器件以及各种丰富的入门和进阶外设,提供了一些典型的工程实例,帮助读者从FPGA基础知识、逻辑设计概念
本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“
课程中首先会给大家讲解在企业中一般数字电路从算法到流片这整个过程中会涉及到哪些流程,都分别使用什么工具,以及其中每个流程都分别做了
@2003-2020 中国电子顶级开发网