UART (Synthesis the FIFO module)

 

저번 포스팅에서 작성한 FIFO를 불러와 기존 UART 코드에 합성합니다.


uart_top.v

`timescale 1ns / 1ps

module uart_top(
    input RST,
    input CLK,
    input RXD,
    output [6:0] AN,
    output CA,
    output PAR_ERR,
    output FRM_ERR
    );

wire    [7:0]   rx_data;
wire rx_data_rdy, empty;
wire    [7:0] dout;

uart_rx uart_rx_0 (
    .RST        (RST),
    .CLK        (CLK),
    .RXD        (RXD),
    .RX_DATA    (rx_data),
    .RX_DATA_RDY    (rx_data_rdy),
    .FRM_ERR    (FRM_ERR),
    .PARITY_ERR (PAR_ERR)
    );    
    
my_fifo fifo_0(
    .RST        (RST),
    .CLK        (CLK),
    .DIN        (rx_data),
    .WR_EN      (rx_data_rdy),
    .FULL       (FULL),
    .DOUT       (dout),
    .RD_EN      (~empty),
    .EMPTY      (empty)
    );
    
display_inf disp_0 (
    .RST            (RST),
    .CLK            (CLK),      // 125 Mhz
    .NUM_1S         (dout [3:0]),
    .NUM_10S        (dout [7:4]),
    .CA             (CA),
    .AN             (AN)
    );    


endmodule

 

uart_top.v Elaborated Design

I/O port를 각 모듈과 연결되게 Instance하여 배치합니다.

Empty가 1이 되면 RE_EN가 꺼져야 하기 때문에 RD_EN을 ~EMPTY로 지정하였습니다.

 


Uart_top.v (Modified)

reg     [7:0] dout_reg;

always @ (posedge CLK) begin
        if (~empty)
        dout_reg <= dout;
        end
display_inf disp_0 (
    .RST            (RST),
    .CLK            (CLK),      // 125 Mhz
    .NUM_1S         (dout_reg [3:0]),
    .NUM_10S        (dout_reg [7:4]),
    .CA             (CA),
    .AN             (AN)
    );

uart_top.v Elaborated Design modified

DOUT은 ram의 addr번호에 맞는 값을 출력합니다.

 

지금 Uart_top은 addr_pos 와 addr_eq가 모두 1일때 Empty가 1이 되어 값을 전달합니다.

그래서 EMPTY가 1인 경우 입력하여 값을 추가할 때,  EMPTY는 0이 되고 RD_EN이 1이 되어 값이 켜집니다.

하지만 RD_EN 신호가 켜질 때 주소가 +1 씩 변경되어서 0번 주소에 위치한 값을 입력하고 

Assign 된 DOUT에 따라 바로 다음 Address에 있는 값을 출력하여 값이 덮어씌워지게 되어 0번 주소에 있는 값이 정확하게 전달되지 못합니다. 

 

그렇기 때문에 수정된 부분을 참고하면 CLK마다 ~EMPTY(=RD_EN) 신호를 확인하여 DOUT을 새로운 Dout_reg에 저장합니다. 이렇게 되면 저장된 0번 주소 Dout은 MUX를 통해 들어가고 값이 비워진 ~EMPTY는 다시 0이 되어 MUX는 동작하지 않습니다. 그러면 1번 주소는 바로 전달되지 못하고 값이 MUX에 머물게 됩니다.