WedX - журнал о программировании и компьютерных науках

Установка длины вектора в SystemC с полученным параметром

Я делаю вентиль xor в SystemC из привязки четырех вентилей NAND. Я хочу, чтобы модуль получил вектор из N бит, где N передается в качестве параметра. Я должен иметь возможность выполнять побитовые операции & и not (для вентиля NAND).

Лучшим решением может быть использование типа sc_bv_base, но я не знаю, как его инициализировать в конструкторе.

Как я могу создать битовый вектор, используя пользовательскую длину?

17.07.2013

Ответы:


1

Одним из способов параметризации модуля является создание нового шаблона C++ для модуля.

В этом примере ширину входного вектора можно задать на уровне реализации этого модуля

#ifndef MY_XOR_H_
#define MY_XOR_H_

#include <systemc.h>       

template<int depth>
struct my_xor: sc_module {
    sc_in<bool > clk;
    sc_in<sc_uint<depth> > din;
    sc_out<bool > dout;

    void p1() {                                                           
        dout.write(xor_reduce(din.read()));
    }

    SC_CTOR(my_xor) {
        SC_METHOD(p1);
        sensitive << clk.pos();
    }

};
#endif /* MY_XOR_H_ */

Обратите внимание, что struct my_xor: sc_module используется и.о.о. макрос SC_MODULE. (См. стр. 40, 5.2.5 SC_MODULE стандарта IEEE 1666-2011. ).

Вы можете проверить это с помощью следующего тестового стенда:

//------------------------------------------------------------------
// Simple Testbench for xor file
//------------------------------------------------------------------

#include <systemc.h>
#include "my_xor.h"

int sc_main(int argc, char* argv[]) {

    const int WIDTH = 8;

    sc_signal<sc_uint<WIDTH> > din;
    sc_signal<bool> dout;

    sc_clock clk("clk", 10, SC_NS, 0.5);   // Create a clock signal

    my_xor<WIDTH> DUT("my_xor");           // Instantiate Device Under Test

    DUT.din(din);                          // Connect ports
    DUT.dout(dout);
    DUT.clk(clk);

    sc_trace_file *fp;                  // Create VCD file
    fp = sc_create_vcd_trace_file("wave");     // open(fp), create wave.vcd file
    fp->set_time_unit(100, SC_PS);      // set tracing resolution to ns
    sc_trace(fp, clk, "clk");             // Add signals to trace file
    sc_trace(fp, din, "din");
    sc_trace(fp, dout, "dout");

    sc_start(31, SC_NS);                // Run simulation
    din = 0x00;
    sc_start(31, SC_NS);                // Run simulation
    din = 0x01;
    sc_start(31, SC_NS);                // Run simulation
    din = 0xFF;
    sc_start(31, SC_NS);                // Run simulation

    sc_close_vcd_trace_file(fp);        // close(fp)

    return 0;
}

Обратите внимание, что я использую struct, а не class. class также возможно.

class my_xor: public sc_module{
public:

XOR в этом коде — это просто xor_reduce. Дополнительные сведения см. в Стандарте IEEE 1666-2011. на стр. 197 (7.2.8 Операторы редукции). Но я предполагаю, что это не то решение, которое вы хотели иметь.

22.07.2013
Новые материалы

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: [email protected]