文章简介
个人学习总结6 - Verilog基础手撕:一篇搞定所有分频电路
个人向!!!
重点出现在招聘机考题与面试手撕中,个人尽力总结,有点基础就可以看!
软件:Quartus_II。
参考:清华大学出版社 - 数字IC设计入门
参考:数字IC手撕代码-分频器(任意小数分频) - 哔哩哔哩
此文章包括:偶数分频(50%、非50%);奇数分频(非50%、50%、特殊);特殊小数分频。
个人NTU在读,欢迎指正
Verilog基础语法、基础模块与仿真可见前面文章 :)
目录
1. 偶数分频
1.1. 时钟6分频,50%占空
- 占空比一般是指高电平占总时钟周期的比例,1/4就是1000。
方法:偶数50%占空很简单,计数到一半翻转输出时钟就行。012是0,345是1。
module TestModule (
input clk_in, rst_n, // 输入时钟、异步复位
output reg clk_out // 输出分频时钟信号,分频时钟信号更慢
);
reg [1:0] counter; // 2位计数器,用于计数到2
always @(posedge clk_in or negedge rst_n)
begin
if (!rst_n)
begin
counter <= 0;
clk_out <= 0;
end
else
begin
if (counter == 2) //012到2翻转输出时钟
begin
counter <= 0; //计数回到0
clk_out <= !clk_out; //输出时钟翻转
end
else //小于2时
counter <= counter + 1; //counter++
end
end
endmodule
1.2. 时钟6分频,2/6占空
方法:加内部计数器,01是1,2345是0。
模块化:先看复位,在管输出。
module TestModule (
input clk_in, rst_n, // 输入时钟、异步复位
output reg clk_out // 输出分频时钟信号,分频时钟信号更慢
);
reg [2:0] counter; // 3位计数器,用于计数到5
always @(posedge clk_in or negedge rst_n)
begin
if (!rst_n)
begin
counter <= 0;
clk_out <= 0;
end
else
begin
//先看复位
if (counter == 5)