IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Verilog RTL 代码实战 05——监沿与PWM输出 -> 正文阅读

[嵌入式]Verilog RTL 代码实战 05——监沿与PWM输出

1.监沿器

监沿器用来鉴定上升沿或下降沿

具体实现:前一刻时钟与现时刻时钟比较

信号经打一拍处理后存为前一刻信号,即比原信号慢了一个时钟的信号,因此可以根据两者的比较检测出上升沿或者下降沿。当现时刻为1,前时刻为0时,说明从上个时钟的0,变为这个时钟的1,判断出上升沿,同理可以判断出下降沿。具体代码如下:

module identify_tool
(
	input		clk,
	input		rst_n,
	input		signal,
	output wire	pose,
	output wire	nege
);
//内部信号
reg		signal_before;
//前一刻信号值寄存
always @(posedge clk or negedge rst_n)begin
 	 if(rst_n==1'b0)begin
	 signal_before <= 0;
	 end
	 else begin
	 signal_before <= signal ;
	 end
end
//上升下降判断
assign nege = signal==0 && signal_before==1;
assign pose = signal==1 && signal_before==0;


endmodule

测试代码:

`timescale 1 ns/1 ns
module tb_identify_tool();

reg	clk;
reg	rst_n;
reg	signal;
wire	pose;
wire	nege;

parameter	CYCLE = 20;

initial begin
	clk = 0;
	forever
	#(CYCLE/2)
	clk = ~clk;
end

initial begin
	rst_n = 1;
	#2;
	rst_n = 0;
	#2;
	rst_n = 1;
end

identify_tool u1
(
	.clk	(clk),
	.rst_n	(rst_n),
	.signal	(signal),
	.pose	(pose),
	.nege	(nege)
);
initial begin
	signal = 0;
end

always@(posedge clk)begin
	signal = {$random}%2; 
end

endmodule

仿真结果:

在这里插入图片描述

2.PWM输出

PWM输出主要有两个参数:
第一,波的周期:一个完整波形的时间
第二,波的占空比:一个周期中高电平所占百分比

举个例子:一个周期是10ms,占空比是50%的PWM波,波形如下:
在这里插入图片描述
下面是参数化的代码,下例中输出的PWM波的周期是1us(一个时钟周期为20ns),占空比是20%

module pwm
(
	input		clk,
	input		rst_n,
	output reg	pwm
);
//参数 周期以及占空比
parameter	CYCLE   = 50;  //1000ns = 1us
parameter	PERCENT = 20;  //20%

reg [7:0]	cnt_T;		//随计数最大值改动,这里最大计数到49,因此需要8位

//功能块
always@(posedge clk or negedge rst_n)begin
	if (!rst_n)
		cnt_T <= 0;
	else if(cnt_T == CYCLE-1)
		cnt_T <= 0;
	else
		cnt_T <= cnt_T +1;
end

always@(posedge clk or negedge rst_n)begin
	if(!rst_n)
		pwm <= 0;
	else if (cnt_T <= CYCLE * PERCENT /100 -1 )
		pwm <= 1;
	else
		pwm <= 0;
end

endmodule

测试代码:

`timescale 1 ns/1 ns

module tb_pwm();

reg	clk;
reg	rst_n;
wire	pwm;

parameter	CYCLE = 20;

initial begin
	clk = 0;
        forever
	#(CYCLE/2)
	clk = ~clk;	
end

initial begin
	rst_n = 1;
	#2
	rst_n = 0;
	#2
	rst_n = 1;
end

pwm u1
(
	.clk	(clk),
	.rst_n	(rst_n),
	.pwm	(pwm)
);



endmodule

仿真结果:

在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:46:32  更:2022-02-26 11:47:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:36:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码