基于單片機和可編程邏輯器件的LED顯示屏顯示
本文引用地址:http://m.butianyuan.cn/article/171620.htm
reg[13:0] addrout,addr;//addr地址計數器
reg[3:0] state;// 狀態(tài)寄存器
reg [2:0] shcnt; //移位脈沖讀數器
reg CE,OE,sdr,sdb,sck,le,oe1,cs;
reg [8:0] byte;
parameter s0=1'd0,s1=1'd1,s2=1'd2,s3=1'd3, s4=1'd4, s5=1'd5; //狀態(tài)常量
2.2 訪問雙口RAM時序的產生
IDT7007是具有32KB的雙口RAM電路,與ATF1508AS的連接電路如圖2所示,其中: 為片選信號, 為讀寫控制信號, 為輸出使能信號,A0R-A13R為右端口地址總線,D0R-D7R為右端口數據總線,其右端口讀寫時序如圖4所示。我們采用有限狀態(tài)機實現(xiàn),其基本工作原理是:S0狀態(tài)進行初始化,S1狀態(tài)時ATF1508AS首先輸出地址信號addrout,然后置 相有效,S2狀態(tài)讀取雙口RAM的數據,并存儲到內容寄存器datain中,從而完成雙口RAM的讀數據過程。下面給出ATF1508AS讀取雙口RAM數據的主要代碼:
always @ (posedge clk)
begin //每個時鐘周期,狀態(tài)變化一次
case(state)
s0: begin //初始化狀態(tài)
CE=1'b0; //IDT7007片選
OE=1'b1; //IDT7007讀選通
le=1'b0;
oe1 = 1'b0;
cs = 1'b0;
addr= 14'b0;
SEMR=1'b1; //IDT7007 置1有
RWC = 1'b1; //寫控制 1
hcnt=4'b0000;
counter=4'b0000;
state=s1;
end
s1: begin //輸出RAM地址
CE=1'b0;
addrout=addr;//輸出地址
OE=1'b0;
SEMR=1'b1;
RWC = 1'b1;
shcnt = 3'b000;
state=s2;
end
s2: begin //讀雙口RAM數據
oe1=1'b0;
data1 = datain;
state=s3;
end
……(顯示掃描及LED驅動代碼部分)
endcase
end
評論