Harman 세미콘 아카데미 92

2024.7.4 [Verilog]13 - 초음파센서

2024.7.4 수업날오늘은 습도센서와 방식이 유사한 초음파센서를 베릴로그로 구현한다.초음파센서는 Atmega 128a에서도 사용한적이 있다.Atmega 128a에서는 Uart 통신을 사용하여 초음파 센서를 사용하였는데,이번에는 Basys3 보드와 연결하여 사용한다. 먼저 소스코드를 작성하기 전에 상태도를 그려서 초음파센서가 어떻게 구동되는지 전체적인 흐름을 파악해야한다.크게 4가지 단계로 구분할 수 있다.1. S_ILDE: 1초 딜레이 시간이 있으며 Trigger가 0인 상태이다.2. Trigger: Trigger가 1이고, 10us를 카운트한다. 그 후에는 Trigger가 0이된다.3. Echo: 상승에지를 먼저 기다린 후에 초음파 왕복펄스를 구하기 위해서 usec_count_e를 1로 하여 카운터를..

2024.7.3 [Verilog]12 - 습도센서 테스트벤치, 에러 대비, 16진수를 10진수로 변환하기

2024.7.3 수업날 오늘은 어제 습도센서를 Basys3 보드와 연결했을 때, 결과가 왜 나오지 않는지를 확인하고 이를 방지하는 방법에 대해 알아본다.Basys3 보드에 결과가 출력되지 않으면, 두가지 문제점을 고려해야한다. 하나는 코드의 문제이고, 다른 하나는 보드의 문제가 있다는 것이다. 먼저 코드에 문제가 있는지 테스트벤치(testbench)를 추가로 작성해보자. 테스트벤치란 Verilog 코드의 동작을 검증하는 시뮬레이션을 위해 필요한 파일을 만드는 것이다. 즉, 작성한 코드가 의도하는 대로 동작하는지 보는 과정이다. 테스트벤치 파일을 만드는 방법은 아래와 같다. 먼저 Add Sources에서 simulation source를 추가한다. 다음으로 Create File를 클릭하여 아래와 같이 파일..

2024.7.2 [Verilog]11 - 키패드, 습도센서

2024.7.2 수업날오늘은 키패드, 습도센서를 Basys3 보드에 연결하여 결과를 관찰해보자이번에 사용할 키패드는 4x4의 키패드이다.아래 사진과 같이 16개의 버튼이 있으며, 버튼을 사용하여 문자, 기호를 표현하는 기능을 가졌다.  본격적으로 Basys3 보드에 연결하기 전에 임피던스에 대해 알아야한다.전류를 잘 흐르지 못하게 하는 저항이 주파수에 따라 달라지는 저항값을 임피던스라고 한다. 임피던스에는 하이(HIGH) 임피던스가 있다. 하나의 신호선에 복수의 출력 소자를 연결하는 경우에는 신호를 출력할 소자와 수신할 소자만 연결되어 있어야한다.만약 회로 제어를 잘못하여 복수의 출력 회로가 동시에 접속되면, 소자가 파괴될 수 있다.이런 위험을 방지하기 위해 출력하지 말아야 할 소자는 전기적으로 절연 상..

2024.7.1 [Verilog]10 - 주방 타이머 만들기

2024.7.1 수업날오늘은 지난주에 배운 타이머를 응용하여 주방 타이머를 만들어본다.(다운카운터, 0분 0초가 되면 led가 켜지면서 부저도 울리는 기능)먼저 지난주 금요일에 마지막쯤에 만들었던 상위 2비트에 초, 하위 2비트에 1/100초를 출력하는 스탑워치 소스코드의 회로도를 그려보자.stop_watch_top_ss 소스코드///////////////////// 시작, 스톱, 랩 기능이 있는 상위 2비트에는 초, 하위 2비트에는 0.01초가 출력되는 스톱워치module stop_watch_top_ss( input clk, reset_p, input [1:0] btn, output [3:0] com, output [7:0] seg_7, output [1:..

2024.6.28[Verilog]⑨ 스톱워치 만들기 기능추가+응용

2024.6.28 수업날오늘은 어제 만들었던 스톱워치에 기능을 추가하고, 응용하는 법에 대해 알아본다.기능을 추가한 스톱워치를 만들기 전에 어제 만들었던 loadalbe_watch_top_btn 소스코드를 살펴보고 회로도를 그려보자.소스코드를 만들어도 어떤 모듈의 출력값이 다른 모듈의 입력값으로 받는지, 어느 플립플롭과 mux를 쓰는지 알아야한다.회로도를 먼저 그려서 각 모듈의 입력값과 출력값이 어떤지 이해하고 소스코드를 만드는 것이 일반적인 순서이다.loadable_watch_top_btn 소스코드//////////////////////////// 카운터 시계 만들기--> 보드에서 테스트 할 때 쓰는 모듈// 하강에지 에서는 set을 watch 에 로드, 상승에지에는 watch를 set에 로드, 오류가..

2024.6.27 [Verilog]⑧ - 스톱워치 만들기

2024.6.27 수업날오늘은 어제에 이어서 Basys3 모듈의 fnd에 스톱워치 기능이 나타나도록 소스코드를 작성해본다. 스톱워치를 만들기 위해 여태 배웠던 회로들 중에서 어떻게 구성해야하는지 회로도를 그려보자.먼저 시스템 클록 입력을 10ns로 하여 100주기 입력에 넣고,  그 출력값인 1us를 1000주기 입력값에 넣고,그 출력값인 1ms를 1000주기 입력값에 넣어 1s가 되게 만든다.그리고 60초 카운터에 그 입력을 넣고 Fnd 컨트롤러에 입력값으로 넣으면 Basys3 보드에 출력이 될 것이다. 정말 간단하게 스톱워치 시간 카운터, fnd 컨트롤러만 가지고 회로도를 그리면 될 것 같지만, 사실 이는 비동기 카운터와 형식이 매우 유사하다.비동기 카운터는 각각 다른 클록 입력을 받기 때문에, pd..

2024.6.26 [Verilog]⑦ - 병렬입력-병렬출력 레지스터, 메모리, 스톱워치 만들기 진행단계

2024.6.26 수업날오늘부터 베릴로그 수업을 다시 진행한다.저번에 배웠던 레지스터를 이어서 배워보고, 메모리에 대해 알아보며 스톱워치 만들기 초기단계를 진행한다.병렬입력-병렬출력 레지스터는 입력을 AND 게이트로 입력값으로 연결하여WR가 1이면 AND게이트를 통해 D플립플롭의 입력으로 들어간다. 만약 WR가 0이면 0이 써지므로 초기화가 된다. 병렬입력 병렬 출력 레지스터에도 3상버퍼가 쓰인다.E의 값이 0이면 출력값이 입력값을 따라가고, E의 값이 1이면 출력값은 모두 임피던스가 된다. 병렬입력-병렬출력 레지스터/////////////////////////////////////////////////// 2024.6.26//병렬입력 병렬출력 레지스터module register_n( ..

2024.6.25 [ATmega128a]⑨ - Ultrasonic(int, ICP), EZ motor R300

2024.6.25 수업날오늘은 어제 배웠던 HC-SR04(Ultrasonic) 초음파 센서를 가지고 INT, ICP 형식으로 코드를 작성하고EZ moter r300으로 선풍기를 만드는 프로젝트를 진행하였다.어제 배웠던 Ultrasonic 초음파 센서를 INT 형식으로 소스코드를 작성한다.결과는 똑같지만, 소스코드의 내용에는 차이가 있다./* * def.h * * Created: 2024-06-25 오전 9:20:11 * Author: USER */ #ifndef DEF_H_#define DEF_H_#define F_CPU 16000000UL#include #include #include #include #include #include #endif /* DEF_H_ */먼저, def.h라는 헤더파일이 추..

2024.6.24 [ATmega128a]⑧ - I2C 통신, ULTRASONIC(HC-SR04)

2024.6.24 수업날오늘부터 내일까지 ATmega128a를 활용하여 다시 공부해보는 시간을 가진다.I2C통신은 여러 주변장치들이 최소한의 연결선만을 사용하여 저속으로 통신하는 방법이다.I2C는 송신과 수신이 동시에 이루어질 수 없는 반이중 방식을 사용한다.슬레이브 장치의 개수와 무관하게 데이터 전송을 위한 SDA, 클록 전송을 위한 SCL의 2개의 선을 필요로한다. I2C는 동기 방식이다. 따라서 수신된 데이터는 SCL이 HIGH인 경우 SDA의 데이터는 안정된 상태에 있어야만 한다. 데이터 전이는 SCL이 LOW인 상태에서만 가능하다. 하지만 SCL이 HIGH인 경우에도 데이터 전이가 발생하는 두 가지 예외 상황이 있는데, 데이터 전송 시작과 종료를 나타내는 경우다.SCL이 HIGH인 경우 SDA가..

2024.6.21 [Verilog]⑥ - 링카운터 활용 + basys3 보드 연결, 레지스터

2024.6.21 수업날오늘은 어제 이어서 배운 링카운터를 활용해보고 basys3보드에 연결해서 결과를 관찰해본다.그리고 직렬출력 레지스터 직렬입력 병렬출력 레지스터, 병렬입력 직렬출력 레지스터를 알아본다.1. Basys3 보드에서 FND 링카운터 실행하기먼저 Basys3에 있는 fnd에 어제 배운 링카운터를 활용하여 4자리의 숫자가 각각 따로 작동되는것을 확인한다.아래 사진에서 4번의 fnd, 5번의 스위치를 사용한다. Fnd용 링카운터 소스코드//////////////////////////////////////////////////////////////// 2024.6.21/////////////////////////fnd용 링카운터module ring_counter_fnd( input cl..