学业辅导精编版-4第51组_第1页
学业辅导精编版-4第51组_第2页
学业辅导精编版-4第51组_第3页
学业辅导精编版-4第51组_第4页
学业辅导精编版-4第51组_第5页
免费预览已结束,剩余26页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一.序列检测器设 【仿真分析及分步结果 【FPGA资源使用及warning的理解 实验二.数字锁设 【仿真分析及分步结果 【FPGA资源使用及warning的理解 实验三.四位符号除法设 【仿真分析及分步结果 【FPGA资源使用及warning的理解 实验四.同步FIFO的设 一 实验目 二 实验内 1、FIFO模块接 仿真编写及仿真波 4、关于warning的说 5、使用资源说 三.实验总 四.附 仿真 实验五.屏幕保护程序的设计与实 三.实验方 四.实验总 五.附 实验六.锁相环设计设计报 【仿真分析及分步结果 【FPGA资源使用及warning的理解 实验七.Cordic算法实现设计报 四.具体方 功能仿 VHDL实 五.仿真效 实际效 六.实验总 实验一.序列检测器设【问题描述1101reset有效。【设计方案sel端处使用Moore状态机,1101同sel[0]绑定,最的‘1’同sel[3]绑定。速率同sel[3downto0]选择速率一致即可。此处应该注意的是resetsegmentsel都回到初值。对于防抖动的部分,pdfbasys2板【仿真分析及分步结果下图为整个模块的RTLdivider控制灯亮或者不亮即找到或者没有找到指定序列。My_segment为数码管显示模块,其segment[6downtown0]sel[3downto0]两个部分控制数码管。bit/=bit_delay来判定是否按键按下。序列检测模块中,需要注意状态机的写法是状态是固定的几种(本实验中是4led=1,即使得小灯亮的状态只有一种。数码管显示部分要与序列检测部分绑定一起,即只有sel[3]=’1’bit=’1;reset有效。【FPGA资源使用及warning的理解ifclk’eventandclk=’1’之下,即所有的寄存器都是去检测时钟边沿而不是仅仅对时钟进行判warningwarningsegment_dat这个寄存器掉以节约合时这种截掉某些Bit(如没有连线的Register,只定义没有用到的Register【Testbench由于对于第一个实验相对简单,因而很多同学都没有使用testbench来进行,Testbenchd0d1(bit0bit1)bit1waitfor10*clk_period后为’1’然T内变为’0’,依次来代表在实际上按下一个按键’1’的情形。【实验结论检测检测检测到检测检测到检测灯亮检测检测到检测到Resetreset没有暗,后来经过调试较reset后的初始值就好了。由于实验调试中发现“1101”序列并不是每一次都可以检测到,这也是代码有些Bug实验二.数字锁设【问题描述拨码开关限制4位,8个开关每两个开关表达0,1,2三个数字中的一个,按键输入bit0,bi1,bi2三位来表达0,1,2三个数字,按键输入,数码管相应显示,若正确,则指示reset复位。【设计方案sel端处使用Moore状态机,sel输出,按键输入只有与开关对应上,状态速率同sel[3downto0]选择速率一致即可。此处应该注意的是resetsegmentsel都回到初值。对于防抖动的部分,pdfbasys2板【仿真分析及分步结果bit[2downto0],检测输出是否与拨码开关设置相同。My_segmentsegment[6downtown0]sel[3downto0]两Bit[2downto0]的输入中值得提到的是检测到按键按下这一步骤,不能直接写作bit/=bit_delay来判定是否按键按下。状态转移模块中,需要注意状态机的写法是状态是固定的几种(本实验中是4数码管显示部分要与序列检测部分绑定一起,即只有sel[3]=x3;sel[2]=x2;sel[1]=x1;sel[0]=x0;才可以认为输出正确。【FPGA资源使用及warning的理解ifclk’eventandclk=’1’之下,即所有的寄存器都是去检测时钟边沿而不是仅仅对时钟进行判warningwarningsegment_dat这个寄存器掉以节约合时这种截掉某些Bit(如没有连线的Register,只定义没有用到的Register的速率,如果在高速中,会严重影响时序。上述综合的warning也很常见,就是在代码中缺少一些需要的敏感表。从程序的写如果是异步(reset在实验中使用的就是异步的)就应该加入敏感表中。否则将会变成同【Testbench由于前几个实验相对简单,因而很多同学都没有使用testbench来进行,直接detectror(状态转移图)testbench如上图。Testbenchbit[2downto0]reset,同时可以看到在输出正确结果led7led0亮。【实验结论灯亮N次都失败之后给出一个标示灯亮标示尝试次数过多,需要锁定等。实验三.四位符号除法设【问题描述【设计方案 B【仿真分析及分步结果下图为整个模块的RTLSignedDividerDin1(3downto0)为被除数,Din2(3downto0)为除数,Dout为输出的商,Rout为输出的【FPGA资源使用及warning的理解ifclk’eventandclk=’1’之下,即所有的寄存器都是去检测时钟边沿而不是仅仅对时钟进行判When…else语句,因而组合逻辑的使用相对较多,when….elseif…else虽然可以写出同样的功能,但是它们用法背后的本质是不同的,if…elseprocesswhen…elseprocess外面,是并if…else语句,而时间要求小,需要同步when…else。warning很少,全部都是由于冗余的寄存器造成在综合的时候需要被截掉Bit(Register,只【Testbench本实验并没有用testbench【实验结论实验四.同步FIFO的设一.实验目1FIFO2FIFOVHDLVHDL二.实验内1FIFO-FIFO深度,若FIFO内数据数目Full8-FIFO宽度,代表数据的位4-FIFO-1-1reset-FIFO-1FIFO-1FIFO-FIFO-1FIFO1FIFO-1FIFO1FIFO1如图示,我们设计的Ram_FIFO模块由FIFO_Control模块和ram模块组成。其中FIFO_ControlramFIFO_Full、FIFO_Empty信号。Full、Empty判断0,emptypre1从-10,full信号置高。3、Testbench、仿真编写及仿真波针对顶层模块,我们编写了testbench以及的仿真fifosim.do,见附录。之后在中输入dofifosim.do指令得到以下仿真波形:图 从仿真波形可以看出,我们的testbench是按照助教的给出的示例波形给的信号,而仿4warning516、DataWidth8bit、AddrSize4bit,占用资源较少。另外其实这个实验并没有要下到实验板三.实验总FIFO的接口、功能,并自己编写代码实现。在实现过程中注意到GENERICFIFO_Depth、DataWidth、AddrSize设为可调节。另外学习了testbench的编写以及仿真的编写,写一个好的testbench不FIFO功能,在我们调试过程、查错过程中也会有很大的帮助。四.附

仿真vcomvsim-novoptwork.FIFO_testaddwave\{sim:/FIFO_test/wr_en}{sim:/FIFO_test/fifo_empty}radixunsignedwhen{$now=@2500ns}{echo"Simulationend"}run-all实验五.屏幕保护程序的设计与实一.实验目2.二.实验内ROM8x5184btn[0]45度方向移动,移到屏幕btn[0]图像又继续动作。btn[1]1btn[2]2:滚三.实验方1图2屏保模块框 图396x54像素显示图在ScreenSaver模块中有调用一个IPCoreBlockMemory用以96x54像素图“ world”图像并通 处理Mc''c

4IPCoreBlockMemory实现ROMVGAVGA25MHz640x480的标25MHz1/(25x106)=0.04us640x480640640x0.04us=25.60usVGA一般规范,同步脉冲的长度大约为行显示时间的0.15倍,这里我取96个时钟像素。而显示后沿和显示前沿大约各为行显示时间的3/40和1/40。因此,显示后沿和1.92us0.64us4816个时钟像素。80032us160s,32us521行。场时序需要480行x32us/行=15.360ms的时间。根据规范,场同步脉冲大约为场时序的1/240。因此,场同步脉冲Sync需要0.064ms,即2行。显示前沿和显示后沿分2910行。29480行的像素可见区域,最10521,清零并按上述过程重新开始,VGA控制器开始往屏幕写入新的一帧。12:154541如此往复得到。滚world”(具体实现见代码)offset1966BRAM3IPCoreBlockMemory所用到的。可以看到该实验板一共的BRAM所以一幅96x54像素的图像是较为合理的利用了资源。Countercounter(3)4、5、6位都没有连任何东西,所以不会影响结果。之所以将counter6位,是因为调试起来方便,调节图四.实验总本次实验中用到了IPCore,学会了用 生成mark.coe文档初始化ROM。可以说,合理的调用IPCore可以让我们程序设计更加高效。如专门写testbenchtestbench。IPCore的方式与助教给出的略有不同。我用的软件环境是XilinxISEDesignSuite12.464bit。但最终实现的功能相同。五.附代码:functionimg2=IMG2coe8(imgfile,outfile)fprintf(s,'%s\n',';VGAMemoryMap');fprintf(s,'%s\n',';.COEfilewithhexcoefficients');forr=1:heightfor

实验六.锁相环设计【问题描述率要“实时”到。主要思路是利用锁相环来实现输出信号对于输入信号的锁定。【设计方案N计数器四部分构成。如下图:Fo1000Hz的数量级。其中可逆控制模块与加减控制模块额clk50M主时钟。K的计数器(K=50M/1000,数量级在这个范1’时,可逆计数器加,加到K则逸出“进2分频。在不同的M下,N的选择也是不同的。因而实际中我是在每个周期都是对输入信号T,来换算得到合适N值。【仿真分析及分步结果下图为整个模块的RTLs_gentask6_basic模块是DPLL锁相环模块,输出一个1.5倍频的50%占空比的,其中ISIMclk为时钟,x为输入,y_temp为输出,resetpadyx1.5y50%,满足要求。在testbench里面,x1000hz量级来实现。下图为模K计数testbench示意图,其中K此时选取25,可以看到输入信号占空比上图为加减控制器的testbenchins为上升沿(这里仅仅去采insdecins为’1’的时候都减少脉冲)时,iout输出信号会减少一个dec为上升沿时,iout输出信号会增加一个脉冲。Iout信号的增加或者减(200nsinsdec的上升沿时,都应该先去判iout的输出是高还是低,若为‘10decinsdec做一个寄【实验特色1.510Hz/sNN的大小与输入信号有关,输入频NTT结束都去重新更ns级别内。【FPGA资源使用及warning的理解DPLL模块中锁为寄存器。Tempclk上升沿的时候改变。warningwarningn2这个寄存器我给它元件之间的扇出量,影响它前级和后继模块的速率,如果在高速中,会严重影响时序。还有一种综合的warning很常见,就是在代码中缺少一些需要的敏感表。从程序的【Testbench每一步骤的仿真波形见上文中的“仿真及分步结果,这里仅简略描述我对于每一testbench中输入信号是如何给出的。Testbench对于一个需要分块进行的模块是十分必要的,尤其是对于一些自己并不确定(DPLL3testbenchK计数器,及加减控制模块。而对于分频模块和除法模块则没有testbench)【实验结论Spartan3dsp48E,所以用了*号来做乘法,后来一直有这样做出来更有成就感,更能感受到自己如果真正参与科研也是做一个整体的一部分的感觉。1.5倍频,而且还给定了输入信号的范围,但是频率是输入频率1.5倍频的的思路更容易理解(如开始生成一个1000hz的,然后用一写counter来计数比较频率,小则加,大则减,这种思路已经抛开了锁相环,但是同样实验七Cordic算法实报一.实验目Cordicsin和cos二.实验内0000416p和角度数值(单位是弧度)的对应关系如下:

/2

/2即:显示“FFFF”代表/2“0001”代表 BTN3、2、1、04个数码管显示的角度内容,每按一下按钮,对1(加到‘F’时再按按钮回到‘SW0SW1cos值,SW1sin416d和对应的数值vvd/1即:显示“FFFF”代表计算结果v1,显示“0001”代表v 1090三.实现原CordicCordic算法实现的是一次极坐标的转换,如下图所示,将极坐标向量(X0,Y0)变成新极坐标向量(X,Y)

(X,X

sinX0Y sin

Y

(X0,

0 每一次

X1

Snn

narctann

SnXn1cos

sinSnnXn

sinS

cosS

Yn1 n nnn利用上述公式从X0Y0依次计算X1,Y1、X2Y2、X3,Y3、……、XN,YN。N,XN,YNX,Y。根据n的特殊取值(3)可以简化公式(5)的硬件实现,即Xn1

cos

2nX

nS2 Yn1 n如果在计算递推表达式(6)的时候故意漏掉前面的系数cosn,即用下面的迭代表达式 S2nXnYSn n1nYSn

2

Y

n1

n

X则,当迭代次数足够大时(n)可以发现最终的迭代结果

和直接计算公式(1)XY到的正确答案 的关系为Y

X

cos

X

Y Y

Kcosn0.607253XnXn1 S2Yn1Snn1 XnYnZn1ZnSn1ifZifZnnnX Y cosn XYX,Y就是要求的Sin

累计旋转的角

和最终需要旋转角度

X1

k

Y00,Z0Zn k

S

ifZn

ifZn

利用Cordic计算cos和sin(7)(8)对坐标(1,0)旋转角度得到的坐标X,Ycossin其中公式(8)所做的乘法运算K0.607253体方根据上述Cordic算法,设计了如 设计做功能仿真。代码在老师给出的基础上做了进N=17是根据运算精度得出的结论。N=17是根据运算精度得出的结论。度,做有符号数运算时补一位。角度θ的精度为16位,theta_bintheta做十二进制转换,转换172VHDLROM提供数Z为π/2的量化(VHDLtestbench相对应xy2*17XY,通过仿真,VHDLTest波形进aquirementoftheprecision%arctan(2^-16)>pi/2/2^16>arctan(2^-17)forn=1:N-

2Cordicifs==0VHDLVHDL3首先是Cordic_pipline模块。该模块功能是进行一次右图中的公式运算。其中调用了ipCORE,用于上述中4IPCore-BlockMemorytheta.coe文档如下:Cordic模块接收所需运算的角度大小,并控制Cordic_pipline17次,将输出传递给输入以实现迭代。其中,整个迭代运算在两拍内完成,一拍Cordic_pipline输出到输入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论