본문 바로가기

반응형

실전! Verilog HDL RTL Design

(20)
[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] 9. Function 을 사용한 뺄샘기(Subtractor) 설계 * 이 장에서 배우는 것 function clock gating enable 이번에는 verilog function block을 사용하여 뺄셈기를 설계해 보자. function block은 C언어에서의 함수와 같이 특정 코드 블록을 모아 호출할 수 있는 기능을 제공해 준다. verilog에서는 주로 조합회로를 구현 하기 위해 사용한다. 특정 조합회로를 function으로 구현하면 같은 기능을 필요로 하는 곳에 중복해서 코딩을 할 필요 없이 function을 호출하면 된다. 뺄셈기의 기본 설계 개념은 시퀀셜 가산기와 동일하다. 아래는 완성된 뺄셈기 코드이다. module subtractor ( input clock, input resetn, input en, input wire [7:0] a, input ..
[Verilog HDL] 8. 순차논리 (Sequential Logic) Adder 설계 앞에서 배운 DFF 설계 기법을 활용하여 clock에 동기되어 동작하는 adder를 설계해 보자. 우선 완성된 source code는 아래와 같다. module adder_seq ( input clock, input resetn, input [7:0] a, input [7:0] b, output reg [7:0] y ); reg [7:0] sum; always@(*) begin sum = a+b; end always @(posedge clock or negedge resetn) begin if (!resetn) y
[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..

반응형