전체 글

전체 글

    [Verilog] 게이트 지연

    이상적인 신호와 다르게 실제 신호는 abrupt하게 변할 수 없다. 따라서 게이트를 통과하여 신호의 출력이 변화되기까지 약간의 딜레이가 존재한다. (이러한 딜레이를 무시한 채 설계한 회로를 제로지연 회로라고 한다.) 딜레이는 세가지 형태가 있을 수 있는데, 상승 지연(Rise Delays)과, 하강 지연(Fall Delays) 턴-오프 지연(Turn-off Delays)가 있다. 상승 지연: 다른 값(0, x, z)에서 1로 출력이 변화하는 과정에서 생기는 딜레이 하강 지연: 다른 값(1, x, z)에서 0로 출력이 변화하는 과정에서 생기는 딜레이 턴-오프 지연: 다른 값에서 하이 임피던스(z)로 출력이 변화하는 과정에서 생기는 딜레이 만약 값이 x로 변화하는 경우 세 지연 중 가장 작은 값을 선택한다...

    [Verilog] 게이트 수준 모델링

    베릴로그로 모듈을 설계할 때 방법의 추상화 정도에 따라 네가지로 나뉠 수 있다. 추상화의 가장 상위 수준인 행위 또는 알고리즘 수준부터, 데이터플로우 수준, 게이트 수준, 마지막으로 가장 하위 수준인 스위치 수준이 있다. 게이트 수준의 설계는 논리 게이트와 논리 게이트 사이의 연결을 사용하여 모듈을 구현하는 방식이다. 사실상 논리회로를 그리는 것과 같다고 볼 수 있다. 베릴로그에서는 기본적인 논리 게이트를 프리미티브로 제공한다. 프리미티브를 인스턴스화 할 때는 인스턴스의 이름을 지정하지 않아도 관계없다. 베릴로그에서 제공하는 프리미티브로는 and/or(and, nand, or, nor, xor, xnor), buf/not(buf, not, bufif, notif)가 있다. and / or and / or..

    [Verilog] 포트(Ports)와 포트 연결 규칙

    모듈의 내부는 외부에서 내부 구현을 신경쓰지 않아도 되도록 숨겨져 있다.(OOP 언어에서의 클래스와 비슷한 느낌이라고 생각하면 될 것 같다.) 따라서 모듈이 외부 환경과 소통하기 위한 통로로서 포트(Ports)가 존재한다. 오직 이 포트를 통해서만 모듈과 외부환경이 상호작용할 수 있다. 만약 모듈이 외부 환경과 상호작용하지 않는다면,(예를 들어 최상위 모듈의 경우) 포트를 가지지 않는다. module fulladd(sum, c_out, a, b, c_in); //포트 리스트 있음 module Top; //포트 리스트 없음 포트 리스트의 모든 포트들은 모듈 정의부 안에서 선언되어야 한다. 포트를 선언할 때에는 다음의 키워드를 사용할 수 있다. input : 입력 포트 output : 출력 포트 inout ..

    [Verilog] 모듈의 구성 요소

    모듈을 정의할 때에는 항상 module ~ endmodule 형식을 갖추어야 한다. 모듈 정의의 맨 처음 부분에서는 포트리스트와 포트 선언, 파라미터가 올 수 있다. 모듈 정의에 들어갈 수 있는 요소로는 5가지가 있다. 변수 선언: wire, reg 또는 다른 변수들 데이터플로우 문: assign 하위 모듈의 파생(인스턴스화) 행위적 블록: always, initial 블록, 모든 행위 선언은 이 블록에서 일어난다. 태스크와 함수 모듈 정의에 이 다섯가지가 모두 들어갈 필요는 없다. 필요에 따라 선택적으로 사용할 수 있다. SR 래치 코드를 예로 하여 모듈 정의의 요소들을 살펴보겠다. module SR_latch(Q, Qbar, Sbar, Rbar); //포트 리스트 //포트 선언 output Q, Qb..

    [Verilog] 컴파일러 지시어

    베릴로그의 모든 컴파일러 지시어는 ' 형대로 정의된다. 'define 텍스트 매크로를 정의하기 위해 사용되며, C의 #define과 유사한 기능을 갖는다. 코드 내에서 사용하기 위해 '과 같이 쓴다. 'include 다른 베릴로그 소스 파일을 컴파일하는 동안 포함하게 해주며, C의 #include와 유사하다. 'ifdef, 'ifndef, 'else, 'elsif, 'endif C에서의 ifdef와 유사하다. 특정 플래그가 설정되었을 경우에만 코드의 특정 부분이 컴파일 되도록 지정하여 조건 컴파일을 지원한다. reference: Samir Palnitkar - Verilog HDL 2판

    [Verilog] System task

    베릴로그는 표준 시스템 태스크를 제공하며, 모든 시스템 태스크는 $ 형태로 나타낸다. 화면 출력 태스크($display) 화면에 출력하기 위한 태스크로, C언어에서의 printf와 유사한 기능을 한다. $display(p1, p2, p3, ... , pn); 이와 같이 작성하며, p1, p2... 는 문자열, 변수 또는 수식이 될 수 있다. C에서의 형식 지정자와 같이 문자열 안에 %d, %c, %s 등을 사용하여 작성할 수 있다. 모니터링 태스크($monitor) $monitor를 사용하여 신호의 값이 변할 때마다 그 신호를 출력할 수 있다. $monitor(p1, p2, p3, ... , pn); 이와 같이 작성하며, p1, p2... 는 변수, 신호 이름, 문자열이 될 수 있다. 변수 또는 파라미터..

    [Verilog] 베릴로그 자료형

    베릴로그의 자료형은 우선 크게 넷(Nets)과 레지스터(Registers)로 나누어진다. 넷(Nets) 넷은 하드웨어 요소 사이의 물리적 연결을 추상화한 것으로, 물리적인 연결 선이므로 특정 값을 저장할 수는 없다. 따라서 연속적인 할당에 사용된다. 넷은 키워드가 아니라 wire, wand, wor, tri, triand, trior, trireg 등의 집합을 나타낸다. 넷은 다음과 같이 벡터를 사용해서 크기를 지정할 수 있다. wire [7:0] bus; //8비트 넷 변수 bus 크기를 지정하지 않는다면 기본적으로 1비트 넷이 된다. 넷의 기본값은 z(하이 임피던스)이며 유도되는 출력값을 갖게 된다.(유도되는 값이 없으면 z) 레지스터(Registers) 레지스터는 다른 논리값이 들어오기 전까지 그 ..

    [백준][C++][DP] 13398 연속합 2

    13398번: 연속합 2 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 이 문제는 범위를 나누어서 생각해야 하는 문제이다. 그렇기 때문에 top-down 방식보다 bottom-up 방식이 더 풀기 수월할 것 같은 문제이지만, 일단 나는 top-down 위주로 연습하고 있기 때문에 top-down으로 풀이하겠다. 이 문제의 조건은 1912 연속합 문제와 거의 동일하지만 한 가지의 추가 조건이 있는데, 수열에서 수 하나를 뺄 수 있다는 조건이다. 이 추가 조건에 대한 고려로써 먼저 수열에서 수를 첫번째부터 마지막까지 하나씩 빼본 후 테스트하..