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