项目说明
实现AT93C46的接口协议,能够对EEPROM实现EWEN, WRITE, READ的功能。
准备工作
- 明确功能 输入输出信号列表+功能描述
- 画出功能波形图 每个信号的变化情况
- 分析输出划分状态
1)cs
EWEN:收到start拉高,10个SK拉低,经过一个tCS拉高,
WRITE: 收到start拉高,到18个SK拉低,经过一个tCS拉高,收到do=1拉低
READ:收到start拉高,18个SK拉低,经过一个tCS拉高.
可以划分状态为:IDLE∶初始状态,模块在等待 start 信号有效。 WR∶写状态。 TCS∶片选信号拉低。 DO∶等待写入操作完成。
2)sk
通过计数产生1MHz的芯片时钟
EWEN:WR状态,产生10个;WRITE, READ均是18个
3)di
在WR状态串行产生
4)rdy
收到start时即拉低,直到全部操作完成才拉高。
5)rdata,
READ时,将do逐比特从高位开始赋值给rdata
6)rdata_vld
READ结束,产生一个时钟的高电平。 - 状态转移图
状态机设计
reg[3:0] state_c,state_n;
//状态编码
parameter IDLE = 4'b0001;
parameter WR = 4'b0010;
parameter TCS = 4'b0100;
parameter DO = 4'b1000;
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
state_c <= IDLE;
end
else begin
state_c <=state_n;
end
end
always@ (*) begin
case(state_c)
IDLE: begin
if(idle2wr_start) state_n = WR;
else state_n = state_c;
end
WR: begin
if(wr2tcs_start)