asip_designer学习(1)-chessde及handson

CHESSDE(CHESS开发环境)是设计处理器模型以及使用CHESS编译器开发和模拟项目的主要图形用户界面。
其主要特征是:
•使用水平/垂直窗格和笔记本选项卡的动态布局
•高级处理选项传播
•多配置管理(例如,用于发布/调试配置)
•增量编译
•多核机器上的并行编译
•生成模拟器/调试器(CHECKERS接口)
•生成HDL(GO接口)
•集成模拟/调试接口
CHESSDE使用基于XML的项目文件格式。这种格式使得可以以分层方式(即在处理器、项目和文件级别)存储CHESS工具的所有单独选项。在每个级别和每个选项中,用户可以选择显式设置选项,或从下一个更高级别继承。项目文件的扩展名为.prx。其他与用户界面相关的设置(例如,窗口布局)保存在扩展名为.prxui的附带文件中。

使用CHESSDE重做CHESS用户手册[2,§1.1]介绍章节中的示例项目:斐波那契项目由一个名为fib.C的C文件组成,将在我们的一个示例处理器tmicro上编译和模拟。
创建新项目:若要启动新项目,请单击工具栏上的“新建项目”按钮。在生成的对话框窗口中,指定:项目名称(在本例中为fib)、项目目录、生成的项目文件(扩展名为.prx,因此为fib.prx)的存储位置以及源文件的通常位置,以及项目类型(选择Executable)。最后,在ASIP Designer的情况下,通过processor name(tmicro)和processor model目录(包含处理器项目文件tmicro.prx的目录)指定目标处理器。在定义了_DIR环境变量(在本例中为tmicro_DIR)后,也可以从环境中获取此目录。通过“打开项目”按钮打开现有项目。
测试例程发现bridge工具报错,发现是tool path设置错误,手动改为lNa64bin64路径下的bridge工具即可。
3.12日更新:
处理器目录:

•tinycore.h:原始处理器标头文件;
•TinyCore.N:NML描述;
•TinyCore.p:原始函数的位真实行为模型;
•tinycore_pcu.p:处理器程序控制单元的行为模型。
•tinycore_chess.h:编译器处理器标头文件;
•tinycore.prx:处理器项目文件。
当开始修改这些处理器描述文件中的任何一个以创建TinyCore体系结构的新版本时,建议您首先将现有文件复制到新的处理器库目录并进行新目录中的更改。在此培训中,将得出几个新版本的TinyCore处理器,称为TinyCore V2,TinyCore V3等。相应的处理器描述文件将存储在以下处理器库目录中:lib-2,lib-3,lib-3等。
指令集模拟目录:
与处理器库目录并行,有一个指令集模拟目录。在此目录中,您可以使用Checker为处理器创建指令集模拟器(ISS)。您将必须为TinyCore V2及以后创建ISS。TinyCore V2的仿真目录为:<your_home>/Chess/Designs/tinyCore/ISS-2当您在新的处理器库目录中创建了TinyCore架构的新版本时,建议您还使用新的并行模拟目录。例如,将在模拟目录中生成TinyCore V3的ISS:<your_home>/棋/designs/tinycore/iss-3。
项目目录:
对于要使用TinyCore处理器描述文件进行编译的每个C程序,建议您使用单独的项目目录。对于本培训课程中的实验,将使用以下项目目录:<your_home>/Chess/designs/tinyCore/find_min和<your_home>/ifly_home>/iNGES/designs/tinycore/tinycore/chort每个项目目录都可以包含一个或多个C源文件。另外,它还应该包含桥接链接器的配置文件。对于本培训会话中的所有实验,将使用相同的配置文件,称为tinycore.bcf。
建立处理器模型:
在运行ASIP设计器工具之前,您必须构建TinyCore V1处理器模型。这意味着处理器标头文件(tinycore.h and tinycore_chess.h)和NML说明(tinycore.n)进行了分析,并将其转换为内部表示。
现在执行以下步骤来构建TinyCore V1处理器模型。
1.打开项目:在Chessde中,单击“打开项目Icon1”文件浏览器将弹出。导航到lib-1打开项目目录,然后选择tinycore.prx项目文件。按打开按钮。
2.构建处理器模型:单击Chessde工具栏中的“制造”图标。或者,您可以在项目Explorer中选择处理器模型的“TinyCore”字段,然后按右键鼠标按钮,然后选择“制作”选项。成功时,所有状态框中都显示“确定”。
nml语言:
目标处理器的处理器模型在特殊用途的NML语言中描述。NML是一种高级语言,可以在程序员手册的抽象级别上建模处理器。
NML描述包含在一个名为.n的文件中,带有目标处理器的名称。
除NML描述外,还有两个处理器标头,都对应于C++标头文件:
•原始处理器标头称为.h,声明了NML描述中使用的原始数据类型和原始操作。
•编译器处理器标头称为_CHESS.h,描述了从C内置类型和C内置运算符到处理器原始数据类型和操作的翻译过程。
鉴于NML描述,仅原始处理器头文件是必不可少的,因为它定义了可以在NML描述中使用的类型和操作。原始处理器头文件以及NML和PDG描述是大多数工具的足够信息:CHECKERS, GO, DARTS, BRIDGE, and RISK.CHESS需要额外的信息,该信息包含在编译器处理器头文件中。但是,即使不使用CHESS编译器,仍然必须提供此编译器处理器头文件的最小版本。
在the CHESS modeling manual中详细讨论了两个处理器头文件。
下面是对处理器头文件主要特征的总结:
原始处理器头文件:
原始处理器头文件是一个C++标头文件,该文件声明NML描述中使用的数据类型和操作。使用C++类对原始数据类型进行建模。使用C++函数和操作数对原始操作进行建模。
TCTCore示例处理器中最重要的原始数据类型是:
•16位类型num,用于ALU操作的操作数和结果以及乘法的操作数。
•32位类型acc,用于乘法和累积操作的结果。该处理器允许直接访问ACC类型的两个16位子字。
•10位类型addr,用于地址计算。
•18位类型pm_type是程序内存类型,定义了TCTCore指令的长度。
所有原始类型和原始功能都应包含在C++名称空间中,必须称为_primitive。原始数据类型的特征是在单个property()中指定的类型属性。这样,将物理属性附加到原本抽象的数据类型上。最常见的属性是位数(位)和符号编码(签名,未签名)。除了整数类型外,还可以表征分数和浮点类类型。但是,在编译器处理器头文件中定义的分数和浮点类型仅在处理器的应用层中使用。编译器头文件还指定了这些应用程序类型对处理器的原始整数类型的映射。当您在NML中,需要在不同类型的存储元素之间编写作业时,需要原始的转换构造函数。转换构造函数定义相应的类型转换。NML前端ANIMAL报告需要哪些原始转换构造函数。例如,当读取NUM类型中央数据总线上的ADDR类型ADDR的AGU寄存器时,会引入原始NUM(ADDR)转换。
原始操作:
目标处理器对原始数据类型执行操作,
1.声明:原始函数指定为C函数声明,必须封闭在_primitive命名空间。
2.实现:原始功能的行为用PDG语言指定,该功能的PDG描述位于单独的文件中,.p,PDG工具将PDG描述转换为C++和HDL描述传递给CHECKERS and GO.CHESS编译器只使用原语函数的声明,不包含实现的部分。具有控制属性(例如jump or call)的功能不需要实现。
3.输入与输出:原始操作具有输入和输出。相应的C函数或运算符的返回值(如果不是void)就是原始操作的输出。C函数或运算符的其他参数可以模拟输入和输出,具体取决于所使用的参数机制,按照下表所述的约定:

4.函数属性:可以用几种属性定义原始函数,这对ASIP设计工具具有特殊的意义,通过在原始操作声明函数声明后,用一个或几个参数添加property()来指定属性。
num add(num,num,astat&) property(commutative);
void cjump(bool,addr) property(jump absolute);
commutative注释告诉编译器,它可以根据需要切换函数的前两个输入,以获得更好的编译结果。
jump和absolute属性告诉编译器cjump()是一个有条件的(由于第一个布尔值输入)跳跃原语,第二个addr的输入表示绝对目标地址。
The CHESS processor modeling manual给出可用功能属性及其含义的列表,这个手册还讨论了控制指令的建模。
5.查看指令执行时间:
在NML内存声明中,除了读取和写入访问换句话外,还可以指定地址换位和相关联的load/store控制信号(包括相对时机)。例如,TCTCore中的存储可以做如下定义:

对于每个load/store操作,列出了相应的控制信号。这些控制信号(LD_X,ST_X,……)未直接在NML中使用,但它们以端口的形式出现在生成的处理器模块(RTL或SystemC)中。此外,在指定PDG(IO_Interface构造)中的内存接口时,需要这些控制信号,以拦截从处理器侧中的load/store请求。访问声明中使用的数据和地址换句话是自动声明的,并接收内存的数据和地址类型。控件信号接收类型为布尔。
相对于控制信号,指定地址在地址总线(ar和aw)上的周期中,在哪个周期中,数据在读取/写入总线(dr和dw)上,以及在哪个循环中访问内存核心(mr和mw)。如果省略了这些数字中的任何一个,则默认为零。当前,相对地址阶段必须为零。

相对定时的完整规范如图

GO:
从PDG描述中,PDG工具会自动生成原始的C++,Verilog和VHDL实现。编译ISS时,使用生成的C++文件。生成的Verilog或VHDL文件用于由GO生成的模型中。不同种类的原语:

posted @ 2025-01-12 14:55  周一三  阅读(35)  评论(0)    收藏  举报