Verilog HDL源程序库-新品速递_第1页
Verilog HDL源程序库-新品速递_第2页
Verilog HDL源程序库-新品速递_第3页
Verilog HDL源程序库-新品速递_第4页
全文预览已结束

下载本文档

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

文档简介

精品文档-下载后可编辑VerilogHDL源程序库-新品速递在熟悉了VerilogHDL语法之后,使用VerilogHDL设计FPGA遇到的困难可能就是不知如何用VerilogHDL的语句去描述想要实现的电路功能。要克服这一困难,除了提高数字电路设计功底之外,很重要的一点就是要学习他人的经验,多看有经验的设计者设计的源程序。我们提供VerilogHDL源程序库的目的就是想收集尽可能多的谈设计经验的文章和经典的VerilogHDL设计,供大家学习参考。同时也希望大家能提供一些相关资料,使这个程序库能不断得到充实!状态机举例你可以指定状态寄存器和状态机的状态。以下是一个有四种状态的普通状态机。//Thesearethesymbolicnamesforstates//定义状态的符号名称parameter[1:0]S0=2'h0,S1=2'h1,S2=2'h2,S3=2'h3;//Thesearethecurrentstateandnextstatevariables//定义当前状态和下一状态变量reg[1:0]state;reg[1:0]next_state;//state_vectorstate//状态向量的转移关系always@(stateoryorx)beginnext_state=state;case(state)S0:beginif(x)beginnext_state=S1;endelsebeginnext_state=S2;endendS1:beginif(y)beginnext_state=S2;endelsebeginnext_state=S0;endendS2:beginif(xy)beginnext_state=S3;endelsebeginnext_state=S0;endendS3:beginnext_state=S0;endendcaseendalways@(posedgeclkorposedgereset)beginif(reset)beginstate=S0;endelsebeginstate=next_state;endend同样的状态机也可以用下面的代码以“Onehot”编码方式实现。//Thesearethesymbolicnamesforstates//定义状态的符号名称parameter[1:0]S0=2'h0,S1=2'h1,S2=2'h2,S3=2'h3;parameter[3:0]s0=4'h1,s1=4'h2,s2=4'h4,s3=4'h8;//Thesearethecurrentstateandnextstatevariables//定义当前状态和下一状态变量reg[3:0]state;reg[3:0]next_state;//state_vectorstate//状态向量的转移关系always@(stateoryorx)beginnext_state=state;case(1)state[S0]:beginif(x)beginnext_state=1S1;endelsebeginnext_state=1S2;endendstate[S1]:beginif(y)beginnext_state=1S2;endelsebeginnext_state=1S0;endendstate[S2]:beginif(xy)beginnext_state=1S3;endelsebeginnext_state=1S0;endendstate[S3]:beginnext_state=1S0;endendcaseendalways@(posedgeclkorposedgereset)beginif(reset)beginstate=1S0;endelsebeginstate=next_state;endend译自Celia的Verilog网站可综合风格的计数器设计写一个既紧凑又能满足定时要求的定时器可能会有一点棘手。根据你在面积和速度方面的要求,以及你所使用的具体器件的不同,你可能需要尝试完全不同的设计方法。如果你需要设计一个计数速度很快的计数器,你先查找一下你所使用的FPGA设计工具中是否有厂家提供的现成的计数器单元。因为厂家提供的设计单元库针对特定的器件进行了优化,所以使用这些器件可以达到快的速度。如果你的设计需要应用到几种不同的FPGA中,因而要求独立于特定的设计单元库,那么你就只能自己设计计数器了。当然,容易的计数器设计就是count=count+1,但是你可能得不到的结果。如果是计数值较小的计数器,使用序列器方法会得到较好的结果。例如:always@(count)case(count)2'h0:next_count=2'h1;2'h1:next_count=2'h2;2'h2:next_count=2'h3;2'h3:next_count=2'h0;endcaseendalways@(posedgeclkorposedgereset)beginif(reset)begincount=0;endelseif(enable)begincount=next_count;endend另一种方法是异步产生计数使能,条件是使能信号必须没有毛刺并且与时钟信号有恰当的定时关系。

例如:

wiregate_clk=clkenable;always@(posedgegate_clkorposedgereset)beginif(reset)begincount=0;endelsebegincount=count+1;endend

另一种类型的计数器是波纹计数器。这种计数器适合速度较慢、要求低功耗的场合,可以用Verilog很容易地实现。

例如:

always@(count)begincount0=count[0];count1=count[1];count2=count[2];endalways@(posedgeclkorposedgereset)beginif(reset)begincount[0]=0;endelsebegincount[0]=~count[0];endendalways@(posedgecount0orposedgereset)beginif(reset)begincount[1]=0;endelsebegincount[1]=~count[1];endendalways@(posedgecount1orposedgereset)beginif(reset)begincount[2]=0;

温馨提示

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

评论

0/150

提交评论