【FPGA & Modsim】数字频率计

这篇具有很好参考价值的文章主要介绍了【FPGA & Modsim】数字频率计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

module flag(clk,rst_n,cnt);
input clk;
input rst_n;
output [2:0]cnt ;
reg[31:0]count ;
reg [2:0]cnt;
always@(posedge clk or negedge rst_n)
begin
if(~rst_n)begin
count<=0 ;
cnt<=3'd0 ;end
else if (count>= 32'd24 999) begin
cnt<=cnt+1'b1 ;count<=32'd0 ;
end
else if (cnt>=3'd6) begin
cnt<=0;end
else
count<=count+1'b1 ;
end
endmodule

'timescale 1 ns/ 1ps
/
module seg (
clk, rst_ n,data,dig,led
);

input clk;
input rst_n;
input [23:0] data;
output [5:0] dig; //六位控制六个数码管
output [7:0] led;
reg [5:0] dig;
reg [7:0] led;
reg [3:0] d;
always@ (posedge clk or negedge rst_ n ) begin
if(~rst n) led<= 8'b0;/ /low active
else begin
case (d)
4'h0:led<= 8 'b00111111 ;//0
4'h1 :led<= 8 'b00000110;//1
4'h2:led<= 8'b01011011 ;//2
4'h3:led<= 8'b01001111 ;//3
4'h4:led<=8'b01100110;//4
4'h5:led<= 8'b01101101 ;//5
4'h6:led<= 8'b01111101 ;//6
4'h7:led <= 8 'b00000111;//7
4'h8:led<= 8'b01111111 ;//8 
4'h9:led<= 8'b01101111 ;//9 
4'ha:led<= 8 'b01110111 ;//a
4'hb:led<= 8'b01111100;//b
4'hc:led<= 8'b00111001 ;//c
4'hd:led<= 8'b01011110;//d
4'he:led<= 8'b01111001 ;//e
4'hf:led<= 8'b01110001 ;//f
default: led<=8'b0 ;
endcase
end
end

wire [2:0]cnt2 ;
flag flag_ _m0 (
.clk(clk),// INPUT
. rst_n(rst_n) ,// INPUT
, cnt (cnt2) / / OUTPU
);

always@ (posedge clk or negedge rst_ n ) begin
 if(~rst_n)begin dig<= 6"b0;
 end
 else begin 
 case (cnt2)
    3'd0 :begin dig<= 6'b000001; d<=data[3:0] ;end
    3'd1 :begin dig<= 6'b000010; d<=data[7:4] ;end .
    3'd2 :begin dig<= 6'b000100; d <=data[11:8] ;end
    3'd3 :begin dig<= 6'b001000; d<=data[15:12] ;end
    3'd4 :begin dig<= 6'b010000; d<=data[19:16] ;end
    3'd5 :begin dig<= 6'b100000; d<=daLa[23:20] ;end
    default :begin dig <= 6'b0 ;end
  endcase
end
end
///
module count ( 
clk,
rst_n,
bin,
clk_in
);
input clk;
input rst_n;
input clk_in;
output [23:0] bin;
reg [1:0]clk_1hz ;
reg[31:0] countl ;
reg[23:0] count2 ;
reg[23:0] bin;

always @ (posedge clk or negedge rst_ n )
begin
if (~rst_n) begin
count1<=0;clk_1hz<=0;
end
else begin
if (count1 == 32'd49 999 999) begin
count1<= =0 ;
clk 1hz<=clk 1hz+1;end
else if(clk 1hz== 0)
clk 1hz <= 2'd1 ;
else countl <= count1+1'b1 ;
end
end
wire clk_in pos;
reg clk_in0,clk_inl ;
always @ (posedge clk or negedge rst_n)
begin
if(~rst n) begin .
clk_in0<=0 ;
clk_in1 <=0 ;end
else begin
clk_in0 <=clk_in;
clk_in1 <=clk_in0 ;end
 end
 
assign clk_in pos=~clk_in1 & clk_in0;

always@(posedge clk or negedge rst_n)
begin
if (~rst n) begin
count2 <=0;bin<=0 ;end
else if (clk_1hz==1 &&clk_in_pos)
count2 <= count2 + 1'b1 ;
else if(clk_1hz==2)
bin<=count2; 
else if(clk_1hz==3)
count2<=0 ;
else begin count2 <= count2 ;bin<=bin ;end
end


//
module hex tobcd (
input clk_in ,
input rst,
input [23:0]bin ,
output [23:0]bcd ,
output [1 :0] bcd_ valid .
);
reg [1:0] bcd valid;
//提取显示数值所对应的十进制数的各个位
assign bcd[3:0] =bin%4'd10;
assign bcd[7:4] =bin/4'd10%4'd10 ; //十位数
assign bcd[11:8] =bin/7'd100%4'd10 ; //百位数
assign bcd[15:12] =bin/10'd1000%4'd10 ; //千位数
assign bcd[19:16] =bin/14'd10000%4'd10; //万位数
assign bcd[23:20] =bin/17'd100000;
//十万位数
always@(posedge c1k_in) 
begin
if (bin[23:20]>= =1 'b1) begin
    bcd_valid= 2'b01 ;
 end
else begin
    bcd_valid= 2'b11 ;
 end
end
endmodule

///
module clk_test #(parameter DIV N= 'd100) // 分频系数
(
//源时钟
input clk;
input rst_n;
//复位信号
//分频后的时钟
output reg clk_in;
//输出时钟
);

reg [25:0] ct ;
//时钟分频计数
//时钟分频,生成500KHz的测试时钟
always @ (posedge clk or negedge rst_n) begin
if(rst_n== 1 'b0) begin
    ct<= 0;
    clk_in<= 0 ;
    end
else begin
if(ct== DIV_ N/2-1'b1) begin
    ct <= 26'd0;
    clk_in<=~clk_in;
 end
else
ct <=ct + 1'b1 ;
end
end
endmodule

/
、timescale 1ns/1ps
module fre_test (
clk,
rst_n,
clk_in,
sel_0,
dig_0,
feq_valid
);
input clk;
inout clk_ in;//外接信号输入
input rst_n;
output [5:0] sel_0; //六位码表示六个数码管
output [7:0] dig_0;
output [1:0] feq_valid;
wire locked;
wire [23:0] data;
wire [23:0] bin;
reg [23:0] count2;

count count0 (
.clk(clk) ,
.clk in(clk_in) ,
. rst n(rst_n) ,
.bin (bin)
);
hex tobcd hextobcd m0 (
.clk in(clk), / / INPUT
.rst(~rst n), / / INPUT
.bcd valid(feq valid),/ / OUTPUT
. .bin (bin),
/ / INPUT [23:0]
. bcd (data)
/ / OUTPUT [23:0]
);
lseg seg0 (
.clk(clk),// INPUT
.rst n(rst_ n),// INPUT
.data(data),/ / INPUT [23:0]
.dig(sel_ 0),
// OUTPUT[5:0]
led(dig_ 0) / / OUTPUT[7:0]
);
lclk test u_ clktest (
clk(clk) ,
.clk_ in(clk in) ,
.rst n(rst n)
);

//
`timescale 1ns/ 1ps
module fre_tb() ;
reg clk;
reg clk in;
reg rst_n;
wire[5:0] sel_ 0;
wire[7:0] dig_ 0;

fre test uut (
.clk(clk),/ / INPUT
rst n(rst n),/ / INPUT
clk in(clk in),// INPUT
.se1
0(sel_ 0),// OUTPUT[5:0]
.dig_ 0(dig_ 0) // OUTPUT[7:0]
);

initial begin
clk=0 ;
clk_in=0;
rst_n=0 ;
#10;
rst n=1 ;
end
always #1000 clk in=~clk in;
always #10 clk= ~clk;S
endmodule
 

【FPGA & Modsim】数字频率计,FPGA学习记录,fpga开发

【FPGA & Modsim】数字频率计,FPGA学习记录,fpga开发

【FPGA & Modsim】数字频率计,FPGA学习记录,fpga开发文章来源地址https://www.toymoban.com/news/detail-794399.html

到了这里,关于【FPGA & Modsim】数字频率计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 孩子都能学会的FPGA:第二十五课——用FPGA实现频率计

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年02月02日
    浏览(44)
  • 数字频率计

      电子技术应用实习 目录 1  实习目的、内容和要求 1 1.1 实习目的 1 1.2 实习内容 1 1.3 实习要求 1         1.3.1设计要求..................................................................................................................1 1.3.2实习任务要求 2 2  设计原理及软件简介 3 2.1设计原理 3 2.2M

    2023年04月18日
    浏览(37)
  • VHDL实现数字频率计的设计

    当设计文件加载到目标器件后,拨动开关的K1,使其置为高电平,从输入输出观测模块的输入端输入一个频率大于1Hz的时钟信号,这时在数码管上显示这个时钟信号的频率值。如果使拨动开关置为低电平,数码管上显示的值为系统上的数字信号源的时钟频率。改变数字信号源

    2024年02月02日
    浏览(59)
  • 基于51单片机数字频率计的设计与实现

    目录 第一章 系统原理与总体设计 1.1系统组成 1.2系统原理 1.3测量原理 1.4频率测量与总体设计 第二章 硬件电路设计 2.1硬件电路框图 2.2数字频率计原理图 2.3硬件电路设计 第三章 软件程序设计 3.1程序流程图 3.2显示电路程序设计 3.3 定时器初始化程序设计 3.4中断控制程序设计

    2024年02月08日
    浏览(45)
  • 基于STM32的简易数字频率计仿真设计(仿真+程序+设计报告+讲解)

    基于STM32的简易数字频率计仿真设计(仿真+程序+设计报告+讲解) 仿真图proteus 8.9 程序编译器:keil 5 编程语言:C语言 设计编号:C0079 基于STM32的简易数字频率计仿真设计(仿真+程序+设计报告+讲解) 结合实际情况,基于STM32F103单片机设计一个数字频率计仿真设计。该设计应满

    2024年02月09日
    浏览(41)
  • 数字频率计Verilog代码Quartus DE1-SoC开发板

    名称:数字频率计Verilog代码Quartus  DE1-SoC开发板(文末获取) 软件:Quartus 语言:Verilog 代码功能: 数字频率计    采用一个标准的基准时钟,在1s里对被测信号的脉冲数进行计数,即为信号频率利用等精度测量法可以测量1hz至99999999Hz信号频率 七段码管显示测量值 本代码已在

    2024年02月03日
    浏览(45)
  • 基于51单片机数字频率计仿真设计(proteus仿真+程序+原理图+参考报告+器件清单)

    (proteus仿真+程序+原理图+参考报告+器件清单) 仿真图proteus 8.9 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:C0052 由51单片机+信号输入+74HC14整形电路+74HC390分频电路+LCD1602显示模块+电源构成。 1、能测出正弦波、三角波或方波等波形的频率; 2、频率的测量范围为1Hz—

    2024年02月09日
    浏览(42)
  • 基于51单片机的频率计

    前言:设计一个能产生固定频率的电路,然后经过单片机处理后显示该固定频率的系统。 1、指标以及功能要求 指标:该系统要能够产生一个31KHz的方波,进过单片机脉冲采集后能够在液晶上显示出该频率。要求:所用的知识要涉及到模拟电路知识和数字电路知识。 2、设计分

    2024年02月09日
    浏览(48)
  • 多功能频率计周期/脉宽/占空比/频率测量verilog,视频/代码

    名称:多功能频率计周期、脉宽、占空比、频率测量verilog 软件:Quartus 语言:Verilog 代码功能:    多功能频率计,可测量信号的周期、脉冲宽度、占空比、频率,语言为verilog,quartus软件设计仿真 代码下载: 多功能频率计周期、脉宽、占空比、频率测量verilog_Verilog/VHDL资源

    2024年02月06日
    浏览(36)
  • 【单片机】STM32单片机频率计程序,外部脉冲计数程序,基于脉冲计数的频率计程序,STM32F103

    两种方法用于在单片机中实现频率计的功能。 第一种方法是通过定时器来衡量信号的周期,然后将周期转换为频率。在这种方法中,你可以使用单片机的定时器模块来测量输入信号的周期,定时器会产生一个计数值,你可以根据这个计数值来推算出输入信号的周期,并通过简

    2024年02月11日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包