我正在将一些verilog代码转换为SC。这是一个让我困惑的案例: 在verilog中,连续分配如:
wire a;
assign a =1;
如果在作业完成后立即获得1。如果我们在SC中写它:
sc_signal<bool> a;
a.write(1);
a的当前值不会是1.如何解决这个问题?如下所示?
bool a;
a = 1;
答案 0 :(得分:4)
在Verilog中,如果要更改RHS并在同时同步的两个不同进程中读取LHS,则无法保证读取连续分配的更新值。您需要使用非阻塞分配来避免竞争条件。
在SystemC中,val q: Queue[List[Node]] = Queue[List[Node]]() :+ path
方法类似于非阻塞分配。不同之处在于您需要在SystemC中使用write()
方法。所以。你应该只写信号作为线程/进程的输出。如果需要在进程中读取信号,则需要使用线程的本地变量。