SystemC入门笔记

本文是关于SystemC的入门教程,详细介绍了SystemC的数据类型、信号和端口,以及如何进行模块设计,包括矩阵-向量乘法器的实现。通过实例展示了如何构建测试平台和设计顶层模块,帮助读者快速掌握SystemC的基本概念和应用。
摘要由CSDN通过智能技术生成

首发地址个人博客

变量说明

数据类型

SystemC为C++的一个库,因此C++的特性在SystemC中均可以使用,数据类型同理,除了C++中的数据类型外,SystemC也有一些自己的数据类型,如下所示:

  • 二值变量:sc_bitsc_bv<n>(n为宽度)分别为二值(0、1)变量和任意位宽二值向量。
  • 四值变量:sc_logicsc_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"

系统结构

7241055-655fae3e75660514.png
structure.png

该系统用于实现矩阵-向量乘法的行为级建模,包括以下几个部分:

  • 乘法器:实现矩阵-向量乘法功能,由多个向量-向量乘法器构成
  • 测试平台:激励生成器,用于产生指定尺寸的矩阵和向量以及时钟复位等控制信号

子模块设计

每个子模块在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
  • 11
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值