2025/04 23

[Harman 세미콘 아카데미] Day_60(System Verilog)

오늘은 C언어를 활용해 Button Debounce에 대해 구현하는 것을 목표로 하였습니다. Button Debounce란물리적인 버튼을 누르거나 뗄 때 생기는 불안정한 신호를 안정화시키는 처리 입니다. 특정 버튼을 누르게 되면, btn_data를 1로 High 시키고, 이를 negedge를 검출합니다. 버튼에서 손을 떼는 순간에는 버튼 로직을 담당하는 Button_getState(GPIOD)가 0이 되고, 값은 1이 유지가 되는 시점을 활용하는 것 입니다. 이때, 처음 0을 가지고 있는 data 변수를 Toggle하고, 이 값을 LED에 넣어 버튼이 눌릴때마다 LED의 값이 0,1로 변화되며 점등합니다. 그리고 Button Debounce를 통해, HC-SR04 Ultrasonic 초음파를 제어..

[Harman 세미콘 아카데미] Day_59(System Verilog)

오늘을 Peripheral에 Clock Divider와 Counter를 붙여 보았습니다. Prescaler : 입력 prescaler 조절로 출력 주파수를 조절함.Clk의 주파수를 (prescaler 값 +1)로 나누어 조절ARR : counter가 특정 값까지만 증가하도록 조절함.기존 10000bit counter가 0-9999반복할 때, arrr값을 99로 두게 된다면 0-99가 반복됨.100Mhz clk를 prescaler와 arr의 조합으로 원하는 PWM설정, 시간 딜레이 설정 등의 기능을 수행할 수 있습니다. 코드:https://github.com/Heeju99/Code_Verilog_SystemVerilog/blob/main/workspace/250428_APB_TIMER/250428_A..

[Harman 세미콘 아카데미] Day_58(System Verilog)

FIFO (First In First Out) : 선입 선출 ex) QueueLIFO (Last In First Out) : 후입 선출 ex) Stack FIFO가 없다면 APB_BUS Interface의 register에 계속 덮어쓰며 값이 사라지게 됩니다. 그래서, FIFO를 사용하여 순차적으로 APB_Master에 값을 보내도록 합니다. FIFO를 이용하여 통신 / buffer의 기능과 CDC(Clock Domain Crossing)역할을 합니다.CDC란? 두개의 다른 Domain 회로의 다른 Clock으로 직접적인 연결이 불가하여, DualPort FIFO를 사이에 두어 Clock에 상관 없이 임시적으로 Data를 저장, 불러오기를 하여 데이터를 주고 받을 수 있습니다. 어떻게 보면, ..

[Harman 세미콘 아카데미] Day_57(System Verilog)

어제 진행했던 과제를 처음부터 짜보고, 교수님과 함께 짜 보았습니다.확실히 처음부터 혼자 짜려니 아직은 익숙치 않아 어려움이 많았습니다. 특히, reference model을 설계하여 검증을 하는 부분이 어려웠습니다. 이론은 이해했지만, 아직 손이 따라가지 못하는 것 같습니다...ㅠ더 많이, 더 열심히 하여 눈을 감고도(?) 설계할 수 있도록 해보겠습니다ㅎㅎ 어제 진행하던, FND으 ㅣ각 자리에 숫자를 표현하기를 진행하였습니다. FND Controller라는 IP는 0 또는 1의 enable 신호를 지니는 FCR register의 영향과, 자릿수를 나타내는 FMR, FND에 표시될 FDR에서 값을 받아 FndComm과 FNDFont를 활성화하여 값을 출력합니다. 이를 테스트하기 위해, System Ve..

[Harman 세미콘 아카데미] Day_56(System Verilog)

오늘은 어제에 이어 SystemVerilog의 Testbench에 대해 공부하였습니다.어제는 Monitor, ScoreBoard를 제외한 나머지 부분들의 설계를 교수님과 진행하고, 전체적인 Testbench 설계를 과제 아닌 과제(?)로 진행하였습니다. 참고로 MCU Peripheral Slave FND Controller에 대한 Testbech입니다. 제가 수행한 과제 중, 어려운 부분은 ScoreBoard의 Reference Model을 설계하는 부분이 조금 어려웠습니다. 교수님께서 쥐선생(GPT)의 도움을 받아서 연습겸 해봐도 된다고 하셔서... 이 부분만 도움을 받았습니다. 아래의 파일은 제가 작성한, Testbench 코드입니다. 그리고 교수님과 함께 Testbench 전체를 함께 설계해 보았..

[Harman 세미콘 아카데미] Day_55(System Verilog)

어제의 GPIO에 대해 이어서 하겠습니다.어제는 제가 16bit로 GPIO를 만들어 각 8bit를 GPO, GPI를 할당하여 설계하였습니다.이번에는 교수님의 설명을 토대로 GPIO를 설계하겠습니다. GPIO의 IP 부분만 설계를 하면 되는데 간단합니다.GPI는 Input으로 받고, GPO는 Output을 출력하는 것을 활용해 합치게 됩니다. Input의 경우는 밖에서 입력이 들어오기를 기다리기 위해 'Z'를 유지하도록 하고, Output은 저희가 CPU를 통해 0 또는 1을 출력하도록 3-state를 설계하면 간단하게 해결이 됩니다. 아래는 간단한(?) GPIO IP를 코드로 구현한 것 입니다. 3-state 설정만 잘 해주면 됩니다. GPIO에 대한 Interface도 아래와 같이, ODR, IDR..

[Harman 세미콘 아카데미] Day_54(System Verilog)

저번에는 APB_Master와 APB_Slave를 만들어 APB-Protocol을 맛 봤습니다. 이번에는 MCU와 연결하여, RAM을 Slave로 두어 APB-Protocol을 만들어 보겠습니다. 기존에는 CPU - RAM으로 이뤄졌다면, Multi-Cycle + 여러 Peripheral을 사용하기 위해 APB-Master를 추가하여 Slave로 RAM을 두어 접근하도록 하였습니다. 기존에 만들어 두었던 MCU_Core를 변경하여 여러 Peripheral에 접근할 수 있도록 만드는 것이 목표 입니다. 조심해야 할 부분이, S-Type과 L-Type입니다. 이 두 Type의 명령어는 RAM에 Store, RAM으로부터 Load를 하기 때문에, Multi-Cycle 동작 시, S-Type에서 MemAcc를..

[Harman 세미콘 아카데미] Day_53(System Verilog)

오늘은 먼저 Memory Map에 대해 이해를 하였습니다. Memory Map : Device들의 동작 영역을 정해 사용하는 것 - 효율적인 메모리 관리 - 보안 및 안정성 저희가 그동안 설계한 CPU에 사용되는 ROM,RAM,I/O입니다.기본적으로 ROM, RAM, I/O는 Low active 동작을 진행합니다. 이를 활용하여 CPU가 어떠한 device의 주소에 데이터를 쓰거나 읽을지 판별합니다.CPU의 동작은 주소에 값을 쓰거나 읽기만 하는 역할을 합니다. 즉, 어떤 device, RAM/ ROM/ (I/O)에 쓰는 지는 모르고 쓰거나 읽기만 합니다. 그래서 Decoder를 활용합니다. Decoder의 datasheet를 참고하여 CPU의 A13, A14, A15의 조합을 통해 RAM..

[Harman 세미콘 아카데미] Day_52(System Verilog)

오늘은 Multi-Cycle에 대해 배웠습니다.그동안 설계했던 Single-Cycle은 1lck에 하나의 명령어를 처리했다면, Multi-Cycle은 명령어 하나를 여러 clk cycle에 거쳐 실행되도록 합니다. 각 Type마다 명령어 수행을 위해 거쳐가는 모듈의 개수나 연산 시간등을 고려하여 1clk 중에서의 시간 할당을 진행합니다.예를 들어 ALU 연산만을 수행하는 R-Type의 경우 단순하기 때문에 동작시간이 매우 짧아 적은 시간을 할당 받고, RF, ALU, MUX, RAM을 거치는 L-Type의 경우 시간이 오래 걸려 할당 시간을 많이 받게 됩니다. Multi-Cycle 동작은 총 5단계를 거치도록 설계되었습니다. 5단계를 거친다는 것은, 각 단계의 사이사이 Register가 존재하여 데이터..

[Harman 세미콘 아카데미] Day_51(System Verilog)

RV32I Core_SingleCycle에 대해 발표를 진행하였습니다. 발표자료나 코드는 아래의 링크에 있습니다!https://uiop1716.tistory.com/37 그리고 오늘부터는 MultiCycle에 대한 학습을 위한 C언어를 어셈블리어로 해석하는 법을 배웠습니다. 아래는 C언어를 어셈블리어로 변환하는 사이트 입니다.https://godbolt.org/ Compiler Explorergodbolt.org 아래의 사이트는 RISC-V 어셈블러에 관한 사이트입니다.https://riscvasm.lucasteske.dev/ RISC-V Online AssemblerRISC-V Online Assembler. This is a very crude online assembler for RISC-V ass..