Learn-By-Fixing CPU

Learn-By-Fixing CPU

October 28, 2022 Digital Electronics 0

를 시뮬레이션하면 마지막으로 학생들을 겨냥한 간단한 16 비트 RISC 프로세서를 보았습니다. 문서와 누락 된 파일뿐만 아니라 누락 된 파일에 대해 조금 도움이 필요했습니다. 그러나 EDA 놀이터라는 인터넷 도구에서 무료로 무료로 활용할 수 있도록 관리 할 수있었습니다. 이번에는 코드 세부 정보와 정확히 시뮬레이션을 실행하는 방법으로 당신을 데려 갈 것입니다.

이미 체크 아웃하지 않은 경우 이전 게시를 참조하십시오. 다이어그램뿐만 아니라 테이블은이 게시물에서 논의 된 파일을 이해하는 데 도움이되는 고급 개요를 제공합니다.

진정한 FPGA에서 이것을 정말로 프로그래밍하기를 원한다면, 당신은 할 일이 약간 일할 것입니다. 레지스터 초기화뿐만 아니라 시뮬레이션을 위해 잘 작동하는 방법에서는 레지스터 초기화가 수행되지만 정품 FPGA에서는 작동하지 않습니다. 어쨌든, 시작하자!

파일 – 파일

각 데이터를 개별적으로 가져 가면 이해하기가 매우 어렵지 않습니다. 다음은 빠른 렁입니다 (인터넷 시뮬레이션에서 사용하면 데이터 이름을 활용하는 데이터 이름을 사용합니다) :

parameter.v – 이것은 다른 모든 파일에 대한 기본 정의를 설정하는 포함 데이터와 같습니다.

prog.v – 이것은 방향 메모리입니다. 간단한 모듈, 주소뿐만 아니라 해당 주소의 데이터를 제공합니다. $ READMEMB 지시문은 데이터 (test.prog)에서 데이터를 읽습니다.

Register.v – 레지스터 파일입니다. 이것은 방향 메모리와 거의 같지만 두 개의 체크 아웃 포트뿐만 아니라 그것으로 구성 할 수 있습니다.

data.v – RAM 메모리. 이것은 레지스터와 거의 동일하지만 단일 체크 아웃 포트뿐만 아니라 더 큰 것입니다. 메모리 주석을 인쇄 할뿐만 아니라 데이터를 열고 디버깅을위한 것으로 삭제 된 일부 시뮬레이션 코드가 있습니다. 예비 콘텐츠는 test.data 파일에서 제공됩니다.

ALU.V – 이것은 이것이 복잡하다고 믿을 것이지만, 그렇지 않습니다. 그것은 단지 두 개의 입력을뿐만 아니라 출력을 생성하는 것입니다. 단순한 것과 같은 간단한 것이거나 뺍니다. 항상 @ (*)는 Verilog 가이 시계 논리를 생성하지 않도록 알려줍니다. 그것은 단순히 단순한 게이트와 muxes로 변합니다.

DataPath_unit.v – 이렇게하면 더 복잡한 파일 중 하나이지만 주로 대량으로 표시됩니다. 이 데이터는 모든 리소스 (등록기뿐만 아니라 기억과 같은)뿐만 아니라 전선을 함께 생성합니다.

Control_unit.v – 하나의 더 긴 모듈, 이것은 현재 지시에 따라 제어 선을 설정하는 방향 테이블을 구현합니다.

alucontrol.v -이 데이터는 ALU에 대한 지침을 해독합니다. 그것은 원래 게시물에 누락되었습니다. 이상하게, aluControl 파일이있는 똑같은 사이트에 하나 이상의 CPU가 하나 더 있지만 다른 방향으로 설정된 경우는 분명합니다. 그러나 스타일 테이블을 활용할뿐만 아니라 그 데이터를 유지하기 시작하면 i를 재현 할 수있었습니다. [FPGA4Students]가 이것을 수정하면 파일이 매우 다르게 보일 수 있습니다.

Design.sv – 사용하고있는 EdaPlayground 시뮬레이터 에이 데이터가 필요합니다. 여기에는 최상위 요소 (데이터 경로와 제어 장치)가 포함됩니다. EdaPlayGround는이 파일 만 처리하기 때문에 위에서 언급 한 다른 파일을 포함 할 필요가 있습니다. 이로 인해 각각의 경고가 시간표 지침이 있지만 이는 무해합니다.

testbench.sv – TestBench는 진짜 디자인의 일부가 아니지만 시뮬레이션을 설정하고 결과를 수집합니다. EdaPlayground에서 작동하려면 조금 수정해야했지만 작업은 동일합니다. 그것은 단지 CPU를 생성하고 시계를 공급하고 잠시 동안 실행할 수 있습니다. 테스트 프로그램과 메모리 내용은 test.prog 및 test.data에 있습니다.

시뮬레이션

당신은 두 가지 중 하나를 할 수 있습니다. 스타일의 복사본을 준비 할 수 있지만 가장 훌륭한 옵션이 아닐 수도 있습니다. 나는 당신이 edaplayground에 가서 새로운 Verilog 프로젝트를 제안 할 것을 제안합니다. 그런 다음 원본 게시물에서 파일을 이동하기 시작하십시오. 누락 된 파일뿐만 아니라 오류가 발생할 수 있습니다. 수정할 수있는 몇 가지를 정확하게보십시오. 당신이 곤경에 빠지면, 당신이 곤란을 받으면 당신을 돕기 위해 당신을 돕기 위해 내 사본을 활용할 수 있습니다. 그런 식으로 더 많이 발견 할 수 있습니다.

시도를 선택하면 EdaPlayGround에 대한 몇 가지 팁이 있습니다. UVM / OVM이 선택하지 않으며 다른 라이브러리 유형을 요구하지 않습니다. iCarus Verilog 0.9.7을 활용했으나 사용할 수있는 모든 유형의 Verilog 도구를 활용할 수 있습니다. Epwave 체크 박스를 검사하고 싶습니다뿐만 아니라 Testbench의 inital 부분에 이것을 추가해야합니다.

초기의
시작하다
$ dumpFile ( “dump.vcd”);
$ dumpvars;
새 파일을 만들려면 데이터 이름 탭 옆에있는 + 표시를 사용하십시오. EdaPlayground에는 창 당 10 개의 파일이 있습니다. TestBench.sv 또는 design.sv에서 생성 한 모든 유형의 .v 파일을 포함해야합니다. 다른 파일이 간접적으로 사용하기 때문에 데이터 파일을 포함 할 필요가 없습니다.

달리다!

모든 오류가 발생하면 Run을 누르고 파형 뷰어를 얻을 수 있습니다. Epwave. 당신은 hav.e to add signals of rate of interest so you can watch the CPU at work. It would be fun to add some I/O devices in memory or some debugging ports so you might watch things a little better. I’ll usually watch the program counter as well as the register compose port to get an concept of what’s going on inside.

The original code had a program that exercised a great deal of instructions. I commented it out as well as replaced it with this:

0000_0100_0000_0000 // 0000: tons R0 <- Mem(R2+ 0) since R2=0 this puts 1 in R0 0000_0100_0100_0000 // 0002: tons the exact same in R1 (R1 will always contain 1) // place 8 (byte), 4 (word): 0010_0000_0101_0000 // 0004: R2= R0+ R1 0001_0010_1000_0000 // 0006: Mem[R1]=R2 (that is Mem[1]=R2 0000_0010_0000_0000 // 0008: R0=Mem[R1] 1101_0000_0000_0011 // 000A: jump to place #4 (CPU will multiply by 2 as well as add 2) // no direction at 000C, however PC will hang there while it processes jump You should be able to comply with the incrementing value composing to memory as well as watch the program counter cycle back to place 4 with each loop. Here’s a typical session: I left out a great deal of interior signals, however you can see that memory address 1 is set to 2 as well as then to 3 on the very first two iterations of the loop. 최종 단계 Is this a great academic CPU? I’m not sure. Some simpler CPUs exist, however they are frequently little since they are tricky or they are extremely impractical. Anything more challenging than this is most likely as well much to bite off for a beginner. While I believe you should have some grasp of fundamental Verilog before you tackle something like this, the documentation was a little sparse (and confusing) in some areas. Obviously, it was great sufficient since I got it working, however if you are just starting out, you most likely would appreciate a little more assist as well as explanations. Do you have a preferred academic Verilog CPU? I’m still looking for that a person that is “just right.”

Leave a Reply

Your email address will not be published. Required fields are marked *