Verilog-实现使用计数器得到特定时间的高脉冲信号
一、概述
本篇博客主要介绍:使用计数器来得到自己想要的的一段脉冲信号。
二、实现方法及代码
1、框图,端口及相关信号
2、代码实现
Verilog实现
`timescale 1ns/1ps
module data_cnt (
input clk, //50MHZ 20ns
input rstn,
input trig, //触发信号 一个时钟周期
output wire state //得到1us的高脉冲信号
);
//define
reg [5:0] data_cnt; //1us 50
reg data_cnt_clr;
//----------------1us计数器----------------//
always @(posedge clk or negedge rstn) begin
if (!rstn)
data_cnt <= 6'd0;
else if(!data_cnt_clr) // 等于0 data_cnt = 0
data_cnt <= 6'd0;
else
data_cnt <= data_cnt + 1'b1;
end
//---------------得到一个1us的高脉冲信号state----------------//
always @(posedge clk or negedge rstn) begin
if (!rstn)
begin
data_cnt_clr <= 1'b0;
end
else if(trig == 1 && data_cnt == 6'd0)
begin
data_cnt_clr <= 1'b1;
end
else if(data_cnt == 50 - 1)
begin
data_cnt_clr <= 1'b0;
end
else
begin
data_cnt_clr <= data_cnt_clr;
end
end
assign state = data_cnt_clr;
endmodule
Testbench
`timescale 1ns / 1ps
module data_cnt_tb;
// Parameters
// Ports
reg clk ;
reg rstn ;
reg trig ;
wire state;
data_cnt
data_cnt_dut (
.clk (clk ),
.rstn (rstn ),
.trig (trig ),
.state (state )
);
initial begin
begin
clk = 0;
rstn = 0;
trig = 0;
#20 rstn = 1;
#500
trig = 1;
#20 trig = 0;
#1200
trig = 1;
#20 trig = 0;
end
end
always
#10 clk = ! clk ;
endmodule
本篇随笔为学习记录所用,如有错误,请各位指正批评。
分类:
Verilog
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人