用verilog 进行FPGA设计阶段总结_fpga笔试题及答案总结

2020-02-27 其他工作总结 下载本文

用verilog 进行FPGA设计阶段总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“fpga笔试题及答案总结”。

用verilog 进行FPGA设计第一阶段总结

2007-08-23 21:34

实习期间,老师叫我们做他的大课题中的一个小部分。这个部分主要是将A/D采集的数字信号利用一个函数进行插值恢复,以便后面的作图中使用。要求在每两个点中间均匀插入九个点,每个点与其前后80个点有关,用verilog语言描述,在xilinx公司的开发环境ISE下完成。

对于verilog我们没有接触过,以前的课程设计都用的是VHDL,ISE也没用过,以前用的是Maxplus2开发环境,于是我们就从网上下载了一些教程开始学习。在熟悉了verilog的语法和ISE之后,我们开始了设计。思路是这样的:将要处理的数据先存在一个存储器中,然后每进来一个新的数据,所有的数据向前移动一个寄存器,在主时钟十分频之后的每个上升沿读取新的数据进来,然后计算插值,然后在每个主时钟的上升沿处输出插值后的数据,这样就能实现插值的过程了。

在具体的编写程序的时候,我们先用与每个插值点前后4个点有关进行设计,设计好之后再进行扩展。对于插值的计算我们先不考虑,将其全部设置成常量,主要考虑看能否在两个点之间插值成功,这样的程序就简单多了。很快我们的程序就写好了,编译仿真之后能实现插值。接下来就是主要考虑插值的计算问题了,在这个部分我们走了一些弯路。

首先是乘法问题,这个课题相当于是一个FIR滤波器,其中要进行约720次的相乘累加,我们看资料书和一些发表的论文,上面好多都考虑用分布式算法DA来实现,但是要是考虑的点多了,这种方法就不可行了,因为那个表会造的很大。在书上,我也没有看到直接用乘号来进行乘法运算的,大部分都是进行移位相加的,为此还认真的研究了一下乘法的原理。到最后,老师说你可以直接用乘号的,不要管那些移位什么的,这些是综合器做的事情。

其次是verilog中有符号数的计算问题。因为是新接触,不知道怎么做。为了实现2*(-3)=-6,搞到了半夜两点。我记得计算机组织与结构里面有一章是关于乘法的,里面讲的是用布斯算法,看了半天,觉得在程序中这样实现太麻烦,肯定有更简单的方法。最后在百度里知道只要在声明的时候加个signed就行了。

再次是数据宽度问题,两个8位的数据相乘后应给16位宽度,在加8位的宽度就可以进行256次相乘累加。在原码表示中,数据从低的宽度到高的宽度时,符号为移到最左边,其余空位用0来填充;在补码表示时则是符号位移到最左边,其余各位用相应的符号位填充。

庆幸的是,我们利用简单的C语言程序就将复杂的权值计算出来了,省了好多的时间,深切的体会到了计算机的好处。

这些都做好之后,我们在一次仿真,结果令我们高兴,但又令我们苦恼。因为出来的结果有一半是正确的,与我们用C语言插值的结果一样,另一半却是

随后两个点插值的一半。能计算出一半,就证明程序计算部分没有错,我们给的权值也正确,那是哪里错了呢?分析了半天之后,我们找出了这个规律,觉得是计算花的时间太长,导致还没计算完9个插值就有新的数据进来参与了随后的计算,其实是由于计算和输出是并行的,计算出来的结果没有经过缓冲就直接输出,这样由于计算第一个插值和输出第一个插值不同步,这样使得在还没有输出结束时,新的插值覆盖了原来的插值,最后我们在计算和输出之间加了个缓冲器就好了。

老师看了结果后比较满意,接下来就要下载到具体的芯片上进行调试,看是否正确。我们到这一步还只是行为级的仿真,接下来的综合和下载到器件上调试将会遇到更多的困难。相信通过我们的努力,这些困难将会成为我们以后成功路上的垫脚石。

用verilog 进行FPGA设计第二阶段总结

2007-08-31 17:37

第一阶段的行为仿真完成之后,我们开始进行第二阶段的综合和实现。在双击综合按钮之后,我感觉出问题了,这么个小程序,综合了十来分钟还没完成,出现了“no poible choice”字样,再看看用到的硬件资源,16*8的乘法器326个,锁存器891个,很吓人的,并且出现了加权值寄存器没有初值的警告。我想这种方法是行不通的,肯定得找更好的办法。

因为放加权值的寄存器的值是不变的,所以可以用一个rom来实现。然后就立即找有关rom使用的资料,很快就学会了调用ISE自带的rom,并且也赋79了正确的初值给rom,我们把rom模块放在程序中进行综合的时候,令我们惊喜的事情发生了,乘法器一下子成了79个,锁存器也减少到了361个。但是我们进行功能仿真的结果却不正确,始终都是同一个值,似乎修改程序对输出的结果都没有影响。问题出在什么地方呢?我们开始排除错误,算法是正确的,因为在前一阶段用寄存器的时候仿真已经是正确的了,是rom的原因吗,好像也不是,因为我编写小程序测试的时候用我的方法是可以读出rom的值的,那到底是错在哪里?出来的结果不是我们预料的,这个问题我想了好几天,寄存器的方法是不能用的,必须用rom,但rom的问题在什么地方呢,试着修改程序,然后调试,但是就是没有结果出来,有时候都有种崩溃的感觉,但是我坚信,rom是可行的,并且有解决的办法,我们离成功只有一步。

我把rom的测试程序改的稍微复杂点,带个for循环,然后让它输出。问题暴露出来了,for循环的结果老是我给的最后一个地址的值,不论我用时钟触发或者不用。我开始以为是for循环中的变量不能读出rom,后来终于明白是由于for循环太快,每次都会将前一个读出来的值覆盖掉,所以最后出来的值老是最后一个。但是,不用for循环的话,那我们的程序该怎样设计呢?80个相乘累加要进行9次,如果一个一个搞,岂不累死人,写出来的程序肯定不行。还是得用for循环,这样在寻找for循环中使用rom的过程中,两天又过去了,而且没有什么结果,因为我能求助的人基本上都对这个不熟悉。

黄天不负有心人,我终于找到了解决的办法,在一本教材上面。用if语句在时钟的触发下来实现for循环,这样就可以了。不到半天的时间我们的程

序就可以仿真出来结果了,并且综合也通过,不会出现“no poible choice”消息,乘法器也没有了,用的资源很少,综合的时候30秒就可以完成,如果机器好的话。现在出来的结果跟我们先前的结果是一样的,真的很令人激动。在一个多星期的时间里,我们主要就解决了在怎样让rom循环的问题。俗话说:靠天靠地不如靠自己,我部分认同这个观点,当所有可以获得帮助的途径都没有用的时候,我们选择了自立更生。虽然最后也取得了效果,得到的知识也很深刻,但是我感觉付出的代价是在是大了点,好几天的功夫就面对这样一个问题,而这个问题属于经验性质的,用过之后以后就知道了,要是有个高手在旁边说一句话的话,估计半天就能解决问题了。

可能这就是生活,什么事情只有自己体会了才知道。

毕业设计阶段总结

阶段总结时间2011年2月25-2011年3月25这个月我的主要工作是完成系统的需求分析和设计数据库的模型。选题系统的需求分析,以前导师和我讲过,我对整个系统的需求也有了一定程度......

本科毕业设计阶段总结

本科毕业设计阶段总结毕业设计从开题至今,已经近两个月了。在这段时间里,通过跟随老师一起做实验,和同学、老师一起讨论课题,自己不仅学到了许多关于实验本身的知识,更受到了老师......

FPGA高手总结

一个FPGA高手的总结很早之前就想对这几个月工作经历写的东西,一是作为自己的总结,二是自己也很想将自己这段时间的一些经历和大家分享一下,希望对初学者而言能使得他们能少走一......

FPGA程序总结

1流水灯程序module ww(clk,led,rst);input clk,rst;output [3:0]led;reg [3:0]led;reg [24:0] cnt;always@(posedge clk or negedge rst)beginif(!rst)cnt elsebeginif(cnt=......

工程造价毕业设计阶段总结

桂林理工大学博文管理学院毕业设计·论文毕业设计阶段总结毕业设计对于每个大学生来说是一门必修课程,在大学这一个求学阶段只有一次。面对这一次难得的机会,虽然我也想很轻松......

《用verilog 进行FPGA设计阶段总结.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
用verilog 进行FPGA设计阶段总结
点击下载文档
相关专题 fpga笔试题及答案总结 设计 阶段 verilog fpga笔试题及答案总结 设计 阶段 verilog
[其他工作总结]相关推荐
[其他工作总结]热门文章
下载全文