본문 바로가기

반응형

rtl

(12)
[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] 12. IP, Bus, SoC 지금 까지 설계한 ALU는 특정 기능을 하는 하드웨어 블록이다. 이를 SoC에서 활용할 수 있을 때 우리는 이러한 하드웨어 블록을 IP (Intellectual Property)라고 한다. 소프트웨어와 구별하기 위하여 hardware IP라고도 한다. 그럼 이러한 IP는 SoC 에서 어떻게 이용할까? 기본적으로 IP를 제어하는 또 다른 IP가 필요한데 보통 CPU가 이러한 역할을 담당한다. CPU는 bus를 통해 IP에 access하여 IP에 할당된 특정 주소에 읽고 쓰기를 할 수 있다. 여기서 bus라고 하는 것은 SoC 또는 embedded system에서 데이터가 이동하는 통로이다. CPU나 ALU같은 hardware IP들은 bus를 통해 서로 연결된다. bus를 통해 데이터를 주고 받으려면 서로..
[Verilog HDL] 11. ALU (Arithmetic Logic Unit) 설계 ALU는 CPU에서 덧셈, 뺄셈 등과 같은 산술 논리 연산을 담당하는 하드웨어 블록이다. 지금 까지 배운 덧셈기, 뺄셈기, 시프터를 이용하여 ALU설계를 해보자. 일반적인 ALU의 개념은 아래 링크를 참조한다. https://ko.wikipedia.org/wiki/%EC%82%B0%EC%88%A0_%EB%85%BC%EB%A6%AC_%EC%9E%A5%EC%B9%98 산술 논리 장치 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. ko.wikipedia.org 산술논리장치의 일반적인 입출력은 다음과 같이 구성할 수 있다. 1) 입력 operand A : 산술 연산의 대상이 되는 입력 값 operand B : 산술 연산의 대상이 되는 입력 값 opcode OP : 산술 연산의 종류를 결정..
[Verilog HDL] 10. task를 이용한 shifter 설계 이번 장에서 배울 것 task barrel shifter 앞장에서 배운 function과 비슷한 기능을 하는 것이 task이다. function과 마찬가지로 여러개의 code를 묶어서 함수 호출하듯이 불러 쓸 수 있다. 그러나 task문에서는 delay문을 기술할 수 있다. 우선 이번 장에서 설계할 shiter에 대해서 알아보자. shifter는 여러 bit로 구성 된 입력을 원하는 bit 수 만큼 좌/우로 이동 시키는 것을 말한다. 예를 들어 4'b0100을 입력으로 받아 오른 쪽으로 2bit 이동 시키면 4'b0001이 된다. 또는 왼쪽으로 2bit 이동 시키면 4'b0000이 된다. bit 수를 넘어가면 그 값은 사라지게 된다. verilog에서 이런 기능을 하는 shift 연산자가 있는데 오른 쪽..
[Verilog HDL] 7. 순차논리 (Sequential Logic) 회로 설계 (D F/F) 앞에서는 adder를 조합 회로로 구현하였다. 이번에는 clock에 동기 되는 순차 논리 회로로 adder를 설계해 보겠다. 앞장에서 설명하였듯이 순차 논리 회로는 현 상태를 저장할 수 있는 회로이다. 순차 논리 회로 adder를 만들기 전에 순차 논리 회로의 기본이 되는 D flip-flop에 대해 알아보자, 디지털 회로에서 1bit의 정보를 저장하는 기본 회로는 D flip-flop이다. D flip-flop은 clock edge에서 동작하고 입력 값을 clock 에 동기시켜 그대로 출력한다. reset이 있는 flip-flop은 reset이 active인 구간에서 flip-flop의 출력을 0이나 1로 고정시킨다. 여기서 active라고 하는 것은 reset신호가 1일 때 유효한가 0일 때 유효한가..
[Verilog HDL] 6. Simulation Tetstbench까지 만들었으면 simulation을 진행 할 수 있다. iverilog가 설치 되어 있으면 아래와 같은 명령으로 simulation을 수행한다. >>iverilog adder.v test.v 위의 명령을 실행하고 디렉토리 리스트를 보면 a.out 라는 실행 파일이 생성된 것을 볼 수 있다. 이를 실행 시키면 아래 그림 처럼 a,b,y에 대한 값이 정상적으로 출력 되는 것을 볼 수 있다. iverilog 실행 시 출력으로 생성되는 실행 파일의 이름을 지정할 수 있는데 아래와 같이 하면 된다. iverilog -o test_adder adder.v test.v 이렇게 하면 a.out이 아니라 test_adder라는 이름의 실행 파일이 생성되고 마찬가지로 이를 실행 시키면 simulatio..
[Verilog HDL] 5. Testbench module 설계가 끝나면 원하는 동작을 하는지 검증해야 한다. 이를 위해 적당한 입력을 가하고 출력을 모니터 해서 검사하는 코드를 만들어야 하는데 이를 testbench 라고 한다. Testbench는 검증하고자 하는 기능에 따라 여러가지 형태로 코딩할 수 있는데 사용자가 입력을 명시적으로 정의하여 테스트 하는 기법을 direct test라고 하고 입력을 랜덤하게 정의하여 사용하는 것을 random test라고 한다. 일단은 기본적인 direct test의 한 가지 예를 아래에 코딩하였다. `timescale 1ns/1ps // time unit / time resolution --------------(1) module test; // module name reg [7:0] a, b; // reg t..
[Verilog HDL] 4. Adder 설계 앞서 module장에서 adder module의 간략한 형태를 살펴 보았다. adder는 2개의 8bit 입력 A,B를 받아 더해서 8bit 출력 Y로 출력한다. 실제 더하기 기능을 수행 하는 회로를 verilog로 coding 해 보자. verilog에서 더하기 기능에 해당하는 연산자는 +이다. 이 외에 산술 연산을 수행하는 연산자는 C언어와 동일하다. 일단 출력 Y로 결과 값을 출력하기 위하여 출력 값을 저장하는 변수를 선언하여야 한다. 지금 만드는 회로는 cominational logic으로 가정하고 설계한다. 이 때 더하기 결과 값을 sum이라는 변수에 저장한다고 하면 sum이란 변수의 data type을 wire나 reg로 선언할 수 있다. 첫번재로 wire로 선언할 경우를 생각해 보자. 변수 ..

반응형