【verilog】占空比50%的奇数分频

题目

设计一个同时输出7分频的时钟分频器,占空比要求为50%
注意rst为低电平复位
在这里插入图片描述

思路

上升沿下降沿分别操纵计数器进行计数产生分频时钟,然后将时钟相或。
在这里插入图片描述

rtl

//占空比50%的奇数7分频
module odd_pll(
	input wire clk,
	input wire rst,
	output wire clk_o
);

reg [2:0] pos_cnt;
reg [2:0] neg_cnt;
always@(posedge clk or negedge rst)
if(!rst)
	pos_cnt <= 1'b0;
else begin
	if(pos_cnt == 3'd6)
		pos_cnt <= 3'd0;
	else
		pos_cnt <= pos_cnt + 1'b1;
end

always@(negedge clk or negedge rst)
if(!rst)
	neg_cnt <= 1'b0;
else begin
	if(neg_cnt == 3'd6)
		neg_cnt <= 3'd0;
	else
		neg_cnt <= neg_cnt + 1'b1;
end

reg pos_clk;
reg neg_clk;
always@(posedge clk or negedge rst)
if(!rst)
	pos_clk <= 1'b0;
else begin
	if(pos_cnt >= 3'd4)
		pos_clk <= 1'b1;
	else
		pos_clk <= 1'b0;
end

always@(negedge clk or negedge rst)
if(!rst)
	neg_clk <= 1'b0;
else begin
	if(neg_cnt >= 3'd4)
		neg_clk <= 1'b1;
	else
		neg_clk <= 1'b0;
end

assign clk_o = neg_clk || pos_clk;
endmodule

module tb;

reg clk;
reg rst;

odd_pll inst1(
	.clk(clk),
	.rst(rst),
	.clk_o()
);

initial begin clk = 1'b0; forever begin #10; clk = ~clk; end end
initial begin rst = 1'b0; #25; rst = 1'b1; end
initial begin #5000; $stop; end

endmodule

结果波形

在这里插入图片描述

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搞IC的那些年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值