2017-11-24 15 views
-2

나는 인터넷 검색 및 스택 오버플로를 많이 수행했습니다. 나는 내가 생각하기에 문제를 올바르게 말로 표현할 수 없다. 나는 Verilog를 배우려고 노력 중이며 마이크로 프로세서를 만드는 튜토리얼을 발견했다. 지금 제가하고있는 단계는 명령어 디코더입니다.Verilog에서 16 비트 입력을 4, 6, 6 비트로 나누려면 어떻게해야합니까?

  • 처음 4 비트 (예. MOV, ADDI, SUB, NOT, AND, OR, 등에 ADD)
  • 지난 12 명령에 대응하는 플래그를 마련 16 비트의 입력을 받아 비트는 홀더를 위해 6 및 6으로 분해됩니다.

Here's a crappy diagram, 나는 설명이 잘못되었다고 설명합니다. 이것은 초급 수준의 프로젝트입니다.이 때문에 나는 내 머리를 감쌀 수 없으므로 화가났습니다. 나는 단지 3 개의 다른 입력을 가지지 만, 신호는 한 번에 4, 6, 6으로 보내지지 않는다고 생각합니다.

나는 표준이 또한 당신의 질문에 약간의 코드를 가지고 있다는 것을 안다.하지만 나는 어디에서 시작해야할지 몰라.

+0

필요한 용어는 'bit slice from vector'입니다. –

답변

1

이 튜토리얼을 사용하는 것이 초보자 용입니다. 먼저 '안녕하세요 세상'을 인쇄하는 등 더 쉽게 시작할 수 있습니다. 당신이 16 비트 폭 인 명령지고있다

1) : 당신의 그림에 따라

module decoder(input [15:0] instruction, input clk, ...); 

2) (일반적으로 비트 '0'멀리에 있지만 이곳이 하나의 출발점이다 오른쪽에 비트 '15'가 맨 왼쪽에 있음) 비트 [5 : 0]은 두 번째 매개 변수 인 비트 [11 : 6]에 속해 있고 두 번째 비트에는 [15:12] 코드에 속한 것처럼 보입니다. 따라서 다음과 같이 작성할 수 있습니다.

reg [3:0] opcode; 
reg [5:0] param1; 
reg [5:0] param2; 

always @* begin 
    opcode = instruction[15:12]; 
    param1 = instruction[11:6]; 
    param2 = instruction[5:0]; 
end 

이렇게하면 출발점이됩니다. 이제 모듈에 대해 필요한 출력과 클록을 파악해야합니다. 클럭은 하드웨어에서 작업을 동기화하고 상태 시스템을 만드는 데 사용됩니다. opcode와 params를 얻었 으면 opcode와 params를 어떻게 처리해야하는지 알아야합니다. 내가 도움이 희망

always @(posedge clk) 
    case (opcode) 
    4'b0100: op <= mov; 
    4'b0101: op <= add; 
    ... 
    endcase 

:

지금 당신은 어떤 디코딩 로직을 가질 수 있습니다.

+0

이것은 도움이되었습니다! 그리고 성명서의 첫 부분을 다룹니다. 나는 Verilog의 Hello World를 훨씬 능가한다. 이것이 마지막 교훈입니다. –