![[VerilogHDL] FIFO, UART&FIFO](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FppB3S%2FbtsHHS6e5x6%2FpfzRIReYChdEtBzkmoYIaK%2Fimg.png)
#1. FIFO(Fist In First Out)== Circular Queue, 선입선출push & pop할 떄 버퍼의 어디를 가리킬지 포인터가 필요하다.read하는 속도와 write하는 속도가 다를때 FIFO 사용 Push algorithmpush 할 때 memory full이면 안된다. Pop algorithmpop 할 때 memory empty면 안된다. FIFO modulepush 할 때 memory full이면 안된다.pop 할 때 memory empty면 안된다.rw_en = 1일때 write 가능 구현[FIFO module]더보기`timescale 1ns / 1psmodule fifo #( parameter ADDR_WIDTH = 3, DATA_WIDTH = 8) ( ..
![[VerilogHDL] Verification(32bit register, BRAM)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcth4gF%2FbtsHyFT7n8o%2Fbx3CKSjb1AsbzQMKmy9YnK%2Fimg.png)
1. SystemVerilog - 32bit Register 32bit Register 구현더보기`timescale 1ns / 1psmodule register( input clk, input reset, input [31:0] D, output [31:0] Q ); reg [31:0] Q_reg; // reg [31:0] Q_next; assign Q = Q_reg; always @(posedge clk, posedge reset) begin if(reset) begin Q_reg 1-2. Verification 위와 같이 생성자를 반복문 안에 넣었을 때 문제가 생기지 않을까?trans = new() 할 때마다..
![[VerilogHDL] System Verilog 기초](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpwxkt%2FbtsHxdDt4xE%2F8UPDPWKP392R4KSUBzZhyK%2Fimg.png)
1. System Verilog 1. Transaction : test를 위한 Data 묶음 a. DUT와 테스트벤치 간의 데이터 전송을 추상화한 것 2. Generator : 입력 Data(Transaction) 생성 3. Driver : Data → H/W 신호 변경 a. Generator에서 생성된 Transaction을 실제 신호로 변환하여 DUT에 전달 b. 인터페이스를 통해 DUT와 통신 c. S/W 개념인 Class를 H/W와 통신하게 해주는 역할 4. Monitor : DUT 출력 신호를 Data(Transaction)으로 변경 a. DUT의 출력을 관찰하여 수집하고, 이를 분석하거나 기록 5. Scoreboard ..
![[VerilogHDL] UART Rx, Tx 최종(Oversampling)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwwwzo%2FbtsHxROxdme%2FpdIwJALpcyo0k4O8hcZQWk%2Fimg.png)
1. UART(Universal Asynchrous Receiver/Transmitter) 1:1 통신비동기 신호각 device에서 송수신 data timing을 알아서 맞춘다.클럭을 전송하는 Master device 없다.device 내부에서 동기신호를 생성해야 한다.data를 송수신할 때 Timing을 잘 맞춰야한다. 설계할 때 문제점위 그림과 같이 start trigger의 타이밍에 따라 start signal이 1클럭이 안될 수도 있다…. 해결책 : sampling16 oversampling, 8 oversampling 16 oversampling각 데이터 비트를 16번 샘플링16번 클럭이 들어온 후 다음 상태로! → baudrate 16배 증가시켜야함각 비트의 중간지점(7번째 샘플링 클럭)..
![[VerilogHDL] UART Tx(2)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbaZel%2FbtsHy64Ly4N%2FmIatgrSSpUGSRtYPcsihE1%2Fimg.png)
1. UART(Tx v.2) 8개 state를 만들지 않고 baudrate tick에 한번씩 data 1bit씩 전송 구현더보기`timescale 1ns / 1psmodule uart ( input clk, input reset, input tx_start, input [7:0] tx_data, output tx, output tx_done); wire w_br_tick; baudrate_generator #( .HERZ(9600) ) U_BR_Gen ( .clk (clk), .reset(reset), .br_tick(w_br_tick) ); transmitter U_TxD ( ..
![[VerilogHDL] Verilog 이론 (Ch.5 ~ 11)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsDJhB%2FbtsHwwI5eF8%2F4fXkMvJDtvlwoimw1BNjwk%2Fimg.png)
Ch.5 행위 수준 모델링 조합회로 모델링 Level Trigger회로의 입력 신호 모두 나열@(*) 함축적 감지 신호 사용 가능 ← 모든 입력 감시module or2 (input a, input b, output out); reg out; always @(a or b) begin // always @(a, b) if (a == l'bl II b == l'bl) out = l'bl; else out = l'b0; endendmodule 순차회로 모델링 Edge Trigger동기식(synchronous) : 클록 신호만 포함비동기식(asynchronous) : 클록 신호, set, reset 신호 포함신호의 안정성 면에서는 동기식이 더 좋다고 할 수 있음(비동기식 : 클럭 신호와 set ..