#c #c #vhdl #systemc
#c #c #vhdl #systemc
Вопрос:
Я новичок в программировании на SystemC, и есть одна вещь, которую я заметил (просматривая официальную документацию SystemC): все типы, с которыми я имел дело при моделировании VHDL, не были «перенесены» на SystemC.
Я имею в виду:
- Учтите,
std_logic
что в стандартной библиотеке VHDL нет эквивалента в SystemC, однако в документации SystemC я вижу много примеров использованияbool
. - Подумайте
std_logic_vector
, я не вижу эквивалента в SystemC. Вместо этого я вижу, во многих примерах, использованиеsc_int
.
Итак, я думаю, что SystemC не предоставляет типы для управления отдельными битами или электрическими сигналами, но он обеспечивает более высокую абстракцию, как и во всех обычных приложениях на C / C .
Это так, или я что-то упускаю?
Ответ №1:
У него действительно есть несколько типов: sc_int
, sc_bv
(bitvector) и т.д.
Комментарии:
1. Они предоставляются, но следует добавить, что обычно вы действительно используете SystemC для моделирования более высокого уровня (протоколы / шины …). Вы можете использовать bitbang, но когда я увидел его, он почти использовался для моделирования на немного более высоком уровне (вплоть до системного уровня).
Ответ №2:
- Учтите, что
std_logic
в стандартной библиотеке vhdl нет эквивалента в SystemC, однако в документации sysc я вижу много примеров использованияbool
.- Подумайте
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);
}
}
Надеюсь, это поможет.