下一步的计划

现在lcc的代码已读完,下一步要做的是soc的设计和验证,以及lcc的移植、汇编器的移植。
对于汇编器,我准备使用customasm.
如果使用这个汇编器,可能在移植lcc时需要修改lcc模板中的一些伪指令如ld,lcomm等。

对于soc的设计,这些天一直在思考的问题是异步通讯的问题。我所希望的系统,cpu运行的速度应该是可变的,甚至可以是单步的。而我又希望能使用de0 nao板载的SDRAM,因此内存控制系统与cpu的通讯一定是异步的。异步通讯要有ready信号,由于我希望cpu运行的速度可变,因此我需要在cache控制器中设置一个双触发的触发器,在ready信号变化时记录并保持ready信号,直至cpu的下一个周期到来,用这个信号控制cpu中cache控制器和ram控制器的异步通讯。

系统地址空间的划分,也是一个需要确定的设计。目前我计划将地址空间按照| ROM | IO | RAM |划分,具体各区域尺寸尚未确定。系统cache只对RAM区域有效。目前我的想法是,根据指令和数据需求的不同,在cache控制器上增加片选、控制信号mux,以实现不同区域对cache的不同操作。对于指令,只需要读取ROM和RAM,所以I cache只需要在原有I cache上增加对ROM的多路复用(直通),由于这个ROM是用作bootloader的,因此不需要很大体积,可以使用同步的方式与I cache链接,因此I cache的改动很小。对于数据,则三个区域都需要读取。
显然,io与cpu之间的通讯也是异步的,但我尚未构思完毕整个io控制器的结构,因此io控制器的设计应该是接下来的工作之一。

IO控制器应该包括一些总线(I2C,SPI,etc),一些通讯端口(GPIO,Uart,etc),以及向量中断和异步通讯的支持。需要仔细考虑。

我目前已有cpu部分的Verilog代码,但是这部分代码缺乏测试,没有精确中断支持,没有与cache集成,而且一些指令还需要修改,例如:我打算删除乘法和除法的硬件支持,原因是原有的代码中对乘法和除法的硬件支持来自Altera的IP,这与本项目的设计目标冲突,而且在sparc平台的lcc后端中,有使用软件支持乘法除法的参考样例;我还需要考虑是否增加不同长度的取数操作,考虑如果在lcc移植过程中将所有整数类型的尺寸或者对齐都设置为4字节会怎样。

但是这些工作的顺序很难确定,这是我首先要考虑的问题。

目前我想到的合理的顺序是:

  • 考虑是否增加不同长度的取数操作
  • 回顾已有的cpu代码,分析那些代码可以与cache、IO、中断等独立,并对这些代码进行测试。
  • 定义存储控制和io控制的接口,与cpu对接,测试cpu的中断
  • 设计存储控制
  • 设计io控制
  • 工具链的移植
cpu内部只采用一个时钟,对于不同速度的组件将采用clock enabler 读完LCC完整源代码
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×