Skip to content

fanyc22/cpu_la

Repository files navigation

清无LA指南

清无·龙芯不是洛杉矶

  1. 电子系大二本身系情特殊。数字IC完全没讲,系统课几乎没有,属于是硬的还没摸到,软的以后也不一定涉及;再加上大家都是大二参赛,先天就比本校其他院系(特指老贵)知识储备少。在此基础上,往年参赛选手又基本是在暑假才开始龙芯杯开发(用于替代大作业),准备时间也远少于老贵和其他学校(往往半年以上甚至一年甚至经验版本代代相传代代改进)。此外,一直到我们这一届,电子系制度性的重视不够,也没有经验传承,在一个已经办了八届的比赛里开荒,堪比叶问打二战。
  2. 龙芯杯赛事相对草台班子。众所周知,LoongArch本身就是一个类似于圈地自萌的架构,整个生态几乎就是龙芯中科一个公司在维护,因此相关的工具链和技术文档都很不完善,网络上公开可查的资料也较少,我们在遇到技术问题时往往需要问往届选手或者公司内部技术人员才能解决。此外,大赛的赛事筹办和技术方案由于人手原因,往往也较为简陋,这意味着龙芯的赛事开发并不会像课程大作业那样有着详实的指导和目标,往往自由度很高。
  3. 组队。基于上述原因,在极为逆风的电子系系情下,龙芯赛事开发(这里指想拿到二等奖以上)就注定工作量较大且带有一定的折磨属性。因此,组队极为重要。你的队友至少需要满足以下条件之一:拥有较高的码力(老贵或软院的中上水平,熟练使用各种开发工具,且拥有丰富的debug经验)且熟练使用linux、对计算机硬件组成和系统十分了解(装机佬or技术宅)、拥有极强的事务并行处理能力且具有极为珍贵的情绪价值(更衣室领袖和内外事务总管)。并且做好暑假在学校呆一个月的准备(一定不要相信远程开发,因为太痛苦了)。可以两个人参赛,但不要二拖二,会心累。单刷也行,但估计干一个月最高三等奖。
  4. 架构设计。基于上述原因,老无的学生在大二时几乎对于现代计算机体系结构所知寥寥,架构设计更像是熊瞎子掰苞谷,在不同架构的选择中相对茫然,容易出力不讨好。
  5. 代码合作。一定一定一定要有统一的代码风格和可追溯的版本管理!!!!!这是我们今年做的比较好的地方,我们也感受到了它极大的便利。
  6. 建议先了解vivado和verilog的诸多特性(说实在的真的要用verilog吗?如果你有充足的时间(有大于等于一个月的空闲时间)学个更高级的语言也许更好一点),比如说verilog在if不写else、case不写default的时候会在vivado里综合出latch致使仿真过上板不过、vivado的综合会基于之前的综合结果导致你修了上述问题之后上板仍然不过等。
  7. 龙芯杯早就过了“只写一个cpu”的拓荒阶段了,一定要做tlb、完整csr并且提前自底向上学习linux操作系统,以防你们在写了个特好的cpu的情况下跑不起来系统、玩不到原神。

优势

  1. 请相信你真的比全国其他的大学生智商高很多,综合能力强很多。你真的可以用一个月超过大部分学校半年一年的工作量(但不是所有,所以想拿更高的奖项还是得提前准备)。
  2. 老师们的支持。你会感受到物质困难都不是困难,困难的只有时间不够和队友隐身。
  3. 老贵的经验分享。虽然老贵不会对你全盘托出,但他们的经验会很有用。
  4. 你的学长学姐们终于意识到了要传承经验和版本了。
  5. 可以和老贵组队。

打比赛的好处

  1. 说实话,在电子系打龙芯没啥功利性的好处。如果是想加分想保研请不要抱太高的希望。
  2. 但是非功利性的好处有很多。龙芯确实是对于合作能力和开发能力的集中考量,也可以让你见识到中国其他高校的顶尖系统人才是什么样的(以建立信心),并让你知道你自己对系统和数字IC感不感兴趣。

基于本队伍经验的对于开发时间的估计(供参考)

以下预测是具有相关知识(架构、代码能力)但不具有相关经验(龙芯开发)的单人(精神不会崩溃,且每天能有稳定的12个小时开发)单刷比赛(完全从0开发不参考版本)在各个阶段需要的时间。

  1. 架构设计+CPU核(无分支预测无cache无总线无csr单发射7级流水):5天通过功能测试相关内容。
  2. csr:3天通过功能测试相关内容。
  3. 分支预测:2天通过debug。
  4. cache+AXI总线:7天完成了解axi协议并通过功能测试。
  5. 上板and性能测试debug:3天。

所以请不要在龙芯比赛时并行实践/写论文/高强度谈恋爱/出国交换/别的比赛。

我设想的时间规划

我认为大二打龙芯杯应该提前一年进行包括知识学习的准备。

大二上开学完成组队,同学期完成对体系结构的基本了解(达到数逻大作业和数逻实验大作业水平),并上手开发一些项目,有基本的代码能力(我不认为这些能力应该在这个比赛中才学会,但如果你还不会请抓紧)。

大二寒假完成对CPU的架构设计和论证(包括TLB和特权等,请从一开始就target at OS),规划好分工,通过比赛规定的基本功能测试。

大二下学期在学期中保持一定进度的开发,完成超过初赛要求的TLB等内容,支持完整的特权指令(达到计算机系“奋斗三星期,造台计算机”的大作业水平),上板操作系统。同时进行性能测试,扫参数,找优化方案。同时尝试使用板上其他外设。

暑假一方面集中优化性能,一方面抓紧上板操作系统(建议并行,并且在系统上放大精力)。

vivado小知识

  1. 一个vivado的project有非常多的文件(夹),有些文件(夹)会在项目创建之初就存在,有些文件(夹)会出现在特定阶段(比如说静态语法检查、调用ip核、仿真、综合、实现、生成比特流等),推荐自己随心制作一个“源文件在别的文件夹并且调用了ip核且可以上板”的项目,依次执行各个步骤,每一步后都观察一下project文件夹里新出现了什么,各个文件名大概代表什么意义。
  2. vivado综合实现的结果会存放在某个/些文件夹里,如果仿真正确但实现出了上板错误的结果,请清空之前综合出的结果并且重新综合。相反地,如果你正在优化性能(仅调整参数),那么我建议不清空,这样可以加快综合与实现的速度。(不过,龙芯杯要求最终提交结果基于首次综合(2024是这样),所以在调整到满意性能后还是要清空结果重新跑一次以防出现问题)
  3. 学习一下.coe文件、.bin文件的功能和用法,学习利用串口向板子传输数据,以便在系统开发时方便调试。
  4. 学习.tcl脚本和基本指令,它可以以命令行的形式让vivado执行它自带gui中不支持的(所谓隐藏)功能,并且多观察tcl console,里面有比较重要的debug信息。
  5. 杂项:一般来说时间消耗impl>syn>sim>>bit;vivado其实是伪多核,它只吃单核频率;仔细检查路径名,一定不能出现中文和一些符号如'等;学习在各种log中读取各种信息。
  6. 使用vivado时遇到任何问题,一定要拿出来问,这个软件不稳定,可能在很多古怪的角落出问题,这个时候是经验至上的。

一些待补充的东西

常用工具?

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •