如何用verilog语言编写周期为100ms的脉冲

如何用verilog语言编写周期为100ms的脉冲,第1张

假设时钟周期为50ns,则程序如下所示,如果时钟周期比50ns小,把下面所赋的值同比放大即可。因为时钟周期为50ns,所以0.1s需要2000个时钟周期,临时变量的寄存器需要12位,2200用12位的表示也满足。modulemaichong(clk,rst,n)inputclk,rstoutputnregnreg[11:0]tmp1,tmp2always@(posedgeclk)beginif(!rst)beginn<=0tmp1<=0tmp2<=0endelsebeginif(tmp1<2200)beginif(tmp2<2000)beginn<=1tmp2<=tmp2+1endelsebeginn<=0tmp2<=0tmp1<兆郑=tmp1+1endendelsetmp1<=0最好好猜扒能把这个值也输出,在testbench中如果检测到这个值为0时停止友昌。endendmodule希望能帮助你,如果还有不懂的,继续追问吧。

原理:

用一棚举个足够大的计数器,对主时钟进行计数,(比如计数器定义为reg[5:0]count那么你可以定义当count为何值时翻转时钟,册睁那么就可以得到频率可变的时钟)。

但是这样做的话,只能得到50%占空比的脉冲。用于伺服电机,脉冲应该也是可变的才对。这时候再加一个计数器count2,两个计数器同时计数,一个代表正脉宽,另一个代表负脉宽,调节两个计数器的大小就可以实现州和岁频率、脉冲同时可变了。

具体方法:

1、当保持count+count2值不变时,则频率不变,调节count和count2的值(其实就是一个加多少另一个就减多少了)就可以改变占空比

2、如果count+count2的值也改变,那么频率也就改变了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12418226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存