미리 죄송합니다.이 질문은 코드별로 명확하지 않으므로 기술적으로 옳고 그른 솔루션보다 관습 적으로 많은 노력을 기울여야합니다. 아마도 그것은 한 가지 이상의 방법으로 행해질 수 있습니다."run()"유형 함수 및 SystemC가 포함 된 SystemVerilog fork/join
메모리 컨트롤러의 SystemVerilog 모델을 SystemC로 이식하려고하는데 run()
-type 함수 (즉, 연속 처리를 수행하는 영원한 루프)를 변환하는 가장 좋은 방법은 fork로 생성되고 SystemC에 가입하는 것이 가장 좋습니다. 이러한 run() 함수는 일반적으로 시뮬레이션 시작시 생성됩니다. 혼란은 SystemC가 산술 스레드, 포크 및 조인을 지원한다는 것입니다. 그러나 언어의 의도는 이런 종류의 기능을 제공하기 위해 SC_THREAD
에 대한 것입니다. 누구나 코멘트 할 수있는 두 언어에 대한 충분한 경험이 있습니까?
감사합니다.
SystemC는 협동 적으로 멀티 태스킹을하기 때문에 결정적입니다. 반면 일반 POSIX 스레드는 선점 형 멀티 태스킹이므로 여러 가지 다른 복잡성과 함께 비 결정적입니다. POSIX 스레드에서 kludging하지 않는 것이 좋습니다. 이렇게하면 덤프를 생성하기 위해 시뮬레이션을 재현 할 수 없기 때문입니다. 이것이 명백한 경우에 저를 용서하십시오. 어쨌든, 나는 당신이'SC_THREAD'를 사용하기를 원한다고 생각합니다. –
감사합니다 로스, 그것은 나에게 분명하지 않습니다. 지금 SystemVerilog의 멀티 태스킹이 결정적인지 관심이 있습니까? 즉 연속적인 시뮬레이션은 동일한 보증 된 결과를 가질 것인가? – Rich
모든 상용 Verilog/VHDL 시뮬레이터는 명령 줄의 선택적 매개 변수 인 동일한 난수 생성기 (RNG) 시드 number_를 사용하여 재실행 관점에서 결정적입니다. 시뮬레이터는 오류를 재현하고 신호 덤프 (VCD/FSDB/VCD/etc c)를 생성하기 위해 결정적이어야합니다. 이것은 어쨌든 HDL 시뮬레이션을 실행하는 전체 지점입니다. 이 패러다임은 [선점 형 멀티 태스킹 (preemptive multi-tasking)] (http : //bit.ly/7epxWx) [RTOS] (http://bit.ly/VUHRyb)보다는 [협력 적으로 멀티 태스킹 /bit.ly/UdA2q5) 이것은 리눅스의 POSIX 쓰레드의 패러다임이다. –