原创 培训六第一部分(flash控制)

2011-7-30 10:39 1406 9 9 分类: FPGA/CPLD

我就说我写的应该不会有错,但看signaltap,怎么一直在写状态里面跳转,查了半天,原来是数字写错了。。。

细节啊

这次只是最基本的falsh控制,操作他的读写擦除,最后,在某个地址读出了我写进去的数

端口属性列表:

module flash_ctrl(
input clk,
input rst_n,
//input [2:0] key,
input ry_by,//由flash送到fpga
output reset,//送到flash
output ce_n,oe_n,we_n, //送到flash
output [20:0] addr,//送到flash
//output [7:0] data_out,
inout [7:0] data//从flash读出数据是是input,其余擦除和写的时候作output,控制信号

);

1.擦除(chip擦除而非扇区擦除):

/*1.擦除:共6个命令,写完每个命令后,先让WE写使能有效,然后再让它无效
AAA AA 555 55 AAA 80 AAA AA 555 55 AAA 10
第一个状态先得让其无效,最后发完命令还有RYBY的判断(1才能跳转到wr_state)

2.写(板子的byte脚拉低,所以只能是8位数据位操作):

AAA AA 555 55 AAA AA PA PD

3.读

送要读的地址就OK(vhdl中注意signal的特点,否则如果读连续的多个数据,可能读出数据出错)

代码:

主要步骤:

1.端口列表以及输入输出属性

2.双向口的处理(三态)

3.状态机(擦除,写,读)

三个大状态中又分为若干个小状态(考虑延迟,所以赋值在下一个时钟上升沿才能真正有效到达,所以会在每个送地址,送数后的一个状态,才将WE拉低有效,之后再拉高,送地址,送数据),写到这里,我想应该可以将送地址和送数据和前面那个的拉高写在一个状态中,可以减少状态机,类似流水线操作




文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条