原创 开工

2010-3-20 15:02 1919 4 5 分类: FPGA/CPLD

       搬到老校区已有一周了,这学期我的主要任务是做毕业设计,题目是用FPGA实现宽带信号的可靠传输,其实题目上学期已经拿到,但之前一直在做38所DSP函数库的项目,因此也就没有时间准备这个课题,不过觉得挺有意思的,可能是做软件做的时间比较长,想换换口味了。寒假回家查了查FPGA高速通信方面的一些资料,找到的信息不是很多,但基本上知道我要做什么了,对课题有了一个了解。开学后导师给我们了一块实验板,是Xilinx V5系列的。之前没有接触过


7fd58025-107e-458f-81f1-d569403f0e50.jpg


FPGA,拿到这个实验板,觉得很兴奋,觉得这个板子太酷了,在网上一查,1195美元,折合人民币8000多呢,我的天呢,比我的笔记本电脑还贵呢,我下定决心,一定要把这玩意搞懂,搞精!


        一周过去了,每天都在实验室泡着,刚开始都不知怎么从哪入手,更别提拿这个板子实现什么功能了。我花了几天时间,将VHDL语言复习了一遍,其实以前学过这个语言,现在再熟悉熟悉。再花了一些时间,将ISE软件学习了一遍,按照书上的方法操作了几遍,知道大概的开发过程,但这个软件功能十分强大,我只是略知皮毛而已,不过对于初学者已经够用了,其他高深的东西以后遇到了再学不迟。语言和开发环境都熟悉了之后,我就想做点具体的东西了,首先想到的就是控制一下板子上的LED,这个是比较基础的实验,我大概构思了一下,将端口定好,使其输出“00000001”,并且使其不断循环移位,这样就可以做一个流水灯了,但问题也就随之而来,板子上的时钟是100MHz的,如此高的频率怎么控制呢,我想到了分频,用一个计数器计数,这样可以实现延时,我写的代码如下


process(clk)


begin


    if(rising_edge(clk))  then


        count<=count+'1';


    end if;


    if(count(30)='1') then


        led<=num;


        count<=(others=>'0');


       num<=num(6 downto 0) &num(7);  --循环移位


     end if;


end process;


我将其进行了功能仿真,得到的波形完全正确,觉得万无一失了,就将其下到板子上,结果只见灯闪了几下就不动了,当时很是郁闷,查了又查,程序和仿真波形都没什么问题啊,接下来我想到了管脚约束,查了一下,管脚果然约束错了,将其修改后,我得意地又下载了一遍,还是有问题,这时已经晚上10:30了,时候不早了,我就不舍地离开了。


        第二天早上来后,我迫不及待地又查了查程序,将其修改如下


process(clk)


begin


    if(rising_edge(clk))  then


        count<=count+'1';


        if(count(30)='1') then


            led<=num;


            count<=(others=>'0');


            num<=num(6 downto 0) &num(7);  --循环移位


        end if;


     end if;


end process;


经过漫长的编译生成了bit文件,下载到板子后,发现8个LED流动闪烁了起来,当时真的是非常激动,终于成功了,我的第一个上板程序调试成功!哈哈……高兴不能太早,还没找到问题的所在,在这里我向大家求助,到底是什么问题导致第一个程序不能成功呢?


这周结束了,下周我将继续努力!争取可以控制板子上的LCD液晶显示。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1528479 2010-4-18 20:17

原因是process过程块里的程序是顺序执行的, if(rising_edge(clk)) then count<=count+'1'; end if; 只有在上面这个if语句执行完后才开始执行下面这个if语句 if(count(30)='1') then led<=num; count<=(others=>'0'); num<=num(6 downto 0) &num(7); --循环移位 end if;
相关推荐阅读
用户531580 2010-05-13 13:29
海明码详解
海明码是奇偶校验的一种扩充。它采用多位校验码的方式,在这些校验位中的每一位都对不同的信息数据位进行奇偶校验,通过合理地安排每个校验位对原始数据进行校验位组合,可以达到发现错误,纠正错误的目的。<...
用户531580 2010-04-17 23:19
又进一步
        终于有时间写日志了,这几周还真是忙啊,呵呵!        高速数据传输方面有了新的进展。我将向导生成的例子从头到尾研究了几遍,发现它包含以下几个模块:ROCKETIO模块,发送数据模...
用户531580 2010-04-10 11:32
XILINX IP核定制ROM
        FPGA内部有BLOCK RAM和分布式RAM,这些资源都可以作为ROM(ROM只是有初始值的RAM,而且该初始值不能改变)。有些低端的FPGA可能没有BLOCK RAM。本文主要介绍...
用户531580 2010-03-27 16:59
摸索中前进
        忙碌的一周又过去了,上周计划的LCD没有调通,很是郁闷,不过令我欣慰的是高速数据传输方面有了新的进展,呵呵……       先说说LCD吧,如下图所示,是一块1602液晶,我以前用单片...
用户531580 2010-03-21 14:51
我们为什么要写testbench?
与写testbench相对应的功能手段还有画波形图,两者相比,画波形图的方法更加直观和易于入门,那为什么我们还要写Testbench呢?原因有以下五点:第一,画波形图只能提供极低的功能覆盖。! \  ...
EE直播间
更多
我要评论
1
4
关闭 站长推荐上一条 /3 下一条