Обзор методов описания встраиваемой аппаратуры

             

SystemC - часть 3


В SystemC вводятся следующие основные дополнительные типы данных:

  • sc_string – строковое представление чисел в различных форматах (например, число -2 может быть представлено как -0d2 (десятичный), 0b1110 (4-х битный двоичный знаковый), 0b0010 (4-х битный двоичный беззнаковый));
  • sc_int<N>, sc_uint<N> – знаковые и беззнаковые целочисленные типы заданной битовой ширины N;
  • sc_bigint<N>, sc_biguint<N> – знаковые и беззнаковые целочисленные типы заданной битовой ширины N, превышающей длину значений типа int, который поддерживается на инструментальной машине;
  • sc_fixed, sc_ufixed и др. – типы данных с фиксированной точкой
  • sc_logic и sc_lv<N> – 4-х значный бит (1, 0, X, Z) и вектор таких битов соответственно.

Для облегчения описания взаимодействия модулей, кроме портов, в SystemC предлагаются более сложные каналы sc_mutex, sc_fifo и sc_semaphore.

Пример 4 иллюстрирует реализацию простого мультиплексора (см. рис. 1.4) на языке SystemC.

В отличие от VHDL и Verilog, в которых может использоваться интерпретатор описания для моделирования системы, в SystemC задается полная исполняемая модель, и описание на SystemC компилируется в исполняемый файл на инструментальной машине обычным компилятором C++ с использованием специальных библиотек SystemC. В начале симуляции модели, аналогично методу main в С, в SystemC управление передается в метод sc_main(argc, argv), в котором происходит инициализация модулей системы и, в конечном итоге, запуск параллельных процессов инициализированных модулей с помощью функции sc_start(). SC_MODULE (mux) { public: sc_in c, d, e, f; sc_in > s; sc_out mux_out;

SC_CTOR (mux) { SC_METHOD (do_mux); sensitive temp_s = s.read(); switch (temp_s) { case 0: mux_out = c.read(); break; case 1: mux_out = d.read(); break; case 2: mux_out = e.read(); break; default: mux_out = f.read(); } } }

Пример 4. Простой мультиплексор на SystemC.




Содержание  Назад  Вперед