Понимание типов в SystemC

#c #c #vhdl #systemc

#c #c #vhdl #systemc

Вопрос:

Я новичок в программировании на SystemC, и есть одна вещь, которую я заметил (просматривая официальную документацию SystemC): все типы, с которыми я имел дело при моделировании VHDL, не были «перенесены» на SystemC.

Я имею в виду:

  1. Учтите, std_logic что в стандартной библиотеке VHDL нет эквивалента в SystemC, однако в документации SystemC я вижу много примеров использования bool .
  2. Подумайте std_logic_vector , я не вижу эквивалента в SystemC. Вместо этого я вижу, во многих примерах, использование sc_int .

Итак, я думаю, что SystemC не предоставляет типы для управления отдельными битами или электрическими сигналами, но он обеспечивает более высокую абстракцию, как и во всех обычных приложениях на C / C .

Это так, или я что-то упускаю?

Ответ №1:

У него действительно есть несколько типов: sc_int , sc_bv (bitvector) и т.д.

Комментарии:

1. Они предоставляются, но следует добавить, что обычно вы действительно используете SystemC для моделирования более высокого уровня (протоколы / шины …). Вы можете использовать bitbang, но когда я увидел его, он почти использовался для моделирования на немного более высоком уровне (вплоть до системного уровня).

Ответ №2:

  1. Учтите, что std_logic в стандартной библиотеке vhdl нет эквивалента в SystemC, однако в документации sysc я вижу много примеров использования bool .
  2. Подумайте std_logic_vector , я не вижу эквивалента в sysc. Вместо этого я вижу, во многих примерах, использование sc_int .

Не все так правильно.

В SystemC вы можете использовать sc_logic и sc_lv< T > как std_logic и std_logic_vector соответственно.

Вы можете присваивать SC_LOGIC_0 или SC_LOGIC_1 литералы sc_logic .

В то время как вы можете использовать целочисленный, шестнадцатеричный или даже «бит-специфичный» литерал для присвоения sc_lv< T > значения.

Например:

 class some_device : sc_module
{
    sc_out< sc_lv<32> > address;
    sc_out< sc_logic > write_enable;

    SC_CTOR (some_device)
    {
        write_enable.initialize(SC_LOGIC_0);

        /* The following three lines do the same thing. 
         * Obviously you won't use all three at the same time... */
        address.initialize(0b00001111000011110000111100001111);
        address.initialize(0x0F0F0F0F);
        address.iniziatize(252645135);
    }
}
  

Надеюсь, это поможет.