<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>Hello world!</title>
	<link>http://smartcode.egloos.com</link>
	<description>평범한 학생의 dreamlog</description>
	<language>ko</language>
	<pubDate>Tue, 16 Jan 2007 08:17:58 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>Hello world!</title>
		<url>http://md.egloos.com/img/samplelogo2.gif</url>
		<link>http://smartcode.egloos.com</link>
		<width>80</width>
		<height>80</height>
		<description>평범한 학생의 dreamlog</description>
	</image>
  	<item>
		<title><![CDATA[ 완벽한 언어를 찾아서 ]]> </title>
		<link>http://smartcode.egloos.com/3028</link>
		<guid>http://smartcode.egloos.com/3028</guid>
		<description>
			<![CDATA[ 
  <span style="FONT-SIZE: 100%"><em>전자 업계는 현재의 개발 방법론을 통합할 수 있는 시스템 레벨 설계 해법을 찾기 위해 전력 투구하고 있다.<br />
글: Gabe Moretti, 테크니컬 에디터</em> </span></font><p><span style="FONT-SIZE: 100%">전자 산업의 태동 이후, 제조 기술은 보다 우수한 기능의 새로운 EDA 툴 개발을 촉진하는 원동력이 되어 왔다. 그리고 이제는 전자 산업을 재편할 정도의 기술적인 전환점에 도달했다. 대부분의 디자이너들에게 있어서 최신 IC 제조 기술을 사용하는 것은 이제 더 이상 최고의 목표가 아니다. 오늘날의 제품은 경쟁력을 유지하기 위해 복잡한 기능을 수행해야 한다. 130nm 이하의 공정에서 나타나는 기생 현상은 디바이스가 제 기능을 발휘하는 데 악영향을 미친다. 반면 대부분의 디자이너들은 이러한 문제를 해결하는 방법에 대해 교육 받지 않았으므로 개발 주기는 길어지고 비용은 증가하게 되었다. 따라서 레이아웃에서 문제를 피해 가거나 해결하길 기대하지 말고 문제를 본질적으로 피하는 방법을 찾는 것이 바람직하다. 이렇게 하려면 제품이 제 기능을 수행하고 일정에 맞출 수 있게 해주는 신중하고 정밀한 시스템 레벨 설계가 필요하다. <br />
<br />
현재 개발된 대부분의 IC 제품은 설계 오류로 인해 적어도 한 번은 리스핀을 수행해야 한다. 리스핀 한 번에 드는 직접 비용은 평균 100만 달러가 넘으며, 이로 인해 시장 진출 기회를 상실하는 대가는 수천억 달러에 달한다. 그래서 디자이너는 가능하면 제조 공정을 신중하게 선택하고 다른 누군가가 새로운 공정 기술의 알려지지 않은 함정을 탐험해 주길 바란다. 엔지니어들은 프로젝트 초반에 제품의 계획, 정의, 작업 분할에 더 많은 시간을 투자한다. 그러나 유감스럽게도 이런 작업에 사용하는 툴은 대체로 정밀하지 않다. 툴은 인간의 의사소통에 쓰이는 언어를 기반으로 구성돼 있다. 즉, 무형식 의미론(informal semantics), 실행 모델로 변환할 수 없는 스프레드시트, 제품 개발에 사용되는 형식으로 업데이트하거나 변환하기 어려운 그림 등이 포함돼 있다. 시스템 레벨 작업을 위한 보다 정교한 툴이 있긴 하지만 나머지 개발 플로우와 통합시킬 수 있는 툴은 거의 전무한 실정이다. 따라서 엔지니어는 수작업으로 정보를 기존 툴에 재입력해야 한다. 수동으로 번역해야 할 데이터의 양과 복잡성으로 인해 오류 발생 가능성이 높은 것은 당연하다.<br />
<br />
<b>새로운 모델링 언어를 찾아서</b><br />
1990년대 말, Verilog가 하드웨어 모델링 언어로 널리 사용되면서 디자이너는 시스템 레벨 구성을 모델링하기에는 Verilog의 기능이 너무 취약하다는 사실을 깨닫기 시작했다. 일부 EDA 벤더가 이 문제의 해법을 찾기 위해 노력했다. 물론 대부분 신생 벤더였다. 당시 주요 난관은 하드웨어와 소프트웨어 구현 간의 상반관계(trade-off)와 하드웨어 엔지니어와 소프트웨어 개발자 간의 의사 소통을 향상시키기 위한 설계 방법의 지원이었다. 1999년 9월, 약 50개 업체의 지원을 받아 OSCI(Open SystemC Initiative)가 구성되었다. OSCI의 1차 목표는 시스템 레벨의 지적 재산권 관련 제품의 교류와 C++ 모델링 플랫폼을 통한 하드웨어/소프트웨어 동시 설계를 촉진시키는 것이었다. C++를 기본 언어로 채택했던 이유는 C와 C++가 칩 디자이너와 소프트웨어 엔지니어가 주로 사용하는 언어였기 때문이다.<br />
<br />
지금은 Synopsys의 일부가 된 Co-Design Automation은 하드웨어 디자이너들 사이에서의 선호도를 고려해 Verilog를 시스템 레벨 모델링 언어 개발의 시발점으로 보았다. Synopsys는 ‘1999년 설계 자동화 컨퍼런스(1999 Design Automation Conference)’에서 새로운 언어인 Superlog를 발표했다. 이름에서 알 수 있듯이, Superlog는 Verilog의 초집합이다. 2002년 6월 Accellera는 SystemVerilog라는 새로운 언어의 3.0 버전을 발표했다. Co-Design은 Accellera 위원회와 손 잡고 Verilog의 기능을 확장했다. Synopsys는 Co-Design을 합병한 후, 더 많은 Superlog 사양을 Accellera에 공여했다. 표준을 제정하는 컨소시엄인 Accellera는 현재 SystemVerilog 버전 3.1을 발표한 상태이다.<br />
<br />
2001년 Verilog 재표준화 이후, Verilog 연구 그룹은 새 버전이 시스템 레벨 모델링 요구 사항에 부응하지 못하므로 새로운 버전을 내놓아야 한다는 판단을 내렸다. 이 그룹은 IEEE의 후원 하에 연구를 수행하고 있으며 프로젝트 승인 요구서(PAR) 번호는 1364이다. SystemC, Verilog, SystemVerilog는 지난 12개월 동안 언론의 지대한 관심을 받았는데, 이들 언어의 특성과 개발 상태는 면밀히 지켜볼 만한 가치가 있다. 또한 IEEE도 PAR 번호 1076의 VHDL-200X라는 프로젝트에서 VHDL의 새 버전 개발 작업을 진행 중이다(사이드바 기사 "'시스템이라는 별칭이 필요 없는 VHDL” 참조).<br />
<br />
그러나 안타깝게도 VHDL-200x 연구 그룹은 하드웨어 모델링에 있어 SystemVerilog의 대안 개발에 열중하고 있는 것 같다. 이 접근 방식의 문제점은 VHDL이 결코 Verilog나 SystemVerilog의 훌륭한 대안이 될 수 없다는 사실에 있다. VHDL은 구문과 의미론이 훨씬 풍부하므로 전자 공학 하드웨어 뿐만 아니라, 이종 시스템 모델링에 더 적합하다. 실제로 칩과 멀티칩 기반 시스템이나 멀티보드 시스템은 하드웨어, 소프트웨어, 기계 시스템의 동시 모델링이 필요하다. 이 작업에는 VHDL이 가장 적합하고 연구 그룹도 이를 따라야 한다. 표 1에는 기존의 언어와 새로 제안된 언어를 통틀어 다양한 모델링 언어의 주목할 만한 사양들이 요약돼 있다.<br />
<br />
<b>SystemC</b><br />
OSCI는 SystemC 개발의 지침이 되는 5가지 요건을 명시했다. 이 요건에 따르면 SystemC는 하드웨어/소프트웨어로 구현해야 하는 시스템 기능에 관한 고차원 기술을 지원하고, 시스템 설계자가 하드웨어/소프트웨어 분할 결정을 최대한 연기할 수 있도록 허용하며, 시스템 표현을 하恙�佇?구현하는 방법을 제공하고, 최첨단 시스템의 복잡성을 관리하는 메커니즘을 제공해야 한다.<br />
<br />
SystemC는 새로운 클래스를 가진 C++이다. 주요 이점으로는 언어로서의 발전 수준과 퍼블릭 도메인(public-domain) 상태를 꼽을 수 있다. 디자이너가 실시간 운영 체제 개발을 비롯한 다양한 애플리케이션에C++를 사용해 왔기 때문에 C++는 강력한 언어라 할 수 있다. 또한 퍼블릭 도메인(public-domain) 상태로 인해 비용이 아주 저렴하지만, EDA 벤더는 이미 형성된 거대한 잠재 고객층에 독자적인 툴을 제공함으로써 수익을 창출할 수 있다. C++는 소프트웨어 개발 툴이기 때문에 의미론(semantics)이 하드웨어 모델링 기능을 지원하지 않는다. OSCI는 개발자가 클래스를 작성하여 언어 확장을 정의할 수 있는 C++의 기능을 사용해 이 문제를 해결했다. 클래스를 정의할 때 엔지니어는 구문과 런타임 의미론을 모두 명시할 수 있다.<br />
<br />
일반적으로 새로운 의미론은 기존의 의미론적 정의가 오버로드(overload)되는 방식으로 정의된다. 오버로드란 C++ 언어의 로컬 영역 내에서 규칙을 재정의하는 것을 뜻하는데, 이 경우는 SystemC 클래스 라이브러리를 일컫는다. 디자이너가 라이브러리에서 정의한 변수와 프리미티브를 사용하면 새로운 규칙이 효력을 발생한다. 다른 곳에서 정의한 변수와 프리미티브를 사용하면 원래의 C++ 규칙이 효력을 발휘한다. 새로운 런타임 의미론을 정의하면, C++ 컴파일러가 생성한 이진 문자열을 이해하는 프로그램이 실행 가능한 새 코드를 컴파일러가 생성한다. 그러면 클래스 정의에 있는 추가적인 정보를 통해 C++ 런타임 기능을 확장하여 SystemC 시뮬레이터를 개발할 수 있다. OSCI는 시간, 동시성, 하드웨어 데이터 형식이라는 세 가지 기본적인 개념을 C++에 추가해야 했다.<br />
<br />
소프트웨어 프로그래밍 언어는 프로그램을 실행하는 하드웨어가 실행 타이밍을 정하므로 시간을 이해할 필요가 없다. 하지만 하드웨어를 모델링해야 할 경우, 시간 지연과 실행 시퀀스를 모델링할 수 있어야 한다. 어떤 하드웨어 모델이 다음에 실행되어야 하고 한 하드웨어 프리미티브에서 다음 프리미티브로 신호가 전파되는 데 시간이 얼마나 걸리는지 시뮬레이터에 제시할 수 있어야 한다. 소프트웨어 프로그래밍 언어가 병렬 실행(parallel execution) 개념을 지원하긴 하지만 동시성은 이해하지 못한다. 병렬 실행이란 결합도가 약한 하드웨어 시스템이 독립적으로 둘 이상의 명령 스트림을 실행하는 것을 뜻한다. 보통 세마포어 프리미티브(semaphore primitive)를 사용하여 이런 병렬 실행을 동기화하는데, 세마포어 프리미티브는 의도한 알고리즘이 제대로 실행되는지 감시하는 글로벌 상태 시스템 역할을 한다. <br />
<br />
하드웨어 동시성(concurrency)이란 일단 전원을 켜면 모든 하드웨어가 동시에 작동하는 것을 의미한다. 그래서 시뮬레이터는 원래부터 동시적이지 않은 명령 시퀀스를 처리하는 컴퓨터에서 실행되는 동안 동시성을 흉내내야 한다. C++의 기본 데이터 형식은 하드웨어 모델링에 부적합하다. 예를 들어, 3상 논리값을 기술하는 데 사용할 수 있는 데이터 형식이 존재하지 않는다. SystemC는 네 가지 값의 논리 시스템을 C++에 추가하여 디지털 논리 모델링을 가능하게 했다. 하지만 아직 디지털 논리와 아날로그 논리 간의 상호 작용과 아날로그 모듈의 구성 검사는 지원하지 않는다. 가장 최신 버전은 SystemC 버전 2.0.1로 알려져 있다.<br />
</span></p><br />
<span style="FONT-SIZE: 100%"><b>SystemVerilog</b><br />
SystemVerilog는 Verilog-1995의 모델링 기능을 확장한 것으로서 VHDL-1993이 제시한 기능을 충족시키지만 그 이상을 만족시키기도 한다. 이 개발 작업을 후원하는 업계 컨소시엄인 Accellera가 직면한 근본적인 문제는 VHDL의 주요 단점 즉, 장황함과 복잡성을 피하는 것이다. 구문을 복잡하게 하지 않고?더 중요한 것은 의미론을 복잡하게 하지 않고?언어에 기능을 추가하는 것은 사실상 불가능하다. VHDL에 비해 이 프로젝트가 갖는 이점은 시장 수요에 있다. VHDL은 시대를 앞서 있지만 전자 공학 엔지니어들은 극소수 외에 VHDL 기능을 사용하지 않고 있다. 따라서 VHDL은 복잡한 것처럼 보이고 시뮬레이터는 수행할 작업이 더 많으므로 Verilog 보다 실행 속도가 느린 단점이 있었다. EDA 벤더에겐 안 좋은 소식이지만, 미국 국방부의 계약 체결 조건을 충족시키려면 제품이 모든 언어를 지원해야 한다는 미 공군의 주장 때문에 벤더들은 하기 싫은 일을 억지로 할 수 밖에 없었다. 디자이너가 언어의 복잡성, 느린 실행 속도와 씨름하여 보다 우수한 동작 모델링과 검증 기능의 장점을 누릴 수 있게 될지는 앞으로 두고 볼 일이다.<br />
<br />
SystemVerilog의 목표는 게이트 수가 많은 VC(virtual-cores) 기반의 버스 집약적인 칩 설계의 생산성을 개선하는 것이다. 이는 주로 칩 구현과 검증 플로우를 목표로 한다. 버전 3.1은 Verilog 2001의 네 가지 주요 확장 기능을 구현했다. 트랜잭션 모델링을 지원하기 위해 SystemVerilog는 디자이너가 C/C++/SystemC 기능을 설계 모델에 포함시킬 수 있도록 하는 DPI(직접 프로그래밍 인터페이스)를 제공하는데, DPI 덕분에 SystemVerilog와 SystemC 블록 간의 동시 시뮬레이션이 가능해졌다.<br />
<br />
확장 그룹(a group of extensions)은 모델링의 편의성을 높이는 것을 목표로 하고 있다. 인터페이스 레벨에서 트랜잭션을 모델링하는 기능을 사용하면 버스 집약적인 회로 개발을 수월하게 할 수 있으며, 포트 양쪽에 임의의 데이터 형식을 허용하면 모델링 작업이 한결 수월해진다. 물론 확장된 데이터 형식은 C 계열 언어 사용을 지원한다. 또한 상위 모듈에 로컬로 모듈을 중첩시키면 VC 보호 기능을 강화할 수 있다. 이 방법의 단점은 포트 연결 규칙이 느슨해져 설계 오류가 발생할 수 도 있다는 점이다. 사용 편의성과 구조적인 수정 간의 상반관계에서는 아마도 사용 편의성 쪽이 절대적으로 불리할 것이다. 디자이너는 한 번에 정확하게 모델링해야 하지만 검증 엔지니어는 다른 형식의 두 연결 포트가 동작하지 않는 경우 문제 해결을 위해 며칠 정도의 시간을 소요해야 할 수 있다.<br />
<br />
이를 위해, ‘검증을 위한 디자인(DFV, design-for-verification)’ 방법을 구현하는 어서션 기반 검증을 지원하는 새로운 메커니즘이 발표됐다. Synopsys는 DFV를 SystemVerilog 위치를 확보하기 위한 홍보 전략의 핵심으로 내걸었다. 포트 의미론을 완화시켜 발생하는 문제를 확인하는 데 사용할 수 있는 임베디드 어서션(embedded assertion)은 기능과 한계의 관점에서 설계 의도를 파악한다. 기능과 한계는 시뮬레이션 중에 검증한다. IBM(</span><a href="http://www.ibm.com/"><span style="FONT-SIZE: 100%">www.ibm.com</span></a><span style="FONT-SIZE: 100%">)의 형식 어서션 언어인 PSL(Property Specification Language)은 SystemVerilog가 사용하는 어서션 기술을 제공하며, 개체 지향 기술을 지원하여 테스트벤치와 하드웨어 모델의 개발과 재사용을 향상시킨다. Accellera는 원칙적으로 SystemVerilog 다음 버전을 Verilog 2005 워킹 그룹이 사용할 수 있도록 하는 데 동의했다. Accellera는 시장에서 혼동과 비호환성을 야기시키는 Verilog 2001의 두 가지 초집합이 생기는 것을 피하는 데 동의했다. 하지만 기술 공여는 Verilog 연구 그룹의 기대보다 늦어지기 때문에 Verilog 2005 개발자가 할 일이 더 많아질 것이다.<br />
<br />
<b>Verilog 2005</b><br />
Verilog 1995와 Verilog 2001을 개발한 IEEE 1364 워킹 그룹은 IEEE Verilog 표준 개발 작업을 맡고 있다. 2003년 3월, 이 그룹은 새로운 전자 시스템 설계 과제를 다루기 위해 표준을 업데이트하고 확장하기 위한 기술 공여를 요청했다. 그 해 9월, 9개의 주제를 다루기 위해 EDA 벤더 네 곳으로부터 9개의 공여를 받았다. 이 위원회의 목적은 2005년 새로운 IEEE 표준을 작성하는 것이다. 연구 그룹에는 유감스럽게도 Accellera가 2004년 6월경 공여를 약속했지만 아직 SystemVerilog 작업 공여는 전혀 이루어지지 않았다.<br />
<br />
Cadence Design Systems는 여섯 개 분야의 기술을 공여했고 Fintronic, Jeda Technologies, Verisity가 각각 한 분야씩을 다루는 기술을 공여했다. Cadence의 공여는 근본적으로 Verilog 2005의 구문과 의미론으로의 확장을 목적으로 한다. Cadence는 Verilog를 시스템 레벨로 확장하는 데 유용한 새로운 데이터 형식 정의 뿐 아니라, Verilog로 일관성 있게 데이터 형식과 함수를 정의하는 방법의 지침이 되는 규칙도 제공했다. 이를 위해 기본 및 복합 데이터 형식의 집합, 사용자 정의 형식의 일반적인 방법론 및 임의의 형식의 동적 메모리 할당을 제시했다. Verilog 모델의 소스 코드 일부를 암호화하는 방법을 제시한 공여는 제 3의 소프트 코어 공급자를 위해 독자적인 보호 기술을 제공하기 위한 것이다. VPI(Verilog Programming Interface)를 확장하는 공여는 확장된 데이터 형식과 PSL을 사용하는 어서션을 지원한다.<br />
<br />
Verilog로 작성된 모델의 디버깅을 편리하게 할 목적으로 두 가지 공여가 이루어졌다. 하나는 테스트 패턴을 제한적으로 랜덤화하는 기능을 제공하고 나머지 하나는 디자이너가 높은 추상화 계층에서 트랜잭션을 보고 분석할 수 있는 트랜잭션 기록용 VPI가 그것이다. 또한 Cadence는 단기간에 강력한 언어를 생성하고 미래의 확장 경로를 순탄하게 만들어 주는 지침도 기부했으며, 연구 그룹에 과거보다 체계적으로 작동할 수 있게 하는 구조를 제공하는 것을 목적으로 하고 있다.<br />
<br />
Fintronic은 Verilog 모델을 따로 컴파일하는 것을 지원하는 기술을 공여했다. 이 기능으로 Verilog 설계 부분들을 따로 컴파일할 수 있다. 그런 다음 미리 컴파일한 부분들을 다른 Verilog 소스 및 바이너리 파일과 혼합하여 설계를 하고 시뮬레이트할 수 있다. 이 기능은 Cadence 가 공여한 암호화 기술의 대안이 될 수는 있지만 직접 대체할 수는 없다. Jeda Technologies는 다른 언어 Jeda-X와 Verilog 언어를 결합시켜 테스트벤치 개발과 설계 디버깅 기능 확장을 제안했다. 제안된 언어 Jeda-X는 재사용 가능한 모듈식 테스트벤치를 작성하기 위한 개체 지향 프로그래밍을 지원할 것이다. 또한 영역 지향 프로그래밍(aspect-oriented programming), 동시 프로그래밍, 주기 기반 테스트벤치도 지원한다. 마지막으로 동작 모델링을 위한 향상된 리스트, 배열 데이터 형식, 멀티스레드 실행을 위한 동기화 프리미티브 등을 제공한다.<br />
<br />
Verisity는 테스트벤치와 디버깅을 지원하는 자체 기술을 Jeda-X 제안의 직접적인 대안으로 공여했다. Verisity는 Verilog에 ‘keep’과 ‘gen’이라는 두 가지 키워드를 추가할 것을 제안했는데 이는 디자이너가 모든 값을 규격에 맞게 유지하기 위한 규칙(강력한 규칙과 느슨한 규칙 모두)과 필요할 때 새로운 자극을 정확하게 생성하기 위한 요구를 명시할 수 있게 해준다. Verisity의 다른 공여는 Verilog을 확장하여 디자이너가 검증 엔지니어와 협력함으로써 함께 기능상 다뤄야 할 점을 기술하고 테스트해야 하는, 결정적인 입력과 내부 이벤트 조합을 확인할 수 있게 한 점이다. 또한 테스트 작성자용 구문을 공여하여 테스트 모듈이나 모듈들 내부의 데이터 값 생성에 제한을 가하는 ‘keep’ 문장을 도입할 수 있게 했다. ‘extend’ 키워드를 사용하여 테스트 작성자는 한 번에 올바른 입력 시퀀스의 기본 규칙을 기술하고 나중에 이 규칙을 테스트용으로 확장하여 하나의 대상에 집중할 수 있다.<br />
<br />
연구 그룹은 SystemVerilog 기술 공여를 받으면 이미 많은 SystemVerilog 기능을 Verilog 2005에 설계해 넣었기 때문에 어려운 통합 문제에 직면할 것이다. 또한 이 두 언어는 유사하지만 결코 동일하지는 않다. 두 언어의 차이를 극복하고 그 결과 언어학적으로 동일한 부모를 가진 다른 두 방언이 아닌 하나의 언어를 만들어내려면 엔지니어링과 관리 분야에서 모두 엄청난 노력이 필요할 것이다.<br />
<br />
<b>상업적 지원</b><br />
이상 네 가지 언어의 표준 개발은 서로 다른 경로를 따르고 있다. SystemC와 SystemVerilog의 개발자 모두 언어를 상업용으로 설계했고 표준화를 위한 움직임은 언어 수용을 위한 엔지니어링 분야의 노력인 동시에 마케팅 분야의 노력이기도 하다. Verilog 2005와 VHDL 200x는 IEEE를 제정한 전문가 학회 중 하나인 컴퓨터 소사이어티(Computer Society)의 전통적인 전략을 따르고 있다. 즉, 먼저 엔지니어링 분야의 노력을 통해 표준을 개발한 다음 그 표준의 마케팅을 실시하는 것이다. 그 결과 IEEE가 개발한 언어 중 어느 하나를 지원하는 툴은 아직 존재하지 않는다. 몇몇 EDA 벤더가 VHDL 구현에 PSL을 지원함으로써 이 접근 방식에 예외를 만들고 있다.<br />
<br />
그 동안 이 전략은 다른 쪽에 비해 상업적으로 성공을 거두지 못한 것으로 입증됐다. 예를 들면, VHDL과 Verilog의 경우, VHDL은 VHDL의 일부분이라도 사용한 EDA 툴은 어느 것이든 표준화 이전에 사용할 수 없었다는 점 때문에 상업적인 손실이 컸던 반면 Verilog는 개발 단계에서도 적극적인 지원을 누렸다. 그러나 EDA 벤더는 IEEE 개발 프로세스가 언어 구성 방법에 관한 엔지니어링 측면의 뛰어난 통찰력을 제공하고 밝혀내기 어려운 고객의 기호를 알려 주므로 IEEE 개발 프로세스에 적극 투자하려 할 것이다.<br />
<br />
Synopsys는 SystemC 개발의 진정한 원동력이었다. Synopsys 초기 언어 개발은 독자적이었지만 Synopsys는 재빨리 Cadence가 Verilog에서 개발했던 전략을 따랐다. Synopsys는 업계 컨소시엄 Open SystemC를 형성했는데 이는 Verilog의 성공을 이끌어낸 컨소시엄인 OVI(Open Verilog International)와 유사했다. Open SystemC는 EDA 벤더의 후원을 받는 컨소시엄은 언어를 빨리 수용하는 데 도움이 되지 못한다는 것이 분명해지자 OSCI로 변모했다. 그 과정에서 Synopsys는 두 주요 경쟁사인 Cadence와 Mentor의 폭넓은 참여를 위해 OSCI의 정책과 방향에 관한 권한을 상당 부분 포기했다. SystemC는 Verilog만큼 인기를 얻지 못하고 있는데 그 이유는 시장이 작기 때문이기도 하고 사용할 수 있는 툴이 시스템 설계와 하드웨어 설계의 간극을 제대로 메워주지 못하고 있기 때문이기도 하다.<br />
<br />
포괄적인 SystemC 툴 목록은 OSCI 웹 사이트에서 구할 수 있지만 일부 업체는 SystemC 사용에 RTL(register-transfer-level) 방법론을 결합시키는 제품을 개발했기 때문에 특히 주목할 필요가 있다. Cadence, EVE(Emulation and Verification Engineering), Mentor, Synopsys, TNI-Valiosys 등 업체들은 엔지니어들이 한 설계에서 SystemC 모델을 VHDL, Verilog 모델과 함께 사용할 수 있게 해주는 혼합형 언어 시뮬레이터를 제공했다. CoWare는 SystemC 시장에 일찍 진출했다. 다수의 시스템 업체들은 ConvergenSC 제품이 설계와 검증에 공통의 인프라를 사용하기 때문에 이 제품을 선택했다. ConvergenSC는 OSCI가 무상으로 제공했던 정식 시뮬레이터의 첫 번째 대안이었다. 예상대로 대체 시뮬레이터(ConvergenSC)는 상업용 애플리케이션용으로 유용한 툴이 되기에는 너무 기능이 적었다. Forte Design Systems는 웹상에 유용한 안내서 역할을 할 SystemC 자습서를 무료로 제공한다. Forte Design Systems의 Cynthesizer 합성 툴을 사용하면 디자이너는 SystemC 번역을 Verilog나 VHDL로 변환하여 SystemC 모델에서 하드웨어를 생성할 수 있다.(참고 자료 1).<br />
<br />
많은 EDA 벤더들이 SystemVerilog 지원 툴을 개발하고 있다. 발표된 툴 대부분은 6월에 열렸던 설계 자동화 회의의 상업용 툴이 되었다. Real Intent, Synopsys, 0-In은 형식 검증 제품 계획을 발표했다. Novas, SynaptiCAD, Synopsys는 테스트벤치 및 디버깅 툴을 지원할 예정이다. Aldec, @HDL, Synopsys는 시뮬레이터를 제공할 것이다. Axis Systems는 에뮬레이션 제품과 관련된 언어를 지원할 예정이다. Bluespec, Cadence, Mentor는 제품 제안의 성격을 명시하지 않았지만 Cadence와 Mentor 모두 최소한 이 언어의 시뮬레이션을 지원할 것으로 기대해도 좋겠다.<br />
<br />
Verilog 2005에 대한 상업적 지원은 아직 없지만(발표 당시), Fintronic, Jeda Technologies, Verisity 모두 연구 그룹에 공여한 기술을 구현하는 제품을 제공한다. Fintronic은 FinSim 제품에서 Verilog를 따로 컴파일하는 기능을 채용했고, Jeda Technologies는 Jeda-X를 테스트벤치 개발 툴로 시장에 내놓았으며, Verisity는 e language를 기반으로 자사 검증 제품을 위한 기술을 개발했다. 한편 Cadence는 검증 제품 전 라인에 공여 기술의 일부를 채용했다.<br />
<br />
<b>저자</b><br />
<br />
EDN의 테크니컬 에디터인 Gabe Moretti의 연락처는 전화 1-941-497-9880, 팩스 1-941-497-9887, 이메일 </span><a href="http://gmoretti@edn.com/"><span style="FONT-SIZE: 100%">gmoretti@edn.com</span></a><span style="FONT-SIZE: 100%">이다.<br />
<br />
<br />
<b>시스템이라는 별칭이 필요 없는 VHDL</b><br />
<i>글: Stephen Bailey, Mentor Graphics</i> <br />
<br />
EDA 업계에 시스템 레벨 설계를 다루는 새로운 언어나 개정 언어가 쏟아져 나오고 있다. 이들 언어는 주로 시스템이라는 접두사를 달고 있는 것이 특색이다. 신기하게도 VHDL 커뮤니티는 "SystemVHDL" 개정 작업에 대해 알린 적이 없다. 하지만 이렇게 홍보를 하지 않는다고 해서 VHDL이 앞으로 개선 계획이 없어 뒤쳐질 것이라는 것을 의미하지는 않는다. 오히려 VHDL 언어의 개정 노력으로 더 수준 높은 고급 설계 및 검증 기능을 VHDL에 가져올 것을 약속하고 있다. VHDL은 역사적으로 고급 HDL 기능의 선두 주자였기 때문에 설계 과정에서의 광범위한 사용이 RTL(register-transfer level)보다 더 추상적이라는 사실이 밝혀졌다. 그래서 VHDL 개정안을 "SystemVHDL"이라고 부르게 되면 VHDL이 다른 HDL과 같은 심각한 결함이 있었다는 것을 내포하게 된다. 개정 작업은 VHDL의 논리적인 연장선상에서 이루어지므로 IEEE는 새 천년에 처음 이루어지는 중요한 개정 작업이라는 점을 들어 VHDL 개정 작업을 특별히 인식하여 VHDL 200X라고 부른다.<br />
<br />
VHDL 200X 개발 계획에는 상위 레벨의 모델링 추상화를 촉진하는 개선 작업이 있으며 디자이너 생산성 향상, 상위 레벨의 추상화 기능, 복잡성 감소, 설계 의도 파악 개선 등도 포함된다. 또한 계획에는 현재 어렵거나 불가능한 모델링을 가능하게 하는 기능, 검증 생산성, 어서션 기반 검증, 자극 생성, 고차원 모델링(참조 모델과 트랜잭션 레벨 모델링)도 포함된다.<br />
<br />
설계 생산성을 높이기 위해 VHDL은 견고한 데이터 형식 체계를 제공하는데, 여기에는 사용자 정의 형식인 열거, 부호 있음(signed), 부호 없음(unsigned), 비트, 비트 벡터, 정수와 제한된 정수, 리얼(real), 액세스(포인터)와 레코드 형식 등이 포함된다. VHDL은 해당 데이터 값(형식)에 사용자 정의 조작을 가해 데이터 값을 암호화하는 보호(protected) 형식을 정의하지만 완전한 개체 지향 기능은 누락되어 있다. 1076 위원회는 모델의 형식 및 서브프로그램의 매개변수화를 허용하기 위해 상속과 향상된 ‘generic’ 추가 방법을 확인하기 위한 노력을 기울이고 있다. 향상된 개체 지향 기능도 여러 레벨의 추상화 단계에서 인터페이스 모델링 발전을 촉진시킬 것으로 예상된다. 이러한 개체 지향 특성을 추가하면 모델링에서 추상화 레벨을 높일 뿐 아니라 설계 재사용 레벨을 높이는 데도 크게 도움이 될 것이다.<br />
<br />
또한 연구 그룹은 VHDL의 정적 검증 기능을 손상시키지 않으면서 필요한 입력량을 줄이는 방법도 모색하고 있다. VHDL의 강력한 입력과 결정론적 시뮬레이션 의미론은 경합 조건, 잘못된 배열 인덱스, 잘못된 값 범위 등과 같은 문제를 예방하고 빨리 식별한다. 이런 특성은 검증 시간을 절약해 주는데 검증이 설계 시간의 70%를 차지하기 때문에 검증과 디버깅 작업이 크게 줄어든다.<br />
<br />
많이 향상된 기능이 디자이너의 입력 부담을 줄여주는 동시에 설계 의도를 더 잘 파악할 수 있게 해준다. 프로세스의 결합과 순차적 속성에 기초하여 프로세스 민감도를 정확하게 파악하는 것 가장 좋은 예다. 아키텍처를 별도로 작성할 필요성을 없애는 것도 한 예다. 이런 변화의 대부분은 VHDL 언어에 상대적으로 미미한 영향을 미치지만, 디자이너의 VHDL에 대한 경험을 쌓는데는 중대한 영향을 미친다.<br />
<br />
매우 드문 경우이긴 하지만 VHDL은 하드웨어 기능 모델링에 필요한 기능을 제공하기도 한다. 이 경우의 대표적인 예가 점퍼 또는 양방향 패스 스루(pass-through) 스위치를 모델링하는 기능이다. 연구 그룹은 이 문제도 다루고 있다.<br />
<br />
VHDL의 검증 생산성을 높이기 위해 연구 그룹은 Accellera의 PSL(Property Specification Language)을 VHDL의 속성-사양 기능으로 채택할 계획이다. PSL을 다음과 같이 여러 용도에 사용할 수 있다.<br />
<br />
</span><ul><li><span style="FONT-SIZE: 100%">검증 과정에서 유지해야 하는 특성 정의(어서션) <br />
</span><li><span style="FONT-SIZE: 100%">검증 과정에서 테스트해야 하는 기능 정의(기능적인 대상 범위) <br />
</span><li><span style="FONT-SIZE: 100%">입력 제한, 올바른 시퀀스, 올바른 시퀀스 조합 명시(자극 생성)</span></li></ul><br />
<span style="FONT-SIZE: 100%">개체 지향 기능 향상은 두 가지 이점이 있다. 검증 기능과 설계 생산성을 모두 개선시키기 때문이다. 개체 지향 방법은 다음과 같은 작업을 간소화해 준다.<br />
<br />
</span><ul><li><span style="FONT-SIZE: 100%">여러 추상화 단계에서 그리고 한 설계에서 다른 설계로 재사용할 수 있는 테스트벤치(검증 인프라) 작성 <br />
</span><li><span style="FONT-SIZE: 100%">검증 과정에서 참조 모델로 사용되는 수준 높은 모델 작성 <br />
</span><li><span style="FONT-SIZE: 100%">트랜잭션과 스코어보드 같은 공통적인 검증 데이터 구조 모델</span></li></ul><br />
<span style="FONT-SIZE: 100%"><b>검증 생산성을 높이기 위해 계획한 개선 기능은 다음과 같다.</b><br />
<br />
</span><ul><li><span style="FONT-SIZE: 100%">동적 프로세스 생성/소멸 <br />
</span><li><span style="FONT-SIZE: 100%">속성을 사용하여 자극 생성을 유도하기 위한 중량 조합을 명시하는 기능 <br />
</span><li><span style="FONT-SIZE: 100%">테스트벤치의 기능 대상 범위의 데이터 액세스로 반응성 테스트벤치 작성 허용 <br />
</span><li><span style="FONT-SIZE: 100%">테스트벤치로 설계 회로 어디서나 신호를 검사하고 실행할 수 있는 표준화된 신호 액세스 기능 <br />
</span><li><span style="FONT-SIZE: 100%">FIFO와 연관 배열(associative array) 같이 사전에 정의되어 공통으로 사용하는 검사기와 데이터 형식 라이브러리 <br />
</span><li><span style="FONT-SIZE: 100%">보다 추상적인 프로세스 간의 통신 메커니즘</span></li></ul><br />
<span style="FONT-SIZE: 100%">다음번 언어 개정 버전을 SystemVHDL이라고 부르지는 않지만 개정안은 설계 품질과 검증 생산성을 개선할 속성-사양과 검증 자동화 기능 뿐만 아니라, 보다 수준 높은 모델링과 추상화 기능을 제공할 것이다.<br />
<br />
<b>표1-언어 사양</b> <br />
<br />
<img src="http://www.ednkorea.com/cmsimages/0408cs.gif" border="0" /><br />
<br />
<b>저자</b><br />
<br />
Stephen Bailey는 Mentor Graphics의 기술 마케팅 엔지니어이자 IEEE 1076 워킹 그룹의 회장이다.<br />
<br />
<b>요약 내용</b><br />
<br />
</span><ul><li><span style="FONT-SIZE: 100%">모델링 언어는 전자 시스템 레벨 설계에 사용하기에는 부족한 면이 많다.· SystemC, SystemVerilog, Verilog 2005는 많은 공통적인 사양을 갖고 있다. <br />
</span><li><span style="FONT-SIZE: 100%">연구 그룹에서는 SystemVerilog과 Verilog 2005를 단일 언어로 병합하려 한다. <br />
</span><li><span style="FONT-SIZE: 100%">연구 그룹은 또한 VHDL에 사양을 추가하고 있다. </span></li></ul><br />
<span style="FONT-SIZE: 100%"><b>추가 정보</b><br />
<br />
본 기사에 나온 제품에 대한 정보가 필요할 경우에는 아래의 업체에 문의하시면 됩니다. 문의하실 때에는 EDN을 통해 제품을 알게 됐다고 알려 주시길 바랍니다.<br />
<br />
</span><table class="newstext" cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr valign="top"><td width="50%"><span style="FONT-SIZE: 100%"><b>Accellera</b><br />
</span><a href="http://www.accellera.org/"><span style="FONT-SIZE: 100%">www.accellera.org</span></a><br />
<br />
<span style="FONT-SIZE: 100%"><b>Aldec</b><br />
</span><a href="http://www.aldec.com/"><span style="FONT-SIZE: 100%">www.aldec.com</span></a><br />
<span style="FONT-SIZE: 100%">1-800-487-8743 <br />
<br />
<b>@HDL</b><br />
</span><a href="http://www.athdl.com/"><span style="FONT-SIZE: 100%">www.athdl.com</span></a><br />
<span style="FONT-SIZE: 100%">1-408-441-1317 <br />
<br />
<b>Axis Systems</b><br />
</span><a href="http://www.axiscorp.com/"><span style="FONT-SIZE: 100%">www.axiscorp.com</span></a><br />
<span style="FONT-SIZE: 100%">1-408-588-2000 <br />
<br />
<b>Bluespec</b><br />
</span><a href="http://www.bluespec.com/"><span style="FONT-SIZE: 100%">www.bluespec.com</span></a><br />
<span style="FONT-SIZE: 100%">1-781-250-2200 <br />
<br />
<b>Cadence Design Systems</b><br />
</span><a href="http://www.cadence.com/"><span style="FONT-SIZE: 100%">www.cadence.com</span></a><br />
<span style="FONT-SIZE: 100%">1-800-746-6223 <br />
<br />
<b>CoWare</b><br />
</span><a href="http://www.coware.com/"><span style="FONT-SIZE: 100%">www.coware.com</span></a><br />
<span style="FONT-SIZE: 100%">1-888-269-2738 <br />
<br />
<b>EVE</b><br />
</span><a href="http://www.eve-team.com/"><span style="FONT-SIZE: 100%">www.eve-team.com</span></a><br />
<span style="FONT-SIZE: 100%">1-888-738-3872 <br />
<br />
<b>Fintronic</b><br />
</span><a href="http://www.fintronic.com/"><span style="FONT-SIZE: 100%">www.fintronic.com</span></a><br />
<span style="FONT-SIZE: 100%">1-650-349-0108 <br />
<br />
<b>Forte Design Systems</b><br />
</span><a href="http://www.forteds.com/"><span style="FONT-SIZE: 100%">www.forteds.com</span></a><br />
<span style="FONT-SIZE: 100%">1-800-585-4120</span></td><td><span style="FONT-SIZE: 100%"><b>Jeda Technologies</b><br />
</span><a href="http://www.jedatechnologies.com/"><span style="FONT-SIZE: 100%">www.jedatechnologies.com</span></a><br />
<span style="FONT-SIZE: 100%">1-650-964-5332 <br />
<br />
<b>Mentor Graphics</b><br />
</span><a href="http://www.mentor.com/"><span style="FONT-SIZE: 100%">www.mentor.com</span></a><br />
<span style="FONT-SIZE: 100%">1-800-547-3000 <br />
<br />
<b>Novas</b> <br />
</span><a href="http://www.novas.com/"><span style="FONT-SIZE: 100%">www.novas.com</span></a><br />
<span style="FONT-SIZE: 100%">1-408-467-7888 <br />
<br />
<b>OSCI</b> <br />
</span><a href="http://www.systemc.org/"><span style="FONT-SIZE: 100%">www.systemc.org</span></a><br />
<br />
<span style="FONT-SIZE: 100%"><b>Real Intent</b> <br />
</span><a href="http://www.realintent.com/"><span style="FONT-SIZE: 100%">www.realintent.com</span></a><br />
<span style="FONT-SIZE: 100%">1-408-982-5444 <br />
<br />
<b>SynaptiCAD</b> <br />
</span><a href="http://www.syncad.com/"><span style="FONT-SIZE: 100%">www.syncad.com</span></a><br />
<span style="FONT-SIZE: 100%">1-540-953-3390<br />
<br />
<b>Synopsys</b><br />
</span><a href="http://www.synopsys.com/"><span style="FONT-SIZE: 100%">www.synopsys.com</span></a><br />
<br />
<span style="FONT-SIZE: 100%"><b>TNI-Valiosys</b> <br />
</span><a href="http://www.tni-valiosys.com/"><span style="FONT-SIZE: 100%">www.tni-valiosys.com</span></a><br />
<span style="FONT-SIZE: 100%">1-408-203-2500 <br />
<br />
<b>Verisity</b> <br />
</span><a href="http://www.verisity.com/"><span style="FONT-SIZE: 100%">www.verisity.com</span></a><br />
<span style="FONT-SIZE: 100%">1-650-934-6800 <br />
<br />
<b>0-In Design Automation</b><br />
</span><a href="http://www.0-in.com/"><span style="FONT-SIZE: 100%">www.0-in.com</span></a><br />
<span style="FONT-SIZE: 100%">1-408-487-3640</span></td></tr></tbody></table><br />
<span style="FONT-SIZE: 100%">&lt;출처 : </span><a href="http://www.ednkorea.com/"><span style="FONT-SIZE: 100%">http://www.ednkorea.com</span></a><span style="FONT-SIZE: 100%">&gt; </span><p></p>			 ]]> 
		</description>
		<category>SoC 이야기</category>

		<comments>http://smartcode.egloos.com/3028#comments</comments>
		<pubDate>Tue, 16 Jan 2007 06:23:37 GMT</pubDate>
		<dc:creator>이별사랑</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Verilog 관련 검색에 대한 친절한(?) 답변과 리퍼러 로그.. ]]> </title>
		<link>http://smartcode.egloos.com/2709</link>
		<guid>http://smartcode.egloos.com/2709</guid>
		<description>
			<![CDATA[ 
  <p><span style="FONT-SIZE: 100%">요즘에 리퍼러 로그를 보니, 검색을 통하여 들어오시는 분들이 상당하시군요.. <br />
(덕분에 gzip 플러그인을 통해 전송량을 절반으로 줄여놨었지만, 다시 트래픽이 차오르고 있습니다. ㅠㅠ; 물론, 많은 분들이 찾아주시는 건 좋은 일이지요.. 이 분야에 관심 있는 분들이 많다는 것이니까요..)</span></p><p><span style="FONT-SIZE: 100%">이 포스팅은 리퍼러 로그에 남은 검색어를 통하여 살펴본, 제 블로그에 방문하시는 분들이 관심을 가지는 것에 대한 친절(?)한 답변들입니다. ^^;<br />
<br />
</span><span style="FONT-SIZE: 100%"><strong>verilog 관련<br />
</strong>가장 많은 검색어는 verilog/VHDL 입니다. 요즘에 이걸로 수업받으시는 분들이 많고, 요즘이 term project 철이라서 검색 순위가 급증하고 있는 것이 아닌가 생각합니다. <br />
<br />
</span><span style="FONT-SIZE: 100%"><strong>* Verilog와 VHDL중에 어떤것이 더 좋은가..<br />
</strong>둘 다 좋은 언어입니다. verilog가 "설계"라는 목적에 좀더 부합하고, VHDL이 "검증"에 더 편리한 기능을 제공합니다. 개인적으로 생각하기에 verilog가 설계만 따진다면 더 편하다고 생각합니다. <br />
<br />
</span><span style="FONT-SIZE: 100%"><strong>* VHDL -&gt; verilog변환, verilog -&gt;VHDL 변환<br />
</strong>가끔 뉴스 그룹에서 이거 변환 프로그램 찾으시는 분들도 봤는데, vhdl2v 같은 전용 변환 프로그램이 있기는 합니다만, 시도해보시면 상당한 스트레스를 받을 것이라 생각합니다.&nbsp; ESNUG에 나온 내용을 붙이자면, 잘 안된다! 입니다.</span></p><p class="moreless_fold" id="more97_0"><span style="CURSOR: pointer" onclick="toggleMoreLess(this, '97_0','ESNUG내용보기','less..'); return false;"><span style="FONT-SIZE: 100%">ESNUG내용보기</span></span></p><div class="moreless_content" id="content97_0" style="DISPLAY: none"><a href="http://www.deepchip.com/items/0386-11.html"><span style="FONT-SIZE: 100%">http://www.deepchip.com/items/0386-11.html</span></a><span style="FONT-SIZE: 100%"></span><a title="이 링크를 새창으로 엽니다." style="TEXT-DECORATION: none" href="http://www.deepchip.com/items/0386-11.html" target="_blank"><span style="FONT-SIZE: 100%"><img src="http://babyworm.net/tatter/plugins/zExternalLink/external.png" align="middle" /></span></a><br />
<span style="FONT-SIZE: 100%">Hello John,<br />
<br />
I'm scrambling my head over this...<br />
<br />
I am using VHDL-2-Verilog translator by ASC.&nbsp; I could not translate my<br />
functions from VHDL to Verilog -- they are simply skipped!<br />
<br />
My VHDL source code has a package which has some function declarations<br />
(eg. calculate_lrc(data)) and definitions in it.&nbsp; The problem is when I try<br />
to convert the package or code from VHDL to Verilog, the functions are<br />
skipped.&nbsp; So the verilog file just has constants and no "function", as if<br />
there was no function declaration in the original file.<br />
<br />
I tried using -Function_Map option but it would only allow me to keep the<br />
original function call but the parameters are skipped.&nbsp; Also no function<br />
conversions.<br />
<br />
So does ASC's vhdl2v not support function and procedure conversions from<br />
VHDL to Verilog?<br />
<br />
&nbsp; - Rakesh Mehta<br />
&nbsp; &nbsp;&nbsp; Nortel Networks<br />
</span></div><p><span style="FONT-SIZE: 100%">대안으로는 verilog나 vhdl이나 동일한 중간 포맷으로 해석해서 사용하는 툴을 쓰는 건데.. <br />
제가 사용해본 것은 Summit design의 visual HDL로 변환하는 것이었는데, 역시 structural 설계는 잘되는데 약간 behavioral하게 설계된건 잘 안되었습니다. <br />
<br />
만일 동작만 보면되고, 안의 내용은 필요없다! 라고 생각하신다면, synopsys에서 합성한 후에 원하는 format으로 netlist를 출력해서 시뮬레이션에 사용하는 것이 제일 속편합니다. 물론, simulation용 라이브러리를 물어야 하지만 말입니다. <br />
(뭐, 요즘엔 ncsim이나 modelsim이나 모두 VHDL/Verilog를 single kernel에서 시뮬레이트해서 이런 필요는 없겠지만.. 라이센스 문제가 아닌 이상엔 말이죠..) <br />
<br />
<strong>* verilog에서의 #</strong><br />
위의 문법은 원하는 만큼 지연을 발생시키는 것입니다. 합성시에는 무시됩니다.<br />
<br />
<strong>* verilog에서의 &lt;=과 = 의 차이 </strong><br />
blocking assignment와 non-blocking assignment를 혼동하시는 분들이 생각보다 많은데요..(저도 verilog 처음에 잘 몰랐습니다.) blocking assignment는 "시간이 흐르지 않는 상태(흐르지 않게 block하면서)에서 값이 저장된다"이구요.. non-blocking assignment는 "시간이 흐르면서 값이 저장된다" 입니다. <br />
즉, 아래와 같은 연속된 assign의 경우 위의 blocking을 사용하였을때 d는 a의 값을 가지게 됩니다. 값의 할당 자체에 시간이 소모되지 않도록 하나의 할당이 끝날때까지 시간을 멈추기 때문입니다...<br />
그런데, 밑의 nonblocking 예에서는 "값을 할당하자"라는 것은 현 시점에서, 값이 갱신되는 것은 delta delay이후에 이루어지게 됩니다. 왜냐하면, 값이 할당되든 안되든 값을 할당하겠다는 3개의 문장을 모두 보고나서 delta delay이후에 값이 갱신되기 때문이죠. </span></p><div style="BORDER-RIGHT: #cccccc 1px dotted; PADDING-RIGHT: 10px; BORDER-TOP: #cccccc 1px dotted; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #cccccc 1px dotted; PADDING-TOP: 10px; BORDER-BOTTOM: #cccccc 1px dotted; BACKGROUND-COLOR: #e7e7e7"><span style="FONT-SIZE: 100%"><code>b <span>=</span> a;<br />
c <span>=</span> b;<br />
d <span>=</span> c;<br />
---<br />
b &lt;= a;<br />
c &lt;= b;<br />
d &lt;= c;</code><br />
</span></div><p><span style="FONT-SIZE: 100%">이해 되시려나요?<br />
<br />
<strong>* verilog PLI 관련</strong><br />
예전에 계속쓰려다 잠시 중단되었는데, PLI 관련 내용은 요즘에 제 작업 관계로 앞으로 1~2개월동안 자주 올라올 확률이 높습니다. 테스트 벤치 생성 유닛과 scoreboard를 C로 만들고 이걸 verilog PLI로 연결할 예정이거든요..<br />
기대하셔도 좋을듯..<br />
<br />
<br />
<strong>다른 검색을 통한 리퍼러 로그.</strong>.<br />
Design Compiler와 VCS, Modelsim에 대한 검색이 많았습니다. <br />
사실, 툴에 대해서는 소개나, 새소식만 하고 있어서 별다른 내용이 없었는데 말이죠.. ^^;<br />
참.. 시뮬레이션 하는 방법은 quick reference guide를 살펴보시면 쉽게 하실 수 있습니다. ^^;<br />
<br />
프로세서에 대한 검색으로 들어오신 분들도 많았습니다. intel, AMD, ARM, calmRISC, M-Core, EISC(감사합니다.)<br />
블로그에 좀더 프로세서에 관련된 좋은 내용을 적을까 싶기도 한데.. 이쪽 분야 하시는 분이 워낙 적어서 누가 관심이 있을까.. 라는 씨니컬한 마음이 될때도 있습니다. ^^;<br />
<br />
아.. 특이한것이 virtual UART를 검색해서 들어오신 분이 계시던데.. <br />
제가 이 블로그에서 PLI + TCL/TK를 조합한 virtual UART라는 걸 만든적이 있다고 말씀을 드린적이 있는데, 검색해서 들어오신분은 아마 회사분이 아니실까 생각합니다. 회사분이시라면 인트라넷에 올라간 virtual UART 관련 메뉴얼을 참조하세요.. 소스코드와 작성법이 다 있으니까요..^^;</span></p><p><span style="FONT-SIZE: 100%">&lt;출처 : <a href="http://babyworm.net/tatter">http://babyworm.net/tatter</a>&gt;</span></p>			 ]]> 
		</description>
		<category>SoC 이야기</category>

		<comments>http://smartcode.egloos.com/2709#comments</comments>
		<pubDate>Mon, 15 Jan 2007 15:51:05 GMT</pubDate>
		<dc:creator>이별사랑</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Verilog newsgroup에서의 몇가지 이야기 ]]> </title>
		<link>http://smartcode.egloos.com/2706</link>
		<guid>http://smartcode.egloos.com/2706</guid>
		<description>
			<![CDATA[ 
  <p><span style="FONT-SIZE: 100%">verilog news group에는 여러가지 verilog 관련 이야기가 나오는데.. 몇가지만 옮겨 봅니다.<br />
<br />
1. Implicit Zero Padding?<br />
verilog의 bit 확장에 대한 부분인데요.. 간략히 써보면 다음과 같은 질문입니다. </span></p><blockquote><span style="FONT-SIZE: 100%"><span style="FONT-FAMILY: Courier New">verilog가 큰 수에 작은수를 대입할때 '0'으로 채우는 것으로 알고 있어.</span> </span><div style="BORDER-RIGHT: #90e0ff 1px dotted; PADDING-RIGHT: 10px; BORDER-TOP: #90e0ff 1px dotted; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #90e0ff 1px dotted; PADDING-TOP: 10px; BORDER-BOTTOM: #90e0ff 1px dotted; BACKGROUND-COLOR: #d2f2ff"><span style="FONT-SIZE: 100%"><code><span style="COLOR: #0000ff">module</span> tilde <span style="COLOR: #66cc66">(</span><span style="COLOR: #aa0000">output</span> <span style="COLOR: #aa0000">reg</span><span style="COLOR: #66cc66">[</span><span style="COLOR: #ff0000">7</span>:<span style="COLOR: #ff0000">0</span><span style="COLOR: #66cc66">]</span> z, <span style="COLOR: #aa0000">input</span> <span style="COLOR: #66cc66">[</span><span style="COLOR: #ff0000">3</span>:<span style="COLOR: #ff0000">0</span><span style="COLOR: #66cc66">]</span> a<span style="COLOR: #66cc66">)</span>; <br />
&nbsp; &nbsp; <span style="COLOR: #0000ff">always</span> @* <span style="COLOR: #0000ff">begin</span> <br />
&nbsp; &nbsp; &nbsp; z <span>=</span> ~a; <br />
&nbsp; &nbsp; <span style="COLOR: #0000ff">end</span> <br />
<span style="COLOR: #0000ff">endmodule</span></code><br />
</span></div><p><span style="FONT-SIZE: 100%">위의 예에서도 상위 4비트는 '0'이 되어야 겠지? 하위 4비트는 당연히 a의 반전이겠지만 말야.. 근데, 적어도 modelsim에서는 상위 4비트가 항상 1이 된다! 내가 잘못 이해한거야? 아님 모델심 문제야?</span></p></blockquote><p><span style="FONT-SIZE: 100%">여기에 대해서 여러가지 대답들이 있는데.. 대답을 보기전에 우선 몇가지 정리해 보시지요..^^;<br />
기본적으로 큰 값에 대한 assign시에 RHS의 값이 LHS값보다 작은 경우 그 값은 확장되면서 상위값은 '0'으로 채워집니다. 왜냐하면 verilog에서 기본적으로 다루어지는 수치형은 'unsigned'이기 때문이죠. <br />
verilog 2001에서는 signed라는 예약어가 들어가서 signed 수로 인식되기도 합니다만, 위의 예에서는 관련이 없겠지요?</span></p><p><span style="FONT-SIZE: 100%">질문자는 assign 동작이 ~(inversion)보다 늦게 일어나므로, inversion 이후에 assign이 일어나야 하며, assign과정에서 확장 동작이 일어나야 하는데, 왜 동작은 inversion이전에 크기 확장이 일어난것 같이 동작하느냐는 것이 가장 중요한 질문의 요지입니다.</span></p><p><span style="FONT-SIZE: 100%">그런데, 위의 예에서는 왜 '1'로 채워지는 것일까요? 이것은 verilog에서 연산을 처리하는 rule과 관계가 있습니다. <br />
이 문제에 대하여 지존급의 대답을 해준 케이던스의 sharp님의 글을 보면 아주 명확히 설명하고 있습니다. </span></p><blockquote><span style="FONT-SIZE: 100%"><span style="COLOR: #ff0000">Verilog first determines the width of an expression based on the largest operand in it, including the LHS of any assignment.</span>&nbsp; Then it extends all operands (actually, all context-determined operands) to the width of their expression before performing any operations.&nbsp; All extensions are done as early as possible, in an attempt to avoid overflows in intermediate results. </span></blockquote><p><span style="FONT-SIZE: 100%">가장 중요한 verilog 연산에서의 크기 확장 법칙이 위의 법칙입니다. 즉, 연산 이전에 LHS를 포함한 모든 연산 요소를 살펴보아서 가장 큰 값에 맞추어 값을 확장하는 것입니다. 이는 "C"언어에서의 type casting rule과 완전히 다르기 때문에 많은 분들이 헷깔리게 되는 것이지요.</span></p><p><span style="FONT-SIZE: 100%">sharp님이 추가적으로 설명한 부분은 사실 저도 정확히는 모르고 있던 부분인데.. (경험으로는 알고 있었습니다만, 명확한 이론은 없었습니다.) 연산에 따른 확장에 대해서 알려주고 있습니다. </span></p><blockquote><p><span style="FONT-SIZE: 100%">When the result of an operation will have a fixed width regardless of the width of its operand, there is no reason for the operand to care about the width of the context.&nbsp; This is true of the reduction operators.&nbsp; The result will always be 1 bit, no matter what the operand width is.&nbsp; There is no point in extending the operand.&nbsp; Instead, the 1-bit result will be extended to the width of the expression as soon as it is produced.&nbsp; The operand of a reduction operator is <br />
self-determined. <br />
On the other hand, all the bits of a bitwise NOT will be available to the expression containing it, and may be assigned or used in another bitwise operation.&nbsp; So the operand of a bitwise NOT is context-determined. </span></p><p><span style="FONT-SIZE: 100%">But one has a self-determined operand and the other has a context-determined operand.&nbsp; The Verilog LRM fully specifies this for all the operands of all the operators.&nbsp; They generally follow a logical scheme that makes sense.&nbsp; And again, in most cases they are designed to give reasonable results, so that most users don't have to worry about them. <br />
</span></p></blockquote><p><br />
<br />
<span style="FONT-SIZE: 100%">상당히 어려운 이야기인 것으로 보입니다만, 실은 같은 width를 보장해야 하는 연산과 그렇지 않은 연산이 있고, 이에 따라 확장을 하는 부분이 있다.. 라고 요약하시면 되겠습니다. 위의 룰은 처음 설명 드린 룰의 보충내용이므로 그리 중요하지는 않습니다. </span></p><p><span style="FONT-SIZE: 100%">이러한 문제는 "고민을 시작하면" 엄청나게 신경쓰이는 문제이므로, 일반적인 coding style을 따져서 문제가 될만한 부분을 초기에 잡아나가는 것이 현명하겠습니다. <br />
즉, 1) verilog coding시에서 width 지정을 정확히 하고, 확장이 필요한 경우 명시적으로 concat operation을 쓰자. 2)일반적으로 <span style="COLOR: #ff3399">width를 지정하지 않은 상수는 verilog에서 32bit으로 처리</span>되므로, 이로 인해 원하지 않는 동작을 피하고 싶으시다면, 항상 상수를 지정할때 width를 지정하는 하자.<br />
이런 일반 룰만 지키신다면 머리 아플일이 없겠지요..^^;</span></p><p><span style="FONT-SIZE: 100%">좋은 Coding Style의 존재 이유가 "불명확한 코드로 나중에 머리 아프지 말고 코딩 부터 잘하자.."이런 것이니까요..^^;<br />
<br />
<br />
추가적으로.. <br />
comp.lang.verilog에 인터뷰에서 asynchonous설계시 주의할점에 대해서 물어봤는데.. 대답을 못했다는 내용도 있네요.^^; 얼마전에 이야기한 </span><a href="http://babyworm.net/tatter/84"><span style="FONT-SIZE: 100%">metastable에 대한 이야기</span></a><span style="FONT-SIZE: 100%">를 묻는 것이지요.. 정말 많이 물어보는 질문이기는 한가보군요..</span></p><p><span style="FONT-SIZE: 100%">&lt;출처 : <a href="http://babyworm.net/tatter">http://babyworm.net/tatter</a>&gt;</span></p>			 ]]> 
		</description>
		<category>SoC 이야기</category>

		<comments>http://smartcode.egloos.com/2706#comments</comments>
		<pubDate>Mon, 15 Jan 2007 15:49:23 GMT</pubDate>
		<dc:creator>이별사랑</dc:creator>
	</item>
	<item>
		<title><![CDATA[ multiple port net의 fixing ]]> </title>
		<link>http://smartcode.egloos.com/2699</link>
		<guid>http://smartcode.egloos.com/2699</guid>
		<description>
			<![CDATA[ 
  <span style="FONT-SIZE: 100%">오늘은 HDL을 이용해서 설계하시는 초보자 분들께서 많이 실수하시는 feedthrough net 문제에 대해서 이야기하고, 이를 synopsys에서 해결하는 방법에 대해서 간략히 설명하겠습니다. <br />
<br />
HDL을 가지고 예술을 하는 것이 아니라면, 최종적으로 구현에 목적을 두어야 한다는 것은 자명합니다. <br />
따라서, 합성 도구에서 좀 더 잘 받아들일 수 있는 형태로 코드를 만드는 것이 더 좋은 결과를 보일 것이라는 것도 당연하겠지요.<br />
<br />
초보분들중에 설계하실때 module로 필요하지 않은 포트를 무조건 많이 만들어두고, 해당 포트를 다시 (이름만 바꿔서) 출력으로 보내는 경우가 간혹 있습니다. <br />
<br />
예를 들어 별 이유없이 ina를 받고, 이를 outa로 출력하는 것이지요.. <br />
<br />
</span><div style="BORDER-RIGHT: #90e0ff 1px dotted; PADDING-RIGHT: 10px; BORDER-TOP: #90e0ff 1px dotted; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #90e0ff 1px dotted; PADDING-TOP: 10px; BORDER-BOTTOM: #90e0ff 1px dotted; BACKGROUND-COLOR: #d2f2ff"><code><span style="FONT-FAMILY: 굴림"><span style="FONT-SIZE: 100%"><span style="COLOR: #0000ff">assign</span> outa <span>=</span> ina;</span></span></code></div><br />
<span style="FONT-SIZE: 100%">이런 경우는 (ina가 다른 곳에서 사용되더라도..) 원래 outa라는 출력 자체가 별 의미가 없는 상황입니다. 모듈 외부에서 ina를 연결하면 될테니까요.. 그런데, 간혹 이런 것을 사용하시는 분들이 있습니다. <br />
이게 왜 문제가 되냐하면, assign문에 의하여 부가적인 로직의 사용없이 전달되는 "feedthrough net"의 경우 verilog netlist상에서 assign으로 표현되고, 이는 backend P&amp;R도구에서 대부분 문제를 일으킵니다. <br />
동일한 이름의 넷이 서로 다른 포트에 붙어있는 경우니까요.<br />
<br />
따라서, synopsys design compiler에서는 이러한 것을 해결하기 위해서 multiple port라는 것을 지정하고, 필요한 경우 이를 fix할 수 있도록 하고 있습니다. <br />
<br />
우선 synopsys design compiler에서 multiple port라 정의되는 넘들의 종류는 아래와 같이 2가지 입니다.<br />
1) feedthrough net (모듈상의 입력이 바로 출력과 연결되는 net. 위의 예입니다.)<br />
2) multiple port net (logic의 출력이 1개 이상의 출력 포트와 연결되는 net)<br />
<br />
이 두 가지 경우 모두 synopsys에서는 netlist를 기록할때 assign문을 이용하게 됩니다. <br />
그런데, 앞에서 설명하였듯이 backend툴들이 assign문과 동작을 잘 안하는 경우가 많기 때문에, 기본적으로 backend tool과 연동하는 netlist의 경우 assign을 사용하지 말것이 권장되고 있습니다. <br />
이러한 문제를 없애기 위해서 가장 좋은 방법은 의미 없는 logic을 중간에 삽입하는 것이겠지요..<br />
<br />
따라서, 이 경우 set_fix_multiple_port_nets 라는 컴파일 옵션을 사용하게 됩니다. <br />
이 옵션에서는 대상을 선택하기 위한 3가지 옵션이 있습니다. <br />
<br />
</span><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #cccccc 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #e7e7e7"><span style="FONT-FAMILY: 굴림"><span style="FONT-SIZE: 100%"><code>-feedthrough <span>:</span> feedthrough에 대하여 fix<br />
-outputs <span>:</span> mutipleoutput에 대한 fix<br />
-all <span>:</span> 두 가지 모두</code><br />
</span></span></div><br />
<span style="FONT-SIZE: 100%">그리고, 어떤 방식으로 해결할 것인지 정하는 2가지 옵션이 있습니다. <br />
<br />
</span><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #cccccc 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #e7e7e7"><span style="FONT-FAMILY: 굴림"><span style="FONT-SIZE: 100%"><code>-constants <span>:</span> 필요한 경우 logic을 duplicate<br />
-buffer_constants <span>:</span> buffer의 삽입</code><br />
</span></span></div><br />
<span style="FONT-SIZE: 100%">따라서 일반적으로는 아래와 같은 명령을 준다면, feedthrough에 대한 문제를 synopsys에서 대부분 해결해 주게되니, 합성 스크립트상에 반드시 추가시킬것을 권장합니다. <br />
<br />
</span><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #cccccc 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #e7e7e7"><span style="FONT-FAMILY: 굴림"><span style="FONT-SIZE: 100%"><code>set_fix_multiple_port_nets -all -buffer_constants</code> <br />
</span></span></div><br />
<span style="FONT-SIZE: 100%"></span><br />
<span style="FONT-SIZE: 100%">&lt;출처 : <a href="http://babyworm.net/tatter">http://babyworm.net/tatter</a>&gt;</span>			 ]]> 
		</description>
		<category>SoC 이야기</category>

		<comments>http://smartcode.egloos.com/2699#comments</comments>
		<pubDate>Mon, 15 Jan 2007 15:44:04 GMT</pubDate>
		<dc:creator>이별사랑</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Metastable문제와 clock domain crossing문제. ]]> </title>
		<link>http://smartcode.egloos.com/2392</link>
		<guid>http://smartcode.egloos.com/2392</guid>
		<description>
			<![CDATA[ 
  <span style="FONT-SIZE: 100%">아마도 비메모리 반도체 설계를 지망하시는 분들이 입사시 면접에서 가장 많이 받는 질문중의 하나가 바로 "<strong><em>metastable이 무엇이며, 이를 어떻게 해결할 수 있는지 설명해 보세요</em></strong>" 가 아닌가 생각합니다. <br />
<br />
실제로 미국 비메모리 반도체 설계(ASIC designer) 직종의 면접에서 가장 많이 질문으로 사용되는 문제가 무엇인지 이야기가 나온적이 있는데, 위의 문제가 가장 많이 사용되었다고 하네요.. (이 내용을 어디서 봤는지는 잊었습니다.) <br />
<br />
학교에서 digital system을 배우시고, HDL을 배우시고, ASIC을 시작한지 얼마 안되는 분들이 간과하기 쉬운 문제가 바로 이 metastable문제이며, 시뮬레이션에서는 별다른 문제 없어보이는데, 칩이 죽는 큰 원인중의 하나입니다.<br />
<br />
<strong>Metastable?</strong><br />
Metastable은 사전적 의미로 "준안정성"이라고 해석됩니다. 즉, 안정화된 값을 가지지 않은 상태인 것이지요.<br />
로직의 출력 전압에 따라 논리적인 값 0/1을 판단하는 디지털 로직에서는 0/1로 판단될 수 없는 전압이 출력되는 경우 이때의 전압 수준을 "undefined voltage"라 부르고, 로직상으로는 이를 "metastable" 상태인 것으로 판단합니다. <br />
<br />
<br />
<strong>플립 플롭에서의 metastable 상태 출력</strong><br />
Flipflop이 입력된 값을 정상적으로 출력단으로 전달하기 위해서는 clock edge의 앞뒤로 일정시간동안 데이터가 안정화 되어 있어야 하는데, 이를 setup time/hold time이라고 합니다. <br />
만일 데이터가 setup/hold time동안 안정화되지 못하고 데이터가 변하면 플릿플롭의 출력 transition time이 비정상적으로 길어지게 되어서 결과적으로 0/1로 판단할 수 있는 수준의 voltage level에 도달하지 못하는 상태가 발생할 수 있습니다. 이런 경우가 바로 플립플롭에서 metastable출력이 발생하는 경우이며, 이 경우 아주 치명적인 논리적 오류를 발생시킬 수 있습니다. <br />
<br />
따라서, 플립플롭을 사용하는 synchoronous 설계에서는 setup/hold 시간을 고려하여 설계를 합니다. 즉, 데이터가 다음 클럭의 setup time 이전에 도착하도록 하고, 같은 클럭의 hold time보다 늦게 데이터가 도착하도록 설계하는 것입니다.<br />
<br />
<strong>Asynchronous input의 문제</strong><br />
플립플롭에 대한 asynchronous input은 이런 조작이 근본적으로 불가능하기 때문에, metastable상태가 발생할 수 있는 경우가 있습니다. <br />
Asynchronous input이란 다른말로, 언제 들어와도 아주 큰 상관 없는 입력이겠죠? ^^;<br />
그러니까, metastable을 피하기 위해 플립 플롭을 하나 더 추가하는 방법으로 metastable문제를 해결합니다. <br />
즉, 첫번째 플립 플롭에서 metastable이 되더라도, 추가적으로 하나 더 플립플롭을 사용하면 에러가 의미있는 로직으로 전파되는 것을 막을 수 있다는 것이지요. &nbsp;이러한 해결방법을 multistage flipflop혹은 multistage synchronizer라 부릅니다. <br />
<br />
<strong>Clock Domain Crossing</strong><br />
사실 metastable문제는 clock domain crossing(CDC)때문에 복잡해집니다. CDC에 대한 이야기는 나중에 자세하게 이야기할 예정이고, 여기서는 간략히 소개만 하겠습니다. <br />
클럭 도메인이라는 것은 동일 클럭 소스를 받는 FF들의 집합 정도가 될까요... 그런데, ASIC을 설계하다 보면 클럭 도메인이 여러개가 될 수 있고, 클럭 도메인 간에 데이터 전달이 일어납니다.<br />
<br />
연관 있는 클럭, 예를 들면 주기가 25ns인 클럭과 50ns인 <span style="COLOR: #ff0000">동일 소스에서 분주</span>된 두개의 클럭인 경우, 두 클럭간의 연관성이 매우 크기 때문에 clock domain crossing에서 별로 고려할 사항이 없습니다. 단지 합성시 tool setting만 제대로 해주면 되죠. ^^;<br />
<br />
하지만, 연관성 없는 두개의 클럭, 예를 들어 클럭 소스도 완전히 분리되어 있고, 주기도 제각각인 클럭 도메인에서 신호가 전달되는 것은 asynchronous와 별다를바 없는 상황인 것입니다. 따라서 클럭 도메인을 변경시키기 위한 synchronizer와 더불어 추가적으로 플립플롭을 하나 더 써서 metastable을 방지해야 합니다. <br />
<br />
아주 간단한 구조적 CDC문제만 이야기 했는데, 사실 CDC에는 구조적인 CDC뿐 아니라 클럭 도메인을 넘어가는 두 신호(혹은 버스)가 다시 조합되어 사용될때 발생할 수 있는 문제인 reconvergence의 문제와 같이 고려해야할 사항이 몇개 더 있습니다. 이 이야기를 좀더 알고 싶으신 분은 </span><a href="http://www.cadence.com/whitepapers/cdc_wp.pdf"><span style="FONT-SIZE: 100%">cadence에서 나온 CDC 자료</span></a><span style="FONT-SIZE: 100%"></span><a title="이 링크를 새창으로 엽니다." style="TEXT-DECORATION: none" href="http://www.cadence.com/whitepapers/cdc_wp.pdf" target="_blank"><span style="FONT-SIZE: 100%"><img src="http://babyworm.net/tatter/plugins/zExternalLink/external.png" align="middle" /></span></a><span style="FONT-SIZE: 100%">를 참조하시면 됩니다. 나중에 이 이야기도 더 해볼 기회가 있을거라고 생각합니다. <br />
<br />
혹시 ASIC position에 면접 보시는 분들.. metastable은 꼭 기억하고 들어가세요.</span><br />
<span style="FONT-SIZE: 100%"></span><br />
<span style="FONT-SIZE: 100%">&lt;출처 : <a href="http://babyworm.net/tatter">http://babyworm.net/tatter</a>&gt;</span>			 ]]> 
		</description>
		<category>SoC 이야기</category>

		<comments>http://smartcode.egloos.com/2392#comments</comments>
		<pubDate>Mon, 15 Jan 2007 05:10:28 GMT</pubDate>
		<dc:creator>이별사랑</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Xilinx, Altera, Quicklogic.. FPGA 이야기 ]]> </title>
		<link>http://smartcode.egloos.com/2097</link>
		<guid>http://smartcode.egloos.com/2097</guid>
		<description>
			<![CDATA[ 
  <span style="FONT-SIZE: 100%">가끔 컴퓨터 부품 리뷰에 보면 웃지못할 기사들이 버젓이 쓰여지는 일이 있습니다. <br />
예를 들면 "이 캡쳐 보드에는 핵심칩으로 xilinx spartan 2가 사용되었고, 이 칩은 다른 무슨 보드에서 사용된 칩이다." 이런 기사 말입니다. <br />
<br />
이러한 기사는 어찌보면 FPGA/CPLD에 대한 이해부족으로 나온 기사라 생각됩니다. </span><br />
<div class="imageblock right" style="FLOAT: right; MARGIN-LEFT: 10px"><a href="http://babyworm.net/tatter/attach/1/1123157678.jpg" target="_blank" rel="lightbox"><span style="FONT-SIZE: 100%"><img title="" height="246" alt="" src="http://babyworm.net/tatter/attach/1/1123157678.jpg" width="249" border="0" /></span></a></div><br />
<br />
<br />
<a title="클릭하면 위키 링크로 이동합니다." href="http://en.wikipedia.org/wiki/Xilinx" target="_blank"><span style="FONT-SIZE: 100%">Xilinx</span></a><span style="FONT-SIZE: 100%"></span><a title="이 링크를 새창으로 엽니다." style="TEXT-DECORATION: none" href="http://en.wikipedia.org/wiki/Xilinx" target="_blank"><span style="FONT-SIZE: 100%"><img src="http://babyworm.net/tatter/plugins/zExternalLink/external.png" align="middle" /></span></a><span style="FONT-SIZE: 100%">, </span><a title="클릭하면 위키 링크로 이동합니다." href="http://en.wikipedia.org/wiki/Altera" target="_blank"><span style="FONT-SIZE: 100%">Altera</span></a><span style="FONT-SIZE: 100%"></span><a title="이 링크를 새창으로 엽니다." style="TEXT-DECORATION: none" href="http://en.wikipedia.org/wiki/Altera" target="_blank"><span style="FONT-SIZE: 100%"><img src="http://babyworm.net/tatter/plugins/zExternalLink/external.png" align="middle" /></span></a><span style="FONT-SIZE: 100%">라는 회사에서 나온 대부분의 칩은 </span><a title="클릭하면 위키 링크로 이동합니다." href="http://en.wikipedia.org/wiki/FPGA" target="_blank"><span style="FONT-SIZE: 100%">FPGA</span></a><span style="FONT-SIZE: 100%"></span><a title="이 링크를 새창으로 엽니다." style="TEXT-DECORATION: none" href="http://en.wikipedia.org/wiki/FPGA" target="_blank"><span style="FONT-SIZE: 100%"><img src="http://babyworm.net/tatter/plugins/zExternalLink/external.png" align="middle" /></span></a><span style="FONT-SIZE: 100%">나 </span><a title="클릭하면 위키 링크로 이동합니다." href="http://en.wikipedia.org/wiki/CPLD" target="_blank"><span style="FONT-SIZE: 100%">CPLD</span></a><span style="FONT-SIZE: 100%"></span><a title="이 링크를 새창으로 엽니다." style="TEXT-DECORATION: none" href="http://en.wikipedia.org/wiki/CPLD" target="_blank"><span style="FONT-SIZE: 100%"><img src="http://babyworm.net/tatter/plugins/zExternalLink/external.png" align="middle" /></span></a><span style="FONT-SIZE: 100%">이며, 이러한 칩들은 필요할때마다 구현하고자 하는 논리 회로를 올릴 수 있도록 구성된 칩입니다. <br />
<br />
따라서, &nbsp;이 회사의 칩은 구성하는 사람이 원하는 대로 바꿀수 있기 때문에 외부에서 보이는 칩의 이름이 xilinx spartan 2이건 altrea cyclon이건 아무런 의미가 없다는 것이지요. <br />
예를 들어 동일한 xilinx spartan2라도 네트웍 시스템하는 사람은 "네트웍 관련 로직"을 넣어서 구현할테고, 그래픽 카드 만드는 사람은 "그래픽 처리 기능"을 넣어서 만들테고, MP3 플레이어라면 "MP3 decoder"를 넣어서 구현할테니 말입니다. <br />
<br />
<strong>FPGA는 어떤 칩인가</strong><br />
이런 칩들은 reconfigurable logic들인데요.. (antifuse형태를 쓰는 quicklogic과 actel은 잠시 접어두고요..)<br />
이는 초기에 칩을 만들때 범용성 있는 로직들을 무수히 넣어두고, 이 로직들간의 연결을 제어할 수 있도록 해둔 것입니다. 즉, 로직 간의 연결제어에 따라 "원하는" 동작을 할 수 있는 새로운 칩이 되는 것이지요. <br />
대신, 필요 없는 로직도 많고(하드웨어에서 필요없는 로직이 많다는 말은 단가가 비싸진다는 말과 동일합니다), 로직간의 연결도 멀고 해서 ASIC에 비하면 엄청나게 느리고, 전력소모도 많다는 것이 정설입니다. <br />
<br />
초기에 이러한 형태의 칩은 하드웨어 설계자들이 구현하고자 하는 동작을 상당히 빠르게 FPGA에 올려서 시스템상에서 테스트(prototyping)하는 목적으로 사용되었습니다. <br />
하지만, 최근에는 공정기술이 좋아지면서, FPGA도 어느정도 속도가 나오고 있구요.. ASIC공정을 타기 위한 NRE가 워낙에 비싸지다보니.. 소량이면서 아주 빠른 동작이 필요없는 경우 시스템에서 FPGA를 직접 이용하는 경우도 많이 늘어났습니다. (FPGA 제작사들은 이런 마켓을 위해서 spartan이나 cyclon과 같은 저가 FPGA를 출시하고 있습니다. )<br />
<br />
<strong>조금더 들어가서..</strong><br />
FPGA는 로직간의 연결을 제어하는 방식에 따라 여러가지 칩이 존재하는데, 가장 빈번히 사용되는 방식이 SRAM 방식과 antifuse방식입니다. SRAM방식은 로직간의 연결 제어 정보를 SRAM에 두고, 이 SRAM의 프로그램이 변경될때마다 다른 형태의 로직으로 재구성될 수 있도록 만든 형태입니다. <br />
이에 반해서, antifuse방식은 프로그래밍시에 로직 간 붙어있는 fuse중에 불필요한 fuse를 끊어서, 로직간의 연결을 만드는 방식입니다. 따라서, Antifuse 형태는 SRAM 형식보다 (일반적으로) 저전력이며 빠르지만, 재구성될 수 없다는 단점이 있습니다. <br />
<br />
<strong>다른 잡설들</strong><br />
요즘 공정이 미세해지면서 Fab의 NRE가 너무 비싸지고, 고려사항도 많아지고.. 하면서..<br />
이러다 FPGA(실은 </span><a title="클릭하면 위키 링크로 이동합니다." href="http://en.wikipedia.org/wiki/Structed_ASIC" target="_blank"><span style="FONT-SIZE: 100%">structed ASIC</span></a><span style="FONT-SIZE: 100%"></span><a title="이 링크를 새창으로 엽니다." style="TEXT-DECORATION: none" href="http://en.wikipedia.org/wiki/Structed_ASIC" target="_blank"><span style="FONT-SIZE: 100%"><img src="http://babyworm.net/tatter/plugins/zExternalLink/external.png" align="middle" /></span></a><span style="FONT-SIZE: 100%">)가 대안이 되는 거 아니냐.. 하는 이야기도 있습니다. <br />
이런 마켓을 노리고 Altera는 hardcopy라는 칩도 선보였구요.. <br />
하지만, 아직까지는 별로 좋은 반응은 아닌듯 합니다. 초기에는 "열광적인" 지지자들이 꽤 많이 나왔는데 말입니다.<br />
<br />
국내에서는 한백전자나 휴인스와 같은 FPGA 보드 사업하는 회사가 잘 되고 있지요.. <br />
책또한 국내에서 HDL이나 설계는 대부분 FPGA를 이용한 설계 책들이 주류를 이루고 있지요..<br />
게다가 xilinx FPGA 관련 책(아래)이 이쪽 분야의 책 치고는 아주 선전했습니다. 이쪽 분야 국내서중에 몇 안되는 유용한 책이었구요.. (저자인 김혁씨는 이제 Xilinx FAE로 들어가신것으로 알고 있으며, 이번에 새 버젼이 나왔습니다. 사실 새 버젼에 대해서는 약간 아쉬움이 있습니다만.. )<br />
</span><fieldset style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 10px; WIDTH: 90%; PADDING-TOP: 5px"><legend>Real XILINX FPGA World 8.1 &nbsp;</legend><a href="http://www.aladdin.co.kr/shop/wproduct.aspx?ISBN=8982300929&amp;copyPaper=1&amp;ttbkey=ttbbabyworm2309001" target="_blank"><img style="MARGIN: 0px 5px 5px 0px" alt="" src="http://image.aladdin.co.kr/coveretc/book/coversum/8982300929_1.jpg" width="75" align="left" border="0" /></a>김혁 지음<br />
</fieldset><span style="FONT-SIZE: 100%">&nbsp; <br />
<br />
예전(99년이던가 기억이 가물)에 verilog HDL synthesis라는 Bhasker 책을 랩에서 번역 작업을 한적이 있었습니다. 모든 예제를 synopsys로 합성해서 합성 결과를 같이 보여주려고 했었지요.. 헌데..아마도 국내에서 이 편역본을 출간했으면 망하지 않았을까 생각도 합니다. ^^; 사실 학교에선 강의시간에 synopsys를 사용하는 분들도 없을테고.. 기껏해야 몇몇 대학원생들만 사서 보셨을텐데(엔지니어 분들에게는 너무 쉬운책이니..) 채산성이 안 맞죠..^^;<br />
<br />
음.. 그러고보니.. 글의 제목이 FPGA 이야기 였네요.. -_-;</span><br />
<span style="FONT-SIZE: 100%"></span><br />
<span style="FONT-SIZE: 100%">&lt;출처 : <a href="http://babyworm.net/tatter">http://babyworm.net/tatter</a>&gt;</span><br />
<br />
			 ]]> 
		</description>
		<category>SoC 이야기</category>

		<comments>http://smartcode.egloos.com/2097#comments</comments>
		<pubDate>Sun, 14 Jan 2007 13:49:57 GMT</pubDate>
		<dc:creator>이별사랑</dc:creator>
	</item>
</channel>
</rss>
