电力电子转战数字IC的2022516day0——占空比不是0.5的三分频

今天学习一下大佬的面试题,原文在:

【数字IC手撕代码】Verilog奇数分频|题目|原理|设计|仿真(三分频,五分频,奇数分频及特殊占空比)_myhhhhhhhh的博客-CSDN博客_三分频状态机奇数分频|题目|原理|RTL|Testbench|仿真波形(三分频,五分频,奇数分频及特殊占空比)奇数分频,偶数分频小数/分数分频,序列检测器/模三检测器,饮料机,异步复位,同步释放,边沿检测(上升沿,下降沿,双边沿),全加器与半加器,格雷码转二进制单bit跨时钟域(打两拍,边沿同步,脉冲同步),同步FIFO。https://blog.csdn.net/weixin_43698385/article/details/122760093先学习下代码,自己敲到程序里并仿真。是一个占空比1/3的三分频。第一次发文,只想记录下自己的成长过程,代码是上面链接的。

module f31 (clk,rstn,clk2);
input clk,rstn;
output clk2;
reg clk2r;
assign clk2=clk2r;
reg [2:0] count;
parameter N=3;
//这里用clk2r寄存器来存储输出然后用assign连续赋值给clk2,output声明没加reg的默认wire
always @(posedge clk or negedge rstn)
	begin
		if(!rstn)
			count <= 3'd0;
		else if(count==N-1)
			count <= 3'd0;
			else
				count<=count+1'd1;
	end
//重置信号为0时停止工作,count归0
//重置信号为1时开始工作,count=2时也清零,count为0,1,2。在0和1时+1
always @(posedge clk or negedge rstn)
	begin
		if(!rstn)
			clk2r<=3'd0;
			else if (count==3'd0||count==3'd1)
				clk2r<=!clk2r;
				else
				clk2r<=clk2r;
	end
	//在count=0和1时翻转输出信号,如果是0和2翻转就是2/3占空比的,如果rstn为0,则不输出,clk2赋0.
endmodule

 测试文件

`timescale 1ps/1ps
module f3test();
reg clk;
reg rstn;
wire clk2;
//测试的变量名没有和主模块区分?
f31 u1(.clk(clk),.rstn(rstn),.clk2(clk2));
//给时钟信号,用always加延时和翻转
always
#5 clk = ~clk;
//这里clk取反用位取反~,因为一开始定义reg clk时没有定义位数,默认1位。
//后面定义了2位后要用!逻辑非来取反
initial
begin
clk = 0;
rstn = 1;
#15
rstn = 0;
#30
rstn = 1;
#100
$stop;
end
endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值