2009-11-26 4 views
2

저는 항상 내 자신의 마이크로 프로세서를 만들고 싶습니다. How can I make my own microcontroller?을 읽었습니다.일반 프로그래밍에서 HDL 시작하기

Verilog 및 VHDL을 배우기 위해 여러 번 시도했습니다. 그러나 저의 삶을 위해 나는 언어 스타일을 고집 할 수 없습니다. 나는 C/C++/C# 배경에서 왔고 Ruby로 기능적 프로그래밍을하는 것으로 성공을 거두었 다.

또한

(내가 생각하는 내 절차 적 방법을 잊다 수 있도록) 사람이 처음부터 HDL 언어를 가르치는 책이나 온라인 자원을 제안 할 수있다, 나는하는데 어려움을 시뮬레이션하는 방법을 정확하게 주위에 내 머리를 얻는 데 HDL 프로그램. 하드웨어에 인쇄하거나 물건을 넣는 것과 같은 것은 없기 때문에 FPGA없이 프로그램을 테스트하는 가장 좋은 방법은 무엇입니까? (언젠가 그 중 하나를 주문할 것입니다!). 정확히 어떻게 시뮬레이션합니까?

기본적으로 나는 HDL과 시뮬레이션에 대한 내 머리를 얻을 수 있도록 도와 줄 사람이 필요합니다.

답변

3

HDL은 하드웨어를 모델링 한 것입니다. 하드웨어로 모든 일이 즉시 발생합니다. 하드웨어 란 어떤 의미에서 다른 논리 게이트의 입력과 출력에 연결된 논리 게이트의 집합을 의미합니다. 이것은 본질적으로 FPGA 또는 ASIC (FPGA에서 이러한 연결이 프로그래밍 가능함)입니다. 입력을 흔들면 로직 게이트 체인을 통해 파급됩니다. 모든 로직 게이트는 입력을 지속적으로 평가하는 작은 프로세서라고 생각하십시오.

그래서 HDL에서 가장 먼저 고려해야 할 사항은 모든 과제가 동시에 발생하고 있다는 것입니다. "정상적인"의미 (일반적인 프로그래밍 언어처럼 다른 명령문 다음에 나오는 한 문장)는 프로세스 블록 (VHDL 또는 Verilog의 항상 블록) 안에 있습니다. 그러나 모든 프로세스 블록 (또는 항상 Verilog의 블록)도 동시에 실행된다는 것을 인식해야합니다.

HDL은 하드웨어의 동시성을 모델링하려고합니다.

소프트웨어 개발자에게 HDL을 가르치려는 책 ... 나는 생각하지 않습니다. 대부분은 하드웨어 엔지니어를 대상으로합니다.

당신은 루비 프로그래밍을 한 적이 있다고 말씀하셨습니다. 루비로 작성된 HDL로 게임을하고 싶다면 RHDL을 시험해 볼 수 있습니다 : http://rhdl.rubyforge.org/ 기본 HDL 개념이 있으며 VHDL과 매우 흡사합니다. 그러나 루비이므로 내부에서 좀 더 실험해볼 수 있습니다. 모델을 작성하고 시뮬레이션 할 수 있습니다. 일부 예제가 포함되어 있습니다.

+0

내가 어떻게 RHDL을 시도해보고 어떻게 작동하는지 보게 될 것 같아. – Earlz

+0

좋아, 내가 생각하기에 RHDL이 HDL 프로그래밍을 시작하는 데있어 최선의 방법이라고 생각해. 나는 예제와 같은 실행과 사용자 가이드를 가지고있다. RHDL이 있다는 것을 제 관심으로 가져 주셔서 감사합니다! – Earlz

+1

"정상적인"의미 (일반적인 프로그래밍 언어처럼 다른 명령문 다음에 나오는 명령문)는 프로세스 블록 내부에 있습니다 (VHDL에서는 ...) 신호와 변수는 매우 다릅니다 VHDL의 것들 신호는 프로세스의 * end *에서만 새로운 가치를 얻습니다. 변수는 "정상적인"소프트웨어처럼 동작합니다. –

0

디버깅을 위해 Verilog는 $ display 또는 $ monitor와 같은 printf와 유사한 시스템 작업을 제공합니다. 물론 합성이 불가능하지만 모든 시뮬레이터가이를 이해해야합니다. 그런데 디버깅은 SW 디버깅과 마찬가지로 이미 언급 된 $ diplay와 stuff를 사용하여 신호 값과 다른 것을 콘솔에 출력함으로써 수행됩니다. 그리고 다른 한편으로는 신호 파형을 쳐다 보면서 아픈 곳을 찾을 때까지 기다리십시오. FPGA를 필요로하지 않는 경우에도 훌륭한 시뮬레이터 만 있으면됩니다. 하지만 일부 LED 깜박이는 FPGA가 항상 좋은 것입니다 :)

시뮬레이션을 위해서는 ModelSim을 살펴 봐야합니다. 당신이 창문에 있다면 학생용 판이 무료로 제공됩니다.
http://www.model.com/content/modelsim-pe-student-edition-hdl-simulation

또 다른 옵션은 자일링스의 ISE Web-Pack입니다. 이것은 Linux에서도 작동하며 완벽한 FPGA 흐름을 포함합니다. http://www.xilinx.com/tools/webpack.htm
그러나 시뮬레이션을 위해 ModelSim을 사용하는 것이 좋습니다. 나는 손이

일부 시작 포인트는
http://www.asic-world.com/
http://www.doulos.com/knowhow/verilog_designers_guide/

2

디버깅은 시뮬레이터와 파형 뷰어로 이루어집니다 - 당신은 당신의 내부 시간이 지남에 무엇을하고 있는지 볼 수 있습니다. 또한 Modelsim을 사용하면 프로세스 내에서 소프트웨어와 같은 중단 점을 수행 할 수 있습니다.

당신은 "보고서"문을 사용하여 VHDL 물건을 인쇄 할 수 있습니다,하지만 당신은 매우 비 SW의 방식으로 포맷을해야 할 다음 textio package를 사용하여 다소 쉽게 인쇄의

report "The value is not " & integer'image(some_integer_variable);

.

다른 팁 - 거기에 많은 코드가 있습니다. use ieee.std_logic_arith.all;이 있습니다. 그 라이브러리는 IEEE 모니 커에도 불구하고 비표준입니다. 대신 ieee.numeric_std.all을 사용하십시오.

시작하기 - 시계가 틱 할 때마다 하나씩 올라가는 카운터를 만듭니다 (if rising_edge(clk) then 관용구 사용). 카운터가 특정 값에 도달하면 신호를 토글합니다.

기본적으로 clk 신호를 '0', '1', '0', '1'로 만드는 것을 의미하는 테스트 벤치를 만듭니다. 당신의 카운터가 올라가보고, 토글 신호 전환, 심

process: 
begin 
    clk <= '0'; 
    wait for 5 ns; 
    clk <= '1'; 
    wait for 5 ns; 
end process; 

실행 :

방법을 이해하기 쉬운이 있습니다. 카운터를 충분히 크게 만들면 FPGA를 빌드하고 토글 신호를 LED 핀에 연결하여 LED 플래시를 켜고 끌 수 있습니다.

"Hello World"와 동일한 FPGA입니다.

0

내 답변은 몇 년 늦어 질 수도 있지만, 이는 동일한 쿼리를 가진 미래의 시청자를위한 것입니다.

나는 또한 C++/C# 배경에서 왔습니다. 내 대답은 VHDL 아니라 Verilog HDL에만 관심. 당신이 많이 찾을 수 있습니다

을 : 저는 현재 여기에 내가 더 나은의 Verilog을 이해하는 데 도움 책을하는이 용어를 수강하고있어 도서 hereasic-world 사이트에 나와 있습니다.

skorgon이 대답 했으므로 시뮬레이션을 위해 자일링스 ISE를 사용할 수 있습니다. Verilog와 관련하여 C++/C#을 사용하는 Visual Studio와 가장 유사합니다. 그러나 원시적 인 느낌 (IDE는 없음)을 위해 iVerilog 또는 Icarus Verilog을 사용해 볼 수 있습니다. 그것은 우리 과정에서 사용되는 것입니다. iVerilog를 사용하여 Verilog 파일을 실행하는 방법은 다음과 같습니다.

텍스트 편집기에서 코드를 입력하고 .vl으로 bin 폴더 of iVerilog 내에 저장하십시오. 명령 프롬프트에서 bin 폴더로 이동하십시오.그런 다음 다음을 입력 :

iverilog -o <name of exe file you want for your .vl file> <your .vl file> 
vvp <name of exe file> 

예 :이 도움이

iverilog -o samp sample.vl 
vvp samp 

희망!

0

때때로 인스턴스 이름을 인쇄해야합니다. 동일한 구성 요소의 많은 인스턴스가 설계에 사용되는 경우 유용합니다 : "... VERILOG (디스플레이 시스템 기능의 % m)에서는 간단하지만 VHDL에서는 코드 작성이 더 필요합니다. $ display ("dbg 인스턴스 이름 % m at % d", $ time); systemc에서 인스턴스 이름을 인쇄하는 방법에 대한 예는이 사이트에서도 볼 수 있습니다

디자인에 많은 바로 그 구성 요소의 인스턴스.

첫 번째 텍스트 IO 라이브러리를 호출 할 수 있으며, 라인의 변수가 선언되어야한다 . 세부 사항을 볼 수있는 예를 들어 인쇄를 참조하십시오

.

다음 두 가지 옵션 중 하나를 선택해야한다 : 하나는 : 만 디버그 문자열에 인스턴스 이름과 다른 옵션은 항목 및 아키텍처 이름과 같은 추가 정보를 제공합니다 ... " http://bknpk.ddns.net/my_web/MiscellaneousHW/vhdl_path_name_print.html

0

당신이 C 프로그래밍에 강한 경우, 다른 프로그래밍 언어를 아주 쉽게 배울 수 있습니다. 하드웨어 설명 언어는 그다지 다르지 않습니다. 그러나 일반적으로 사용되는 하드웨어 구성 요소의 기본 사항을 알아야합니다. 예를 들어, full adder의 설계는 전체 가산기의 입력 및 출력이 무엇인지 알면 매우 간단합니다. 또한 입력과 출력 간의 관계를 알아야합니다. pdf은 초보자에게 유용 할 수 있습니다.

+0

방금이 답변을 유발 한 차선책 인 것을 깨달았습니다 .- 하향 변환되었습니다 .-) – kleopatra