전체 글 75

SystemVerilog: Arrays

SystemVerilog는 다양한 유형의 array를 제공하여, 복잡한 데이터 구조를 구축하는데 많은 유연성을 제공한다. Static arrays Dynamic arrays Associative arrays Queues 1. Static Arrays 정정 배열은 컴파일하기 전에 크기가 알려진 배열이다. 아래 예제에서는 8 bit 정적 배열이 선언되고 일부 값이 할당되고 반복되면서 해당값을 출력한다. // (a) module tb; bit [7:0] m_data; initial begin m_data = 8'h5a; for(int i=0; i

SystemVerilog: modport

direction을 가진 modport는 interface 내에서 정의된다. 이들은 한 module 내에서 interface를 접근할 때, 특정한 제한이 있다는 것을 내포한다. modport로 정의하면, 해당 모듈내에서 direction이 정의된 것으로 보면 된다. verilog에서 사용하는 input, output, inout들은 하나의 bundle로 묶은 것으로 생각하면 된다. 문법 modport [identifier] ) input [port_list], output [port_list] ); 아래 예제는 4 개의 logic들과, 2개의 modport 선언을 포함하는 인터페이스인 myInterface를 보여준다. (a9-11) modport인 dut0는 ack, sel을 입력으로, gnt, irq0..

SystemVerilog: Testbench

하드웨어 설계에 대해 시뮬레이션을 진행하려면 테스트벤치라는 환경이 필요하다. 목적 테스트벤치를 사용하면 시뮬레이션을 통해 설계의 동작을 확인할 수 있다. 이는 설계에 대해 다양한 입력 stimulus를 사용해서 구동하는 container이다. 테스트벤치에서는 다음과 같은 과정으로 동작 확인이 이뤄진다. 다양한 종류의 입력 생성 생성된 입력으로 설계 구동 제공된 입력으로 출력 생성 예상되는 동작으로 출력을 확인해서 기능적 결함 확인 기능상 결함이 발견되면 설계를 변경해서 결함 수정 기능적 결함이 모두 제거될 때 까지 위 단계를 반복 수행 구성요소 구성요소 내용 Generator DUT를 구동하는 다양한 입력 생성 Interface 구동하거나 모니터링할 신호들을 포함 Driver 생성된 입력을 구동 Moni..

SystemVerilog: 소개

SV: Tutorial 날짜: 2023년 2월 21일 Verilog 및 VHDL과 같은 Hardware Description Language (HDL)은 하드웨어 동작을 기술하기 위해 사용되고, combinantional logic과 sequential elements로 구성된 디지털 블럭으로 변환할 수 있다. HDL로 기술된 하드웨어가 제대로 동작하는지 확인하려면, 복잡한 테스트 과정을 지원하는 하드웨어 검증 언어가 필요하다. SystemVerilog는 엔지니어가 시뮬레이션에서 복잡한 테스트벤치 구조와 랜덤 stimulus를 사용하여, 설계를 검증할 수 있도록 하는 많은 검증 기능을 갖춘 Verilog의 확장이다. Verilog 비선호 1990년대에 Verilog는 복잡하지 않고, 작고 기능이 적은 하..

스칼라: implicit 사용법 응용

지난 블로그에서는implicit의 기본적인 사용 방법을 알아보았습니다. 이번에는 좀더 구체적인 예를 가지고, 활용하는 방법을 알아보도록 하겠습니다. 예 3. 암시형 인자 앞서 보여준 예 2와 비슷하게, 자주 사용되는 hash tag를 문자열 앞에 추가하는 함수를 만들어보겠습니다. scala> class HashTag(val s: String) defined class HashTag scala> def addHashTag(s: String)(implicit p: HashTag) = p.s + s addHashTag: (s: String)(implicit p: HashTag)String scala> addHashTag("scala") :15: error: could not find implicit value..

SW 설계/스칼라 2021.10.27

스칼라: implicit 기본 사용법

implicit는 boilerplate 코드를 줄여서, 코드의 가독성을 높이는데 자주 사용됩니다. Boilerplate 코드란 별 수정 없이 많은 곳에서 반복적으로 사용되는 코드를 의미합니다. Scala에서는 이러한 코드들을 implicit 키워드를 사용하여 생략하고 코드를 줄여줍니다. 사전적 의미로 implicit 는 암시적인이란 뜻이므로, 구체적으로 명시하지 않고 사용한다는 것을 의미합니다. 보통 자동 형 변환이나 늘 사용하는 인자를 전달하는 용도로 사용됩니다. 장점은 함수들에서 자주 사용되는 인자들을 implicit로 선언하면, 생략할 수 있지만, 단점은 문법이 복잡해져, 숙달되지 않은 사람들에게는 어렵게 느끼질 수 도 있습니다. 간단하게는, 인자에 implicit 가 있으면, 늘 사용되므로 미리 ..

SW 설계/스칼라 2021.10.27

makefile 기초: 변수, 패턴 규칙, 자동 변수

앞서 소개한 makefile은 실행 파일 program을 빌드하는데 잘 사용될 수 있다. # Link program: main.o function.o c++ main.o function.o -o program # Compilation main.o: main.c c++ -c main.c -o main.o function.o: function.c c++ -c function.c -o function.o 만약, 컴파일러 옵션을 변경한다거나, 다른 컴파일러를 사용한다고 가정해보자. 또는, 컴파일할 소스 파일을 추가한다고 생각해보자. 컴파일러 옵션을 변경할 경우, (5,9) 의 action들을 모두 수정해야 하고, 이는 소스 파일의 개수만큼 수정해야 한다. 다른 컴파일러를 사용할 경우에도 마찬가지다. 만약 컴파일..

SW 설계/make 2021.10.19

makefile 기초: 소개 및 실행 과정

makefile은 어떤 모듈이 수정되어 다시 컴파일되어야 하는지 자동으로 결정해서, 필요한 파일들만 재 컴파일해서 하나의 프로그램으로 생성하므로 재컴파일에 따른 시간 낭비를 최소화할 수 있다. makefile은 makepp에게 프로그램을 컴파일하는 방법을 알려주는 명령어들의 집합이다. makepp는 표준 유닉스 make를 위해 작성된 makefile들을 읽을 수 있다. 소스 파일들을 사용하여 하나의 실행 프로그램으로 컴파일하는 과정은 복잡하고, 컴파일에 많은 시간이 소요된다. 개발자가 하나의 프로그램을 만들기 위해 각 소스 파일들을 컴파일하는 명령을 직접 입력하기엔 입력할 인자들이 너무 많다. 물론 shell script를 사용하여 프로그램을 컴파일할 수 도 있지만, 사용되는 소스 중 단 하나만 수정되어..

SW 설계/make 2021.10.19

파이썬 기초: 숫자, 문자열 자료형

개요 자료형은 숫자, 문자열 등 프로그램 상에서 자료 형태로 표현하는 모든 것을 뜻한다. C언어 전후로 프로그래밍 언어를 이해하는 전통적인 방법은, 그 언어의 자료형을 이해하는 것이었다. 과거 프로그램들은 연산 위주의 코드들이 많았고, C언어 이전에 연산에 주로 사용되어온 Fortran 으로부터 C언어로 넘어가면서, C언어가 처리할 수 있는 수의 범위가 중요했던 때가 있었다. 90년대부터 C언어가 대중화되면서, 대부분의 C언어 관련 서적들은 C언어에서 사용하는 char, int, float, double 과 같은 자료형들을 먼저 다루었고, 90년대 이후로 8, 16, 32, 64 bits 컴퓨터들이 생겨나면서, 각 컴퓨터들이 기본적으로 몇 bits까지 처리하는지, 처리할 수 있는 숫자의 범위는 얼마나 되..

SW 설계/파이썬 2021.10.17

파이썬 기초: 변수

변수 변수 (Variable) 란 데이터; 혹은 값을 저장하는 공간이다. 즉, 컴퓨터가 프로그램에서 사용하는 데이터를 기억하는 곳이고, 이는 컴퓨터 메모리에 저장된다. 컴퓨터에서 실행되는 모든 프로그램들은 실행될때 실행될 코드와 데이터들이, 별도의 코드 실행 영역과 코드 실행에 필요한 데이터 영역에 올라오게 된다 (load). 예를 들어, 아래 그림과 같이 우리 눈 앞에 멋진 자동차가 있어서, 그 상황을 기억해서 친구에게 얘기하게 될 경우를 생각해보자. 우리는 그 자동차를 눈으로 보고, 우리 뇌 속에 자동차 모양, 색깔, 번호판, 메이커 등을 기억하게 된다. 이후 친구를 만나면, 뇌 속에 기억된 내용을 가지고 그 자동차에 대해 친구에게 말할 수 있게 된다. 자동차를 말하기 위해 우리가 뇌의 한 공간에 이..

SW 설계/파이썬 2021.10.17