![[5] Verilog HDL 모듈, 테스트 벤치](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2F7G8V4%2FbtrqNeFJgW6%2FAAAAAAAAAAAAAAAAAAAAAGkdcj8PIs56Pzl2VlpwcLIEa_nCqp8qqva-kl-1xG81%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3D%252FU6htfiw5u4EdAm2wrz5c0JfIfU%253D)
Verilog의 모듈과 포트선언 - 포트목록(port_list)에는 입력, 출력, 입출력 신호를 열거합니다. - 포트 선언부에서 input, output, inout(양방향) 중 하나로 선언하고 이때 비트 수도 명시합니다. - output과 inout에 대해서는 reg 또는 wire정의가 같이 있을 수 있습니다. - input에 대해서는 기본적으로 wire이므로 다시 정의할 필요가 없습니다. 모듈의 포트 선언 - 몇가지 스타일의 포트를 선언할 수있습니다. 왼쪽이 standard입니다. 모듈 분할 왼쪽과 오른쪽 모듈을 각각 따로 생각하여 HDL을 작성할 수 있습니다. 하위 모듈 : stage1 하위 모듈 : stage2 상위 모듈 : top 모듈 인스턴스(instantiation) 방법 - 포트순서에 의한..
![[4] Verilog HDL 순차 회로 기술](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdY89JR%2FbtrqNLpHulP%2FAAAAAAAAAAAAAAAAAAAAAOer9I6iwLo1Te6NF1_ilGBlaxQor2Jp0EysG1yF_MmE%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3D8IQn8DrGP5YK2LOVMd78yY4AhaM%253D)
순차논리회로 종류 - 래치(latch), 플립플롭(flip/flop), 메모리 래치 - 잘 사용하지 않으며, 의도하지 않는 래치는 만들지 말아야 합니다. F/F - JK F/F, T F/F은 합성시 사용하지 않는다. - D F/F만 사용한다. 메모리 - ROM은 설계 구분으로는 조합논리회로이다. - SRAM은 합성 가능하다. D F/F 동작 - 언제나(always) clk의 양의 에지(posedge clk)일때 (@) q에 d를 저장한다.(q
![[3] Verilog HDL 조합 회로 기술](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FVcEe3%2FbtrqMExHeB4%2FAAAAAAAAAAAAAAAAAAAAAAq7AG_DLVn3_aotqzUc3KMNBSMkKodwg5hXaudLQ-jk%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3D9wEHvw3kGjP%252BFTNmxFgnQWNypCk%253D)
DUT / Teset Bench DUT - 실제로 구현되어 사용할 로직 / 회로 - 합성 가능한 구문으로 작성(assign or slways사용) Test Bench - DUT를 테스트하기 위한 모듈 - 합성이 가능하지 않은 구문도 가능하다. Verilog 모듈 모듈 (module) - 기본적인 블록 단위 - C언어의 함수와 비슷 - 시작은 module - 끝은 endmodule 모듈들이 모여 하드웨어를 구성합니다. Verilog 모듈 구조 - port 선언 부분에 입출력변수를 구분합니다. - 파란색 점선 박스에서 module에서 사용할 변수를 선언합니다. - 빨간색 점선 박스에서 module의 기능을 서술합니다. 모듈의 개념 예 - 4비트 가산기 모듈 : 4개의 전가산기 모듈을 사용합니다. - 4개의 ..
![[1] Verilog HDL 논리값 & 자료형](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FlBV5y%2FbtrqGU1siw0%2FAAAAAAAAAAAAAAAAAAAAAACShnmxsHdm3zAiJNJbeqHGAXvG3cT-7--qdRPv2m2B%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DYPSCusFZO4lageKFCV2KF6rZEmM%253D)
Verilog 논리값 verilog에서는 0,1,z(high impedence),x(unkown) 4가지 논리값이 존재합니다. 여기서 어떤 경우에 Unkonwon x값이 발생하는지 알아봅시다. 1. 0과 1이 동시에 들어가는 경우 - 0과1이 동시에 들어가면 출력이 0인지 1인지 알 수 없습니다. 2. high impedence z가 들어가는 경우 - open되어 있어 high impedence가 발생합니다. 이경우 역시 출력이 0인지 1인지 알 수 없습니다. 3. clk가 0일 경우 - 클럭이 뛰기 시작 전 0을 유지하는 상황에서 출력값을 결정할 수 없습니다. Unkown(x)의 해결 pull-up and pull-down pull-up : 전원 쪽으로 연결할때, pull-down : 접지 쪽으로 연결..
![[9] CH2 명령어:컴퓨터 언어 < Arm 버전 >](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FQ6fI4%2FbtrqvApKhq3%2FAAAAAAAAAAAAAAAAAAAAAOm98tQOE1QG4d6OL702jPRm6ikcrRcP4wpMgOQXNcRS%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DIVuww7EwnvI8x%252FLAfZJqYSvQyCw%253D)
예를 들어 우리가 C언어를 작성하고 있다고 합시다. 이 C언어는 어떤 동작을 통해 컴퓨터에 전달될까요? C code f = (g+h) - (i+j)가 있다면, Compiled ARM code ADD t0, g, h ; temp t0 = g+h ADD t1, i, j ; temp t1 = i+j SUM f, t0 ,t1 ; f = t0-t1 으로 구성됩니다. ARM는 아래의 그림과 같이 16x32bit의 레지스터로 구성됩니다. 32비트 크기의 플립플롭이 16개 배열되어있는 구조이고, 32bit의 데이터를 우리는 word라 부릅니다. 어떤 연산을 할때, 메모리또는 레지스터로 부터 값을 로드하여 정보를 가져오고 이값을 연산한 후, 레지스터 또는 메모리에 다시 저장합니다. 메모리는 어떻게 구성되어 있을까요? 메..
![[7] CH1 컴퓨터 추상화 및 관련 기술 < 결론 >](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbgCdno%2FbtrqobQTJUi%2FAAAAAAAAAAAAAAAAAAAAACfjnjy8cKygQJy9TafHKTfpsjoLN7N0gxYGqdJvjacC%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DHXFl2zww0N1vMlxKhSct%252BPaossc%253D)
하드웨어 설계자나 소프트웨어 설계자 모두 계층적으로 컴퓨터 시스템을 만들고 있다. 이 방법은 하위 계층의 세부 사항이 상위 계층에서는 보이지 않도록 한다. 이 추상화의 위대한 아이디어는 오늘날의 컴퓨터 시스템을 이해하는 데 필수적이다. 하지만 이것이 설계자는 한 가지 계층만 알면된다는 뜻은 아니다. 아마 가장 중요한 추상화의 예는 하드웨어와 하위 소프트웨어 간의 인터페이스일 것이다. 이것을 명령어 집합 구조(ISA)라 한다. 명령어 집합을 고정 시키면 동일한 소프트웨어를 실행시키면서도 가격과 성능이 서로 다른 여러 가지 구현이 가능하다. 반면에 이 인터페이스의 변경이 필요한 신기술을 받아들이기 어렵게 만드는 역효과도 있다. 실제 프로그램의 실행시간을 척도로 사용하면 믿을 만한 성능 판정 및 보고가 가능하..
![[6] CH1 컴퓨터 추상화 및 관련 기술 < 오류 및 함정 >](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FccpauK%2FbtrqsHaGoKm%2FAAAAAAAAAAAAAAAAAAAAAF3o2FzVllA3eqnaVRcHUlGw7TkFU6maWH7cLz7elHZA%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DCHQrdU4brXXp6Hs7SYUBgEhEm%252F8%253D)
이 절에서는 많은 사람들이 공통적으로 잘못 알고 있는 부분에 대해 설명한다. 함정 : 컴퓨터의 한 부분만 개선하고 그 개선된 양에 비례해서 전체 성능이 좋아지리라고 기대하는 것. 어떤 컴퓨터에서 100초 걸리는 프로그램이 있는데, 그중 80초는 곱하기 계산에 소요된다고 가정하자. 이 프로그램이 5배 빠르게 실행되게 하려면 곱셈 속도를 얼마나 개선해야 하는가? 개선 후의 프로그램 실행시간은 Amdahl의 법칙으로 알려진 다음 식으로 표현할 수 있다. 개선 후 실행시간 = (개선에 의해 영향을 받는 실행시간 / 개선의 크기) + 영향을 받지 않는 실행시간 이 문제의 경우 개선 후 실행시간 = 80/n + 20이다. 5배 성능 개선을 원하므로 개선 후 실행시간은 20초가 되어야한다. 20초 = 80/n + 2..
이번 글에서는 Intel Core i7을 예로 들어서 성능 및 전력의 측정 방법을 설명한다. SPEC CPU 벤치마크 실행시키는 프로그램들의 집합이 바로 작업부하(workload)가 될 수 잇다. 따라서 두 컴퓨터 시스템을 평가하려면 두 컴퓨터에서 같은 작업부하의 실행시간만 비교하면된다. 그러나 대부분의 사용자는 이런 상황에 있지 않다. 그러므로 보통은 성능을 측정하기 위해 만들어진 프로그램의 집합, 즉 벤치마크(benchmark)를 사용해서 성능을 평가한다. 벤치마크는 사용자의 실제 작업부하에 대한 성능을 잘 반영할 것으로 생각되는 프로그램들로 구성된 작업부하이다. 앞서 지적한 바와 같이 자주 생기는 일을 빠르게 하기 위해서는 어떤 일이 자주 생기는지를 정확하게 예측할 필요가 있으며ㅡ 따라서 벤치마크는..
![[4] CH1 컴퓨터 추상화 및 관련 기술 < 단일프로세서에서 멀티프로세서로의 변화 >](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FuQHcY%2FbtrqoaLbEil%2FAAAAAAAAAAAAAAAAAAAAAD9AZPttOWyGScA3GyTG1qkFO9AMd84v6KS9w_j4Jm4s%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3Dhv6IGBDL89XQYBof2KJX4qi2FMA%253D)
전력한계 문제는 마이크로프로세서 설계에 극적인 변화를 가져왔다. 밑의 그림은 데스크톱 마이크로 프로세서의 프로그램 응답시간 개선 추세를 보여준다. 단일프로세서에서 한 프로그램의 응답시간ㅇ르 계속 줄여나가는 대신, 칩에 여러 개의 프로세서를 집적한 마이크로프로세서를 생산하였는데, 이는 응답시간보다는 처리량 개선에 더 효과가 있다. 회사들은 프로세서를 "코어"라고 부르고 그러한 마이크로프로세서를 멀티코어 마이크로프로세서라고 불렀다. 그러므로 "쿼드코어"마이크로프로세서는 4개의 프로세서 즉 4개의 코어를 포함한 칩을 의미한다. 오늘날에는 응답시간을 현저히 개선하려면 다중 프로세서의 장점을 살리도록 프로그램을 재작성해야한다. 나아가 새로운 마이크로프로세서에서 더 빠르게 실행되는 이득을 누리기 위해서는 코어의 수..
![[3] CH1 컴퓨터 추상화 및 관련 기술 < 성능 >](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FXZQmz%2Fbtrqwu8TU9R%2FAAAAAAAAAAAAAAAAAAAAAIziWKBCLRPRx7-R-k8dRh7pKH3-5zaxjGBQ_yAqdTC7%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1759244399%26allow_ip%3D%26allow_referer%3D%26signature%3DcFPRvMnJt1PGMaW3KWsenoPwRQc%253D)
어떻게 성능을 측정하는 것이 가장 좋은 방법이며 성능 측정 방법의 한계는 무엇인지를 확실히 이해하는 것이 매우 중요합니다. 성능의 정의 컴퓨터 사용자 개인의 입장에서는 응답시간(response time) : 작업 개시에서 종료까지의 시간 즉, 실행시간(execution time)이 중요할 것이다. 그러나 데이터센터 관리자에게는 처리량(throughput)혹은 대역폭(bandwidth) : 일정시간 동안 처리하는 작업의 양이 더 중요하다. 성능의 측정 시간은 컴퓨터 성능의 가장 기본적인 척도이다. 같은 작업을 최단 시간에 실행하는 컴퓨터가 가장 빠른 컴퓨터이다. 시간은 우리가 재는 방법에 따라 여러 가지로 정의할 수가 있다. 제일 쉽게 생각할 수 있는 것은 응답시간, 경과시간(elapsed time)이라 ..