RTL代码风格
- 使用标准DFF模块例化生成寄存器
- assign语法代替if-else和case
if-else和case语法的两大缺点:不能传播不定态,会产生优先级的选择电路而非并行选择电路,从而不利于时序和面积。 - 带有reset的寄存器面积和时序会稍微差一些,因此在数据通路上使用不带reset的寄存器,只在控制电路上使用带reset的寄存器
- 信号名定义注意使用英语缩写
- Clock和Reset信号禁止被用于任何其他的逻辑功能,只可以接入DFF作为时钟信号和复位信号
E200模块层次划分
- e203_cpu_top中仅例化两个模块,分别为e203_cpu和e203_srams
- e203_cpu为处理器核的所有逻辑部分
- e203_srams为处理器核的所有SRAM部分
将SRAM和逻辑部分在层次上分开是为了方便ASIC实现。
- e203_cpu模块例化的clk_ctrl用于控制处理器各个主要组建的自动时钟门控,参见低功耗设计的要诀。
- e203_cpu模块例化的irq_sync是用于外界的异步中断信号进行同步。
- e203_cpu模块例化的reset_ctrl用于将外界的异步reset信号进行同步,使之变成“异步置位同步释放”的复位信号。
- e203_cpu模块例化的itcm_ctrl和dtcm_ctrl用于控制itcm和dtcmm的访问
- e203_cpu模块例化的core是处理器核的主体部分,主要功能有:取指令单元ifu,执行单元exu,存储器访问单元lsu,总线接口单元biu。