「Verilog学习笔记」信号发生器

专栏前言

本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网

方波的实现,较为简单,只需要设置一个计数器,使输出保持10个时钟为0,跳变为20,再保持10个时钟。依次循环。可以按照如下的过程实现:cnt每个时钟加一,当cnt=19时,将wave的值置为0,同时cnt置为0;当cnt=9时,将wave的值置为20。

锯齿波的实现,即输出信号由0每次加一递增到20,然后从20跳变到0。可以按照如下的过程实现:当wave=20,将wave的值置为0,其余时刻,wave加一。

三角波的实现,类似于锯齿波,但当wave达到20时,不是跳变到0,而是以一为步长递减到0。可以设置一个指示信号up,当up的值是1时,wave每个时钟加一。当up的值为0时,则减一。

复制代码
`timescale 1ns/1ns
module signal_generator(
	input clk,
	input rst_n,
	input [1:0] wave_choise,
	output reg [4:0]wave
	);

	reg [4:0] cnt ; 
	reg up ;
	always @ (posedge clk or negedge rst_n) begin 
		if (!rst_n) begin 
			wave <= 5'd0 ; 
			cnt <= 5'd0 ; 
		end
		else begin 
			case (wave_choise) 
				2'b00 : begin 
					if (cnt == 5'd19) begin 
						wave <= 5'd0 ; 
						cnt <= 5'd0 ; 
					end
					else if (cnt == 5'd9) begin 
						wave <= 5'd20 ;
						cnt <= cnt + 1'd1 ; 
					end
					else begin 
						wave <= wave ; 
						cnt <= cnt + 1'd1 ; 
					end
				end
				2'b01 : begin
					if (wave == 5'd20) wave <= 5'd0 ; 
					else wave <= wave + 1'd1 ; 
				end
				2'b10 : begin 
					if (wave == 5'd20) begin 
						wave <= wave - 1'd1 ; 
						up <= 1'd0 ; 
					end
					else if (wave == 5'd0) begin 
						wave <= wave + 1'd1 ; 
						up <= 1'd1 ; 
					end
					else if (up) wave <= wave + 1'd1 ; 
					else wave <= wave - 1'd1 ; 
				end
				default : 
					wave <= 1'b0 ; 
			endcase
		end
	end			
  
endmodule
相关推荐
非凡ghost2 小时前
AMS PhotoMaster:全方位提升你的照片编辑体验
windows·学习·信息可视化·软件需求
云间月13144 小时前
飞算JavaAI智慧教育场景实践:从个性化学习到教学管理的全链路技术革新
学习·飞算javaai挑战赛
weixin_456904275 小时前
一文讲清楚Pytorch 张量、链式求导、正向传播、反向求导、计算图等基础知识
人工智能·pytorch·学习
Blossom.1186 小时前
把 AI 推理塞进「 8 位 MCU 」——0.5 KB RAM 跑通关键词唤醒的魔幻之旅
人工智能·笔记·单片机·嵌入式硬件·深度学习·机器学习·搜索引擎
草莓熊Lotso6 小时前
《吃透 C++ 类和对象(中):const 成员函数与取地址运算符重载解析》
c语言·开发语言·c++·笔记·其他
Python私教7 小时前
从“Hello World”到“高并发中间件”:Go 语言 2025 系统学习路线图
学习·中间件·golang
玖別ԅ(¯﹃¯ԅ)8 小时前
PID学习笔记6-倒立摆的实现
笔记·stm32·单片机
想学全栈的菜鸟阿董9 小时前
Django5个人笔记
笔记
Brookty9 小时前
【Java学习】锁、线程死锁、线程安全2
java·开发语言·学习·java-ee