您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > verilog同步和异步FIFO,可直接仿真和综合
EDA/SOPC课程设计报告题目:同异步FIFO模块的设计与验证姓名:xxx学号:120260320同组人:xxx指导教师:xxx成绩:EDA/SOPC课程设计报告信息与电气工程学院――电子科学与技术II目录目录...................................................................................................................................................II第1章课程设计的要求...................................................................................................................11.1课程设计的目的......................................................................................................................11.2课程设计的条件......................................................................................................................11.3课程设计的要求......................................................................................................................1第2章课程设计的内容...................................................................................................................22.1设计思路.................................................................................................................................22.2软件流程图.............................................................................................................................32.3HDL代码阐述.........................................................................................................................72.4ModelSim验证......................................................................................................................13第3章课程设计的心得.................................................................................................................21EDA/SOPC课程设计报告信息与电气工程学院――电子科学与技术1第1章课程设计的要求1.1课程设计的目的掌握FIFO设计的基本原理与方法培养Verilog语言模块化设计的思想意识完成一个FIFO的设计与验证掌握较大工程的基本开发技能培养综合运用Modelsim工具进行硬件开发的能力培养数字系统设计的基本能力加强对课堂Verilog语言学习的理解与升华1.2课程设计的条件设计条件ISE、Modelsim等开发软件的使用1.3课程设计的要求设计要求1设计同步FIFO并验证(包括仿真验证、FPGA验证)设计要求2设计异步FIFO并验证(包括仿真验证、FPGA验证)设计要求3采用DesignCompiler完成其逻辑综合,评估其面积和时序设计要求4完成综合后的SDF反标仿真EDA/SOPC课程设计报告信息与电气工程学院――电子科学与技术2第2章课程设计的内容2.1设计思路FIFO(FirstInputFirstOutput),即先进先出队列。在计算机中,先入先出队列是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令(指令就是计算机在响应用户操作的程序代码,对用户而言是透明的)。如下图所示,当CPU在某一时段来不及响应所有的指令时,指令就会被安排在FIFO队列中,比如0号指令先进入队列,接着是1号指令、2号指令……当CPU完成当前指令以后就会从队列中取出0号指令先行执行,此时1号指令就会接替0号指令的位置,同样,2号指令、3号指令……都会向前挪一个位置,这样解释大家清楚了吧?在设计之初,我们只对FIFO有一个模糊的了解,只知道它是一个先入先出的队列,但是对于它是如何组成和如何工作并不了解,于是我们设计的首要任务就是查阅资料,逐步完善我们对于同步FIFO和异步FIFO的了解。在前两天的工作当中,我们查阅了中外各类资料和文献,对FIFO的组成和工作原理有了深入的了解,最终决定以老师给的两篇《SimulationandSynthesisTechniquesforAsynchronousFIFODesign》和《SimulationandSynthesisTechniquesforAsynchronousFIFODesignwithAsynchronousPointerComparisons》为学习和参考的重要资料完成本次的课程设计。在两天的研究中,我们敲定异步FIFO的整体设计原理图如下:EDA/SOPC课程设计报告信息与电气工程学院――电子科学与技术3WdataWclkenWaddrRdataRaddrFIFOWptr&fullWaddrWptrWincWrst_nFIFORptr&emptyRaddrRptrRincRrst_nWdataRdataWaddrRaddrWincRincWincWfullWptrRptrWclkWrst_nWrptr2Rwptr2RemptyRclkRrst_nFIFOMEMORY在懂得设计模块之后,我们接下来就要逐步编写每个子模块的程序。并且在写完每个子模块的设计之后,我们为了验证的方便起见,要求验证FIFO在每个时钟沿自动完成数据从0到15的自增一,观察当数据写满深度为15的FIFO之后能否自动产生”写满“信号并且自动开始”读模式“,在读的状态,关键步骤就是验证是否在读空之后不再继续读。当然,这也是FIFO设计的关键,如何在写满的时候不让外界继续对FIFO继续写入,在读空的时候如何让FIFO不再继续读,在这方面的程序设计中我们走了很多的弯路,最终在两篇重要的论文中找到了解决问题的方式,在写自己代码的时候我们也参考了文章中的代码,感到受益匪浅!2.2软件流程图一:同步FIFO设计流程图:EDA/SOPC课程设计报告信息与电气工程学院――电子科学与技术4开始端口I/O声明及内部变量定义和数据声明等若计数值为15,则满信号有效;若计数值为0,则空信号有效时刻监视clk上升沿和rst_n下降沿复位(低电平有效)读信号有效写指针、读指针、数据输出、计数均清零计数值为0写信号无效读指针为14是是输出错误信息结束计数值减1;数据输出,地址由读指针确定是读指针清0是读指针加1否写信号有效计数值为15读信号无效写指针为14是输出错误信息计数值加1;数据写入,地址由写指针确定是写指针清0是写指针加1否否二:异步FIFO设计流程图1)FIFOMEMORY部分EDA/SOPC课程设计报告信息与电气工程学院――电子科学与技术5开始端口I/O声明及内部变量定义和数据声明等第一个always块中总是监测rclk和rrst_nRrst_n有效Rdata清零Rinc有效并且非空数据读出第二个always块中总是监测wclkWclken有效并且不满数据写入是否是是结束2)sync_r2w部分开始端口I/O声明及内部变量定义和数据声明等总是监测wclk和wrst_nWrst_n有效wq2_rptr,wq1_rptr均清零{wq2_rptr,wq1_rptr}={wq1_rptr,rptr};是否结束EDA/SOPC课程设计报告信息与电气工程学院――电子科学与技术63)sync_w2r部分开始端口I/O声明及内部变量定义和数据声明等总是监测rclk和rrst_nRrst_n有效rq2_wptr,rq1_wptr均清零{rq2_wptr,rq1_wptr}={rq1_wptr,wptr}是否结束4)wptr_full部分开始端口I/O声明及内部变量定义和数据声明等一个always块总是监测wclk和wrst_nWrst_n有效wbin和wptr清零wbin=wbinnext;wptr=wgraynext;Assign语句waddr=wbin[3:0];wbinnext=wbin+(winc&!wfull);wgraynext=(wbinnext1)^wbinnextwfull_val=(wgraynext=={!wq2_rptr[4:3],wq2_rptr[2:0]});第二个always块总是监测wclk和wrst_nWrst_n有效W_full信号无效wfull=wfull_val是否是否结束5)rptr_empty部分EDA/SOPC课程设计报告信息与电气工程学院――电子科学与技术7开始端口I/O声明及内部变量定义和数据声明等一个always块总是监测rclk和rrst_nRrst_n有效rbin和rptr清零rbin=rbinnext;rptr=rgraynext;Assign语句raddr=rbin[3:0];rbinnext=rbin+(rinc&!rempty);rgraynext=(rbinnext1)^rbinnextrempty_val=(rgraynext==rq2_wptr)?1'b1:1'b0;第二个always块总是监测rclk和rrst_nRrst_n有效R_empty信号有效rempty=rempty_val;是否是否结束6)主模块afifo部分因为这一部分就是将前几部分联系成一个整体,因此无需再画这部分流程图。2.3HDL代码阐述1)同步FIFO设计代码:`defineDEL1modulesynfifo(clock,reset_n,data_in,read_n,write_n,data_out,full,empty);inputclock,reset_n,read_n,write_n;input[0:7]data_in;output[0:7]data_out;outputfull,empty;wireclock,reset_n,read_n,write_n;wire[0:7]data_in;EDA/SOPC课程设计报告信息与电气工程学院――电子科学与技术8reg[0:7]data_out;wirefull,empty;//?reg[7:0]fifo_mem[14:0];reg[3:0]counter;reg[3:0]rd_pointer;reg[3:0]wr_pointer;assign#`DELfull=(counter==15)?1'b1:1'b0;//当计数值为15时代表已经满了assign#`DELempty=(counter==0)?1'b1:1'
本文标题:verilog同步和异步FIFO,可直接仿真和综合
链接地址:https://www.777doc.com/doc-4359304 .html