Tech/Verilog
-
Verilog Simulation 이해하기 - Non-blocking과 Blocking assigment의 순서Tech/Verilog 2013. 10. 8. 20:10
Verilog Simulation은 Cycle-accurate Simulation이 가능하다는 장점이 있는 반면, 같은 time step T에 해당하는 모든 event가 동시에 수행된다는 점에서 복잡하기도 하다. 특히 순차적으로 동작하는 blocking statements와 동시에 동작하는 non-blocking statement가 섞여있으면 누가 더 먼저 실행되나? 헷갈리게 된다. 이렇게 Verilog Simulation 상의 Event 처리 순서가 궁금할 때, Verilog Simulation Refernce Model을 참조해서 읽어보면 애매한 부분들이 어느정도 해결된다.본 포스팅에서는 바로 그 Verilog Simulation Reference Model 및 동작 순서에 대해서 간략히 정리하려고 ..
-
[Verilog] 합성가능한 Verilog를 위한 Nonblocking assign 잘 사용하기Tech/Verilog 2013. 10. 7. 22:53
Verilog를 사용하다보면, C나 Java 등을 다루면서 써왔던 순차적 기술 방식과 다르게 동시에 동작하는 기술 방식 때문에 당황하게 된다. 특히나, Blocking과 Non-blocking 이라는 2가지 대입문이 존재하기 때문에 어디에 뭘 써야하나 고민될 때가 많다. 특히, Verilog는 코드 흐름상으로는 말이 되더라도 나중에 Digital circuit으로 합성하면 동작하지 않는 경우도 많아서 상당히 골치아프다. 제대로 이해하기 위해서는 Verilog가 어떻게 digital circuit으로 구현되는지 따져가면서 공부하는게 가장 좋지만, 꼭 그렇게 세부적으로 하지 않더라도 합성가능한 Digital Circuit을 가능하게 하는 몇가지 Rule of Thumb이 있다. 이를 잘 소개한 Article..
-
[Verilog] Latch를 피하는 방법 (combinational logic 기술 시 유의할 점)Tech/Verilog 2013. 2. 28. 15:03
Verilog를 이용해서 디지털 회로를 디자인할 때, always@ 기술 시 의도하지 않은 Latch 생성에 유의해야 한다. 처음 Verilog를 이용해서 만들 때에 매번 synthesis report를 확인하면서 latch가 생기지 않았나 검색하던 기억이 난다. 의도치 않은 Latch는 always 구문을 이용해서 combinational logic을 기술할 때 가장 많이 발생한다. Verilog에서는 always 로 작성된 구문은 합성 시에, 모든 입력 조건에 대해 동작하도록 closed logic을 자동으로 형성하는데, **기술되지 않은 조건에 해당할 때에는 이전 값을 유지하도록 만든다. 따라서, 입력값에 의해서만 바뀌는 combinational logic을 만들었더라도 모든 조건에 대한 값이 지시..
-
[SoC] Getting Gate Count - 게이트 개수 구하기Tech/Verilog 2012. 12. 27. 03:34
반도체 회로의 규모는 흔히 게이트 개수를 이용해서 표시하곤 한다. 디지털 회로 설계는 대부분 Verilog를 통해 이루어지기 때문에, 내가 만든 디지털 회로가 실제로 몇 개의 gate로 이루어져 있을지 개발 단계에서 가늠하기가 어렵다. 그래서, 이런 경우에는 칩의 면적을 통해서 gate 개수를 추정하는 방법을 많이 사용한다. 이는 칩의 gate 개수를 공개하지 않는 다른 이들의 칩을 분석하는 방법으로도 유효하다. 물론 제한된 면적 안에 최대한 많이 우겨넣을 것이라는 가정은 필요하다. 칩의 면적은 곧 웨이퍼 당 얻을 수 있는 칩의 개수로 귀결된다는 점을 생각해보면 당연한 가정이다. 어찌되었든 열심히 개발한 결과 잘 합성된 Gate-level netlist를 얻었다고 할 때, 이를 통해서 내가 디자인한 회로..
-
Verilog : parameter가 선언된 module은 합성 할 때 template을 명시하자Tech/Verilog 2012. 5. 22. 01:38
Verilog를 배우기 시작하면, 처음 얼마간은 C/C++나 Java 등 프로그래밍 언어처럼 접근해서 사용하며 친숙해지겠지만, 본격적인 반도체 설계에 들어간다면 Synthesis 과정 등을 위해 고려해야할 점이 더 많아진다. 특히, Synopsys 사의 Design compiler에만 적용되는 몇가지 Verilog keyword 들이 있는데 (// 주석을 이용한 pragma 등) module의 선언에 흔히 사용되는 parameter도 특정 pragma가 필요하다. Tool에 의존적인 키워드이기 때문인지 Verilog 강의 등에 포함하여 설명하는 곳이 거의 드문데, 이 때문에 직접 합성을 하다 삽질하는 경우가 빈번하다.아무튼, Parameter를 이용하여 선언된 module이 전체 합성되는 Verilog ..
-
Verilog : case문 사용 시, parallel_case 선언 이해하기Tech/Verilog 2012. 5. 21. 17:31
case와 if는 연속된 조건문을 비교한다는 관점에서 보면 그 기능이 동일하다. 특히, Verilog에서는 C/C++의 switch-case문과 달리 break 등을 따로 기술하지 않으므로 기능이 완전히 동일하다고 볼 수 있다. 예를 들어보자. 아래의 두 module은 기능적으로 동일하다. module interrupt_decode4 (output reg somthing, input [3:0] irq ); always @* begin if (irq[0]) do interrupt 0 else if (irq[1]) do interrupt 1 else if (irq[2]) do interrupt 2 else if (irq[3]) do interrupt 3 end endmodule module interrupt..
-
Verilog : case문 사용시 full_case를 선언하여 자동으로 생성되는 latch logic을 막자Tech/Verilog 2012. 5. 21. 17:11
간단한 3-to–1 MUX 예제를 살펴보자. module mux3to1 ( output reg y, input a,b,c, input [1:0] select ); always @* begin case (select) 2'b00: y = a; 2'b01: y = b; 2'b10: y = c; endcase end endmodule select는 2-bit input으로 가능한 경우의 수는 4가지가 있다. 하지만 위 case statement에서는 3가지 경우만 기술되어 있다. 2’b11에 대해서는 출력이 정의되어 있지 않은 상태다. 이 경우에는 해당 값이 기술되어 있지 않으므로 y 값이 이전과 동일하게 유지되어야 하는데, Design compiler에서는 이전 값을 유지하기 위해서 latch logic을 ..
-
Verilog : assert와 assert property 활용하기Tech/Verilog 2012. 5. 18. 15:49
Verilog는 하드웨어 개발을 위한 프로그래밍 언어라, 실제 하드웨어 합성(synthesis)을 위해서는 C/C++ 등 일반 프로그래밍 언어와 다른 점이 많다. 하지만, 시뮬레이션을 위해 보다 더 프로그래밍 언어적 요소가 많이 추가되어 왔으며, 특히 SystemVerilog에 이르러서는 2가지 타입의 assert 명령어가 지원되어 테스트벤치 작성에 많이 활용된다. Immediate type (assert) Concurrent type (assert property) 1.Immediate Type Assertions 먼저, Immediate type에 대해서 알아보자. 이 타입은 우리가 프로그래밍을 할 때 흔히 사용하는 일반적인 assert와 동일하다. Simulation 수행 중 assert문에 도달하..