Tag Archives: 프로세서

Verilog 관련 검색에 대한 친절한(?) 답변과 리퍼러 로그..

요즘에 리퍼러 로그를 보니, 검색을 통하여 들어오시는 분들이 상당하시군요..
(덕분에 gzip 플러그인을 통해 전송량을 절반으로 줄여놨었지만, 다시 트래픽이 차오르고 있습니다. ㅠㅠ; 물론, 많은 분들이 찾아주시는 건 좋은 일이지요.. 이 분야에 관심 있는 분들이 많다는 것이니까요..)

이 포스팅은 리퍼러 로그에 남은 검색어를 통하여 살펴본, 제 블로그에 방문하시는 분들이 관심을 가지는 것에 대한 친절(?)한 답변들입니다. ^^;

verilog 관련
가장 많은 검색어는 verilog/VHDL 입니다. 요즘에 이걸로 수업받으시는 분들이 많고, 요즘이 term project 철이라서 검색 순위가 급증하고 있는 것이 아닌가 생각합니다.

* Verilog와 VHDL중에 어떤것이 더 좋은가..
둘 다 좋은 언어입니다. verilog가 “설계”라는 목적에 좀더 부합하고, VHDL이 “검증”에 더 편리한 기능을 제공합니다. 개인적으로 생각하기에 verilog가 설계만 따진다면 더 편하다고 생각합니다.

* VHDL -> verilog변환, verilog ->VHDL 변환
가끔 뉴스 그룹에서 이거 변환 프로그램 찾으시는 분들도 봤는데, vhdl2v 같은 전용 변환 프로그램이 있기는 합니다만, 시도해보시면 상당한 스트레스를 받을 것이라 생각합니다.  ESNUG에 나온 내용을 붙이자면, 잘 안된다! 입니다.

[#M_ESNUG내용보기|less..|http://www.deepchip.com/items/0386-11.html
Hello John,

I’m scrambling my head over this…

I am using VHDL-2-Verilog translator by ASC.  I could not translate my
functions from VHDL to Verilog — they are simply skipped!

My VHDL source code has a package which has some function declarations
(eg. calculate_lrc(data)) and definitions in it.  The problem is when I try
to convert the package or code from VHDL to Verilog, the functions are
skipped.  So the verilog file just has constants and no “function”, as if
there was no function declaration in the original file.

I tried using -Function_Map option but it would only allow me to keep the
original function call but the parameters are skipped.  Also no function
conversions.

So does ASC’s vhdl2v not support function and procedure conversions from
VHDL to Verilog?

  – Rakesh Mehta
     Nortel Networks
_M#]

대안으로는 verilog나 vhdl이나 동일한 중간 포맷으로 해석해서 사용하는 툴을 쓰는 건데..
제가 사용해본 것은 Summit design의 visual HDL로 변환하는 것이었는데, 역시 structural 설계는 잘되는데 약간 behavioral하게 설계된건 잘 안되었습니다.

만일 동작만 보면되고, 안의 내용은 필요없다! 라고 생각하신다면, synopsys에서 합성한 후에 원하는 format으로 netlist를 출력해서 시뮬레이션에 사용하는 것이 제일 속편합니다. 물론, simulation용 라이브러리를 물어야 하지만 말입니다.
(뭐, 요즘엔 ncsim이나 modelsim이나 모두 VHDL/Verilog를 single kernel에서 시뮬레이트해서 이런 필요는 없겠지만.. 라이센스 문제가 아닌 이상엔 말이죠..)

* verilog에서의 #
위의 문법은 원하는 만큼 지연을 발생시키는 것입니다. 합성시에는 무시됩니다.

* verilog에서의 <=과 = 의 차이
blocking assignment와 non-blocking assignment를 혼동하시는 분들이 생각보다 많은데요..(저도 verilog 처음에 잘 몰랐습니다.) blocking assignment는 “시간이 흐르지 않는 상태(흐르지 않게 block하면서)에서 값이 저장된다”이구요.. non-blocking assignment는 “시간이 흐르면서 값이 저장된다” 입니다.
즉, 아래와 같은 연속된 assign의 경우 위의 blocking을 사용하였을때 d는 a의 값을 가지게 됩니다. 값의 할당 자체에 시간이 소모되지 않도록 하나의 할당이 끝날때까지 시간을 멈추기 때문입니다…
그런데, 밑의 nonblocking 예에서는 “값을 할당하자”라는 것은 현 시점에서, 값이 갱신되는 것은 delta delay이후에 이루어지게 됩니다. 왜냐하면, 값이 할당되든 안되든 값을 할당하겠다는 3개의 문장을 모두 보고나서 delta delay이후에 값이 갱신되기 때문이죠.

[CODE]b = a;
c = b;
d = c;

b <= a;
c <= b;
d <= c;[/CODE]

이해 되시려나요?

* verilog PLI 관련
예전에 계속쓰려다 잠시 중단되었는데, PLI 관련 내용은 요즘에 제 작업 관계로 앞으로 1~2개월동안 자주 올라올 확률이 높습니다. 테스트 벤치 생성 유닛과 scoreboard를 C로 만들고 이걸 verilog PLI로 연결할 예정이거든요..
기대하셔도 좋을듯..

다른 검색을 통한 리퍼러 로그..
Design Compiler와 VCS, Modelsim에 대한 검색이 많았습니다.
사실, 툴에 대해서는 소개나, 새소식만 하고 있어서 별다른 내용이 없었는데 말이죠.. ^^;
참.. 시뮬레이션 하는 방법은 quick reference guide를 살펴보시면 쉽게 하실 수 있습니다. ^^;

프로세서에 대한 검색으로 들어오신 분들도 많았습니다. intel, AMD, ARM, calmRISC, M-Core, EISC(감사합니다.)
블로그에 좀더 프로세서에 관련된 좋은 내용을 적을까 싶기도 한데.. 이쪽 분야 하시는 분이 워낙 적어서 누가 관심이 있을까.. 라는 씨니컬한 마음이 될때도 있습니다. ^^;

아.. 특이한것이 virtual UART를 검색해서 들어오신 분이 계시던데..
제가 이 블로그에서 PLI + TCL/TK를 조합한 virtual UART라는 걸 만든적이 있다고 말씀을 드린적이 있는데, 검색해서 들어오신분은 아마 회사분이 아니실까 생각합니다. 회사분이시라면 인트라넷에 올라간 virtual UART 관련 메뉴얼을 참조하세요.. 소스코드와 작성법이 다 있으니까요..^^;

찾아주신 분들 모두 감사드립니다.

프로세서/비메모리 반도체 설계를 희망하시는 분들께..

간혹, 학부의 후배들이 반도체 설계쪽 일을 하려면 어떻게 해야 하냐고 물어보더군요.
뭐, 저같은 경우는 해당 연구실에 들어가라고 하지만.. 참 추상적인가 봅니다.

비메모리 반도체라는 것은 사실 상당히 넓은 범위를 의미하므로, 제가 하는 쪽 분야 즉, 로직 설계 부분(소위  front-end라고 하는..)에 대해서만 이야기를 하고자 합니다.

학부때 필수적으로 알아야 하는/혹은 들어두어야 하는 과목들은 다음과 같습니다.

1. 디지털 로직: 로직에 대한 기본이 있어야만 이 일을 제대로 할 수 있습니다. 어려울거 없고, 학부 정도의 디지털 로직 부분의 기초만 탄탄하면 됩니다. 사실 디지털 로직은 대학의 전자공학/컴퓨터 공학과에 처음 배우는 것이고 그 이전의 배경지식이 필요없으므로, 가장 편한 과목중의 하나입니다.

2. C/C++ , 컴퓨터 언어: C/C++는 사실 엔지니어간에 있어서 기본 언어입니다. (그야말로 언어! 입니다.) 어떤 동작을 구현하자.. 이런걸 그냥 C/C++로 짜서 전달하는 경우도 많습니다. 그리고, C의 경우 컴퓨터 구조를 많이 포함하고 있어서 도움이 됩니다.

3. 컴퓨터 아키텍쳐: 컴퓨터 아키텍쳐는 딱히 프로세서 설계를 지망하지 않더라도, 하드웨어 설계에 필요한 I/O 프로토콜등의 기본적인 대부분의 지식이 들어 있습니다. 하드웨어 설계를 지망하시는 분들께는 매우 매우 중요한 과목입니다. 소프트웨어 하시는 분들도 “최적화된” 소프트웨어를 작성하시는데 아키텍쳐의 지식이 중요합니다.

아마도 위의 3가지 과목은 하드웨어 설계를 희망하시는 분들께는 가장 중요한 기본 과목이 아닐까 생각합니다. 또한 위의 과목은 “소프트웨어 개발”을 하고자 하시는 분들께도 중요합니다.

하드웨어 설계를 하시고자 하시는 분들은 이외에도 아래 과목을 반드시 들어야 합니다.

디지털 설계: 학교마다 이름이 다릅니다만, 실무적인 일들.. HDL을 다룬다던지 하는 첫 과목입니다. 조금 진보적인 교수님들은 디지털 로직 과정에서 HDL을 다루기도 합니다만..  HDL을 배울때는 반드시 HDL로 로직을 만들었을때 어떻게 구현될 것인가.. 즉 어떤 회로가 나올 것인가를 배워두는 것이 좋습니다. 🙂
게다가 HDL은 하드웨어 설계를 하시는 분들에게는 주된 설계 방법이므로, verilog던 VHDL이던 한가지는 “정통하게” 배워두시는 것이 좋습니다. 그리고, 다른 언어도 읽을 수 있을 정도는 되셔야 합니다.

교양적으로 들어야 하는 과목은 무수히 많습니다만..

  • 전기회로/전자회로/물리전자: 설계시에 여러가지를 이해하는데 많은 도움을 줍니다.
  • 신호처리/디지털 신호처리: 요즘 프로세서가 대부분 신호를 다룹니다. 그래픽, 영상, 음성.. 이런것에 대한 알고리즘을 하드웨어로 만드는 일이 많은데.. 이런일을 하게 될때 도움이 됩니다.
  • 디지털 통신: 통신 프로토콜을 아는 것이 I/O등의 프로토콜을 만ㄴ드는데 참 많이 도움이 됩니다. 물론, 이쪽 설계를 하는 경우도 많고요..
  • 소프트웨어공학: 의외시겠지만.. 소프트웨어 공학에서 배우는 team work 개념은 회사에서 일할때 많은 도움을 줍니다.

실무에서 도움을 줄만한  것들로는

리눅스/유닉스 관리도 해보셨으면 도움이 되고요.. 스크립팅 언어를 배워두는 것도 중요합니다. 노가다를 줄이기 위해서.. ^^;

아마도, 제가 있는 비메모리 설계 분야가 인력 부족을 심하게 겪고 있는 분야가 아닌가 생각됩니다. 발전 가능성도 많고요.. 잘 아시는 대기업들과 많은 중소기업들이 이쪽 분야에 많이 배치되어 있습니다.
위에서 보셨겠지만, 수학/물리의 기본이 적더라도 시작할 수 있는 분야이기도 합니다. 🙂

많은 분들이 도전하셨으면 합니다.

똑똑한 프로세서가 늘어난다.

ARM에서 기존의 시리즈 번호를 접고 새롭게 cortex시리즈를 시작한지도 일년정도 된것 같다.

저가, 저전력 컨트롤러 시장을 타겟으로하는 M시리즈와 고성능, 고속 내장형 마이크로 프로세서 시장을 타겟으로 하는 A시리즈에 이어, 메인 스트림 시장을 타겟으로 하는 R시리즈가 선보였다.

”]
8단 파이프라인(실제적으로는 9단 파이프라고 생각된다.)으로 구성되어 있으며, 거의 ARM11의 파이프 구성과 유사하다.
하지만, synthsizable core로서 선보였으므로, cache SRAM에 더 많은 시간을 할당하기 위하여 파이프 구성을 새롭게 했다는 점이 다를것이다.
또한, 좀더 정밀해진 분기 예측기(global predictor를 사용한 건 의외이긴 하다.)를 내장하고 있으며, 벤치마크에 따라서는 95%까지 예측 성공율을 보여준다고 한다.(이 이야기는 그야말로 벤치마크에 따라서겠다.. 그동안 논문에서 보아온 global predictor의 성능으로 보았을때는 말이다..)

인텔의 Core 2 마이크로 아키텍쳐, AMD의 프로세서, ARM까지..
이제는 더 깊은 파이프라인보다는 정교한 프로세서가 각광받는 시대가 된 것으로 보이고,
이것은 깊은 파이프라인에서 피할 수 없는 분기에 대한 문제, 그리고, 저전력에 대한 요구(클럭 주파수가 낮을수록 상대적으로 전력 소모가 적으니까..물론 다 그런건 아니지만..) area보다는 성능을 중요시하게 된 부분, 그리고 컴파일러의 발전 결과로 볼수 있겠다.

내장형 마이크로 프로세서에서도 이제 똑똑한 프로세서들간의 전쟁이 기대된다.