2017-09-27 1 views
-2

하버드 아키텍처는 코드와 데이터 메모리를위한 별도의 버스가있는 컴퓨터 아키텍처입니다. 이 아키텍처는 RAM 또는 ROM에있는 코드 메모리를 참조합니다 (마이크로 컨트롤러 용). 아키텍처가 코드 메모리에 대해 말하면 혼란 스러웠습니다. 내가 아는 한 소규모 임베디드 시스템에서 코드는 항상 ROM에서 실행되지만 반면 중간 규모 및 정교한 임베디드 시스템에서는 코드 메모리가 ROM에서 RAM으로 전송되어보다 빠른 실행이 가능합니다. 이 경우 RAM은 두 개의 버스와 코드에 연결되고 다른 하나는 데이터 메모리에 연결됩니다. 어느 누구도이 사실을 이해하는데 저를 도울 수 있습니까?하버드 아키텍처의 코드 메모리는 어디서 참조됩니까?

+0

큰 시스템의 경우 코드와 데이터가 동일한 RAM에있는 경우가 많으며 "하버드 아키텍처"라는 용어는 다른 파이프 라인과 다른 캐시를 통해 가져 오는 것을 의미하기도합니다. 일반적으로 두 하위 시스템에 단일 외부 메모리 버스에 액세스 할 수있는 조정자가 있습니다. 실용적인 중요성은 해당 플랫폼에서 "자체 수정"코드 (부트 로더 등 포함)를 사용하는 것이 쉽지 않다는 것입니다. 의도 한 코드를 덮어 쓸 때마다 특별한 캐시 플러시 연산 순서가 필요합니다 실행하다. – NickJH

+0

답변 해 주셔서 감사합니다. Nick. Von Neumann 아키텍처는 명령어가 작동하는 데이터와 함께 프로그램 명령어를 메모리에 저장하는 기능입니다. 이 메모리가 RAM 또는 ROM을 참조합니까? – user145485

답변

0

는이 https://en.wikipedia.org/wiki/Modified_Harvard_architecture

에게 나는 것은 PICS는에이 하버드 아키텍처를 건너 왔어요 처음 참조 할 수 있습니다, 그들은 자신의 RAM과 ROM은 2 개의 다른 주소 공간에 분리해야합니까. 그러나 이것이 이것을하는 유일한 방법은 아닌 것처럼 보입니다. 데이터 &을 동시에 액세스 할 수있는 것이 핵심입니다. 예를 들어, 단일 RAM 메모리 공간을 가상으로 분할하여 코드 &을 별도로 저장하지만 동시에 프로세서에서 액세스 할 수 있습니다. 순수한 하버드 아키텍처 시스템은 아니지만 충분히 가깝습니다.

+0

이것은 세계가 일반적으로 작동하는 방식입니다. 학계 외부의 진정한 하버드 아키텍처는 부트 로더, 운영 체제 등을 가질 수 없다는 점에서 실용적이지 않습니다. 프로그램을 명령어 공간에로드하기 위해 데이터를 전송해야하기 때문에 별도의 버스에 있어야하기 때문입니다. 그래서 일부 문서는 harvard가 수정 된 harvard를 의미 할 때 말하고 실제로는 관련이 없으므로 아무 말도하지 말아야한다고합니다. 버스 사양은 버스 사양입니다. –

0

하버드은 RAM 또는 ROM과 거의 관계가 없습니다. 원칙적으로 명령어 가져 오기 및 데이터 읽기/쓰기가 별도의 버스를 통해 수행됩니다. 나머지는 RAM 될 수 있습니다 - 단순히 적어도 일부 ROM (부트 스트랩 코드) 명령어 메모리 버스에서 발견 될 필요가 있음을 의미한다

. 비 명령 버스는 RAM 또는 ROM에도 액세스 할 수 있습니다. ROM은 일정한 데이터를 저장할 수 있습니다.

그러나 AVR MCU와 같은 "실제"구현에서는 명령 버스가 플래시 ROM을 주소 지정하지만 비 명령 버스 (의도적으로 "데이터 버스"를 쓰지는 않는다)가 SRAM을 처리합니다. AVR에서 이러한 버스를 "보지"못합니다.이 버스는 대부분이 MCU의 내부에 있습니다.

0

하버드 아키텍처는 대부분 학술 활동을위한 것입니다. 먼저 네 개의 버스에 대한 분할을 어떻게 결정할 수 있습니까? 주소로 나뉘는 내부 폰 노이만? 많은 von nuemann 구현이 주소별로 분할되지 않은 경우 더 큰 상자를 그릴 경우 많은 별도의 버스가 표시되는 경우가 있지만 데이터와 명령어가 결합되는 경우가 있습니다.

부트 로더 또는 운영 체제에 순수한 하버드를 사용할 수 없기 때문에 이것은 실제로 정신 운동입니다. 사람들이 혼란을 야기시키는 다른 이유가 없다면 던져 버리기를 좋아하는 폰 뉴만과 같은 레이블. 현실 세계는 어딘가에 있습니다. AMBA/AXI 및 기타 버스는 데이터 및 명령어 트랜잭션을 그대로 태그 지정하지만 동일한 버스를 공유하기 때문에 수정 된 하버드라고 표시됩니다 (여러 개의 단일 버스에는 별도의 읽기 주소, 읽기 데이터, 쓰기 주소, 데이터 쓰기가 없습니다)). 프로세서는 오랫동안 병목 현상이 없었습니다. 프로세서와 이러한 버스는 유휴 상태 일 수 있습니다. 따라서 동일한 버스 세트에서 명령어 및 데이터 및 주변 장치를위한 공간을 확보 할 수 있습니다. 특히 읽기 주소를 분리하고 데이터를 읽고, 주소를 사용하여 점을 연결하고 트랜잭션을 완료하는 데 사용되는 ID 태그로 데이터를 별도의 버스에 씁니다.

wikipedia에서 언급했듯이 실제 세상에서 가장 가까운 곳은 마이크로 컨트롤러와 같습니다. 그리고 그들이 정말로 단순한 주소 공간 인 메모리에 관해 이야기 할 때, 버스의 다른 끝에있는 것은 sram, dram, flash, eeprom 등 또는 조합 일 수 있습니다. 어느 쪽에도, 그리고 그 버스의 모든 주변 장치들.그래서 마이크로 컨트롤러에서 명령어는이 모델에서 플래시로 쓰여지고 sram은 데이터입니다. 순수 하버드 아키텍처가 sram에 코드를로드하고 거기에서 실행하는 방법이 없다면 마찬가지로 데이터 버스를 사용하여 플래시를 프로그래밍 할 수도 없습니다 또는 플래시 할 데이터를 버퍼링하기 위해 하드/하드 아키텍처 경로에 표시되지 않은 ROM/플래시가 마술 적으로로드됩니다. 아마도 I/O 버스 리소스와 명령 버스 리소스 사이의 크로스 오버가 될 수 있습니다.이 버스는 수정 된 하버드라고 부릅니다.

for Von Neumann의 경우 지침, 데이터, I/O 및 하위 부문으로 버스를 침투하는 초기 주소 디코더가 있습니다. 데이터 및 명령어는 결합 된 상태로 유지되지만 끝에서 끝까지 순수한 단일 버스는 없습니다. 종료. 실용적이지 않습니다.

위키 피 디아의 사진을 보시오. 다른 하나가 결합 된 것을 위해 별도의 버스가 있다는 것을 이해하십시오. 시험에 합격하고 필요한 조건을 잊어 버린 후에는 관련성이 없습니다.

관련 문제