Verilog/Verilog 실습 12

Verilog [vitis] FND controller

새 프로젝트가 생성된다. 8개의 레지스터를 가지는 AXI 모듈을 만듦. S_AXI 모듈을 만든것. FND 제어를 위해서 FND_4digit_switcher 가지고옴 copy sources into IP Directory 체크 필요 모듈을 제외하고 전부 삭제 모든 창에 체크표시가 나오도록하고 마지막 Re_Package IP를 클릭 그럼 +버튼을 눌렀을 때 만든 IP가 나온다. 오른쪽아래에 myip_FND_switcher 가 다시 생겼음을 확인할 수 있다. 출력을 클릭하고 make external 출력의 이름들이 seg_0, com_an_0로 바껴있어서 xdc파일에서 다 바꿔줘야함 Vitis fnd출력 확인 #include #include "platform.h" #include "xil_printf.h" #..

Verilog microblaze led 키기

버튼으로 led키는 실습 axi_gpio_LED를 더블 클릭하면 GPIO, GPIO2 두개 있는 것을 확인할 수 있는데 이번에 2번은 사용 X AXI GPIO 를 추가하고 ctrl + space 누르면 자동완성이 뜸 basys3 버튼 동작에 따른 led키기 코드 #include #include "platform.h" #include "xil_printf.h" #include "xparameters.h" #include "xgpio.h" #define BTN_ID XPAR_AXI_GPIO_BTN_DEVICE_ID #define LED_ID XPAR_AXI_GPIO_LED_DEVICE_ID #define BTN_CHANNEL 1 #define LED_CHANNEL 1 #define BTN_MASK 0b111..

Verilog Micro blaze 실습 Hello world 출력

설정 IP INTEGRATOR - Create Block Design 선택 후 mblaze_hello 클릭 clk 과 reset 버튼을 추가 후 + 아이콘(Add IP) 선택. Micro Blaze 추가 micro blaze 모델을 더블클릭 첫 페이지에서 microcontroller preset 으로 바꾼 후 나머지는 그대로 진행 +UART 통신을 하기위해 UART 사용 자동으로 TOP모듈이 만들어짐 create Platform Project build후 application project putty 설치 후 실행

Verilog 다목적 시계

기존에 진행했던 cook timer와 stopwatch를 합친 다목적 시계 프로젝트를 진행하였다. button 4번을 통해 mode변경을 할 수 있게 하였고, cook timer와 stopwatch를 번갈아가며 사용할 수 있다. cook timer 에는 시작 / 멈춤, 분 증가, 리셋, 초 증가 기능이 있다. stopwatch 에는 시작 / 멈춤, 기록, 리셋 기능이 있다. 각 버튼마다 기능을 설명해놨다. 파란 글씨는 cook timer, 검은 글씨는 stopwatch mode는 mode change를 위해 사용한다. 노이즈 제거를 위해 clock_divider와 D flipflop을 사용하였고, button 4로 모드변경을 위해 T flipflop과 demux를 사용했다. 또한 결합연산자를 활용하여 m..

Verilog HC-SR04 초음파센서 제어

HC-SR04는 40kHz의 초음파 송신부와 수신부로 구성되어있다. 모듈 스펙 입력 전원 : 5v 측정 거리 : 2cm ~ 4m 측정 각도 범위 : 15° 트리거 입력 신호 : 10us 1. 모듈의 Trig에 10 us의 High Pulse를 준다. 2. 40KHz의 8개 sonic burst 발생. [1번 과정을 거쳐야만 발생] 3. 에코는 초음파 발신 직후 HIGH level이 되고, 물체를 감지하면 LOW level이 된다. -> 에코 펄스는 즉, 초음파가 장애물을 만나 다시 에코로 돌아올때까지의 왕복 시간을 나타낸다, 4. 거리 = 에코 High Pulse 시간(왕복시간) x 소리의 속도(340m/s) / 2 -> 왕복이므로 2로 나누어 주어야한다. 초음파센서 TOP 모듈 코드 `timescale..

Verilog [CPU만들기] ACC

ACC 코드 `timescale 1ns / 1ps module acc( input clk, reset_p, acc_high_reset_p,acc_in_select,fill_value, input [1:0] acc_high_select, acc_low_select, input [3:0] aludata, bus_in, output [3:0] acc_high_data, output [3:0] acc_low_data ); wire [3:0] acc_high_in; assign acc_high_in = acc_in_select ? bus_in : aludata; half_acc acc_high( //high만 reset해줄 필요가 있음. 상위4bit를 넘기고 reset해줘야함. 하위 4bit를 넘기는애는 어차피 ..

Verilog [CPU 만들기] PC, ALU

program counter = 0부터 시작 PC가 실행되면 BUS로 들어감 MAR 0번지 DATA를 가져가다 ROM에 저장 후에 IR에 들어감 MDR에 데이터나 명령이 들어갈 수 있음 IR에 명령이 들어가면 control block에 들어감 control block은 디코딩을 함 ex)더하기 3 + 4면 ACC에 3이 ALU를 거쳐 다시 ACC에 들어감. 다음은 ACC를 무시하고 4가 BREG에 들어감. 더한 값은 ALU를 거쳐 ACC에 저장. 또 + 4가 진행되면 7이 저장되어있는 상태에서 BREG에 4가 들어가고 ALU를 통해 ACC에 11이 저장된다. register에 clk이 들어갈 때마다 1씩 증가 >> counter 동작 Half-adder 8개 만들기 `timescale 1ns / 1ps ..