我是靠谱客的博主 负责小刺猬,最近开发中收集的这篇文章主要介绍RISC-V— 蜂鸟 E200 设计总览和顶层架构介绍1、处理器设计和验证的特点2、蜂岛 E200 处理器核设计特点3、E200处理器核 RTL 代码风格4、蜂岛 E200 模块层次划分,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 1、处理器设计和验证的特点
  • 2、蜂岛 E200 处理器核设计特点
  • 3、E200处理器核 RTL 代码风格
    • (1)使用标准 DFF 模块例化生成寄存器
    • (2)使用 **assign** 语法替代 **if-else** 和 **case** 语法
  • 4、蜂岛 E200 模块层次划分
    • a) Hierarchy
    • b) e203_cpu_top
    • c) Pipeline structure

在这里插入图片描述

1、处理器设计和验证的特点

处理器设计作为一种特殊 的 ASIC 设计,也需我们了解某些方面的背景知识和特点,归纳如下 。

  • 熟悉汇编语言及其执行过程 。
  • 了解软件如何经编译、汇编、链接最后成为处理器可执行的 二进制码的过程 。
  • 了解计算机体系结构的知识。
  • 处理器对时序和面积的要求一般会非常严格,需不断反复地优化时序和面积,因 此 对电路和逻辑设计的理解 需要 比较深刻 。

处理器的验证也有其特点,通常 需要从 3 个不同层面对处理器进行验证 。

  • 需使用传统的模块级验证手段(例如 UVM 等 〉对处理器的子模块进行验证 。
  • 需使用人工编写或者随机生成的汇编语 言测试用例在处理器上运行进行验证 。
  • 需使用高等语言( 譬如 C、 C++ )编写的测试用例在处理器上运行进行验证。

2、蜂岛 E200 处理器核设计特点

  1. 模块化和可重用性
  2. 面积最小化,以追求低功耗、小面积
  3. 结构简单化
  4. 性能不追求极端

3、E200处理器核 RTL 代码风格

蜂鸟 E200 处理器核采用一套统 一 的 Verilog RTL 编码风格( Coding Style ) , 来自于严谨 的工业级开发标准,其要点如下。

  • 使用标准 DFF 模块例化生成寄存器。
  • 推荐使用 Verilog 中的 assign 语法替代 if-elsecase 语法进行代码编写。

(1)使用标准 DFF 模块例化生成寄存器

a)对于寄存器避免直接使用 always 块编写 ,而是应该采用模块化的标准 DFF 模块进行例化 。
在这里插入图片描述
b) 使用标准DFF模块例化的好处包括以下内容。

  • 便于全局替换寄存器类型。
  • 便于在寄存器中全局插入延迟
  • 明确的 load- enable 使能信号(如下例的 flg_ena )方便综合工具自动插入寄存器级别的门控时钟以降低动态功耗.
  • 便于规避 Verilog 语法 if-else 不能传播不定态的问题.

c) 标准 DFF 模块是一系列不同的模块
在这里插入图片描述
d) RTL code 如下

//标准 DFF 模块 , 以 sirv_gnrl_dfflr 为例 , 代码片段如下
module sirv_gnrl_difflr 
#(
	parameter DW = 32
)
(	input			lden,
	input[DW-1:0]	dnxt,
	output[DW-1:0]	qout,
	
	input			clk,
	input			rst_n
);
	reg	[DW-1:0]		qout_r	;

//使用 always 块编写寄存器逻辑
	always @(psoedege clk or negedge rst_n)begin:DFFLR_PROC
		if(rst_n == 1'b0)
			qout_r <= {DW{1'b0}};
			else if(lden == 1'b1)
				qout_r <= dnxt ;
	end
	assign qout = qout_r;
	 
//使用 assertion 捕捉 lden 信号的不定态
`ifndef FPGA_SOURCE//{
`ifndef SYNTHESIS//{
sirv_gnrl_xchecker #(	//该模块内部是个 SystemVerilog 编写的断言,如下文详解
.DW(1)
)
u_sirv_gnrl_xchecker(
.i_dat(lden),
.clk(clk)
);
`endif//}
`endif//}

endmodule

//sirv_gnrl_xchecker模块代码片段
//此模块专门捕 捉不定 态, 一旦输入 的主 dat 出现不定 态,则会报错并终止仿真。
module sirv_gnrl_xchecker #(
	parameter DW = 32
)(
	input[DW-1:0]	i_dat;
	input			clk ;
);
	CHECK_THE_X_VALUE:
		assert property (@(posedge clk)
						((^i_dat)) !== 1'bx)
						)
		else $fatal ("n Error : Oops, detected a X Value !! This should never happen.n");
endmodule	

(2)使用 assign 语法替代 if-elsecase 语法

Verilog中的 if-elsecase 语法存在两大缺点

  • 不能传播不定态
  • 会产生优先级的选择电路而非并行选择电路,从而不利于时序和面积。
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4、蜂岛 E200 模块层次划分

a) Hierarchy

在这里插入图片描述

e203_cpu_topTop module
e203_cpuLogic top module of core
e203_clk_ctrlClock control module
e203_reset_ctrlReset control module
e203_irq_syncAsynchronous interrupt signal sync module
e203_itcm_ctrlITCM control module
e203_dtcm_ctrlDTCM control module
e203_coreMain logic top module of core
e203_ifuTop module of fetch unit
e203_exuTop module of execution unit
e203_lsuTop module of load & store unit
e203_biuBus interface unit module
e203_sramsSRAM top module of core
e203_itcm_ramITCM SRAM module
e203_dtcm_ramDTCM SRAM module

b) e203_cpu_top

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

c) Pipeline structure

在这里插入图片描述
本文参考于《手把手教你设计CPU-RISC-V》(胡振波),详情请自行阅读此书。

最后

以上就是负责小刺猬为你收集整理的RISC-V— 蜂鸟 E200 设计总览和顶层架构介绍1、处理器设计和验证的特点2、蜂岛 E200 处理器核设计特点3、E200处理器核 RTL 代码风格4、蜂岛 E200 模块层次划分的全部内容,希望文章能够帮你解决RISC-V— 蜂鸟 E200 设计总览和顶层架构介绍1、处理器设计和验证的特点2、蜂岛 E200 处理器核设计特点3、E200处理器核 RTL 代码风格4、蜂岛 E200 模块层次划分所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部