您好,verilog怎么实现一个占空比为20%的方波脉冲

您好,verilog怎么实现一个占空比为20%的方波脉冲,第1张

verilog不能实现方波的,它只能实现一个硬件结构描述,比如用verilog实现一个74HC138芯片,至于方波是要在用语言实现完芯片构造的描述之后,用软件来设置输入之后来仿真得到输出时实现的,比如你可以设置你用verilog实现的芯片在仿真时某个输入引脚为方波

代码中,step1和step2,分别是一个五进制的计数器,step1是由时钟的上升沿计数,step2是由时钟的下降沿计数的。step 1的最低位和step2的最低位波形如上图所示。上述两个信号进行或 *** 作输出clockout信号,也就是说clockout是clockin的五分频输出电路,占空比为50%。

假设你的clk就是1s周期的时钟

那么10s的应该是这么写

reg

[3:0]

cnt_10;

reg

clk_10s;

always

@

(posedge

rst

or

posedge

clk)

begin

if

(rst)

begin

cnt_10

<=

0;

clk_10s<=

0;

end

else

begin

if

(cnt_10==4)

begin

cnt_10

<=

0;

clk_10s<=~clk_10s;

end

else

begin

cnt_10

<=

cnt_10

+1;

clk_10s<=

clk_10s;

end

end

60的,cnt就在29归零,同时clk_60s反向

是在半周期反向才是占空比1:1。

其实count==99999999时清零这个是有用的。会对count[10]这个信号的占空比产生影响。

假设有一下代码,cnt两位宽,你看cnt[1]这个信号。

always @(posedge clk)

if(cnt==2'h2)

cnt <= 2'h0;

else

cnt <= cnt + 2'h1;

这样子cnt的值为0 1 2 0 1 2 0 1 2 0 1 2

然后你在纸上画一下cnt[1]这个信号,你会发现他对于clk来说是一个3分频的时钟,然而他的

高电平时间只占一个clk周期,他的占空比是1/3;

但是下面的代码,他的占空比就是50%了,这时候他对clk来说是个4分频时钟。

always @(posedge clk)

cnt <= cnt + 2'h1;

看别人的代码是比较头痛,但是学习的过程就是这样,慢慢来吧。

建议你先将BZQ,TSQ设成常数,再试试。

看了你的代码,觉得除了设计之外,有几个问题。

1verilog不是C语言。实现乘除法时,直接写运算符虽然可以综合,但逻辑很深,时序会很差。例如:if(cnt<(BZQ/TSQ)&&cnt>=(BZQ/TSQ)duty/100),这样的逻辑深度是可怕的,估计只能跑到几MHz。你所遇到的问题不排除是时序问题(timing issue)。

2第一个always块很不规范,而且不是同步电路。更好的实现方法是:

always @(posedge BCLK)

begin

if(~START)

begin

start<=1;

end

end

3系统没有复位信号。所有的数字系统应当有系统复位。always块应当用这样的模板:

always @(posedge mclk or posedge mrst)

begin

if(mrst)

begin

reg1 <= 0;

end

else

begin

if ()

begin

reg1<=input1;

end

else

begin

reg1 <= input2;

end

end

end

4信号或寄存器名称不能靠大小写区分。虽然verilog大小写是敏感的,但没有公司会允许大小写混用,一般都规定统一大写或小写,更何况是一样的名称,仅靠大小写区分。如START,可以改成,start_in。

以上就是关于您好,verilog怎么实现一个占空比为20%的方波脉冲全部的内容,包括:您好,verilog怎么实现一个占空比为20%的方波脉冲、求这个verilog程序的各条语句的解释、用verilog语言编写四分频程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10638312.html

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

发表评论

登录后才能评论

评论列表(0条)

保存