본문 바로가기

반응형

실전! Verilog HDL RTL Design

(20)
[Verilog HDL] 20. 제어 가능한 ALU IP 만들기 - 최종 테스트 앞에서 수정한 레지스터 파일을 ALU core와 연결하여 최종 ALU IP를 만들어 보자. ALU core 에 필요한 모든 입출력은 apb_regfile module에서 만들어 주기 때문에 apb_regfile과 alu module을 연결하고 apb_regfile의 APB interface 신호들을 top으로 연결해 주면 alu_ip module이 완성된다. 최종 alu_ip module의 code는 아래와 같다. 파일 이름은 alu_ip.v로 저장한다. module alu_ip #( parameter ADDR_WIDTH=8, parameter DATA_WIDTH=16 ) ( input wire PCLK, input wire PRESETn, input wire [ADDR_WIDTH-1:0] PADDR, ..
[Verilog HDL] 19. 제어 가능한 ALU IP 만들기 - register file 수정 레지스터 map을 정의했으면 이에 맞게 register file을 만들어 주어야 한다. 이전에 만든 register file은 일반적인 register file이었고 이번에는 SFR의 목적에 맞게 수정해 주어야 한다. 전 장에서 만든 레지스터 맵을 보면 CPU가 read/write 할 수 있는 레지스터도 있고 ALU의 동작 상태에 따라 ALU에서 write하는 레지스터도 있다. 이러한 레지스터는 status와 result에 해당한다. 이런 특수한 목적에 맞게 수정된 register file은 아래와 같다. module regfile #( parameter ADDR_WIDTH=8, parameter DATA_WIDTH=16 ) ( input wire CLK, input wire RSTn, input wir..
[Verilog HDL] 18. 제어 가능한 ALU IP 만들기 - 레지스터 맵 HW IP (Intellectual Property)는 SoC에서 사용 가능한 HW block을 의미한다. SoC에서 사용 가능하다는 것은 CPU에서 IP에 대한 제어를 할 수 있다는 것이다. 즉 software에서 HW IP를 제어하고 필요한 기능을 수행할 수 있어야 하는 것이다. APB interface에서 살펴 보았듯이 SoC 에서 HW IP는 bus를 통해 CPU와 연결되어 있고 그 중 간단한 bus interface중 하나가 APB이다. 이번 장에서는 ALU에 APB register file을 추가하여 ALU 기능을 수행 하기 위한 register를 만들고 CPU에서 이 register file을 read/write 함으로써 ALU의 필요한 기능을 수행할 수 있도록 해보겠다. 일단 ALU를 제어..
[Verilog HDL] 17. chatGPT를 이용한 APB register file 설계하기 요즘 한창 유행인 chatGPT를 이용하여 APB register file을 코딩해 보았다. 일단 무작정 chatGPT에게 APB register를 코딩해 달라고 무식하게 질문한다. ㅎ 그런데 이녀석이 APB 신호는 전혀 없는 register file을 코딩해 준다. 나를 뭘로 알고? 그래서 apb protocol을 따르지 않는다고 다시 질문했더니 바로 잘못을 인정하고 다시 코딩해 준다. ㅋㅋ 근데 이상하다? pwrite 신호가 없다 그래서 다시 따졌다! 그랬더니 역시 바로 인정하고 다시 코딩해준다. 근데 뭔가 좀 이상하다. 이번에는 penable신호가 없다. 그래서 다시 따져 물었다. 그랬더니 다시 사과하고 코딩해준다. 사과는 무지 잘한다. ㅋ 이번에는 맞으려나? 근데 pstrb는 뭐냐? 뜬근없이? 그..
[Verilog HDL] 16. FSM을 이용한 APB register file 설계 자 드디어 APB inteface를 갖는 register file을 설계할 때가 되었다. APB interface logic을 설계하기 위해서 우리는 FSM에 대해서 배울 것이다. FSM은 Finite State Machine의 약자로 하드웨어의 제어 로직을 만들 때 많이 사용하는 구조이다. 어떤 기능을 하는 하드웨어 로직을 제어 하기 위해서는 그 하드웨어가 어떤 상태에 있는지를 정의할 수 있어야 한다. 그래야 각 상태별로 필요한 제어 신호를 만들어 낼 수 있다. FSM은 유한한 하드웨어 상태를 정의하고 입/출력과 현재 상태에 따라 필요한 제어신호를 만들고 다음 상태는 어떤 상태가 되는지를 정의하는 하드웨어 로직이다. 우리가 설계하고자 하는 FSM의 목적은 APB bus protocol을 register..
[Verilog HDL] 15. regfile.v를 최적화 하자.(parameter와 배열 인덱싱 기법) 이번 장에서는 ch13에서 만들었던 regfile.v code를 좀 더 유연하고 단순하게 최적화 해 보겠다. 이러한 작업을 refactoring이라고도 한다. 처음에는 기능 구현에만 중점을 두어 빨리 코딩했더라도 추후에 refactoring을 통해 코드를 단순화 시키고 최적화 시키는 작업이 필요할 수 있다. 비단 합성 했을 때 하드웨어 성능이나 면적 측면에서 좋아 지지 않더라도 코드의 가독성을 높이고 재사용 가능성을 높이기 위한 최적화도 필요한 경우가 많다. 이를 위해 새로 배워햐 할 기능이 'parameter'이다. parameter는 verilog에서 주로 상수를 표현하는데 사용하기도 하지만 한 module의 instance마다 다르게 사용해야 할 변수들이 있을 때 사용하기도 한다. 어떤 면에서 C+..
[Verilog HDL] 14. APB interface APB는 주로 peripheral device같은 작은 디바이스를 버스에 연결하기 위하여 사용되는 AMBA bus 표준의 하나이다. Protocol이 간단하기 때문에 구현하는 로직도 작아 파워도 적게 소모되는 장점이 있다. 하지만 고속 데이터 전송에는 적합하지 않기 때문에 주로 hardware IP의 레지스터를 읽고 쓰는데 사용되는 protocol이다. APB protocol spec은 아래 링크에서 받아 볼 수 있다. https://web.eecs.umich.edu/~prabal/teaching/eecs373-f12/readings/ARM_AMBA3_APB.pdf 앞서 설계한 레지스터 파일은 IP 안에 포함되게 되는데 이를 버스에 연결하려면 APB interface를 구현해야 한다. APB interf..
[Verilog HDL] 13. Register File 이번 장에서는 레지스터 파일(register file)이 무엇인지 알아보자. 결론부터 말하면 레지스터 파일은 작은 메모리라고 생각하면 된다. 이전 장에서 D flip-flop이 무엇인지 배웠다. D flip-flop (D F/F)은 1bit의 정보를 저장하는 저장소라고 생각할 수 있다. 아래와 같은 심볼로 표시되며 클록의 상승 엣지(positive edge)에서 입력 포트 D로 들어오는 데이터를 출력 포트 Q로 출력한다. Q 값은 D 입력이 변하기 전까지 계속 같은 값을 유지하게 된다. RSTn과 같은 리셋 핀이 있는 경우 RSTn이 '0'일 경우 출력 Q는 '0'으로 초기화 된다. 이러한 D F/F을 여러개 연결한 것을 레지스터(register)라고 한다. 아래의 예는 D F/F 4개를 연결한 것으로 ..

반응형