用FIFO实现高速数据传输,原理上并不是太困难,但是要真正做出来,还是要费不少功夫的。其实搞USB开发,涉及的东西太多,哪一方面都有可能成为拌路虎,让你失败。今天主要是实现一个状态机,用VHDL语言开发,编程工具是QUARTUS II 9.0,芯片用的是ALTERA公司的EPM240,实验板如下,
状态机的写法有多种,有说一段式的,有说两段式的,还有说三段式的,还有说最标准的写法就是三段式的。我用的是一段式的,但以前在东软的时候写过三段式的,本质上与两段式的没有什么区别。关于状态机如何写,我这里就不多说了,反正这也是一篇大文章,也不是我三言两语能表达清楚的,有兴趣的朋友可以自己查一下。
以下是我的程序片断,
PROCESS(clk)
BEGIN
IF (clk'EVENT AND clk='1') THEN
CASE current_state is
WHEN S0=> --idle state
faddr<="00";
sloe_out_i<='1';
slwr_out_i<='1';
fdata_i <= "11110000";
IF flagd='1' THEN
current_state<=S1;
ELSE
current_state<=S0;
END IF;
WHEN S1=>--prepare data
IF flagd='1' THEN
faddr<="00";
sloe_out_i<='0';
slwr_out_i<='0';
fdata_i <= counter_i;
current_state<=S2;
ELSE
current_state<=S0;
END IF;
WHEN S2=>--write data
slwr_out_i<='1';
current_state<=S1;
END CASE;
END IF;
END PROCESS;
当然,在结构体的最前面要对这三个状态进行声明,如下,
TYPE STATE IS (S0,S1,S2);
SIGNAL current_state :STATE;
程序编绎通过,没有什么问题,仿真也是正确的。完整的程序我会放在开发板对应的例程里,请访问我的淘宝网。
良子.2011年
沈阳市东陵区白塔街龙盛家园
欢迎交流:liangziusb@163.com
QQ:392425239
文章评论(0条评论)
登录后参与讨论