基于FPGA的可靠性E2PROM控制器设计
时间:04-08
来源:互联网
点击:
5 可靠性E2PROM控制器设计
本文用VHDL语言,以有限状态机的方式在实现FPGA对E2PROM的控制。对于一般的读写过程,只需要7个基本状态便可实现,即:空闲,开始。写控制字,写地址,写数据,读数据,停止。
但由于本文的读写过程较为复杂,虽然基本的状态仍为这7个,但如果仅用这7种状态,会使得程序流程异常繁杂。考虑到每次读写中都首先要从地址分配表中读出数据地址,然后才在数据地址读写数据,这两个阶段虽然过程相近,但状态转换条件不同,将它们分离开来能使状态转换和程序流程更清晰。所以本系统对这两个阶段的状态分开实现,用14个状态实现整个读写过程,即:S0空闲,S1开始,S2控制字(写操作)。s3写地址,s4开始,S5控制字(读操作),S6读数据(从地址分配表中读取数据地址),S7结束(查表结束,此后为数据读写过程),S8开始,S9写控制字,S10写地址,Sll写数据,S12读数据,S13停止。其中Sl到S7为查地址分配表的过程.S8到S13为进行数据读写的过程。整个过程的状态转换过程如图3所示。
本文设计的E2PROM采用的方法需要首先对E2PROM芯片进行格式化,即对整个E2PROM存储空间进行划分,建立地址分配表。这个过程为基本写操作的循环,可以嵌入系统读写过程中。
因此,整个系统共有3个主要进程:时钟产生进程,状态转换进程和状态控制进程。
1、时钟产生进程,负责产生满足系统所需的各种时钟,主要是E2PROM的SCL,并且为了方便方便按照时钟要求读写数据,将SCL周期内划分为4个子周期。工作在1.8V、2.5V和2.7v时,E2PROM的工作频率为100KHz。本文采用100M的外
部晶振产生外部时钟clk,则需进行1000分频来产生E2PROM所需的SCL时钟信号。该进程如下:
CLK_GEN:PROCESS(clk)
BEGIN
IF clk’EVENT AND clk=’1’THEN
IF ncount=499 THEN
ncount<=0;sclsig<=NOT sclsig;
ELSE ncount<=ncount+l;
END IF:
END IF;
sel<=selsig;
END PROCESS;
2、状态转换进程,负责在适当的时机将状态机转入下一状态,代码如下:
STATE_TRANS:PROCESS(sclsig)
BEGIN
IF sclsig’EVENT AND sclsig=’0’THEN
curstate<=nextstate;
END IF;
END PROCESS
3、状态控制进程,负责在格式化及读写过程中各种信号的设置,这是整个系统最复杂也是最核心的部分,其本质就是系统状态转换图的VHDL代码实现。但其过程相当繁琐,在这里只能将这个进程代码的主要部分展示出来,然后对各状态的具体操作进行适当的说明。
本进程的主要代码如下:
STATE_CTR:PROCESS(clk)
BEGIN
IF clk’EVENT AND clk=’1’THEN
CASE curstate IS
WHEN S0=>
IF rwf/="00"
THEN nextstate<=S1;
END IF;
......
WHEN S13=>
IF sclsig=O AND ncount=499
THEN sda<=’0’:
ELSIF sclsig=1 AND nclk=124
THEN sda<=’1’;nextstate<=sO;
END IF;
END CASE;
END IF;
END PROCESS;
图3系统状态转换图
对各状态的说明如下:
S0:空闲状态,检测rwf信号输入。如果为格式化命令(“ll”)则转入S8,如果为读操作或写操作命令(分别为“0l”和“10”)则转入S1。
S1:产生开始信号。完成后转入入S2。
S2:向SDA线输出写操作控制字。完成后转入S3。
S3:写地址(由外部输入)。即所需操作的数据单元对应在地址分配表中的地址。完成后转入S4。
S4:产生开始信号。完成后转入S5。
S5:向SDA线读操作控制字。完成后转入S6。
S6:读取数据,此处为所需数据所在的地址。完成后转入s7。
S7:产生结束信号。完成后转入S8。至此查表过程结束,此后为实际读写过程。
s8:产生开始信号。完成后转入S9。
S9:输出控制字。如果在读操作过程中且为第二次进入该状态,则向SDA线输出读操作控制字,完成后转入S12;否则输出写操作控制字,完成后转入S1O。
S1O:写地址(即S6状态中读取的数据)。完成后,如果为读操作则转入S11,否则转入S8。
S11:写数据,向SDA线写外部提供的数据。完成后转入S13。
S12:读数据,完成后转入S13。
S13:产生结束信号。如果处于读操作结束状态,则转入SO;如果处于写操作结束状态并且没有对数据回读以检查所写单元是否正常。则转入S6进行回读;如果处于写操作回读结束状态,无误则转入S0,有误则转入S1读备用区首地址;如果是对备用区写操作回读有误,则地址加l后进入S6写下一地址,直至能正确写入,之后将地址加1写入备用区首地址.然后转入S0;如果处于格式化过程中,则地址加1后转入S8,直到格式化结束转入S0。
6 仿真结果和结论
图4写操作功能仿真的部分波形
图5读操作功能仿真的部分波形
在Quartos II软件中对本文设计的E2PROM控制器进行了功能仿真。写操作和读操作功能仿真的部分波形如图4和图5所示。根据仿真波形可知,其结果与预期基本一致。在工程中的成功应用也证明了本设计的正确性。
本文作者创新点:对E2PROM存储空间进行适当的划分,以类似指针的方式进行读写操作,减少了系统对特定存储单元的依赖,提高了系统的可靠性。
作者:接辉,顾文灿 来源:《微计算机信息》(嵌入式与SOC)2009年第7-2期
本文用VHDL语言,以有限状态机的方式在实现FPGA对E2PROM的控制。对于一般的读写过程,只需要7个基本状态便可实现,即:空闲,开始。写控制字,写地址,写数据,读数据,停止。
但由于本文的读写过程较为复杂,虽然基本的状态仍为这7个,但如果仅用这7种状态,会使得程序流程异常繁杂。考虑到每次读写中都首先要从地址分配表中读出数据地址,然后才在数据地址读写数据,这两个阶段虽然过程相近,但状态转换条件不同,将它们分离开来能使状态转换和程序流程更清晰。所以本系统对这两个阶段的状态分开实现,用14个状态实现整个读写过程,即:S0空闲,S1开始,S2控制字(写操作)。s3写地址,s4开始,S5控制字(读操作),S6读数据(从地址分配表中读取数据地址),S7结束(查表结束,此后为数据读写过程),S8开始,S9写控制字,S10写地址,Sll写数据,S12读数据,S13停止。其中Sl到S7为查地址分配表的过程.S8到S13为进行数据读写的过程。整个过程的状态转换过程如图3所示。
本文设计的E2PROM采用的方法需要首先对E2PROM芯片进行格式化,即对整个E2PROM存储空间进行划分,建立地址分配表。这个过程为基本写操作的循环,可以嵌入系统读写过程中。
因此,整个系统共有3个主要进程:时钟产生进程,状态转换进程和状态控制进程。
1、时钟产生进程,负责产生满足系统所需的各种时钟,主要是E2PROM的SCL,并且为了方便方便按照时钟要求读写数据,将SCL周期内划分为4个子周期。工作在1.8V、2.5V和2.7v时,E2PROM的工作频率为100KHz。本文采用100M的外
部晶振产生外部时钟clk,则需进行1000分频来产生E2PROM所需的SCL时钟信号。该进程如下:
CLK_GEN:PROCESS(clk)
BEGIN
IF clk’EVENT AND clk=’1’THEN
IF ncount=499 THEN
ncount<=0;sclsig<=NOT sclsig;
ELSE ncount<=ncount+l;
END IF:
END IF;
sel<=selsig;
END PROCESS;
2、状态转换进程,负责在适当的时机将状态机转入下一状态,代码如下:
STATE_TRANS:PROCESS(sclsig)
BEGIN
IF sclsig’EVENT AND sclsig=’0’THEN
curstate<=nextstate;
END IF;
END PROCESS
3、状态控制进程,负责在格式化及读写过程中各种信号的设置,这是整个系统最复杂也是最核心的部分,其本质就是系统状态转换图的VHDL代码实现。但其过程相当繁琐,在这里只能将这个进程代码的主要部分展示出来,然后对各状态的具体操作进行适当的说明。
本进程的主要代码如下:
STATE_CTR:PROCESS(clk)
BEGIN
IF clk’EVENT AND clk=’1’THEN
CASE curstate IS
WHEN S0=>
IF rwf/="00"
THEN nextstate<=S1;
END IF;
......
WHEN S13=>
IF sclsig=O AND ncount=499
THEN sda<=’0’:
ELSIF sclsig=1 AND nclk=124
THEN sda<=’1’;nextstate<=sO;
END IF;
END CASE;
END IF;
END PROCESS;
图3系统状态转换图
对各状态的说明如下:
S0:空闲状态,检测rwf信号输入。如果为格式化命令(“ll”)则转入S8,如果为读操作或写操作命令(分别为“0l”和“10”)则转入S1。
S1:产生开始信号。完成后转入入S2。
S2:向SDA线输出写操作控制字。完成后转入S3。
S3:写地址(由外部输入)。即所需操作的数据单元对应在地址分配表中的地址。完成后转入S4。
S4:产生开始信号。完成后转入S5。
S5:向SDA线读操作控制字。完成后转入S6。
S6:读取数据,此处为所需数据所在的地址。完成后转入s7。
S7:产生结束信号。完成后转入S8。至此查表过程结束,此后为实际读写过程。
s8:产生开始信号。完成后转入S9。
S9:输出控制字。如果在读操作过程中且为第二次进入该状态,则向SDA线输出读操作控制字,完成后转入S12;否则输出写操作控制字,完成后转入S1O。
S1O:写地址(即S6状态中读取的数据)。完成后,如果为读操作则转入S11,否则转入S8。
S11:写数据,向SDA线写外部提供的数据。完成后转入S13。
S12:读数据,完成后转入S13。
S13:产生结束信号。如果处于读操作结束状态,则转入SO;如果处于写操作结束状态并且没有对数据回读以检查所写单元是否正常。则转入S6进行回读;如果处于写操作回读结束状态,无误则转入S0,有误则转入S1读备用区首地址;如果是对备用区写操作回读有误,则地址加l后进入S6写下一地址,直至能正确写入,之后将地址加1写入备用区首地址.然后转入S0;如果处于格式化过程中,则地址加1后转入S8,直到格式化结束转入S0。
6 仿真结果和结论
图4写操作功能仿真的部分波形
图5读操作功能仿真的部分波形
在Quartos II软件中对本文设计的E2PROM控制器进行了功能仿真。写操作和读操作功能仿真的部分波形如图4和图5所示。根据仿真波形可知,其结果与预期基本一致。在工程中的成功应用也证明了本设计的正确性。
本文作者创新点:对E2PROM存储空间进行适当的划分,以类似指针的方式进行读写操作,减少了系统对特定存储单元的依赖,提高了系统的可靠性。
作者:接辉,顾文灿 来源:《微计算机信息》(嵌入式与SOC)2009年第7-2期
FPGA VHDL Altera 总线 仿真 嵌入式 相关文章:
- 基于FPGA的片上系统的无线保密通信终端(02-16)
- 基于Virtex-5 FPGA设计Gbps无线通信基站(05-12)
- 基于FPGA的DVI/HDMI接口实现(05-13)
- 基于ARM的嵌入式系统中从串配置FPGA的实现(06-09)
- 采用EEPROM对大容量FPGA芯片数据实现串行加载(03-18)
- 赛灵思:可编程逻辑不仅已是大势所趋,而且势不可挡(07-24)