유지보수가 어렵게 코딩하는 방법

배움생활/SoC | 2011/12/16 10:10
Posted by blueecho

위의 제목의 책이 있네요.
무료책이니 부담없이 보세요. --;;

Link : http://www.hanb.co.kr/events/eventview.html?event_id=freebook

ps. 개발자로 평생 벌어먹고 사는 방법이라네요.. ㅋㅋㅋ

'배움생활 > SoC' 카테고리의 다른 글

유지보수가 어렵게 코딩하는 방법  (0) 2011/12/16
C언어 매크로에서의 팁  (0) 2010/08/09
링커 스크립트  (0) 2010/07/26
verilog 2001에서 배럴쉬프터 짜기....  (0) 2010/07/09
infer_mux 지정자  (0) 2010/07/06
H.264의 대항마가 나오네요....  (0) 2010/05/24

C언어 매크로에서의 팁

배움생활/SoC | 2010/08/09 18:22
Posted by blueecho
개인적으로는 매크로보다는 인라인을 더 좋아하고 있는 저로서는 매크로를 쓰는 경우가 거의 없습니다만.... 다른분들의 프로그램을 보다보면 매크로가 많이 나오더군요.
인라인의 경우는 코드가 커지는 단점때문에 일반적으로 임베디드 프로그래밍에서는 사용을 잘 안한다고 배웠지만 요즘의 임베디드 프로세서의 메모리 크기는 광활하죠.. -_-;;
오늘 보는 책에 나오는 글중에 매크로를 쓰는중에 팁이 될만한 것들이 있기에 옮겨놔 봅니다. (일반적인 매크로 이야기는 생략하겠습니다.)

1. \를 사용할 경우 다수의 라인을 연결할 수 있습니다. (리눅스에서와 같네요. 전 이부분은 리눅스에서 먼저배워서.. ^^;)

2. ##을 사용할 경우 매크로의 parameter name을 그대로 사용할 수 있습니다.
ex)#define MAC_blueecho(in, out) \
     f_blueecho(pam1_##in##); \
     f_blueecho(pam1_##out##); \
의 경우
     MAC_blueecho(go, back);
이 다음과 같이 치환됩니다.
     f_blueecho(pam1_go); \
     f_blueecho(pam1_back); \

3. 위의 예제와 같이 여러 라인을 가지는 경우 {. }로 묶어주는게 좋습니다만 이부분에도 마지막 }후에 ;이 붙게 되므로 do~while(0)로 묶어 주는게 좋습니다. do~while(0)는 아시다시피 한번만 실행됩니다. ^^
ex)#define MAC_blueecho(in, out) \
     do{ \
     f_blueecho(pam1_##in##); \
     f_blueecho(pam1_##out##); \
     }while(0)

다 아시는 것이겠지만 전 몰라서.. ^^;;
알아두면 편하겠죠.
하지만 여전히 저는 인라인 선호자죠.. ^^

'배움생활 > SoC' 카테고리의 다른 글

유지보수가 어렵게 코딩하는 방법  (0) 2011/12/16
C언어 매크로에서의 팁  (0) 2010/08/09
링커 스크립트  (0) 2010/07/26
verilog 2001에서 배럴쉬프터 짜기....  (0) 2010/07/09
infer_mux 지정자  (0) 2010/07/06
H.264의 대항마가 나오네요....  (0) 2010/05/24

링커 스크립트

배움생활/SoC | 2010/07/26 16:53
Posted by blueecho
링커스크립트 관련 박상호님께서  MPSoC스터디 모임 게시판에 올려주신 내용입니다.


토요일 스터디 모임에서 잠시나마 소개(?)를 했었던 링커 스크립트에 대해서 간략히 요약을 해 드리겠습니다.

링커 스크립트는 한마디로 말하면 object파일들의 각 영역에 대한 재정렬을 하는 스크립트라고 보시면 편하실 것입니다.


 더 자세히 공부해 보고 싶으시는 분들은 다음의 링크를 참조하시기 바랍니다. 한글 번역이 되어 있습니다. 잠시(?) 읽어보셈.. ^^;

http://korea.gnu.org/manual/release/ld/ld-mahajjh/ld_toc.html


  컴파일러가 컴파일을 하게되면 그 결과 파일이 object파일이 생긴다는 것은 잘 알고 계실것입니다.

이 각 object 파일들은 내부적인 어떤 포맷(보통 리눅스는 elf32,  윈도우는 coff 포맷을 가지고 있죠..)에 따라서

여러개의 섹션이란 녀석들을 가지고 있습니다. 대표적인 섹션이라면 코드 섹션(.text) 와 데이터 섹션(.data) 이 있습니다.


각 섹션들은 새롭게 빌드 과정에서 만들어 질수도 있고, 포맷별로 다른 이름을 가지고 있는 경우도 있죠. 컴파일러가

object파일을 만들면서 잘 분류를 해놓아서, 각 섹션에 차곡차곡 그 정보가 쌓여있게 되지요.


이후에 링커가 이들을 가지고 실행파일을 만드는 것을 이미 알고들 있으실터...


  일반적으로 링커는 내부정의된 링커 스크립트를 가지고 있고(default linker script), 이번에 봤던 임의의 스크립트를 연결해서 쓰는

경우도 있죠. 이 스크립트에 의해서 각 섹션을 다시 재 정렬 하는 녀석이 링커가 하는 역할이다라고 보시면 됩니다. 스크립트에 의해 마음대로 위치를 떡 주무르듯 할수가 있는 것이지요.


예를 들어보면, a.o에 (.text, .data)가 있고, b.o에 (.text, .data, .idata)가 있다고 하죠.

스크립트를 다음처럼 구성하면...
section {
 .text : { a.o(.text) } // a.o에서 .text 영역만을 .text 영역으로 구성하라!!
 .data : { *(.data) } // 모든 입력 파일에서의 .data 영역들을 가지고 .data 영역으로 구성하라!!
}

a.o에서 .text영역을 앞에두고, 모든 .data영역을 가지고 있는 입력 파일에서
차례대로 .data 영역을 읽어와 재구성을 하게 됩니다. 그 구성의 내용은

//////////////////////////////
//         a.o(.text)        //
//////////////////////////////
//         a.o(.data)        //
//         b.o(.data)        //
//////////////////////////////

가 되겠습니다. 여기서는 b.o의 .text 영역과 .idata여역은 스크립트에는 정의되지 않았기 때문에
최종 출력파일에는 b.o의 코드 영역은 들어갈수가 없습니다. 예로든 스크립트에
의해서 재정렬을 해보았지만, 결과 파일은 별 의미가 없는것 같군요.. ㅡㅡ;


한페이지 정도로 어떤 역할을 하는지 이해가 가셨으면 이번 글은 성공입니다.. ㅋㅋ

링커 스크립트에는 알수없는 외계(?)문자들이 많이 있으니 각 옵션을 알고 싶으신분은 위쪽 링크를 따라가셈...

'배움생활 > SoC' 카테고리의 다른 글

유지보수가 어렵게 코딩하는 방법  (0) 2011/12/16
C언어 매크로에서의 팁  (0) 2010/08/09
링커 스크립트  (0) 2010/07/26
verilog 2001에서 배럴쉬프터 짜기....  (0) 2010/07/09
infer_mux 지정자  (0) 2010/07/06
H.264의 대항마가 나오네요....  (0) 2010/05/24

verilog 2001에서 배럴쉬프터 짜기....

배움생활/SoC | 2010/07/09 18:36
Posted by blueecho

verilog도 버젼이 몇가지가 있죠. 새로운 2001버젼에서 나온 배럴 쉬프터 짜는 부분이 있어서 옮겨봅니다.

기존에 저도 짜던 방식이 그냥 for문 돌리던지 아니면 case문으로 해당 쉬프트 비트수 만큼 옮기는 방법인지라... 이런 방법이 있다는 게 신기하기도 하는군요.

[CODE type=verilog]{y,tmp} = {a,a} << rotate_cnt[/CODE]

방식은 다음과 같습니다. 배럴 쉬프터라는게 원하는 수만큼 쉬프트를 해주는 로직인지라 저처럼 무식하게 하지 않는 이상 보통은 다음과 같이 만들죠

[CODE type=verilog]{y,tmp} = { a[(WIDTH-1)-rotate_cnt:0], a[(WIDTH-1):0], {rotate_cnt(1'b0)} }[/CODE]

이거 줄여놓은게 위에꺼 입니다. 참 쉽죠? (밥로스 선생님의 추억이... -_-)
뭐... 2001새로운 문법이랄꺼야 rotate_cnt(1'b0) 정도인데 이거 그냥 rotate_cnt의 수만큼 1비트짜리 0를 나열해 주는 겁니다.
뭐.. 신호 이름 화서 아시겠지만 y값이 결과값이고 a가 입력 WIDTH가 워드구성 비트수이고, rotate_cnt가 옮길 비트수입니다.
구현 자체는 RSR만 되어있는데 마찬가지로 RSL도 구현할 수 있겠죠. ^^

'배움생활 > SoC' 카테고리의 다른 글

C언어 매크로에서의 팁  (0) 2010/08/09
링커 스크립트  (0) 2010/07/26
verilog 2001에서 배럴쉬프터 짜기....  (0) 2010/07/09
infer_mux 지정자  (0) 2010/07/06
H.264의 대항마가 나오네요....  (0) 2010/05/24
모델심 기본 스크립트  (0) 2010/04/12

infer_mux 지정자

배움생활/SoC | 2010/07/06 15:16
Posted by blueecho
지난 스터디도중 그동안 알고 있었던 지정자인 parallel case와 full case이외에 infer_mux부분이 나와서 오늘 찾아보니 왠간하면 멀티플렉서로 한다는 지정자네요.
스터디 게시판에 쓴글을 그대로 옮겨봅니다.

오늘 다이어리 정리하다가 보니 infer_mux 디렉티브 지난 시간에 대충 파악했다고 써있더군요.

유저매뉴얼에서 찾아보니 다음과 같습니다.


"Use the infer_mux compiler directive to control multiplexer inference.

When attached to a block, the infer_mux directive forces multiplexer inference for all case statements in the block. When attached to a case statement, the infer_mux directive forces multiplexer inference for that specific case statement."


준수님께서 이야기 하신게 맞네요.

mux가 어떻게 구성되는지는 아마 공정에 따라 다르겠지만 합성 옵션에 따라 달라지겠죠?

하여간, 혹시나 저처럼 모르는 분이 계실까봐 써 놓습니다.

'배움생활 > SoC' 카테고리의 다른 글

링커 스크립트  (0) 2010/07/26
verilog 2001에서 배럴쉬프터 짜기....  (0) 2010/07/09
infer_mux 지정자  (0) 2010/07/06
H.264의 대항마가 나오네요....  (0) 2010/05/24
모델심 기본 스크립트  (0) 2010/04/12
Fedora에서 Xilinx iMPACT를 실행시키기 위한 방법  (0) 2009/06/25

H.264의 대항마가 나오네요....

배움생활/SoC | 2010/05/24 21:53
Posted by blueecho

그동안 H.264에 대한 대항 포멧이 없었는데 오픈진영은 아니지만 구글에서 로열티없는 비디오포멧을 발표했네요.
웹M이라는 표준인데요. 지난 19일에 샌프란시스코에서 열린 구글컨퍼런스에서 발표되었다고 합니다.
요즘 후배의 추천으로 theora를 보고 있긴 했었는데... 또 봐야할것이 늘었네요...ㅠㅠ
관련 뉴스 링크를 참고해 주세요.

http://www.zdnet.co.kr/Contents/2010/05/20/zdnet20100520055856.htm

뭐... 특허권만 피한다면야 괜찮겠지만 이래저리 공격당하긴 하겠죠?
오픈계열의 선전을 기대해 봅니다.


<추가>

http://x264dev.multimedia.cx/?p=377

특성에 대한 링크입니다.babyworm님의 블로그에 갔다가 보게 되어서 지금 보고 있습니다.
간단하게 정리하는 것입니다. 읽어보고 나서 이야기 해야겠지만.... 좀 더 살펴보고 글을 올려봐야겠네요.
저야 뭐.. 예측관련이기 때문에 나중에 시간이 된다면, 비교 글을 올려보도록 하죠.


모델심 기본 스크립트

배움생활/SoC | 2010/04/12 11:54
Posted by blueecho
개인적으로 나를 평가하자면 좀(?) 멍청한 편이다.
편해지는 방법이 있음에도 잘 사용하지 않는 때가 많기도 하고 게다가 배치파일이나 스크립트 짜는 것을 별로 중요하게 여기지 않는 경향이 많다.
키본적으로 키보드를 치는게 왠지 일하는 것 처럼 보여서일까? -_-;;
하여간, 스터디에서 만나뵈었던 상철님의 블로그(http://myskan.tistory.com/2)에서 modelsim에 대한 스크립트에 대한 친절한 안내가 있어서 트랙백으로 넣어봅니다. (링크 참고해주세요.)
VHDL사용자분들은 vlog를 vcom으로 바꿔주시면 되고, 각 명령어에 대해서 궁금하시다면 Model.com에 들어가셔서 quick guide를 보시면 편할 것 같습니다.

기본적으로 많이 사용하는 명령어이고 do 스크립트를 이용해서 실행시킬수 있으니 초보 HDL 프로그래머님들과 연구실원들은 좀 봐줬으면 좋겠습니다. (콘솔이 편하다니까... -_-;)

예전에 만들었던 스크립트에는 각 파형의 색 지정 및 디바이더 virtual signal로 매핑같은 방법도 있었는데 연구실에서의 첫 하드 날림에서 손실되었다. ㅠㅠ
정말 정성들여서 조작한거였는데... 큭 그 이후로 몇년간 스크립트를 안 짜거나 대충 짰던거 같은... ㅠㅠ (연구실에서 하드날림 2번 있었습니다. 한번은 그동안 찍었던 사진들이 몽땅.. ㅠㅠ)

항상 다른 분들의 블로그들에서 느끼는 점이지만 기술을 나누려고 많이 하시는데 뭔가 나눠줄 수 있는 제가 되었으면 좋겠습니다. (.... 결국은 일기냐? -_-;;)
USB to JATG 장비가 다른 곳에 출장중인지라, linux에서 프로그래밍을 하려고 이것저것 해봤습니다.(논문은??? -_-)
어제 밤에 찾아본 방법중에 하나가 xc3prog라는 프로그램을 이용해서 사용하는 방법이 있었는데 잠들기 전에 찾다가 보니 libusb-driver를 사용하는 방법이 있더군요.

기본적으로 iMPACT의 JTAG케이블은 windrvr6라는 라이브러리를 사용하게 되어있습니다만 이게 한번에 구하기 쉽지 않더라구요. 그리고 xilinx에서 제공하고 있는 라이브러리의 경우는 컴파일에서 문제가 되는 경우가 생겨서(아마 커널 소스가 필요한거 같은데 안 받아놓은지라.. -_-)... 커널컴파일쪽은 자신이 많이 없어서 그냥 다른 방법으로 가기로 했습니다. ㅋㅋㅋ

1. 우선 libusb-driver의 소스를 받습니다. 요기~
2. 받은 소스를 가지고 make를 이용해 libusb-driver.so와 libusb-driver-debug.so를 만들어줍니다.
3. 만들어진 라이브러리를 실행파일이 있는 폴더 $XILINX/bin/lin에 복사를 합니다.
4. iMPACT실행시 windrvr을 사용하지않고 libusb-driver를 사용하도록 실행파일을 변경해 줘야 합니다. _impact 를 _impact.bin으로 복사합니다.
5. _impact를 만들어 줍니다.

#!/bin/sh
#
# Preload driver binary
LD_PRELOAD=$XILINX/bin/lin/libusb-driver.so $0.bin $*

6. 실행합니다. 참~ 쉽죠~잉~~~

ps. 머리가 나쁘면 몸이 고생한다고... 이거 하느라 3시간 이상 걸렸네요. 이거 인터넷 정보검색사 반납해야겠어요.. ㅠㅠ
Xilinx에서 ISE를 사용하다가 보니 PACE에서 문제가 되더라구요.
pin의 assign이 안되는 경우가 많아서.. (뭐.. ucf파일을 직접 수정하면 됩니다만.. 머리가 나쁜 저로서는.. )
하여간, 문제가 되는 부분이 libXm.so.3가 문제가 되더라구요. 깔려고 알아보다가 보니 rpmfind에서 찾아보니 openmotif22-2.2.4-18.i386.rpm을 깔아야 되는데 또 libXP.so.6을 깔아야 하더라구요.
이걸 또 깔려면, yum을 통해서 lesstif 패키지와 lesstif-devel 패키지를 설치하면 설치가 가능하더라구요.
뭐.. 멍청한 방법이긴 하지만 까먹을까봐 적어둡니다. ^^

ps. iMPACT에서 JTAG케이블이 연결이 안되는 문제는 windrvr을 설치해야 하지만 Spartan3 JTAG programming tools for GNU/LINUX로 해결했습니다. (사실은 설치하다가 GG쳤습니다. ㅠㅠ) : 관련링크 - http://www.roqerstech.co.uk/xc3sprog/

JTAG관련 다른 링크 : http://rmdir.de/~michael/xilinx/

요즘 짬을 내어서 PLI를 하고 있어서 관련 정보를 올려봅니다. ^^


more..

출처 : http://www.davidxu.com/vsim_howto.htm

블로그 이미지

blueecho

누군가에게 "당신은 무엇을 잘하십니까?"라는 질문을 들었을때 바로 대답할것을 만들어보자~!!

카테고리

분류 전체보기 (488)
NeWs (20)
배움생활 (97)
취미생활 (116)
끄적끄적 (239)
인생설계 (12)
Wish list (4)