Harman 세미콘 아카데미/Verilog 22

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.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..

2024.6.20 [Verilog]⑤ - 비동기 카운터, 동기카운터, BCD 카운터, 업다운 카운터, 링카운터, 주종형 D플립플롭

2024.6.20 수업날오늘은 카운터의 종류에 대해 알아보고, 주종형 D플립플롭에 대해 알아본다. 카운터에 대해 알아보기 전에 기본 단어에 대해 알아보자.먼저 카운터란, 클록 펄스를 계수하는 디지털 회로이다.카운터는 플립플롭으로 구성하며, 업카운트와 다운 카운터로 구분한다. 업 카운터는 계수가 계속 증가하는 카운터이다. 초기 상태를 00으로 설정하면, 클록 펄스가 주어질 대마다 증가하고, 클록 펄스가 계속 주어지면 00으로 돌아가 동작을 반복한다.다운 카운터는 계수가 감소하는 카운터이다. 초기 상태를 11로 설정하면 클록 펄스가 계속 주어지면 11로 돌아가 계수 동작을 반복한다.   비동기 카운터란 클록 펄스를 첫 번째 플립플롭에만 연결한다.나머지 플립플롭들은 앞단의 출력이 클록 펄스로 작용하며, 각각 ..

2024.6.19 [Verilog]④ - 7세그먼트 디코더, 인코더, 멀티플렉서+디멀티플렉서, 플립플롭

2024.6.19 수업날오늘은 어제 코드만 작성했던 7세그먼트 디코더를 실행시켜보고조합 논리회로인 인코더, 멀티플렉서, 디멀테플렉서를 알아보고순서 논리회로인 플립플롭의 종류에 대해 알아본다.어제 마지막 시간에 Basys3 보드에 있는 FND를 사용하여 숫자를 표현하기 위해 4개의 스위치를 누름에 따라 각각 다른 기능을 할 수 있도록 코딩했다. 보드에 나타나는 결과를 관찰하기 위해 vivado에서 몇 가지 설정해주어야 하는 것이 있다.먼저 어제 작성했던 코드의 구조를 가볍게 살펴보자7세그먼트 디코더 소스코드////////////////////////////////////////// 7세그먼트 디코더module decoder_7seg( input [3:0] hex_value, //0~15까지의 ..

2024.6.18 [Verilog]③ - 전압, 저항, 캐패시터, 반도체, 디코더

2024.6.18 수업날오늘은 어제 배웠던 병렬 가산기의 연산 속도가 느린 이유에 대해 알기 위해 캐패시터에 대해 알아보고n, p형 반도체와 디코더에 대해 알아본다. 그 전에 간략하게 전압과 저항에 대해 알아보자.전압이란, 전류를 흐르게 하는 능력으로 전위차가 클수록 전압이 크다.저항이란, 전기의 흐름을 방해하는 부품으로, 직렬연결일때는 값을 더하면 되지만 병렬연결일때는 각가 역수해서 더한 값을 다시 역수로 취하면 된다.캐패시터란 전기를 축적하고, 방출할 수 있는 장치이다.기본적으로 2장의 전극판이 나란히 마주보고 있고, 전극판 사이에는 절연체(전기가 안통하는 무질)가 있다.전극판의 간격과 면적, 절연체 재질에 따라 축적되는 전하의 크기가 달라지게된다. 전압이 걸리면 각 전극판에 전하가 축적되고, 축적되..