首发地址个人博客
变量说明
数据类型
SystemC为C++的一个库,因此C++的特性在SystemC中均可以使用,数据类型同理,除了C++中的数据类型外,SystemC也有一些自己的数据类型,如下所示:
- 二值变量:
sc_bit
和sc_bv<n>
(n为宽度)分别为二值(0、1)变量和任意位宽二值向量。 - 四值变量:
sc_logic
和sc_lv<n>
(n为宽度)分别为四值(0、1、x、z)变量和任意位宽四值向量 - int型变量:
sc_int<n>
和sc_uint<n>
(n为宽度)分别为有符号和无符号的不超过64位宽的整型变量 - bigint变量:
sc_bigint<n>
和sc_bituing
(n为宽度)分别为有符号和无符号任意位宽的整型变量
信号
信号使用sc_signal<type>
声明,一般用于连接端口和进程通信(功能进程之间连接信号)
端口
SystemC中端口类型主要有sc_in<type>
、sc_out<type>
和sc_inout<type>
,type中为端口的类型,可以使用C++自带的一些类型,也可以使用SystemC中的数据类型。
sc_out<sc_int<WIDTH * 2> > vec_o;
例如上面为一个输出端口例子,该输出端口名称为vec_o,类型为SystemC的数据类型sc_int<W>
。
sc_in<sc_int<WIDTH> > vec1[VEC_WIDTH];
可以声明端口数组,如上所示,声明了一个宽度为VEC_WIDTH
的端口数组,每个端口的类型是sc_int<W>
。
模块设计——矩阵-向量乘法器
设计一个矩阵-向量乘法器用于熟悉语法,需要注意的是若要使用SystemC特性,需要使用#include "systemc.h"
系统结构
该系统用于实现矩阵-向量乘法的行为级建模,包括以下几个部分:
- 乘法器:实现矩阵-向量乘法功能,由多个向量-向量乘法器构成
- 测试平台:激励生成器,用于产生指定尺寸的矩阵和向量以及时钟复位等控制信号
子模块设计
每个子模块在SystemC使用一个类描述,这个类使用宏SC_MODULE(<module name>)
声明,这里的子模块是向量-向量乘法器,这一部分代码如下所示:
SC_MODULE(vector_mul) {
sc_in<bool> clk,rst_n;
sc_in<sc_int<WIDTH> > vec1[VEC_WIDTH],vec2[VEC_WIDTH];
sc_out<sc_int<WIDTH * 2> > vec_o;
void compute_vector_mul(void) {
int temp = 0;
if (rst_n.read() == false) {
vec_o.write(0);
return;
}
for (int i = 0; i < VEC_WIDTH; ++i) {
temp = temp + vec1[i].read() * vec2[i].read();
}
vec_o.write(temp);
};
SC_CTOR(vector_mul) {
SC_METHOD(compute_vector_mul);
sensitive_pos << clk;
sensitive_neg <&l