본문 바로가기

원s/FPGA

[DE2-115] Lab.7: SRAM Controller

[SRAM Controller]

 

DE2-115 보드를 이용하여 SRAM 을 실습한다.  

 

[sram_controller.v]

ISSI SRAM datasheet 를 확인하고 Controller 를 Verilog 로 기술한다.  

더보기
/////----------------------------------------/////
module sram_controller(
    input                       clk,
    input                       rst_n, 	
    input                       start, 
    input       [7:0]           din,  
    output  reg [7:0]           dout, 
    
    output  reg                 ce_n, 
    output  reg                 oe_n, 
    output  reg                 we_n, 
    output  reg                 ub_n, 
    output  reg                 lb_n, 
    
    output      [19:0]          addr, 
    inout       [15:0]          io, 
    
    output                      fifo_re
); 


/////----------------------------------------/////

    reg	    [2:0]   state;
    reg     [3:0]   cnt; 
    reg     [7:0]   dbf; 
    reg             fifo_en; 
parameter S0 = 0, S1 = 1, S2 = 2; 
assign io = (we_n == 0) ? {8'd0, dbf} : 16'hzzzz; 
assign addr = {16'd0, cnt}; 
assign fifo_re = start | fifo_en; 
/////----------------------------------------/////
    always @(posedge clk) begin
        if (rst_n == 0) begin
            state   <= S0;
            cnt     <= 4'd0; 
            dbf     <= 8'd0;
            dout    <= 8'd0; 
            ce_n    <= 1'b1; 
            oe_n    <= 1'b1;  
            we_n    <= 1'b1;  
            ub_n    <= 1'b1;  
            lb_n    <= 1'b1; 
            fifo_en <= 1'b0; 
        end
        else begin
            ce_n    <= 1'b0;  
            oe_n    <= 1'b0;
                
            ub_n    <= 1'b1;  
            lb_n    <= 1'b0; 
            
            dbf     <= din;
            
            if (we_n == 0)
                dout    <= io[7:0]; 
            else 
                dout    <= 8'd0; 
            
            case (state)
                S0: begin
                    if (start == 1) begin
                        state   <= S1;
                        cnt     <= 4'd0;
                        we_n    <= 1'b0;
                        fifo_en <= 1'b1;
                    end
                end
                S1: begin
                    cnt <= cnt + 1'b1; 
    
                    if (cnt == 4'd6) begin
                        fifo_en <= 1'b0; 
                    end
                    
                    if (cnt == 4'd7) begin
                        state   <= S2;
                        we_n    <= 1'b1; 
                        cnt     <= 4'd0;
                    end
                end
                S2: begin
                    cnt     <= cnt + 1'b1;
                    
                    fifo_en <= 1'b0; 
    
                    if (cnt == 4'd7) begin
                        state   <= S0;
                        cnt     <= 4'd0;
                    end
                end
            endcase
        end        
    end	
endmodule

[Pin Assign]

 

[Test Result]

이를 합성 후 출력결과를 SignalTab 로 확인한다. 

PuTTy에 키보드로 a  s  d  f  g  h  j  k 순 으로 입력한다.  

 

'원s > FPGA' 카테고리의 다른 글

[DE2-115] Lab.8: Serial Communication with Python  (0) 2021.04.24
[Quartus] Signal Tab  (0) 2021.04.11
[DE2-115] Lab.6: FIFO  (0) 2021.04.10
[Quartus] RTL Simulation  (0) 2021.04.04