거대한 case 문에서 다른 연산을 구현하는 프로세서를 설계한다면 실제로 설명하는 것은 출력 멀티플렉서에 공급하는 일련의 병렬 기능 유닛입니다. op 모드에 따라 곱셈, 더하기, 빼기, 일부 논리 연산, 시프트 등의 결과에 따라 출력이 발생할 수 있습니다.
모듈 형으로 쉽게 디자인 할 수 있습니다. 각 기능 단위를 자체 엔티티에 구현함으로써 일부는 매우 간단 할 수 있습니다. 첫 번째 예에서 이러한 블록은 무조건적으로 작동하고 출력은 출력 멀티플렉서에 공급됩니다. 나중에 명령 디코딩 로직에 의해 구동되는 인 에이블 신호를 추가하여 전원을 절약하기 위해 특정 작업에서 사용되는 블록 만 활성화 할 수 있습니다. 이 접근법을 사용하면 많은 제어 신호로 끝날 것 같지만 레코드에 모두 넣으면 코드가 아주 작아집니다. 동시에 제어 도구가있는 지점에서 자세한 정보와 가독성을 허용합니다 신호는 예를 들어, 사용됩니다
AddSub : entity work.AdderSubtractor
port map (
clk => clk,
enable => decoded_instruction.addsub_enable,
a => a,
b => b,
mode => decoded_instruction.addsub_mode, -- This might be an enumerated type
output => addsub_output
);
이 다른 _output
신호 것, 그리고 마지막에 당신이 이런 식으로 일을
OutputMux : process (all)
begin
case decoded_instruction.output_mux_select is
when ADD_SUB => output <= addsub_output;
when MULT => output <= mult_output;
when LOGIC => output <= logic_output;
end case;
end process;
한 보너스 같은 당신이 그것을 찾을 수 있다는 것입니다있을 것입니다 FPGA의 DSP 블록에 구현 된 몇 가지 기능에 대해 효율적이다. 뺄셈, 곱셈, 쓰기를위한 기능 블록을 쉽게 설계 할 수 있으므로 디바이스의 DSP 블록을 타깃으로 할 수 있습니다. 이 출력은 '출력'멀티플렉서의 또 다른 입력이됩니다. 내 경험상 단일 DSP 블록 (또는 데이터 경로 너비에 따라 몇 개의 계단식 DSP 블록을 설명하는 단일 개체)을 사용하여 많은 처리 기능을 효율적으로 구현할 수 있어야합니다.
개인적으로 나는이 설계를 매우 모듈화하는 방식을 선호합니다. 최근의 멀티 코어 DSP 프로젝트에서는 대다수가 200 개 이하인 500 개 라인의 파일 만 있습니다. 즉, 디자인의 일부로 돌아 왔을 때 일반적으로 한 페이지에 들어가며 매우 짧은 시간 안에 쉽게 이해하고 이해할 수 있습니다. 또한 디자인의 성능을 향상시키기 위해 무거운 파이프 라이닝을 구현할 때 하나의 프로세스 또는 엔티티에서 너무 많은 작업을 수행하면이 작업의 규모가 더 커질 수 있습니다.
마지막으로, 기능 요소가 소규모 엔티티에 포함되어있는 경우 코드를 분리하여 시뮬레이션, 테스트 및 검증 할 수 있습니다. 내 경험상 블록을 더 빨리 승인 할 수 있습니다. 동시에 코드에 더 많은 자신감을 부여합니다. 모든 것이 하나의 과정에 있다면, 한 가지를 고치거나 개선하는 변화를 만들거나 다른 것을 깨뜨리지 않을 것이라는 확신을 갖는 것이 더 어렵습니다. 다시 한 번 심한 파이프 라인 디자인에서 우연히 설계가 공격적인 타이밍 제약 조건을 충족시키지 못하게 변경하는 것은 매우 쉽다는 것을 알았습니다. 따라서 엔티티가 단순할수록 이러한 일이 발생할 기회는 줄어 듭니다.
추상 신호의 문제를 설명 할 위험이 있음을 입증하는 것은 변수를 나타낼 서브 프로그램 선언 항목 (IEEE Std 1076-2008, 4.3 서브 프로그램 본문)이 아닙니다 ("... 중간 신호는 명백한..."). [특정 프로그래밍 문제] (http://stackoverflow.com/help/on-topic)를 제공 할 수 있습니까? VHDL에서 하드웨어를 가장 잘 표현하는 방법은 세부 사항이나 설명이없는 경우에는 답할 수 없습니다. – user1155120
귀하의 연결된 control.vhd 코드가 설명이 여러 주석의 허용 된 공간에 맞지 않는 이유로 작동하지 않습니다. 기능 코드를 제공한다면 가독성에 관한 문제의 종류가 크게 달라질 수 있습니다. 예를 들어, 상태에 대한 별도의 프로세스 대신 단일 프로세스에서 case 문을 사용해야합니다. 신호를 할당하는 각 프로세스에는 해당 신호의 드라이버가 있습니다. 해결 된 신호의 경우 확인 된 값이 유효 값입니다. is_uop은 is_call 및 is_direct처럼 항상 false입니다. – user1155120