第四章、VerilogHDL设计技巧.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章、 Verilog HDL设计技巧 本章通过一些简单的实例演示一下如何在verilog hdl中实现看似不可能实现的技巧,主要包括 1.双向端口的使用 2.PWM波形的产生 3.常见几种分频器的设计 4.巧用存储器定义语句实现存储器设计 5.基于存储器的DDS设计 6.有限状态机 本章讲述一些常用的verilog设计方法和技巧,可以加速实际的工程应用,提高效率。 双向端口 双向端口在应用过程中常常用到,如在进行和存储器的接口设计时。由于存储器的数据线是双向信号,故FPGA的端口也必须用双向端口才能够连接。 Verilog HDL中的双向端口关键字为inout,如inout dat,则表示dat为一个双向(既可以输入也可以输出)的端口。 在硬件中为了更好的处理端口,大多数情况下都是使用单向端口,即input或者output。这样更容易对电路的逻辑进行描述。双向端口也往往转换成两个单向的端口进行操作。仔细分析一下,当一个端口作为双向端口时,实际上是分时的输入和输出,也就是说,当内部逻辑需要双向端口作为输入时,这时候是用双向的输入功能,反之,用输出功能。假设”内部需要”为一个变量,暂且命名为dir,则,双向端口转化为两个单向端口的电路就可以如下图所示。 io io 其他逻辑 a b dir Bidir 图中,实线框是整个的逻辑设计电路模块,io为此模块的双向端口。虚线框为将双向端口转化为两个单向端口的子模块,两个三角形的电路为三态门,上面的三态门低电平使能,下面的三态门高电平使能。当需要将io端作为输入时候,即dir为高(假设为高电平时使用io端的输入功能),上面的三态门被关闭,下面的三态门打开,于是信号的流向从io口经过下面的三态门由a端输出,那么这个时候其他逻辑部分就可以使用a端的信号进行运算处理;反之,当内部的其他逻辑需要输出信号至io双向端口时,可以置dir为低电平,上面的三态门被打开,下面的三态门被关闭,这样b端口的信号经由上面的三态门输出至io端。这样,虚线框中的子模块就完成了双向端口转化为两个独立的单向端口(a和b)的功能。 代码如下: module bidir(io, a, b ); module bidir(io, a, b ); inout io; //---------(1) output a; input b; assign a = (dir == 1)?io:1’bz; //---------(2) assign io =( dir == 0 ) ? b:1’bz; //---------(3) endmodule ?代码注释: (1)声明io端口为双向端口,一般情况下双向端口的类型声明为wire型,这里省略,默认为wire型。 (2)当dir为高电平时,io端口赋值给a端口,否则,a端为高阻态,也可以写成assign a = (dir)?io:1’bz; (3)当dir为低电平时,b端口赋值给io端口,否则,io端赋值成高阻态,也可以写成assign io =(!dir) ? b:1’bz; 上面电路中用到了三态门,通常来说,三态门在fpga和cpld内部不推荐使用,而且一般仅限于fpga或者是cpld的引脚端才有,内部没有三态门。如果在设计过程中大量采用三态门的话,会使芯片的功耗大幅增加,资源浪费严重。仔细研究发现,可以在这里省略一个三态门。新电路如下: io其他逻辑 io 其他逻辑 a b dir Bidir2 因为io的双向特性是分时使用的,所以在内部其他逻辑使用a端和b端的时候也是分时使用的,换句话说,当内其他逻辑部向b写的时候,无论a端是什么值对内部的其他电路时没有影响的,因为这个时候内部其他的逻辑不读取a端口;反过来,当内部需要读取a端的值的时候,a端的值必须来自于io端的值,故必须把b端和io端断开,即三态门呈现3态即可。新的代码如下: module bidir2(io, a, b ); module bidir2(io, a, b ); inout io; output a; input b; assign a = io; //---------(1) assign io = ( dir == 0 ) ? b:1’bz; endmodule 代码注释: (1)直接赋值即可。 PWM波形的产生 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。 PWM波形本质上是宽度可以变化的脉冲。见下图 A A B C 图中

文档评论(0)

35425 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档