1、SystemC是一种基于C++的建模语言,专为系统级设计(System-Level Design)和建模而开发。它提供了一套丰富的类库,使得设计师能够在更高的抽象层次上描述和模拟系统的行为、结构和时序,同时可以很好得支持寄存器和传输级设计和验证。SystemC广泛应用于数字系统的设计和验证,特别是在复杂的集成电路(IC)和嵌入式系统设计中。SystemC有以下特点:可以用C++面向对象思想,进行功能模块划分;仿真速度高于硬件翻译语言;通过事件驱动,从而模拟系统中的信号传输和处理。
2、
Verilog、VHDL主要用于RTL建模,并用来综合生成数字电路。VHDL主要是结构级、行为级和数据流级,VerilogHDL主要是在寄存器传输级和门级。Verilog HDL适合小规模电路。
System Verilog吸收了Verilog,既能够用于RTL建模,也能用于功能验证。
SystemC则主要用于架构级建模、软硬件建模、行为级建模;
Matlab则主要用于算法设计、架构设计等。
SystemC仿真速度远高于Verilog HDL/VHDL。利用SystemC进行功能开发和验证后,利用一定规则,改写为可综合代码(VerilogHDL或者VHDL),比通过VerilogHDL或者VHDL进行功能开发和功能验证速度快。
相比与C语言/C++的功能仿真,SystemC支持描述并发性、时序性、通信等硬件特性。可以模拟硬件设计的行为和性能,包括时间建模、事件驱动仿真等,提供了更精确的时序仿真功能。
3、TLM模型:SystemC或其他语言开发的事务级模型,包含事件正确执行顺序,而且没有底层物理延时,高级数字系统模型化方法。作用:1、抽象通信细节;2、快速搭建架构模型;3、支持软硬件协同设计;4、提高仿真速度,比RTL快1000~10000倍。
4、电子系统描述由高到低依次为系统级、算法级、寄存器传输级、门级和开关级。系统级主要完成对整个系统功能的定义和架构的探索;算法级确保一些算法和系统行为的正确;寄存器传输级利用组合逻辑和时序逻辑来描述电路;门级主要偏重利用工艺库的元件进行描述。 寄存器传输级设计处理主要分为两个步骤:读入设计进行分析和简化;和元件库中对应的 元件相匹配。
5、行为级建模三个关键抽象:行为、状态和事件。行为级建模包括以下几个层级:
寄存器传输层:描述存储单元和组合逻辑块之间的互连关系。形成最终可综合的VHDL,verilog或者SystemC代码。
传输层:传输层的系统建模一般对应着一定的总线协议。这一层的建模需要提供一个精确到时钟周期、符合协议要求的模块互连机制。为IP模块的抽象仿真模型提供精确到周期的接口。
交易层:描述发起设备和目标设备的数据传输,与协议无关。主要用于性能和行为分析。
消息层:以事件驱动系统执行,系统层概念。主要用于制定可执行设计规范和功能划分等。
交易级建模系统一般带有一个或者多个嵌入式微处理器和相应的片上总线通信结构,完成各个功能模块之间的相互通信。主要是利用systemC进行相应的通信抽象,实现通信机制。特点:功能和通信分离;调用接口方法。
6、RTL 是一种抽象级别,用于描述数字电路的行为。
7、综合就是将RTL或者硬件描述语言转化成网表的过程。网表用于描述硬件元器件之间的连接关系。当前使用的综合技术包括逻辑综合和行为综合,其中占主导地位的是逻辑综合,主要方法是在设计的寄存器传输级对系统进行描述,并且利用逻辑综合工具得到系统的门级实现。其中综合工具能够根据设计者的要求对设计进行优化,这些要求被称为约束,主要包括时序和面积两个方面。综合工具利用工艺库文件来指明设计中用到的底层元件。
在综合之前需要把systemC中的不可综合的语句用#ifdef #endif注释掉,或者替换成可综合的用法。对于实在无法替换的语句可以在充分验证功能正确后,在保持逻辑不变的情况下去掉这些语句。
8、片上系统:将含有多个功能模块的一个完整的电子系统集中在一个芯片上。片上系统包括:主设备、从设备、仲裁器和总线。典型主设备包括处理器、DMA控制器等,典型从设备包括存储器、中断控制器、程控I/O和通用串口等。
9、典型的嵌入式系统包括:处理器核、片上存储器、中断控制器、定时器、通用IO、通用串口、操作系统、定制外设和应用软件。
10、集成电路开发步骤:设计、制造、封装和测试。
11、UML:软件系统化设计和文档化的建模语言。
12、通信细化,通过适配器,在保持接口不变的情况下,将某个单元的功能模型向更低级别的模型实现细节转化。
13、摩尔状态机只取决于当前的状态,米利状态机取决于当前的状态和输入。状态机建模三种风格:1、一个进程更新状态,另一个进程进行逻辑控制和输出;2、一个进程更新状态,并进行逻辑控制和输出;3、一个进程更新状态,一个进程控制逻辑,一个进程输出结果。
14、常见助手函数:
end_of_elaboration:完成静态规则检查,保证所有连接到总线的从设备地址不重复。
get_slave(address):通过地址获取从设备指针。
get_request(priority):根据优先级获取请求项,请求项包括数据或者指令。
get_next_request:获取最佳请求项。
clear_locks:清除已经完成的锁定标记。
handle_request:get_request或者get_next_request后进行request处理。