현재 위치 - 법률 상담 무료 플랫폼 - 특허 조회 - Cpu 설계
Cpu 설계
가장 단순한 CPU 디자인

여기 Verilog HDL 언어로 설계된 컴퓨터 커널이 있습니다. 간단한 프로그램을 실행할 수 있습니다. 저는 대학원반 교육에서 디자인 사례로 완성했습니다. 이 설계는 Quartus II 소프트웨어 환경 테스트를 통과했으며 자체 제작 개발 랩에 다운로드되어 실행되었습니다. 여기서 메모리는 하버드 구조이며 Quartus II 가 제공하는 메모리 요소를 직접 사용하여 구성됩니다.

프로그램

//기본 입력 시계

//리셋 제어: reset_n, 저전위 유효.

//기본 출력: o

//프로그램 메모리 iram, 16 비트, 높이 5 비트는 클래스 명령 코드이며 imem 16.mif 로 초기화됩니다.

//데이터 스토리지 dram, 16 비트, 데이터 파일 초기화 없음.

Lpm 메모리의 주소 신호는 데이터를 읽고 쓰기 전에 1 촬영에서 안정적이어야 합니다.

//명령 형식: 높이 5 자리 명령 코드, 1 1 주소 코드, 16 자리 즉시 (높낮이 8 자리).

모듈 테스트

(참조)

시계,

_n 재설정 ,

오,

//디버그 출력 (선택 사항):

Opc,

오마르,

Ojp,

Oqw,

올다,

Oadd,

Oout

);

시계를 입력합니다.

Reset _ n;; 을 입력합니다

Output [15: 0] o;

Output [15: 0] oqw;

Output [10:0] OPC, Omar

출력 [2: 0] ojp;

출력 olda, oadd, oout

와이어 dwren

와이어 [15: 0] q _ w;

와이어 [15: 0] q _ data;

Reg [15:0] b, a, IR, da, oo, ddata

Reg [10:0] PC, mar

레그 [2: 0] jp; //박자

Reg dwrit// 쓰기 제어

//명령:

Reg LDA, // fetch: 데이터 단위에서 da 까지 세어봅니다.

Add, // Add: da 가 데이터 장치에 추가되고 결과는 da 에 배치됩니다.

Out, // output: 데이터 단위의 내용을 출력 레지스터로 출력합니다.

Sdal,//low 8 비트 immediate: 8 비트 immediate 를 16 비트로 확장하고 da 에 보냅니다.

Sdah,//high 8 비트 immediate: 8 비트 immediate 를 high 8 비트로, 원본 da 에 대한 낮은 8 비트 연결로 16 비트를 형성하여 da 에 넣습니다.

Str//da 전송 데이터 저장소 장치:

//아날로그 신호 출력:

할당 o = oo

Opc 할당 = PC

대입 Omar = mar

할당 ojp = jp

할당 oqw = q _ w;;

할당 olda = LDA

Assign oadd = add

할당 oout = out

지정 dwren = dwrit

//명령어 스토리지:

Lpm_rom iram (. 주소 (개인용 컴퓨터). Inclock (시계) 입니다. Q (q _ w)); //프로그램 스토리지

Def param iram.lpm _ width =16;

Defparam iram.lpm _ width ad =11;

Defparam iram.lpm_outdata = "등록되지 않음";

Defparamiram.lpm _ indata = "registered";

Def paramiram.lpm _ address _ control = "registered";

Def param iram.lpm _ file = "imem16.mif"; //파일을 초기화하고 프로그램을 배치합니다.

//데이터 저장소:

Lpm_ram_dq dram (. 데이터 (ddata). 주소 (mar). 우리 (dwren). Inclock (시계) 입니다. Q (q _ data)); Defparamdram.lpm _ width =16;

Defparam dram.lpm _ width ad =11;

Defparam dram.lpm_outdata = "등록되지 않음";

Defparamdram.lpm _ indata = "registered";

Defparamdram.lpm _ address _ control = "registered";

Always @ (양수 가장자리 시계 또는 음수 가장자리 재설정 _n)

시작

만약 (! Reset_n)

시작

Pc<= 0;

Lda<= 0;

& lt= 0; 추가

Out<= 0;

Sdal & lt= 0;

Sdah & lt= 0;

Str<= 0;

Jp & lt=0;

기타

시작

Jp< = jp+1;

사례 (jp)

0: 시작

1: 시작

사례 (q _ w [15:11])

5' b00001:LDA < = 1; //lda:0000 1

5' b 00010: add < = 1; //주소: 000 10

5' b00011:out < = 1; //out:000 1 1

5' b00100: sdal < = 1; //낮음 8 비트, 부호 있는 16 비트로 확장

5' b00101:sdah < = 1; //높이 8 비트, 앞의 낮은 8 비트와 조합해서 16 비트를 형성합니다.

5' b00110: str < = 1; //da 전송 데이터 유닛

시나리오를 종료합니다

2: 시작

If (lda || add || out || str)

Mar< = q _ w [10: 0];

3: PC < = PC+1;

4: 시작

중간 주파수 (LDA)

시작

Da<= q _ data

Jp<= 0;

Lda<= 0;

기타

(추가) 인 경우

시작

B<= q _ data

A<= da

기타

만약 (아웃)

시작

Oo<= q _ data

Jp<= 0;

Out<= 0;

기타

(sdal) 인 경우

시작

Da<= {{8{q_w[7]}}, q _ w [7: 0]}; //는 16 부호있는 숫자로 확장됩니다.

Sdal & lt= 0;

기타

If (sdah)

시작

Da [15: 0] < = {q_w[7:0], da [7: 0]};

Sdah & lt= 0;

기타

If (문자열)

시작

Ddata & lt= da

Dwrit & lt= 1;

5: 시작

(추가) 인 경우

시작

Da< = a+b;

Jp<= 0;

& lt= 0; 추가

기타

If (문자열)

시작

Str<= 0;

Dwrit & lt= 0;

시나리오를 종료합니다

말단 모듈

/////////프로그램 시뮬레이션 또는 실행 예//////

//assembly//

// sdal 5 2005 //

// sdah 6 2806 //

// str 10 300a //

// sdal 3 2003 //

//추가 10 100a //

// str 15 300f //

// out 15 180f //

//컴파일된 16 16 진수를 imem 16.mif //

////// 16 결과 출력: 0608///////.