Life is ..2011. 2. 5. 06:19
그동안 사용했던 TextCube + CAFE24 서비스를 조기 마감하고
TISTORY로 이전하였습니다.

별로 페이지뷰도 많이 안나오는데 걸핏하면 트래픽 용량이 Full이 되었다고
서비스가 중단되는 등..  그동안 쉽지않은 환경이었습니다.  
그렇다고 환경에 맞추어서 그림을 조금 올리기에는 너무 아쉽고 해서
이번에 차라리 TISTORY로 옮겨보았습니다.
어떨런지 한번 더 해보고..
안되면 집에있는 서버에다가 가상 서버를 운영할 계획입니다.

TISOTRY주소는

freegear.tistory.com

입니다.

아울러 RSS주소도 변경되었습니다.

http://freegear.tistory.com/rss


도와주신 (티켓을 발행해 주신) 파파존스님께 감사드립니다.
Posted by GUNDAM_IM
Books2011. 2. 4. 10:43
사용자 삽입 이미지
인문학자와 함께 걷는 인상파 그림 산책,
인상파, 파리를 그리다.
이 택광 저

이 책에서 근대 미술을 나누는 경계를 인상파로 보고 인상파 출현 하기 전과 후 그리고 인상파 이후를 이야기한다.
하지만 주 내용은 인상파가 기존에 세상을 지배하던 화풍에서 벗어나서 고전하는 이야기를 그림과 함께 시간의 흐름에 맞추어서 설명한다.

그렇게 설명하기 때문에, 음모 이론 같은 뒷 이야기를 좋아하는 나같은 사람도 처음부터 끝까지 쉽게 읽어갈 수 있다. 고리타분하게 화가의 화풍과 섬세한 붓 터치가 이렇쿵 저렇쿵 하면서 그림에 끝모를 의미를 부여하지 않았기 때문에 문외한이 읽어도 쉽게 읽혀진다.

인상파는 프랑스의 공화정시대와 근대시대를 넘어가는 와중에 나타났다.
그리스 로마 시대의 그림 형식 즉 신화적인 그림 형식과 사실주의 그림 화풍을 이용해서 그당시의 정치 문화를 찬양하는 내용이 화풍의 주류를 이루던 시대에 파리를 사랑하는 사람의 시점에서 인상적인 이미지를 잡아서 빛의 인상을 그림을 그리는 것이 인상파의 화풍인데 이러한 화풍은 그당시 주류에서는 그리다 만 그림처럼 보이게 되었다.  
따라서 끊임없이 주류측에서 던지는 조롱과 비난을 견디면서 자신들의 화풍과 세상을 만들어간 것이 인상파이다.
명성은 악명에서 시작한다는 것을 증명한 것이다.

책에서 인상파는 파리의 새로운 모습과 변화되는 모습을 그려가면서,  그것을 사랑하는 사람들이라고 하였다.
요새 디카로 주변 풍경을 찍어서 블로그에 올리는 사람들이 있듯이, 그당시에는 주변의 좋아하는 풍광을 화폭으로 그리는 사람들이 있었다.  그렇게 파리를 좋아하는 파리지엥들이 그려가는 풍경 그것이 인상파의 주요 테마였었다.

책은 인상파의 시작과 각각의 인상파 화가의 스토리와 그림을 시간순서대로 보여주면서 그 뒷 이야기를 차례로 풀어나간다.  그 그림이 나오게 된 이유와 의미를 스토리와 함께 풀어가기 때문에 쉽게 볼 수 있다. 즉 인상파의 그림을 설명한 책이 아니라 인상파의 화가들의 이야기를 소개하는 책이다.


인상파의 대표주자이지만,  인상파와 함께 한적도 없고, 인상파를 칭찬한적도 없었던 것이 마네였다는 사실이 흥미롭다.  우리가 중고등학교떄 외웠던 인상파 작가 마네,모네,르느와르 로 이름만 외웠던 그런 세계를 이제서야 알아가기 시작한다는 것이 아쉽다.

이 책은 교과서에서만 이름을 외웠던 나같은 사람이 가장 쉽게 인상파에 다가갈 수 있는 책이다.

이 책은 네이버에서 연재했던 글을 모아서 책으로 만든 것이다.
네이버 블로그는 아래 링크를 참조할것.

참고로 아래 그림은 인상파의 그림 중 제일 좋아하는 산보-파라솔을 든 여인이다.
신의 물방울에나왔던 그 그림이다.
사용자 삽입 이미지

                                      
Posted by GUNDAM_IM
Books2011. 2. 2. 11:49
사용자 삽입 이미지

글로벌 소프트웨어를 꿈꾸다. 김익환 저

구정때 읽고 있는 몇권의 책중 한권이다.

이책은 필자가 소프트웨어 분야에서 오랜 경험을 가지고 현재 우리나라의 개발/회사/산업의 아쉬운 점과 개선 방향에 대해서 정리하고 있는 책이다.   대개 이런류의 책은 다른책들을 열심히 카피해서 자신의 경험인양 발표하는게 다반사인데 이 책은 정말로 자신의 경험에서 우러나서 정리한 내용들이 들어 있다.

책은 6개 장으로 나누어져 있고 각 장의 순서에 상관이 없기 때문에
읽고 싶은 장을 읽어도 된다.

개인적으로는 3장 CTO의 역활에 대한 것과 5장 소프트웨어의 개발 철학에 대한 것은
누구나 아는 하지만 실천하지 못하는 그런 류의 내용이므로, 빠르게 읽어도 된다.

나머지 장에서 재미있게 읽은 부분은
  미국 회사는 기본이 70점 한국 회사는 20점 이라고 하는 부분과
  신입사원은 문서에서 50%, 프로세스에서 45% 선배에게서 5%를 배운다는 부분
  그리고 마지막 장의 기업 문화란 것에 대해 정리한 것이 좋고 또 생각해야 할 부분이다.

무엇보다 크게 다가오는 것은
앞선 회사들에서는 제품에 필요한 기술의 제공을 회사에서 70%를 주고 나머지 30%를 개발자들이 제공하는 플랫폼을 만들고 있지만, 우리나라는 역으로 20%정도만 회사에서 제공해주고, 나머지는 개발자들이 채워나가야 하는 시스템을 만들도 있다는 부분이다.  70에서 30을 채워 나가는 것과 20에서 80을 채워나가는 것 중 과연 어떤것이 더 성공 확률이 높겠는가 ?

최근에 미국 회사와 공동 개발로 일할 경우가 생겼었는데, 그 회사는 수천만 게이트의 회로를 모두 PEARL과 Peral에 기반한 Template Language로만 설계했었다.  하나의 Template language code에서 Verilog 코드와 문서까지 모두 일괄적으로 만들고 관리되는 시스템이었다. 뒤의 개발자는 Template Language에서 문서를 생성해서 검토하고 Verilog 코드를 생성해서 시뮬레이션 하는등 일괄 개발 시스템을 갖추어 놓았고 체계적으로 움직이는 것에 상당히 놀랐었다.

그것이 일례이긴 하지만 70%를 회사에서 제공한다는 점에서 동감한다.
역으로 보면 우리 회사가 제공하는 부분은 그에 못미치고 있다는 것도 역시 동감하게 된다. (TT_TT)

물론 우리는 FABLess이니 순수 S/W 개발 방법이 전체적으로 동일한 방식으로 적용되지는 않을 것이다.
하지만 그렇다고 해도 결국 어떤 부분이 맞고 틀리는지에 대해서도 고민이 된다.

책의 말미에서 기업 문화에 대해서 논하고 있는데
조엘의 12가지 테스트 문제에 대해서 논하고 있다. 조엘은 조엘 온 소프트웨어라는 세계에서 가장 유명한 소프트웨어 개발 블로그를 운영하는 사람이다.  이 사람은 소프트회사의 수준을 테스트하기 위한 12가지 문제를 내 놓았는데 그것이 한국에서는 한국 실정에 맞게(?) 임의대로 해석해서 적용하는 것이므로 오히려 위험한 부분이 있다는 의견을 적어 놓았다.

같은 이유로 소프트웨어 개발 방법론과 에자일 개발 방법론 등이 과연 우리회사에서 적용가능한것인지 생각해볼 이슈이다. 소프트웨어 개발이나 하드웨어 개발이나 모두 개발론에서는 같지만, 어느정도의 룰까지가 적용가능한지 현실적으로 우리회사에는 어떤 형태로 도입되어야 하는지 생각을 해보게 해준다.

-> 참고로 Chip 설계 분야와 S/W 설계분야중 중복되는 주제인 테스팅에 대해서는 다음 블로그를 참조
     블로그 주인장이신 분은 Chip 설계 분야에서 이름을 날리시다가 (정말 크게 날리신 분입니다.)
     갑자기 S/W로 전향하여서 나름 일가를 이룬 분입니다. 관점이 이 글과는 반대로 S/W개발 분야의 후진성을
     논의하고 있어서, 자신이 일하고 있는 분야나 상황에 따라 틀리긴 하구나 하는 생각이 듭니다.

Posted by GUNDAM_IM
Books2011. 1. 25. 21:42
사용자 삽입 이미지

이 책의 시작은 경제기사의 맹점이 있으니 그 이면을 잘 살펴보라는 다소간 가벼운 주제에서 시작합니다.
하지만 그 이면의 이야기를 계속 확대해 가면서 결국 대한민국 언론의 (특히 경제 언론의)  폐헤와 문제점을 고발하면서 끝마침을 하고 있습니다.

책은
  경제 기사의 이면을 읽어야 한다는 주제로 시작하고,
  그러한 경제 기사를 만들어야 하는 경제 언론의 구조적인 모순을 설명하고 있습니다.
  이후에  언론이 이런 상황으로 가야 하는 이유가 광고에 있으며,
  마지막으로 재벌 언론과 언론 재벌의 문제점을 가볍게(?) 설명하면서 끝냅니다.

책의 전체적인 내용은 대한민국 신문의 문제점을 언론의 문제점을
책이라는 매체를 빌어서 지적하고 있습니다.

언론에 의해서 혹은 재벌에 의해서 쇄뇌당한 일반 대중은
성장 지상 주의와 감세 정책 그리고 MB 노믹스의 혜택이 자신들에게 온다는 판타지를 가지고 있어서
제대로 이해하지 않은 정책을 찬성하고 있습니다.

엄청난 탈세와 불법으로 검찰로 불려가는 언론 재벌의 사주에게
"회장님 힘내세요" 라고 외치는 기자들에게서 정론을 기대할 수 없다고 보고 있습니다.

결국 언론은 스스로 언론의 역활을 포기하고 기사와 광고를 맞바꾸는 결정을 계속함으로서
결국 대중의 지지를 신뢰를 잃어버렸으며,  잃어버린 신뢰로 인해서 영향력을 감소하고 감소된 영향력만큼
광고 수익이 줄어드는 악순환의 고리에 빠져버렸다고 결론을 내립니다.

벌거벗은 임금처럼 언론은 스스로 부끄러운 모습이 아니라고 자위하고 있지만, 이제 모든 국민들이 다 알고 있고
그로 인해 언론의 신뢰가 없어져서 시장을 잃어버리고있는 것을 다만 언론 자신만 모르고 있다는 (혹은 알고도 모른척 하는 상황)  것으로 결론을 내립니다.  

이런 악순환의 고리는 결국 국민과 언론 그리고 그 언론을 막은 기업이 모두 나누어 가져야 할 짐이 되겠지요

기사 읽기에 대한 새로운 시각을 가지는 책으로 생각하고 골라본 책입니다
최근에 아주 복잡한 책을 읽어서 이번에는 그런 복잡한 책을  피해서 고른 쉬운책이라
생각했습니다만, 이 책은 쉽게 읽혀지는 대신에 현실에 대한 복잡함을 다시 머리속에 넣어야 하는 책입니다.
전체적으로 어찌할 수 없이 곪아 터지기만 기다려야 하는 상황인지도 모르지만, 하여튼 초반에  개개인이 기사에 대한 삐딱한 검증 시스템을 갖추어야 하는 부분에 대해서는 동감을 합니다.

기사의 이면에 흐르는 이야기들을 파악하려면 그만큼 노력해야 하겠습니다.

Posted by GUNDAM_IM
ASIC SoC2011. 1. 22. 16:01
현재 개발중인 SoC용 ProtoType Board FPGA  보드입니다.

Virtex-6중 구할 수 있는것 중 가장 크고 빠른것을 사용했습니다.
그레이드가 낮으면 나중에 P&R이 잘 안되어서 불필요하게 시간을 까먹기 때문에 미리 미리 빠른것으로 주문하였습니다.  그레이드가 높아질 수록 많이 비싸지지만, 인건비 생각하면 이 방식이 더 저렴하고(?) 효율적입니다.

당장의 손익계산서 때문에 선택을 잘못하면 나중에 반드시 누군가가 고생하게 되어 있더군요

작은 불꽃(?) 쇼가 있었지만,  한방에 동작중이니. 다행입니다.

보드가 A4 두장보다 더 커서 iPhone으로 찍으면 잘 안나오네요
나중에 다시 잘 찍어서 정리하고,이번에는 패스...

보드의 Layer나  사이즈에 제한을 받지않고 만들 수 있어서 다행입니다.

그동안 보드 노우하우가 쌓여서 이젠 이정도 보드는 2년차 직원이 해도 금방 하네요.
그만큼 울회사 교육이 빡셀런지도 모르겠습니다만, 하여튼 수고하셨습니다.
( 이 멘트는 검심의 스승 히코 세이쥬로를 연상케하는 멘트입니다. 다 나의 강하고 완벽한 트레이닝이 너를 성장시켰다는 ㅋㅋ)

사용자 삽입 이미지

Posted by GUNDAM_IM
Life is ..2011. 1. 8. 04:33
회사 홈페이지 타이틀 그림은 처음 시작할때
업체에 부탁해서 만들었지만, 정말 아무 생각없이 만들은 그림이다.

그 당시에는 전부 바빠서 정신머리 없이 다닐때여서
홈페이지 그림을  시간을 가지고 생각해볼 겨를도 없었다.

사용자 삽입 이미지
위의 사진은 지금 홈페이지 타이틀 사진이다.  
보드만드는데는 고생했지만, 도대체 어디가 칩만드는 회사라는 것을 느낄 수 있는지 TT__TT


나중에 생각해보니
보드 사진 (그것도 우리가 만든 칩 위에 팬 히터까지 덮어 놓아 칩이 보이지도 않는 보드 사진이다.) 떡~~ 하니 올려 놓고 우리는 칩 만드는 회사에요 하는것이 참 아닌것 같았다.   어쩌면 취업 포털에서 연결된 이 홈페이지 사진을 보고, 지원자들이 보드 만들고 있는 회사로 인식하는것이 아닐까 라는 생각마저 들었다. 그래서 지원율이 전에 회사보다 훨씬 낮은것 같다는 나름대로의 결론을 도출하였다.

어느정도 시간이 지날수록  다시 UPDATE를 해야지 하는 생각이 점점 들기 시작하였다.
이번에 다른 칩을 개발하면서 마침 홈피 사진을 업댓하자는 생각으로 그림 하나를 틈틈히 그려보았다.


사용자 삽입 이미지
아직은 구도랑 빛 처리가 덜 된것이다.
텍스쳐 사진도 많이 업댓해야 하고, 하여튼 많이 손을 봐야 하는 상황이다.
사실 구도는 너무 통속적인 면도 있다. 다른 구도를 잡고 싶지만,
딱히 머리에 떠오르는 것이 없다.
역시 엔지니어라서 그런가 싶기도 하다. 좀더 좋은 구도나 세팅을 생각하고 싶은데..

참고로 배경 사진은 전부 내가 찍은 것이다.
사진에 대한 저작권이 있고 그것을 어긴 홈피를 찾아 다니는 헌터들이 있다고 하니,
내가 찍은 사진들로만 배경 그림을 넣는 중이다.

가끔 보는 다른 회사 홈 페이지의 그림은 그 회사를 나타내는데 정말 좋은 느낌으로 만들은 것들이 많다.

그중에서도 개인적으로는 애플사의 홈페이지와 블랙 매직사의 홈페이지가 가장 좋은것 같다.
애플이야 워낙 큰회사고 그래픽이나 ShowUp에 탁월한 회사여서 당연하다고 생각한다.

블랙 매직사는 영상 처리 장비를 만들어서 파는 회사인데 관련 장비가 현재 우리가 만들고 있는 제품과 유사성이 많아서 참고하고 있는 회사이다. 장비 만드는 회사임에도 불구하고 홈 페이지는 그래픽 디자이너가 제품을 참 잘 이해하고 만들었다.

사용자 삽입 이미지
블랙매직사 홈페이지 그림 중 하나이다. 하늘에서 쏟아지는 장비를 만든것인데,
개인적으로는 경쾌한  느낌을 주고있다.
장비 회사여도 저런 느낌으로 홈페이지를 만들 수 있다면 최소한 장비에대한 거부감은 줄어들 것만 같다.

칩을 저렇게 쏟아지게 만들면 어떨까?  그렇게 밝은 느낌이 나올까 하는 생각이 든다.

S/W 회사로는 culturecode사의 홈피가 깨끗하게 보인다.
things라는 task management s/w로 유명한회사인데,
blog도 함께 운영하면서 이런저런 이야길 해주기 때문에 업댓 될때 마다 방문하는 사이트이다.

사용자 삽입 이미지
참 깔끔한 그림이다.


예전회사에서 사용했던 홈페이지 첫 화면이다.

사용자 삽입 이미지
오디오 처리 엔진 칩을 만드는 느낌이 난다.
물론 제품은 그것 뿐만은 아니지만, 하여튼 그당시에는 그 칩이 주력이되었다.
그래서 오디오 엔진을 처리하는 느낌의 사진을 마케팅 팀에서 골라주었다.
나중에 생각해보니 참 잘 고른 사진이라는 생각이 들었다.


이러니 저러니 해도 사실 홈페이지의 구성과 사진은 홈페이지 정책과 연결된 문제이다.
홈페이지의 첫 페이지에 어떤 정보를 배치할 것인가를 결정해야 나머지 문제가 풀린다.

크게 분류하면 두가지 방식인데
첫번째로는 TI나 내셔널 같은 회사의 홈페이지방식이다.
이런 방식은 그냥 모든 정보를 앞에 걸어놓는 방식이다.  
이 방식은 필요한 정보를 분류하여 놓아서 원하는 정보를 찾기위해서는 별도의 서치 엔진을 사용하거나 매뉴를 일일이 짚어가면서 찾아가는  방식이다
한번 홈페이지에서 원하는 정보를 찾았으면,  두번째 방문시에는 처음부터 다시 찾기에는 시간이 많이 걸리므로, 그냥 링크를 즐겨 찾기에 빨리 걸어두어야 하는 방식이다.

이런류의 스타일은 새로운 제품을 어필해야 하는 우리같은 소규모 회사에는 그렇게 어울리지가 않는다.
뭔가 새제품이 나와 있는데 기존의 많은 제품( 물론 그렇게 걸수 있는 제품도 별로 없지만 ) 속에서 하나를 추가하는 정도에 그친다.

애플같은 스타일은 새로운 제품에 대해서 작정하고 밀어주는 스타일이다.  
물론 기존 제품이 어디에 분류되어 있는지는 일관성을 가지므로 찾아가기 쉽지만,
새 제품이 나오면 정말 홈페이지 처음 화면에 대문짝만하게 걸어두고 자랑하고 있다.

어차피 우리도 새제품이 나오면 열심히 자랑 질을 해야 하니까 애플과 같은 스타일이 좋다.

홈페이지나 블로그에 제품을 올리는것이 어느정도 효과가 있는지는 명확하지 않다.
하지만 예전에 홈페이지에 올려둔 글을 보고 연락오는 경우가 가끔 있기 때문에 도움이 되는것 같다.



사용자 삽입 이미지
요 그림이 홈피 최종 그림이다.

사용자 삽입 이미지

요 그림은 배경이랑 잘 구분이 안되어서 배경을 약간 흐릿하게 만들은 그림이다.
전체적으로 선명하지 못해서 오히려 안좋은것 같다. 그냥 원래그림으로 OK
 

사용자 삽입 이미지
요 그림은 Facebook 같이하는 게임회사 친구가 그래픽을 조금 더 손봐준 그림이다.
칩의 바깥에 두른 후광만 뺴면 전체적으로는 더 좋은 그림이 나올 수 있겠다.

사용자 삽입 이미지
배경이 너무 산만하여서 배경을 확 줄여서 만든 버전입니다.
로고도 칩에 넣고..
이젠 이걸루 해야 하겠습니다. 너무 시간 많이 소모된듯 하네요.. 3일 정도 소요..

Donny님의 의견을 반영하여, 칩에 대한 설명을 간단하게 넣었습니다.

Posted by GUNDAM_IM
ASIC SoC2010. 12. 23. 10:42
Module hierarchy and file organization

Distribution code organization

RTL 코드의 계층 구조는 아래와 같습니다.
사용자 삽입 이미지
기본 계층 구조는 ORPSOC에서 시작합니다. 테스트를 위한 패스는 ORPSOC_FPGA_TOP을 기준으로 시작합니다.
각각의 IP를 연결하는 BUS Connection은 tcop_top이고 나머지는 이름을 기준으로 유추하여 볼 수 있습니다.

testbench의 코드를 보면 탑레벨 module의 이름은  orpsoc 입니다.
그리고 앞서 설명한 l.nop명령어들의 동작을 반영하는 것이 or1200_monitor 모듈입니다.

Verilator model에서는 이러한 기능은 SystemC 모델로 제공됩니다.

이 강의에서 사용되는 모든 파일은 tar  파일로 제공됩니다만,
필요하면 opencore.org 에서 새로 받아서 사용할 수 있습니다. 이 경우에는 필요한 몇개 파일을 수정해야
합니다.

tar 파일은 아래 링크에서 다운 받을 수 있습니다.

http://www.embecosm.com/download/esp5.html

Distribution code organization


tar 파일을 풀면 몇개의 폴더가 보이게 됩니다.
그 구조는 아래와 같습니다.

Top level directory
    - Makefile
        main 프로젝트 파일입니다. verilator를 이용해서 프로젝트를 빌드 할 수 있도록 해 줍니다.
    - Testbench file
        orpsocmain.cpp , orpsocmain.h
        verilator를 위한 테스트 벤치 파일입니다.
        자세한 설명은 다음에 하기로 하고
        여기서는 그냥 이런 파일들이 Top Folder에 있다는 것만 알고 있으면됩니다.

orp_soc
     현재 ORPSoC 버전이 들어가 있습니다.
     이것은 www.opencores.org에서 구할 수 있는것과 같습니다.

local
     orp_soc의 shadow 폴더입니다. local로 수정할 파일을 이곳에 두게 됩니다.
     그리고 PATH변수에 의해서 Search 순서를 지정하여 두었기 때문에 이곳에서 바꾸게 됩니다.

sim
    icarus 시뮬레이터용 스크립트가 들어 있는 폴더입니다.
    *.scr  파일이 이 폴더 입니다.

sysc_modules
    systemc로 작성된 모듈들이 있으며, 이 모듈들은 테스트 벤치를 구성하는 일부 입니다.
    or1200monitorSC와  ResetSC가 들어 있습니다.

verilator-model
    이 폴더에는  verilator에서 사용하는 커맨드 파일과
    verilator model 내부의 시그널을 볼 수 있는 OrpsocAccess  가 있습니다.
    

Original ORPSoC Source code organization


  원래의 orpsoc의 소스 트리 구조는 orp_soc 폴더에서 찾아 볼 수 있습니다.
 
bench
   테스트 벤치 코드입니다.
   서브 디렉토리로 verilog를 가지고 있고 (사실 이것밖에 없습니다.) 이 폴더 내에 ORPSoC를 위한
    Verilog Code를 가지고 있습니다.  
    일단 두개의 헤더 파일을 찾아 볼 수 있습니다.
    bench_defines.v
      `define 들이 들어 있습니다.
    timescale.v
      `timescale에 대한 정의가 있습니다.

doc
   당연히 문서가 모여 있습니다.

rtl
   ORPSoC의 verilog code가 있습니다.

sw
   타겟 소프트웨어 입니다.
   이 코드들은 컴파일 되어서 내부의 Flash memory에 올려져서 운용됩니다.
   utils  폴더에 있는 파일들을 먼저 빌드해야 합니다.
   이 후에 support 파일을 빌드합니다.
   나머진 필요할 때 순서에 상관 없이 빌드하면 됩니다.


Modifications to the ORPSoC source code


local 폴더에는 앞서 설명하대로
원래의 코드를 수정하지 않고 이쪽에서 수정할 수 있도록 해주는 파일을 모아두었습니다.
그리고 PATH 순서를 바꾸어서 이쪽 파일들이 먼저  선택되도록 하였습니다.

(1) bench/verilog/bench_defines.v.
        half clock을 50nS로 정의해서 전체 동작을 10MHz로 되도록 만들어 두었습니다.

원래는 아래와 같이 되어 있지만 local  폴더에서 수정되어 있습니다.
........
//
// OR1200 clock mode
//
`ifdef OR1200_CLMODE_1TO2
`define CLK2_HALFPERIOD 25
`else
`ifdef OR1200_CLMODE_1TO4
Unsuppported
`else                  
`define CLK2_HALFPERIOD 50
`endif
`endif
..........

local 폴더의 bench_defines.v 파일은 아래와 같습니다.

.....
//
// Clock half period for simulation (10MHz)
//
`define BENCH_CLK_HALFPERIOD 50
....



(2) bench/verilog/or1200_monitor.v
   여러차례 설명한 l.nop xxxx 명령어로 내부 정보를 얻어내는 기능을 넣어둔 파일입니다.
   내부에 코드를 보면 쉽게 알 수 있습니다.

(3) bench/verilog/orpsoc_bench.v
    원래의 코드는 bench/verilog/xess_top.v 입니다.
   이 파일은 xilinx용 top 파일입니다.
   이 코드를 wrapping 하여서 ORPSOC용으로 테스트 벤치를 구성한 것이 이 파일 입니다.

(4) rtl/verilog/orpsoc_fpga_top.v
    Top 레벨의 FPGA 모델입니다.
    ORPSoC의 FPGA Top 파일이됩니다.

(5) rtl/verilog/orpsoc_fpga_defines.v
     rtl/verilog/xsv_fpga_defines.v를 다시 정의한 것입니다.
      주요한 내용은 주로
      `define TARGET_VIRTEX
    을 제거하여서 자이링스용 라이브러리를 사용하지 않도록 막아둔 것입니다.

(6) rtl/verilog/or1200_defines.v
    현재 사용하는 형태로 적합하도록 프로세서의 내용을 다시 설정하였습니다.
    주로 캐쉬나 MMU의 사용 여부를 설정하는데 사용합니다.
    그리고 나눗셈기등의 사용 여부를 결정합니다.

(7) rtl/verilog/ssvga/ssvga_fifo.v
         rtl/verilog/ssvga/ssvga_top.v
         rtl/verilog/ssvga/ssvga_dpram_4x8x16.v
         rtl/verilog/ssvga/ssvga_dpram_4x16x16.v
 
     ORPSoC 내에서 사용되는 메모리 블럭등에 대한 정의를 합니다.

Posted by GUNDAM_IM
ASIC SoC2010. 12. 2. 15:37

The Example Design



 

Memory Map

 
사용자 삽입 이미지

 메모리 맵은 위와 같습니니다.
 Instruction Memory (ROM)은 0x0400_0000에 위치합니다.
 부팅시에 부팅 코드를 SRAM으로 카피하고 움직이게 됩니다.

 Interrupt Assignments

 
 OpenRISC 1000은 프로그래머블한 인터럽트 코아를 가지고 있고, 외부에서 20개의 인터럽트를 연결할 수 있습니다. 그중에서 사용하는 인터럽트는 아래와 같이 배치되어 있습니다.

사용자 삽입 이미지

Test Bench Modeling of Peripherals


Peripherals들은 모델링이 되어 있지 않습니다
외부 포트들은 모두 적당한 값으로 매핑되어 둡니다.

ORPSoC의 트래킹은 OpenRISC 100의 l.nop 명령어를 활용하여서 내부 정보를 얻어냅니다.
l.nop 명령은 immediate 값을 가질 수 있는데 이 값에 적당한 값을 할당 함으로서 원하는 동작을 수행합니다.

여기서 사용하는 방식은 아래 테이블에 정리되어 있다.

사용자 삽입 이미지
 다른 l.nop의 인자는 모두 무시합니다.
 testbench 구현은 이 새로운 l.nop 명령을 활용하여 구현하게 됩니다.
 

Test Software Application


Test Application은 Dhrystone 2.1 벤치마크 프로그램을 활용합니다.
앞서 설명한 n.lop 명령을 활용하여 라이브러리 중 일부룰 수정하여서 필요한 정보를 프린트하거나 얻게 됩니다.

OpenRISC 1000의 l.nop 명령어 사용하기

앞서 설명했듯이 l.nop명령은 16비트의 immediate 값을 가지고 움직입니다.
이 값은 CPU에서는 무시되지만, 테스트 벤치에 의해서 모니터링 되고 사용됩니다.
이 ORPSoC에서는 이것을 이용해서 I/O를 제공하고, C Code가 운용될 때 내부 정보를 얻을 수 있는 컨트롤 함수의 기능을 구현하는 활용합니다.

l.nop 1  : 32'h1500_0001
    GPR3에 있는 값을 리턴코드로 하여 프로그램을 끝냅니다.
    C Lib 함수는 다음과 같이 구현됩니다.

void exit (int i)
{
  asm("l.add r3,r0,%0": : "r" (i));
  asm("l.nop %0": :"K" (NOP_EXIT));
  while (1);
}



l.nop 2  : 32'h1500_0002
    GPR 3의 값을  Hex로 덤프하여 줍니다.

l.nop 3  : 32'h1500_0003
    printf을 지원해 주지만 아직까지는 제대로 구현이 안되어 있다.

l.nop 4  : 32'h1500_0004
    LSB를 Character로 프린트 해줍니다.
    PUTC를 구현하는 것은 아래와 같습니다.

void putc(int value)
{
  asm("l.addi\tr3,%0,0": :"r" (value));
  asm("l.nop %0": :"K" (NOP_PUTC));
}
	  
   이것을 이용해서 나중에 printf등을 구현할 수 있을 겁니다.




Posted by GUNDAM_IM
ASIC SoC2010. 12. 2. 15:37

High Performance SoC Modeling with Verilator


이번에 정리하는 것은 Verilator를 이용해서 OpenRISC 프로세서를 시뮬레이션하는 것입니다. 기본적인 플로우는 ICARUS라는 GNU Verilog 시뮬레이터 환경을 바꾸어서 진행하는 것입니다.

관련한 원본 자료는 아래 페이지에 있습니다.

http://www.embecosm.com/download/ean6.html

진행하는 플랫폼은 MAC이지만, Verildator는 Platform Independent하므로 대부분의 플랫폼에서 작동할 것으로 생각됩니다.

플랫폼별 차이점이 있다면, 나중에 기회가 되면 정리하겠습니다.
- 즉 귀찮아서 하지 않을 수도 있다는 의미입니다.

전제 사항들...


(1) Verilator를 설치하고 테스트 하는 방법은 앞서 정리한 블로그 자료를 참조하시기 바랍니다.
     역시 플랫폼 독립적이므로, 다른 플랫폼에서도 거의 비슷하게 동작할 것입니다.
    
(2) Linux 혹은 MAC의 터미널 환경에 대해서 잘 알고 있다는 가정하에서 설명이 진행됩니다.


다른 책에도 맨날 나오는 내용이지만,  S/W와 하드웨어의 파티셔닝과 그에 다른 시스템의 성능 평가가 중요한 부분인지에 대한 설명입니다.


시스템의 성능에 대해서 정밀한 분석은 하드웨어와 그 하드웨어에 의해서 움직일 임베디드 소프트웨어에 기반합니다.

로레벨의 BSP나 디바이스 드라이버 같은  Embedded Firmware의 구현은 SoC Peripheral의 정확한 동작에 기반하여 구현됩니다.

소프트웨어의 최적화. 이것은 Codec  개발에서 특히 중요한 부분입니다.  특히 이 것은 프로세서와 메모리 캐쉬 MMU등의 상호간 동작에  아주 깊은 영향을 받습니다. 따라서 ISS와 TLM은  잘못된 결과를 도출하는 것을 방지하여 줍니다.


Modeling Language


   Verilator는 Verilog를 C/C++로 변환하여서 컴파일하게 됩니다.
  당연히 C++ 컴파일러의 최적화 효율에 영향을 받게 됩니다.
  그리고 64비트 시스템 환경에서 더 빨리 운용이 됩니다.

OpenRISC는

  www.opencores.org에서 여러명이 설계한 프로세서 입니다.
  명령어 체계상에서는 32비트 외에도 64비트나 DSP등도 있습니다.
  최근에는 좀더 performance를 올린 프로세서를 만드는 프로젝트도 시작하고 있습니다.
  국내외에서 알게 모르게 여러 IP내부 프로세서나 SoC 프로세서로 사용하고 있습니다.

  OpenRSIC 1000은 Verilog로 만들어진 프로세서를 의미하고
  OpenRISC 1200은 OpenRISC Core + SoC Platform을 의미합니다. 완전한 SoC 플랫폼이며, 줄여서 ORPSoC라고 합니다.  

   OpenRISC 1000은 Processor외에도 CACHE나 MMU등을 가지고 있습니다.
  관심을 가질만한 부분은 l.nop라고 하는 nop 명령어입니다. 이 명령어는 하위에 immediate field를 가지고 있는데 이 field를 이용해서 몇가지 옵션을 주고 운용하는 기능을 부여할 수 있습니다. 일종의 MIPS의 Instruction Extension 기능인 UDP 기능을 생각하시면 됩니다.
  여기서는 Simulation시에 몇가지 특수 용도로 사용하지만,  실제 하드웨어에는 영향을 주지 않습니다.
 

The OpenRISC Reference Platform System-on-Chip (ORPSoC)



사용자 삽입 이미지

OPRSo의 전체 구조는 위와 같습니다.
전체 크기는 15만 게이트에 메모리 별도입니다.
이 회로는 Xilinx나 Altera의 FPGA 보드에서 잘 동작합니다.

OPRSoC에는 Flash Memory가 2MB 붙어 있고, 2MB의 SRAM이 연결되어 있습니다.
그외의 메모리는 FlipFlop 스타일 (SRAM스타일) 의 I/F를 가지고 있습니다.

   

 




Posted by GUNDAM_IM
ASIC SoC2010. 11. 13. 11:22
이번에는 verilator로 실행하여서 vcd파일을 덤프하는 것을 만들어 보겠습니다.

일단 verilator로 c++ 소스 코드를 빌드할 때 이전과 차이점은  --trace 옵션이 붙습니다.

verilator --cc  --trace --exe dff_sync_reset_main.cpp  dff_sync_reset.v

위와 같이 실행하여서 Makefile과 c++ 코드를 만들어 냅니다.

testbench격인  dff_sync_reset_main.cpp 역시 수정해야 합니다.

#include <stdlib.h>
#include<iostream>

#include <verilated.h>          // Defines common routines
#include "verilated_vcd_c.h"
#include "Vdff_sync_reset.h"               // From Verilating "top.v"

......

int main(int argc, char** argv) {
            Verilated::commandArgs(argc, argv);   // Remember args

            Verilated::traceEverOn(true);
            VerilatedVcdC* tfp = new VerilatedVcdC;


            dff_sync_reset = new Vdff_sync_reset;             // Create instance

            dff_sync_reset->trace (tfp, 99);
            tfp->open ("./simx.vcd");

            dff_sync_reset->reset = 0;           // Set some inputs

            cout << "Start Simulation" << endl;

            while (!Verilated::gotFinish()) {
                if (main_time > 10) {
                    dff_sync_reset->reset = 1;   // Deassert reset
           .........
                main_time++;            // Time passes...

                tfp->dump (main_time);

            }
            dff_sync_reset->final();               // Done simulating
            //    // (Though this example doesn't get here)
            tfp->close();
            cout << "End Simulation" << endl;
}

추가되는 코드는 위와 같습니다.

먼저 헤더 파일로
#include "verilated_vcd_c.h"
을 읽어들이도록 합니다. 이것은 vcd 덤프를 위한 정보가 들어있습니다.

그리고 trace를 on하고
dump파일을 생성합니다.

            Verilated::traceEverOn(true);
            VerilatedVcdC* tfp = new VerilatedVcdC;
...
            dff_sync_reset->trace (tfp, 99);
            tfp->open ("./simx.vcd");

위에서 traceEverOn은 Trace를 항상 한다는 의미이고
dff_sync_reset->trace(tfp,99)는  최상위 모듈에서 밑으로 99개 depth까지 추적한다는 의미입니다.
거의 무한대겠군요

이후에

tfp->open(...)

을 호출하여 파일을 생성합니다.

            while (!Verilated::gotFinish()) {
                if (main_time > 10) {
                    dff_sync_reset->reset = 1;   // Deassert reset
           .........
                main_time++;            // Time passes...

                tfp->dump (main_time);

            }

무한 루프를 돌면서 한 턴이 끝나면 모두 save할 수 있도록 dump함수를 호출합니다.

이후에 시뮬레이션이 끝나면
            tfp->close();
으로 화일을 닫습니다.

이렇게 해서
simx.vcd
라는 파일을 얻어냅니다.
이것을 vcd 파일 볼 수 있는 프로그램인 gtkwave라던가 scansion에서 불러들이면 됩니다.

개인적으로는 맥스러운 GUI라면 Scansion인데 이 scansion에서 약간의 버그가 있습니다.
vcd파일에서 각 행의 시작열에 공백이 있으면 버그로 인식하게 됩니다.
이 프로그램은 잘 안팔려서 그런지 업데이트가 아주 느립니다.

요부분은 수작업으로 바꾸거나
스크립트로 바꾸면 됩니다.


=== Before ===
$version Generated by VerilatedVcd $end
$date Sat Nov 13 11:15:57 2010
 $end
$timescale 1ns $end

 $scope module TOP $end
  $var wire  1 $ clk $end
  $var wire  1 # data $end
  $var wire  1 & q $end
  $var wire  1 % reset $end
  $scope module v $end
   $var wire  1 $ clk $end
   $var wire  1 # data $end
   $var wire  1 & q $end
   $var wire  1 % reset $end
  $upscope $end
 $upscope $end
$enddefinitions $end


=== After ===
$version
   Generated by VerilatedVcd
$end
$date
    Sat Nov 13 10:51:15 2010
$end
$timescale
    1ns
$end

$scope module TOP $end
$var wire  1 $ clk $end
$var wire  1 # data $end
$var wire  1 & q $end
$var wire  1 % reset $end
$scope module v $end
$var wire  1 $ clk $end
$var wire  1 # data $end
$var wire  1 & q $end
$var wire  1 % reset $end
$upscope $end
$upscope $end
$enddefinitions $end
...

위와 같이 첫번째 열들부터 나타나는 공백을 모두 지우고 불러들이면 됩니다.

사용자 삽입 이미지

그리고 일일이 스크립트를 돌리기  귀찮으면verilator 소스 코드를 직접 수정하면 됩니다.
ident에 관한 일이므로 verilator 스타일로 보건데 한군데서 다 처리할 것 같아 뒤져보았습니다.

일단,
verilator source code가 있는 폴더에서 다음 파일을 찾아서 정리합니다.
.
...../verilator-3.804/include/verilated_vcd_c.cpp

이 파일에서 void VerilatedVcd::dumpHeader ()  함수가 헤더를 덤프해주는 함수입니다.
이 함수 내에 있는 printIdent(xxx) 함수 호출에서 xxx 부분을 몽땅 0으로 바꾸어 주면 됩니다.

=== before ===
354 행 :  printIndent(1);
=== after  ===
              printIndent(0);


382행
=== before ===
 printIndent(-1);
=== after ==
 printIndent(0);

392행
=== before ===
 printIndent(1);
=== after ==
 printIndent(0);


407행
=== before ==
printIndent(-1);
=== after ===
printIndent(0);

411행
=== before ====
printIndent(-1);
=== after ===
printIndent(0);

으로 변경합니다.
결론적으로 해당 함수의 printIdent는 모두 0으로 만들어버리면 ident가 VCD 파일에 들어가지 않습니다.
이제 새롭게 컴파일해서 설치하면 앞서의 scansion에서 파일 오픈할 때 일일이 헤더 부분을 수정할 수고를 덜어줍니다. 어차피 VCD파일 내부를 누가 보겠습니까 ?  IDENT가 없다고 상관없겠죠

이제 일일이 스크립트 돌릴 필요 없이 그냥 출력 파일을  scansion 에서 읽어들일 수 있습니다.







Posted by GUNDAM_IM