EE/Verilog HDL 7

[verilog HDL] Syntax 6. Task & Function

verilog의 task와 function syntax에 관한 포스팅입니다. 겨울방학 때 verilog 스터디를 끝내고 싶었는데, 3월까지 지연이 됐네요. 3월 16일 전까지 마무리하는 게 목표입니다. verilog에는 function과 task가 있습니다. function은 C나 python에서 쓰는 function과 유사하지만, task는 다른 언어와 equivalent한 개념이 없습니다. 그래서 task는 따로 공부해줘야 합니다. function과 task를 사용하는 이유는 2가지 입니다. 첫 번째는 긴 module에서 반복적인 작업을 task & function으로 대체할 수 있습니다. 두 번쨰는 RTL source code의 가독성을 높여줍니다. 우선 fucntion과 task의 차이점을 알아보..

EE/Verilog HDL 2022.02.28

[verilog HDL] Syntax 5. Behavioral/Algorithmic Level Design

verilog의 추상화 level중 가장 높은 수준의 design level입니다. C와 거의 흡사한 구조를 가집니다. initial statements - initial statement를 사용하면 simulation time 0에서 시작하며, simulation에서 한 번만 실행합니다. - 만약 여러 개의 initial statement가 있다면, simulation time 0에 동시에 실행됩니다. - 여러 statement를 묶어주기 위해 begin - end 와 함께 쓰입니다.(initial begin - end) 보통 RTL을 설계할 때는 initial statement를 잘 쓰지 않습니다. always statements - simulation time 0에서 시작합니다. - loop 형식으..

EE/Verilog HDL 2022.02.27

[verilog HDL] 16-bit ALU(Arithmetic Logic Unit)

논리회로설계 In Class assignment로 나온 16bit ALU 설계입니다. 최상위 module은 ALU이고 하위 module이 5개(+, -, *, /, 4 to 1 MUX)가 있습니다. input은 16bit a, b, 2bit select signal이고 output은 16bit z입니다. module의 hierarchy와 structure을 도식화해보면 다음과 같습니다. 위 그림을 보면 다음을 알 수 있습니다. ⅰ) Add, Sub, Mul, Div module 각각에 input a, b가 들어간다. ⅱ) MUX의 input으로 들어가는 arithmetic module의 output을 wire로 선언해야한다. ⅲ) MUX의 output이 ALU의 output이 된다. ⅳ) sel sign..

EE/Verilog HDL 2022.02.23

[verilog HDL] Syntax 3. Port

port는 module과 외부환경 사이의 상호작용을 나타내는 interface 입니다. module을 직접 설계할 때도 몇 개의 input과 몇 개의 output을 만들지 결정하는 것이 매우 중요하며, 이미 만들어진 module을 사용할 때도 몇 개의 input과 몇 개의 output이 있는지 확인하는 것이 중요합니다. 또한 port를 terminal이라고 부르기도 합니다. 1. Port Declaration port에는 input, output 그리고 inout이 있습니다. 이때 inout은 양방향 통신이 가능한 port라고 이해하면 됩니다. 아직 자세히 배우지 않아서 이 포스팅에서는 다루지 않겠습니다. 만약 어떤 port가 값을 holding한다면, 그 port는 reg가 되어야 합니다. 그리고 어떤..

EE/Verilog HDL 2022.02.22

[verilog HDL] Syntax 2. Data types

verilog에서 사용되는 data type에 관한 포스팅입니다. verilog에는 SW 설계에서 쓰이지 않는 Net과 Register라는 data type이 있습니다. 1. Net Net은 HW사이의 연결을 기술할 때 쓰는 data type입니다. 1bit z value가 default값입니다. Net은 data type을 나타내는 말이고 wire라는 keyword를 써서 사용합니다. 2. Register 데이터를 저장하는 data type입니다. 다른 값이 변수에 들어오기전까지 가지고 있는 값을 유지합니다. reg라는 keyword를 사용해 기술하며, simulation상에서 assign을 통해 언제든지 바뀔 수 있습니다. 1bit z value가 default값입니다. 3. Vector verilo..

EE/Verilog HDL 2022.02.22

[verilog HDL] MUX & DEMUX 여러 방법으로 구현하기

MUX(multiplexer)는 select signal에 따라 여러 개의 signal을 input으로 받아, 하나의 signal을 출력하는 디지털 회로입니다. DEMUX(de-multiplexer)는 반대로 하나의 signal을 input으로 받아서 여러 개의 signal을 출력하는 디지털 회로입니다. verilog를 이용해서 MUX와 DEMUX를 구현해보겠습니다. 우선 MUX를 구현할 건데, verilog로 MUX를 구현하는 방법은 7가지가 있습니다. 제가 배우는 강의자료에서는 7가지라고 합니다. 혹시 다른 방법이 있다면 알려주세요. 우선 2 to 1 MUX의 Truth tabel을 살펴보겠습니다. i0 i1 sel y 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 1 1 0 1..

EE/Verilog HDL 2022.02.21

[verilog HDL] Syntax 1. module & instantiation

verilog는 HW 설계를 목적으로 만들어진 언어이며, C, C++과 문법이 상당히 유사합니다. verilog에서는 module이라는 개념이 매우 중요합니다. C에서 비유하자면 함수와 그 기능이 매우 흡사합니다. 구현하고자 하는 module을 verilog 파일로 작성하고, testbench(이하 tb)라는 파일을 작성해 그 module을 simulation 할 수 있습니다. 이때 tb 또한 verilog 문법을 따라서 작성합니다. verilog 코딩을 해보면 알 수 있지만, 사실 module 자체의 코딩은 그렇게 길지 않습니다. 오히려 tb를 작성하는데 많은 개발 시간을 할애하게 됩니다. module의 instantiation이라는 개념이 있는데, 이는 4-bit Ripple carry counter..

EE/Verilog HDL 2022.02.15