马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
各位大侠:
本人新手,最近搞了一周的FPGA用VHDL读写Intel Nor flash 28f256,但是没有成功,实在不知道怎么办了,datasheet看了很多遍了,特来请教。
28f256 共有25根地址线,16根数据线,我的genesys virtex-5开发板已经默认将flash设置成×16 mode,异步读,使能unlock、擦除和编程功能等,所以flash的clk、wait不用,下面是我写的代码,请大侠看看: 1: entityfuck is port(clk:in std_logic; rst:in std_logic; ledutstd_logic_vector(7 downto 0); cenutstd_logic; oenutstd_logic; wen:outstd_logic; reset:outstd_logic; addr:outstd_logic_vector(24 downto 1); data:inoutstd_logic_vector(15 downto 0)); end fuck;
architecture Behavioral of fuck is signal i,n:integer range 0 to 10000:=0; signal temp:std_logic_vector(15 downto0):=x"0000"; signal num:integer range 0 to 100000000:=0; signal j:std_logic:='0'; signal k :integer range 0 to 8:=0; begin reset<=rst; main:process(clk) is begin if(rising_edge(clk)) then--CLK周期10ns,flash信号起作用估计需要100ns case i is when 0 =>cen<='1';oen<='1';wen<='1';i<=i+1;--设置控制信号初始值,板子已经将byte,wp#,vpnn等信号设置成16 mode了,所以A0地址无效。 when 10 =>addr<=x"000000";data<=x"0090";i<=i+1;--90H是读设备ID的命令 when 20 =>cen<='0';oen<='1';wen<='0';i<=i+1; when 30 =>cen<='0';oen<='1';wen<='1';i<=i+1;--wen的上升沿采样data和addr when 40 => addr<=x"000000";i<=i+1;-- 此时应该输出flash的id 89H when 50 =>cen<='0';oen<='0';wen<='1';i<=i+1; when 60 => led<=data(7 downto 0);--但是data上总是上次的数据,即前面的命令90H,意味着前面的命令根本没有送到flash内,但是我试了,擦除可以执行,其他的都不行,其他代码原理大同小异,我就不发上来了,请大家看看 when others => i<=i+1; endcase; end if; end process main; end Behavioral; |