В иерархии модулей при подключении порта inout к sc_signal отображается ошибка. Так есть ли какой-либо другой тип сигнала, который мне нужен для подключения к inout (двунаправленный порт)?
Ошибка: (E115) sc_signal не может иметь более одного драйвера:
сигнал Dha.signal_0' (sc_signal)
first driver
Dha.Memory.port_4' (sc_inout)
второй драйвер `Dha.Alloc.port_3' (sc_inout)
Это код, над которым я работаю. Не могли бы вы указать мне, какую ошибку я делаю. edaplayground.com/x/3aQC
Вам нужен файл sc_signal_rv. Проверьте пример здесь http://www.asic-world.com/systemc/ports_signals4.html#Example_:_Resolved_Vector_Signals
Я пытался, но это не работает. Он показывает ошибку. Есть ли какой-нибудь известный вам пример, когда двунаправленный порт используется с сигналом.
Вам нужно создать экземпляр sc_signal
с политикой записи SC_MANY_WRITERS
, чтобы управлять сигналом с нескольких портов/процессов.
#include <systemc.h>
SC_MODULE(Foo) {
sc_inout<bool> port;
SC_CTOR(Foo)
: port("port")
{}
// ...
};
SC_MODULE(Bar) {
sc_inout<bool> port;
SC_CTOR(Bar)
: port("port")
{}
// ...
};
int sc_main(int, char*[])
{
sc_signal<bool, SC_MANY_WRITERS> signal; // <-- policy here
Foo foo("foo");
Bar bar("bar");
foo.port(signal);
bar.port(signal);
sc_start();
return 0;
}
Я попробовал ваше предложение, но оно дает другую ошибку. Ошибка: (E115) sc_signal<T> не может иметь более одного драйвера: сигнал Mila.signal_0' (sc_signal) first driver
Mila.Alloc.function' (sc_method_process) второй драйвер 'Mila.Memory.read_mem' (sc_method_process) первый конфликт записи в дельта-цикле 6 В файле: . ./../../../src/sysc/communication/sc_signal.cpp:73 В процессе: Mila.Memory.read_mem @ 3 нс
Вы не можете записывать сигнал в дельта-цикле такой же. Какое значение следует принять в таком случае? Синхронизируйте свои модули, чтобы управлять сигналом только от одного процесса в каждый момент времени.
Не могли бы вы уточнить, что такое дельта-цикл?
Это основная концепция SystemC. Вы можете проверить stackoverflow.com/questions/18850253
Не могли бы вы предоставить больше кода/деталей, как вы хотите использовать сигнал между двумя модулями/процессами? Как/когда процессы пишут сигнал?