| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- SystemVerilog
- Bash
- IOT
- 오블완
- 자료구조
- ADsP
- 군산가볼만한곳
- arduino
- STM32
- 디더링
- 임베디드레시피
- c++ 기초
- systemverilog assertions
- Dithering
- Metastability
- 인덕터
- 파이참
- assertion
- data structure
- 회귀분석
- 아두이노
- BeautifulSoup4
- openpyxl
- 티스토리챌린지
- Dither
- Clock Domain Crossing
- git
- 임베디드시스템
- tkinter
- SVA
- Today
- Total
목록전체 글 (194)
리미창고
2-FF Synchronizer CDC를 할 때, Single Bit냐 Multi Bit냐에 따라 방법이 달라진다. Single Bit CDC는 그래도 생각보다 단순하다. Single Bit 신호를 클락 도메인 간에 안전하게 전달하는 가장 일반적이고 기본적인 방법은 2-Flip-Flop Synchronizer를 사용하는 것이다. 이 방법은 수신 측 클럭 도메인에서 동작하는 두 개의 FF을 직렬로 연결하여 사용한다.첫 번째 플립플롭 (FF1): 송신 클럭 도메인의 데이터 신호를 수신 클럭의 첫 번째 엣지에서 포착하려고 시도한다.여기서 메타안정성이 발생할 수 있다. 데이터가 수신 클럭의 Setup/Hold 시간 창 내에서 변경되면 FF1의 출력(Q1)은 불안정한 상태에 빠진다.Q1이 불안정한 상태에 있더..
CDC(Clock Domain Crossing)이란? 전체 시스템에서 Clock Domain이 하나인 경우엔 매우 편하지만, 현대의 대부분의 칩 설계에서는 성능 최적화, 전력 소모 감소 그리고 동작 속도를 관리하기 위해 대부분 여러 개의 독립적인 Clock을 사용한다. CDC(Clock Domain Crossing)는 디지털 전자 회로 설계에서 신호가 하나의 클락 도메인에서 다른 클럭 도메인으로 이동하는 현상을 말한다. 나아가, 서로 다른 클락 도메인 간에 신호가 이동할 때 발생하는 문제를 해결하는 설계 기법을 의미한다. 정리하면, 두 개 이상의 클럭 도메인이 존재하고, 이들 사이에서 신호가 전달될 때 발생하는 동기화 문제를 다루는 것을 말한다.예)A 도메인: clk_a (100 MHz)B 도메인: cl..
라이브러리(Library)와 프레임워크(Framework)는 둘 다 코드를 재사용하기 위한 도구이지만, 제어의 흐름(Control Flow)을 누가 가지고 있느냐에 따라 본질적으로 다르다. 라이브러리(Library) 개발자가 주도권을 가진다.필요한 기능이 있을 때 개발자가 직접 호출해서 사용한다.즉, 내 코드가 라이브러리를 사용한다. import mathresult = math.sqrt(16) # 개발자가 직접 sqrt() 호출print(result) math는 라이브러리이며, 개발자가 언제, 어디서, 어떻게 쓸지 직접 제어한다. 프레임워크(Framework) 프레임워크가 주도권을 가진다.개발자는 프레임워크의 규칙에 따라 코드를 작성하고, 프로그램의 실행 흐름은 프레임워크가 결정한다.즉, 프레임워크..
GPIO 관련 HAL 함수STM32에서 GPIO 입력/출력을 제어할 때 주로 쓰이는 함수를 정리한다.1. 핀 상태 쓰기 (출력) HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);특정 GPIO 핀에 High(1) 또는 Low(0) 값을 출력.PinState: GPIO_PIN_SET / GPIO_PIN_RESET예시:HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // PA5 핀 HIGH 출력 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // PA5 핀 LOW 출력2. 핀 상태 읽기 (입력) GPIO_PinState..
지금까지는 GPIO를 Output으로만 설정하여 LED를 점멸했다. 이번에는 Nucleo Board에 Built-in Button으로 Built-in LED를 컨트롤할 것이다. 프로젝트 생성 프로젝트 이름은 3_built-in_button_LED이다. GPIO 설정 보드메뉴얼 없이 Pintout Map에서 찾아보자. Built-in Button은 Blue PushButton(B1)이고, Built-in LED는 이전 프로젝트에서 사용했었던 LD2이다. 여기서 B1은 Default로 GPIO_EXTI13으로 설정되어 있는데 GPIO_Input으로 바꿔준 후, 저장한다. FW 코딩 /* USER CODE BEGIN WHILE */ while (1) { HAL_GPIO_WritePin(GPIO..
Built-in LED를 점멸해봤으니 이제 실제 LED를 점멸할 차례이다. 프로젝트 생성 Board Selector로 프로젝트를 생성하고, 프로젝트 이름은 2_blink_LED로 한다. GPIO 선택하기 22번 GND를 사용하고, PC0 핀을 LED에 전압을 인가하는 핀으로 사용한다. Pinout view에서 PC0, PC1 핀 위에 마우스를 올려놓은 후 클릭한다. GPIO_Output 메뉴를 선택한다. 선택이 완료되면 핀 녹색으로 표시된다. Blink 코딩 /* USER CODE BEGIN WHILE */ while (1) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0); HAL_Delay(500); /* USER CODE END WHILE */ HAL..
이번에는 Nucleo Board 자체에 내장된 LED를 깜빡이는 실습을 할 생각이다. 프로젝트 생성다시 프로젝트 생성하자. 이번에는 MCU/MPU Selector가 아니라 Board Selector로 프로젝트를 생성한다. STM32CubeIDE에서 새 프로젝트를 시작할 때 MCU/MPU Selector는 칩 자체를 선택해 모든 설정을 수동으로 해야 하는 반면, Board Selector는 공식 개발 보드를 선택해 해당 보드에 맞는 핀, 클럭, 주변 장치 설정이 자동으로 완료되어 편리하다. 1_blink_built-in_LED 라는 프로젝트를 생성하면, 위와 같은 Pinout & Configuration 화면이 나타난다. 내장 LED 찾기프로젝트 생성을 완료했으니, 보드 위에 내장 LED가 어디에 ..
오늘은 STM32Cube로 프로젝트를 생성하는 법을 공부한다. 프로젝트 시작 1. STM32Cube 실행 후, File->New->STM32 Project 2. Target 선택 Commercial Part Number에 MCU 또는 Board의 제품명을 입력한다. 나는 STM32F103RB 사용하니 이걸로 입력했다. 3. 프로젝트 생성 프로젝트 이름을 설정하고, Next 클릭 Finish 클릭 4. Configuration 창 그러면, STM32CubeMX 창이 나타나는데, 오늘은 필요 없으니 일단 패스한다. 5. print 출력 왼쪽에 Project Explorer -> 0_print_hello -> Core -> Src -> main.c 클릭한다. /* USER CODE BEGIN Inclu..
STM32뿐만 아니라 많은 MCU/MPU가 ARM Cortex 코어를 사용한다.Cortex는 ARM에서 만든 프로세서 코어 아키텍처 브랜드이고, 성능/전력/용도에 따라 여러 라인업이 있다. 대표적으로 Cortex-A/R/M 제품 라인업이 있다. 귀엽게도 라인 이름 조차 "ARM"으로 맞췄다. Cortex-M 시리즈 (Microcontroller) Cortex-M 시리즈는 STM32와 같은 마이크로컨트롤러(MCU)에 사용되는 가장 일반적인 코어이다. Cortex-A 시리즈와 달리, 복잡한 운영체제보다는 FreeRTOS와 같은 소형 RTOS나 베어메탈(Bare-metal) 환경에서 구동된다. 사용 편의성과 전력 효율성에 초점을 맞추어 설계되었으며, 마이크로컨트롤러의 주변 장치를 제어하는 데 최적화되어 있다..
STM32는 STMicroelectronics에서 만든 32비트 ARM Cortex-M 기반 MCU 시리즈이다. ARM Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M33, 또는 Cortex-M55와 같은 32비트 ARM 프로세서 코어를 기반으로 다양한 시리즈로 분류된다. STM32 시리즈 4가지 카테고리로 분류된다.High-performance(고성능)MainstreamUltra-low-power(초저전력)Wireless(무선) 제품군을 간단히 살펴보면, STM32F (Foundation): 가장 오래되고 광범위한 제품군이다. Cortex-M0부터 Cortex-M7까지 다양한 코어를 사용하여 범용적인 애플리케이션에 적합하다. ST..
UVM이란?UVM(Universal Verification Methodology)은 SystemVerilog 기반의 표준 검증 프레임워크로, 디지털 회로와 SoC 검증에 사용되며 반도체 업계의 사실상 표준으로 자리잡았다. UVM의 주요 목적은 모듈화, 재사용성, 표준화된 테스트벤치 환경 제공이다. 프레임워크(Framework)라는 단어가 중요한데, 프레임워크란 미리 정의된 구성 요소와 규칙이 있는 개발 틀을 의미한다. 이 틀을 따르면 서로 다른 환경에서도 동일한 방식으로 검증을 수행할 수 있어 재사용과 확장이 쉽다. UVM 주요 구성 요소UVM은 테스트벤치 구축을 위해 미리 정의된 다양한 클래스와 기능을 제공한다. Testbench ComponentsDriver, Monitor, Scoreboard,..
IT업계에서 자주 사용되는 API(Application Programming Interface)의 의미에 대해 나 나름대로 정리하려한다. API의 정의API란 Application Programming Interface의 약자이다. 한 문장으로 정의하면, 프로그램 사이의 통신을 위한 약속이다. ‘Interface’라는 단어에 집중하면 단순히 연결창구 정도로만 생각하기 쉬운데, API의 진짜 핵심은 ‘약속’이라는 개념에 있다. 약속에 대해 자판기로 비유를 한번 들어보자. 자판기에서 “콜라 버튼”을 누르면 콜라가 나온다.사용자는 자판기 내부가 어떻게 작동하는지 몰라도, 버튼을 누르는 방법(인터페이스)만 알면 된다. API도 마찬가지로, 내부 동작은 몰라도 정해진 방법대로 요청만 하면 결과를 얻을 수 있다. ..
