- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章VerilogHDL设计技巧
第四章、 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端作为输入时候,即dir为高(假设为高电平时使用io端的输入功能),上面的三态门被关闭,下面的三态门打开,于是信号的流向从io口经过下面的三态门由a端输出,那么这个时候其他逻辑部分就可以使用a端的信号进行运算处理;反之,当内部的其他逻辑需要输出信号至io双向端口时,可以置dir为低电平,上面的三态门被打开,下面的三态门被关闭,这样b端口的信号经由上面的三态门输出至io端。这样,虚线框中的子模块就完成了双向端口转化为两个独立的单向端口(a和b)的功能。
代码如下:
?代码注释’bz;。
(3)当dir为低电平时,b端口赋值给io端口,否则,io端赋值成高阻态,也可以写成assign io =(!dir) ? b:1’bz;。
上面电路中用到了三态门,通常来说,三态门在fpga和cpld内部不推荐使用,而且一般仅限于fpga或者是cpld的引脚端才有,内部没有三态门。如果在设计过程中大量采用三态门的话,会使芯片的功耗大幅增加,资源浪费严重。仔细研究发现,可以在这里省略一个三态门。新电路如下:
因为io的双向特性是分时使用的,所以在内部其他逻辑使用a端和b端的时候也是分时使用的,换句话说,当内其他逻辑部向b写的时候,无论a端是什么值对内部的其他电路时没有影响的,因为这个时候内部其他的逻辑不读取a端口;反过来,当内部需要读取a端的值的时候,a端的值必须来自于io端的值,故必须把b端和io端断开,即三态门呈现3态即可。新的代码如下:
代码注释:
(1)直接赋值即可。
PWM波形的产生
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
图中,从A到C为一个脉冲的周期,AB之间电平为高电平,称作这个脉冲周期的宽度,PWM是指AB之间的高电平宽度可以调节。
若想用数字电路来实现pwm,不妨借鉴一下模拟电路中的pwm是如和生成的。
先产生锯齿波,然后利用锯齿波的电压和另一个门限电压做比较,当门限电压变化的时候,比较器输出的脉冲宽度就变化了。示意图如下:
由上图比较得知,当门限电平电压升高时,比较器的输出的占空比宽度在减少,即达到了脉冲宽度调制的目的。
那么,在数字领域里,门限电平可以由一个任意的常量或者用端口输入来实现,怎么样去实现锯齿波呢?仔细研究锯齿波,电压随着时间按照一定的比例上升(也就是增加),有点类似计数器的味道。而实际上,如果将计数器的输出的数字量进行DA转换的话,看到的输出就是锯齿波。
这里以8位的计数器和门限宽度为例,设计一个宽度可调的脉冲输出。
代码注释:
(1)设置计数用的变量,位宽为8位。和门限宽度一样。
(2)计数器计数,相当于模拟波形中的锯齿波
(3)比较器电路,当锯齿波值大于或等于门限时,pwm输出高电平,否则,输出低电平。可想,当门限输入的值发生变化时,pwm输出的脉冲宽度一定随着变化。
使用Quartus II仿真如下图:
由上图可见,计数器的输出cntr呈现出的结果(数字结果的模拟显示)就是锯齿波,当门限thres为10的时候,pwm输出的脉宽很大,thres为128时,输出近似50%的脉冲(方波),
文档评论(0)