본문 바로가기

language/systemC11

[systemC] TLM 2.0 기초 TLM이란 Transaction Level Modeling으로 Wiki내용을 살짝 첨부하자면 '모듈 간의 통신 세부 사항이 기능 단위 또는 통신 아키텍처의 구현 세부 사항과 분리되는 디지털 시스템 모델링에 대한 높은 수준의 접근 방식' 이라고 합니다. 위의 말을 간단하게 말하면 추상화레벨로 기능, 구조를 설계하는 방식이며, 각 peri간의 통신 구현(protocol)은 transaction이라는 packet 통신을 통해서 동작합니다. 기존에 포스팅했던 사이트를 들어가면 예제 code가 있는데, 가장 기초가 되는 example은 하나의 master block(Initiator)에서 slave block(Mem)으로 통신하는 방식을 묘사했습니다. 아래 그림을 보면서 설명하도록 하겠습니다.(혼자 공부중이라 틀.. 2021. 6. 14.
[systemC] TLM 2.0 RTL과는 다르게 굳이 bus protocol을 전부 구현할 필요없이 peri간 data들을 구현하기 쉽도록 systemC에서는 lib를 제공하는데 그중 하나가 tlm 입니다. 해당 concept을 아래 사이트에 예제 code와 같이 설명이 되어있으니 공부에 도움이 될 듯 합니다. 집에서 코드 구현 다해보면 예제와 같이 올리겠습니다. https://www.doulos.com/knowhow/systemc/tlm-20/tutorial-1-sockets-generic-payload-blocking-transport/ Doulos A Series of Tutorials based on a set of Simple, Complete Examples John Aynsley, Doulos, June 2008 Intr.. 2021. 6. 5.
[systemC] sc_vector 사용해보기 sc_vector는 signal array 같다고 생각하면 될 것 같은데요 기존에 사용했던 예제에서 아래와 같이 들어오는 신호를 2bit 씩 split 하면서 index하기 편한 array에 할당한다고 치면 이렇게 설계를 하면 됩니다. 여기서 이를 trace하기 위해서는 아래와 같이 g++을 사용할 경우 아래와 같이 trace 해줘야 하네요 (제가 다른 방법을 못 찾을수도...) 이렇게 하게되면 아래와 같이 들어온 신호를 분리시키는 simulation 결과를 얻을 수 있습니다. 2021. 5. 29.
[systemC] template class 사용 module 선언을 하다보면 동일한 기능인데 bit precision만 다른 경우가 있습니다. verilog에서도 module 선언시에 parameter를 활용해서 이를 이용하는데요, SystemC에서도 이렇게 설계가 가능한가 싶어 찾아보니 Template class를 사용하면 되는 것이었습니다. 평소에 C++을 사용하지 않다보니 문법을 찾아서 아래와 같이 설계를 변경해주었습니다. 사용은 기존에 memory를 8bit으로만 고정시켰었는데 이를 16bit으로도 사용하고 싶은 상태라 하면 아래와 같이 됩니다. 선언은 이렇게 해주고 사용하는 곳에서 이렇게 해주면 됩니다. sc_signal 같은 경우는 바로 assign 하고 싶은데 무조건 신호들은 함수안에서 처리해야 하는 것 같습니다. 아직 systemC의 E.. 2021. 5. 27.
[systemC] image filter를 위한 memory write/read 기존 포스팅을 이용해서 image를 load하여 print를 해보았습니다. https://leehc257.tistory.com/80 [systemC] image 입력받기 기존 verilog와 마찬가지로 image를 hex raw data로 변환시켜 입력을 받는 함수를 만들었습니다. 학부 때 이후로 C++을 건드리지 않았더니 문자열, 포인터에서 엄청 고생했습니다..... 우선 기존에 쓰던 l leehc257.tistory.com 이제 de신호에 맞도록 신호를 흘려보면 아래와 같이 coding을 할 수가 있습니다. 이렇게 설계한 code를 simulation을 해보면 아래와 같이 파형이 나오게 되는데 값을 비교해보도록 하겠습니다. 상위 8bit부터 차례대로 R, G, B 순서대로 선언했는데 위의 값과 동일하.. 2021. 5. 23.
[systemC] SC_CTHREAD 사용 기존 포스팅에는 SC_THREAD와 SC_METHOD만 사용했지만, 이번엔 SC_CTHREAD를 사용해보겠습니다. SC_CTHREAD는 SC_THREAD에 clock sensitive list가 추가 되었다고 생각하면 될것 같습니다. 위의 코드를 보면 body 부분의 while과 wait구문만 삭제를 해주면 SC_METHOD로 사용이 가능합니다. 여기서 저 while과 wait를 사용하지 않으면 Thread가 시작되는 시점인, 프로그램이 처음 시작함과 동시에 해당 함수가 실행이 되며, 단위 시간동안 처리하고 대기하는 것이 아닌(wait가 없으면) 모든 구문을 실행하게 됩니다.(이 말은 천천히 생각하면 이해가 되실 겁니다.) 2021. 5. 21.