本次学习参考Stratus内置的学习例程(simple_p2p),学习内容主要如下所示:
- Stratus HLS软件运行需要的必要文件及其写法
- Stratus HLS软件操作方式
- Stratus HLS内置的p2p端口的基本使用(非流水线)
- Stratus HLS自定义数据类型
1.Stratus HLS必要文件与写法
Stratus工程所需要的文件如下图所示:
文件 | 类型 | 说明 |
---|---|---|
设计文件 | cpp+h | 描述设计的头文件和cpp文件 |
TestBench | cpp+h | 描述测试平台的头文件和cpp文件 |
System | cpp+h | 连接设计文件和TestBench的头文件和cpp文件 |
main.cpp | cpp | 整个仿真平台的顶层文件 |
project.tcl | tcl | 指定工程配置(仿真选项和综合选项)的tcl文件 |
Makefile | makefile | 由project.tcl生成的makefile文件 |
1.1.设计文件
设计文件的头文件如下所示:
#ifndef __NEW1__H
#define __NEW1__H
#include "cynw_p2p.h" // p2p端口的头文件,如需使用cynw_p2p则需要引用该头文件
#include "new1_input_type.h" // 类型new1_INPUT_DT的头文件
#include "new1_output_type.h" // 类型new1_OUTPUT_DT的头文件
SC_MODULE(new1) { // 定义模块new1
public:
cynw_p2p < new1_INPUT_DT >::in inputs; // 一个p2p输入端口
cynw_p2p < new1_OUTPUT_DT >::out outputs; // 一个p2p输出端口
// Declaration of clock and reset parameters
sc_in_clk clk; // 时钟端口,类型为sc_in_clk
sc_in < bool > rst; // 复位端口
SC_CTOR(new1):inputs("inputs"), outputs("outputs"), clk("clk"), rst("rst") {// 构造函数
SC_CTHREAD(thread1, clk.pos()); // 定义线程thread1,绑定时钟上升沿
reset_signal_is(rst,0); // 定义复位为0时有效
// Connect the clk and rst signals to the metaports
inputs.clk_rst(clk, rst); // 绑定输入端口的时钟和复位
outputs.clk_rst(clk, rst); // 绑定输出端口的时钟和复位
}
void thread1();
new1_OUTPUT_DT my_function(new1_INPUT_DT);
};
#endif
在设计头文件中,定义了一个模块new1,具有一个p2p输入端口和一个p2p输出端口以及时钟和复位端口,并声明函数thread1为线程,为其绑定了