【实验室学习】时钟分频器,2、3、4、8分频 verilog实现

这篇具有很好参考价值的文章主要介绍了【实验室学习】时钟分频器,2、3、4、8分频 verilog实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0引言

记录时钟分频器的Verilog代码编写,主要掌握分频器设计思路

1设计----2、3、4、8分频

2、4、8分频设计较为容易:

2分频—设计一个1位的寄存器,当原时钟上升沿时取反即可
代码展示:

`timescale 1ns / 1ps
module Clk_divider
(
input clk_i,
input rst_i,
output div_2_out,
output div_4_out,
output div_3_out,
output div_8_out;

);
//2分频代码
reg div_2_o;
always@(posedge clk_i)
begin
     if(!rst_i)
	     div_2_o<=1'b0;
     else
	     div_2_o<=~div_2_o;
end
assign div_2_out=div_2_o;
endmodule

4分频与8分频—设计一个两位的计数器,4分频只需在计数器计数到00B或者10B时跳变电平即可,8分频只需在计数器计数到00B时跳变电平即可。

原因:计数器跳变一次需要一个时钟周期,00->01->10->11->00 一次循环需要四个clk周期,4分频在两次周期时跳变即可,8分频在四次周期时跳变即可。
代码展示:

//4、8分频代码定义一个两位的寄存器实现
`timescale 1ns / 1ps
module Clk_divider
(
input clk_i,
input rst_i,
output div_2_out,
output div_4_out,
output div_3_out,
output div_8_out;

);
reg [1:0]div_reg_4_8;
reg div_4_o;
reg div_8_o;

always@(posedge clk_i)
begin
     if(!rst_i)
	     div_reg_4_8<=2'b00;
     else
	     div_reg_4_8<=div_reg_4_8+1'b01;
end


always@(posedge clk_i)
begin
     if(!rst_i)
	     div_4_o<=1'b0;
	 else if(div_reg_4_8==2'b00||div_reg_4_8==2'b10)
	     div_4_o<=~div_4_o;
     else
	     div_4_o<=div_4_o;
end
		 
always@(posedge clk_i)
begin
     if(!rst_i)
         div_8_o<=1'b0;
     else if(div_reg_4_8==2'b00)
         div_8_o<=~div_8_o;	 
	 else
	     div_8_o<=div_8_o;
end
assign div_4_out=div_4_o;
assign div_8_out=div_8_o;
endmodule

3分频较为复杂,需要设计两个计数器,一个计数器在clk下降沿工作,一个计数器在clk上升沿工作。且两个计数器计数三次一循环,而后设计两个寄存器r0与r1,两寄存器分别交错半个周期,高电平与低电平分别占据1.5个clk周期,即可完成3分频。

module Clk_divider
(
input clk_i,
input rst_i,
output div_2_out,
output div_4_out,
output div_3_out,
output div_8_out;

);
/*3分频代码定义两个寄存器,分别在clk上升沿和下降沿工作*/

reg [1:0]pos_cnt;
reg [1:0]neg_cnt;
reg  div_3_r0;
reg  div_3_r1;

always@(posedge clk_i)
begin
     if(!rst_i)
	     pos_cnt<=2'b00;
     else if(pos_cnt==2'd2)
	     pos_cnt<=2'b00;
     else
	     pos_cnt<=pos_cnt+1'b1;
end

always@(negedge clk_i)
begin
     if(!rst_i)
	     neg_cnt<=2'b00;
     else if(neg_cnt==2'd2)
	     neg_cnt<=2'b00;
     else
	     neg_cntt<=neg_cnt+1'b1;
end

always@(posedge clk_i)
begin
     if(!rst_i)
	     div_3_r0<=1'b0;
     else if(pos_cnt<2'b1)
	     div_3_r0<=1'b1;
	 else 
	     div_3_r0<=1'b0;
end

always@(negedge clk_i)
begin
     if(!rst_i)
	     div_3_r1<=1'b0;
     else if(neg_cnt<2'b1)
	     div_3_r1<=1'b1;
	 else 
	     div_3_r1<=1'b0;
end

assign div_3_out = div_3_r0||div_3_r1;
endmodule

2仿真实现

仿真代码如下:

`timescale 1ns / 1ps
module Clk_divider_f
(
);
reg clk_i;
reg rst_i;
wire div_2_out;
wire div_4_out;
wire div_3_out;
wire div_8_out;


Clk_divider#
(
.DEBUG_ENABLE(1'b0),
.REF_CLK(100000000)
)
Clk_divider_1
(
.clk_i(clk_i),
.rst_i(rst_i),
.div_2_out(div_2_out),
.div_4_out(div_4_out),
.div_3_out(div_3_out),
.div_8_out(div_8_out)
);
initial begin
clk_i = 0; 
rst_i = 0; // Wait 100 ns for global reset to finish 
#100; 
rst_i=1; 
end

always #5 clk_i=~clk_i;


endmodule

仿真结果如下:
100ns时复位为0,开始工作
【实验室学习】时钟分频器,2、3、4、8分频 verilog实现
仿真结果符合预期,实现了2、3、4、8分频
【实验室学习】时钟分频器,2、3、4、8分频 verilog实现

3结语

本文主要开始学习Verilog代码,通过编写代码实现FPGA时钟分频。文章来源地址https://www.toymoban.com/news/detail-509115.html

到了这里,关于【实验室学习】时钟分频器,2、3、4、8分频 verilog实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ❀工信工实验参考——《VHDL实验2——数码管及分频器》

    一般来说,我贴上来的代码都是能直接跑的,如果不行可以邮箱交流1902946954@qq.com 仅供参考,微机的老师讲的很好,所以请还是要先自己完成咯。 免责声明,本人菜只因一只,内容仅供参考,错了不负责哈 该实验和报告部分参考了ZhouzhouFighting的报告(链接华南理工大学VHD

    2024年02月08日
    浏览(43)
  • FPGA学习——实现任意倍分频器(奇数/偶数倍分频器均可实现)

    在FPGA(可编程逻辑门阵列)中,分频器是一种用于将时钟信号的频率降低的电路或模块。它可以根据输入的时钟信号生成一个较低频率的输出时钟信号。 常见的分频器可以按照固定比例来进行分频,例如将输入时钟频率除以2、除以4等。因此,如果输入时钟信号的频率为10

    2024年02月05日
    浏览(38)
  • FPGA学习日记——verilog实现分频器

    主要思想是利用计数器实现分频器功能,其中按原理不同可分为分频和降频 一、先说分频。 1、第一种实现方式 输入信号为系统时钟50MHz,本例子先以偶数倍六分频为例实现分频的第一种方式:计数器对系统时钟的上升沿进行计数,最大计数M=5,即count取值范围为0~5,当计数

    2024年02月04日
    浏览(43)
  • VHDL学习笔记——半加器 多路选择器 分频器

    VHDL程序结构: 条件语句 if_then_else_end if 数据类型 BIT类型(取逻辑位’1’或’0’)、整数类型INTEGER、布尔类型BOOLEAN(取TRUE或FALSE)、标准逻辑类型STD_LOGIC等 进程语句与顺序语句 process(敏感信号表)_endprocess VHDL中所有的顺序语句都必须放在进程语句中 端口语句 port(端口模式

    2024年02月02日
    浏览(35)
  • 实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。拓展任务1:用按键或开关控制蜂鸣器的响与不响。拓展任务2:用按键或开)

    1. 实验目的: (1) 掌握QuartusⅡ软件的层次型设计方法; (2) 掌握元件封装及调用方法; (3) 熟悉FPGA实验平台,掌握引脚锁定及下载。 2. 实验任务: (1) 基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。 (2) 拓展任务1:用按键或开关

    2024年02月06日
    浏览(44)
  • 12-分频器 -偶分频

    计数器是对于时钟信号进行计数,板载晶振的时钟频率是固定的,有时候需要进行分频和倍频才能满足需要 开发板上只有一种晶振,只有一种频率的时钟,想要通过对与固定时钟进行分频或者是倍频的方式得到各个模块所需的时钟频率,得到比固定时钟快的时钟通过 倍频 ,得到比固

    2024年02月06日
    浏览(40)
  • 分频器——(任意奇分频(50%占空比、非50%占空比),任意偶分频,任意小数分频)

            在数字系统的设计中经常会碰到 需要使用多个时钟 的情况。时钟信号的产生通常具有两种方法,一种是使用PLL(Phase Locked Loop,锁相环),可生成 倍频、分频信号 ;另一种则是使用硬件描述语言构建一个分频电路。         分频器的设计通常分为以下 三类:

    2023年04月23日
    浏览(66)
  • verilog---分频器设计

    //设计分频器 将50MHZ信号分频产生1HZ的秒脉冲,输出信号占空比为50%。 //设计思路:用计数器设计,N分频:当计数到(N/2)-1个数时,输出时钟翻转一次 //50*10^6次分频:计数到24 999 999(需要25bit)时,输出信号翻转。 //无法用vmf仿真,因为endtime最大为10us,实际最少需要1000000u

    2024年02月04日
    浏览(34)
  • VHDL实现分频器

    目录 设计要求: 实现代码: 生成元件图形: 模拟仿真结果:​ 整体项目资源在:VHDL分频器-占空比50%-将FPGA板上的50Mhz的信号分频为1hz时钟信号-嵌入式文档类资源-CSDN文库 设计要求:                 将系统时钟50MHz 分频为1Hz 的时钟信号                 占

    2024年02月12日
    浏览(34)
  • 06 分频器设计

    实现分频一般有两种方法,一种方法是直接使用 PLL 进行分频,比如在 FPGA 或者 ASIC 设计中,都可以直接使用 PLL 进行分频。但是这种分频有时候受限于 PLL 本身的特性,无法得到频率很低的时钟信号,比如输入 100Mhz 时钟,很多PLL 都无法得到 1Mhz 以下的时钟信号。另外一种方

    2024年02月19日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包