ALTERA사의 MAX7000시리즈. PLD(Programmable Logic Device) 를 써야한다..
책은 실습으로 배우는 VHDL, VERILOG HDL 디지털 설계와 합성의 길잡이 뿐.. 실습으로 배우는 VHDL 내용중 Quartus II 로 VHDL코드로 설계하는것이 나와있다.
하지만 난 VerilogHDL을 써야한다... (솔직히 아직 VHDL이랑 VerilogHDL 둘다 모른다.. -_-; 아는건 C뿐..)
아래의 내용들은 Janick Bergeron의 Writing Testbenches Functional Verification of HDL Models 1st edition 중
"THE HDL PARALLEL ENGINE" 중 일부 페이지(p.125~132)를 요약 정리한 것 입니다.
우선 C언어가 하드웨어 설계를 모델링하는데 있어서
다음과 같은 세 가지 기본적인 개념들이 부족하다는데서 시작하겠습니다.
1. Connectivity : 설계를 좀 더 단순한 블록으로 기술하고 나서 블록들끼리 서로 연결하는 능력 (예를 들어 Schematic capture tool)
2. Time : 설계의 내부상태를 시간 상에서 어떻게 변해가는지 나타낼 수 있는 능력 (단, 실행시간과 다른 개념입니다.)
3. Concurrency : 각각 독립적으로 동일한 시간에 일어나는 동작을 기술할 수 있는 능력
물론 충분한 시간 등이 주어진다면 C언어로도 하드웨어 모델링 가능합니다.
그러나 각 설계에 대해 설계자마다 기본적인 개념들의 구현 방식이 다를 것 입니다.
위와 같은 기본적인 개념들은 언어적인 차원에서 지원되어야 효과적입니다.
C나 C++ 등에 위와 같은 개념들을 몇몇 혹은 전부 채용하여 확장하려는 시도가 많습니다.
그 중에서 예를 들면, Verilog과 C++을 섞은 듯한 VERA가 있구요...
C++ 기반의 설계 및 검증 환경을 개발하기 위한 SystemC도 있습니다.
그런데 위 세가지 기본 개념들은 Verilog와 VHDL에서 각각 다르게 구현하고 있습니다.
1. Connectivity
- Verilog : module 내 module들을 직접 가져오고 module의 pin들은 wire나 reg로 연결함으로써 구현합니다. 단, reg로 연결이 안되는 상황이 있습니다.
- VHDL : entity, architecture, component, 그리고 configuration 등을 이용하여 구현합니다. 이러한 VHDL의 connectivity 매카니즘은 많은 구문과 명백히 반복되는 부분으로 인해 VHDL을 배우는데 있어 종종 매우 혼란스러운 개념 중 하나가 됩니다.
2. Time
- Verilog : 'timescale이라는 컴파일러 지시어를 이용하여 여러 module들에 대한 특정 시간단위를 지정해줍니다.
- VHDL : 모든 시간 값은 절대적입니다. Verilog처럼 따로 지정해주지 않아도 됩니다.
3. Concurrency --> 구현 상 가장 차이 나는 부분
- Verilog : Concurrency 사용이 설계자에 달려 있으므로 Coding Style이 엄격하면 Concurrency 개념 이해가 필요없을 수 있습니다.
- VHDL : 언어 차원에서의 엄격한 concurrency 사용으로 인해 Concurrency 개념 이해가 필요합니다.
3번 Concurrency와 관련된 예제가 하나 있습니다.
VHDL과 Verilog는 시간이 진행된 후 행동하는 것이 다릅니다.
VHDL의 경우 process를 실행하기 전에 미래의 값을 assign 합니다.
Verilog의 경우 미래의 값을 assign하기 전에 process를 실행합니다.
다음은 그러한 차이를 볼 수 있는 예제 코드 입니다.
-- testcase.vhd
--
library IEEE ;
use IEEE.std_logic_1164.all ;
entity testcase is
end testcase ;
architecture test of testcase is
signal R : bit := '0' ;
begin
process
begin
R <= '1' after 10 ns ;
wait for 10 ns ;
assert R = '1'
report "R is not 1"
severity NOTE ;
wait ;
end process ;
end test ;
// testcase.v
//
module testcase ;
reg R ;
initial
begin
R = 1'b0 ;
R <= #10 1'b1 ;
#10 ;
if (R !== 1'b1) $write ("R is not 1\n") ;
end
endmodule
기능적으로 동등하게 보이는 코드이지만
Verilog에서는 "R is not 1"이라는 메시지가 나오는 반면
VHDL에서는 아무 메시지도 나오지 않습니다.
(ModelSim SE 5.5c에서 확인했습니다.)
이는 Verilog에서는 process를 가장 먼저 실행하지만
VHDL에서는 새로운 값을 먼저 assign 하기 때문입니다.
위와 같은 행위는 VHDL/Verilog 사이에서 새로운 값이 오고가는
co-simulation 환경에서 영향을 미칠 수 있습니다.
음... 여기까지 책에 있는 내용 일부를 위와 같이 요약했습니다;;
좀 이상한 부분이 있다면 책이 이상한게 아니라 제가 잘못 번역할 수도 있구요...
좀 부족한 부분이 있다면 책이 부족한게 아니라 제가 요약을 많이 해버려서 그럴 수도 있습니다.
더 알고 싶으신 내용이 있다면 앞서 소개한 책을 보셔두 좋구요...
관련 내용을 찾아 관련 서적이나 인터넷 검색해 보아도 괜찮을 것 같습니다;;
그럼, 이만 줄이겠습니다.
- 정진일 -
Re:VHDL 과 Verilog HDL의 명확한 차이점을 알고 싶어요
번호:604 글쓴이: 잘잘
조회:102 날짜:2003/04/10 17:21
.. 두다 Hardware description language 입니다.
디지털 로직(H/W)을 표현하기 위해서 만들어진 언어 입니다.
VHDL이 나중에 개발된 언어이므로 좀더 기능이 많은 것 같습니다.
verilog는 HDL coding을 하기 전 부터, schematic을 회로를 설계하던 때 부터
많이 사용을 하여 왔습니다. 그래서 HDL coding 방식으로 설계 방식이 바뀐 후에도
많이 들 사용하고 있습니다.
이유는 합성을 위하여는 RTL level로 표현을 많이 하는데 verilog는 이런 것을 표현하는데
불편함이 별로 없습니다.
하지만 어째든 제 생각으로는 VHDL이 verilog보다 약간은 상위 레벨 언어라고 생각이 됩니다.
그리고 요즘 나오는 SystemC는 VHDL보다는 아주 상위의 언어 인 것 같습니다.
거의 C++을 base로 하고 있어서 C++에는 기술할 수 있는 기능과
HDL coding을 위한 새로운 언어 인 것 같습니다.
하지만 아직 관련 tool이나 환경이 부족한 것 같습니다.
결론적으로 새로 처음 해보시겠다고 하면 VHDL을 하시고요.
회사에서 Verilog로 하게 되는 경우도 있으므로,
VHDL을 공부하고 나중에 verilog도 공부하여 두시면 좋습니다.
일단은 한가지라도 공부하여 보세요.
새로고침
아바타 꾸미기
꼬리말쓰기
상용 몇자 덧붙이자면 VHDL과 Verilog는 100% 서로 1대1 포팅할 수 있을정도로 표현방법에 차이가 있을 뿐입니다. VHDL보다 Verilog가 좀더 Coding Style이 자유로워서 간편하게 짤 수 있는반면 bug에 대한 가능성도 높아 신중한 코딩이 필요합니다. Programming 언어에서 C와 비슷한 것이 Verilog이고 파스칼과 비슷한 것이 [2003/04/11]
상용 VHDL 이라면 이해가 되실지... ^^ 아 그리고 학계에선 주로 VHDL을, industry에서는 주로 Verilog를 많이 쓴다고 하지만 절대적인건 아니고, 우리나라에서는 VHDL이 우세하고 미국 Silicon Valley의 경우 Verilog를 훨씬 많이 쓴다고 합니다. [2003/04/11]
상용 결국 HDL을 할 사람이면 두 언어모두 '분석'은 할 수 있어야하고 자기가 편한 언어로 coding을 하면 되는 것입니다.전 개인적으로 VHDL로 시작해서 지금은 Verilog가 훨씬 편하더군요 (C하고 닮은점이 좋더라구요^^) [2003/04/11]
음.. Verilog가 C와 닮았다는군.. 다행이야.. ㅎㅎ
언어는 그렇다 치고.. Altera와 Xilinx는 뭔차이냐..
이건 S전자와 L전자의 차이인거같다..
규모나 이런건 잘 모르겠지만.. 두회사 모두 FPGA칩을 만드니..
Altera社는 Quartus II 라는 Tool을 사용.
Xilinx社는 ISE 라는 Tool을 사용.
(더 조사가 되면 나중에 추가해야징. ㅎㅎ )
그래서!! EPM7064 PLD를 프로그램 하기위해서 Quartus II를 설치했다! 버전은 8.1. 이유는 없다.. ㅎ
1. FPGA와 PLD의 차이점은 무었입니까?
FPGA(Field Programmable Gate Array)는 PLD(Programmable Logic Device)의 한 종류입니다.
모두 회로(디지털)를 프로그램할 수 있다는 특징이 있죠.
PLD는 초창기 간단한 로직을 프로그램 할수 있는 PAL, GAL로 시작하여 오늘날 수천만
게이트를 구현할 수 있는 대형 FPGA에 이르기까지 종류와 사이즈면에서 많이 진화했습니다.
특히 FPGA는 연구실이나 실험용이 아닌 현장에서 바로 쓰일 수 있다는 의미에서 앞에 'F'가
붙었습니다.
2. FPGA칩을 이용해 양산되는 제품이 있습니까? 있다면 그 예는?
FPGA로 양산되는 제품들은 아주 많지는 않지만 적지는 않습니다. 수량이 많지 않으면서
고가 제품들에 특히 사용되는데 계측장비나 통신장비가 그 예입니다.
참고로 PLD는 ASIC에 비해 단가가 높습니다. 따라서 대량으로 제품을 양산할 시 ASIC으로
가는 것이 맞지만 수량이 적을 시, ASIC의 초기 양산비용이 높아 PLD(FPGA)로 양산까지
가능경우가 이런 경우입니다.
3. 특정언어가 특정칩만을 프로그래밍 할수 있는건가요?
PLD도 그 종류가 다양하듯 언어 또한 다양합니다. 그러나 현재 표준언어는 VHDL과 Verilog
이 두가지 뿐입니다. 용량이 아주 작거나 용도가 특이한 PLD의 경우 별도의 기술언어가
따로 존재할 순 있겠지만 이런 경우는 극히 일부분이고 일반적으로 칩은 언어에 구애받지
않습니다.
음.. 그놈이 그놈인가부다..
다리가 겁나많은 BGA타입 FPGA같은경우는 기능이 더 많을거같은데..