「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
相关推荐
9527华安22 分钟前
Xilinx系列FPGA纯逻辑实现HDMI2.0视频收发,基于GTY高速接口,支持4K@60Hz分辨率,提供7套工程源码和技术支持
fpga开发·高速接口·gty·hdmi2.0·4k
GateWorld27 分钟前
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- 实战基于CSI2 Rx 构建高性能摄像头输入系统
fpga开发·mipi csi2
菜菜why31 分钟前
MSPM0G3507学习笔记(二) 超便捷配置led与按键
笔记·单片机·电赛·msp430
MrGaomq38 分钟前
软件测试用例(二)
linux·c语言·c++·经验分享·笔记·测试用例
霖霖71444 分钟前
linux系统驱动的原理
linux·笔记·学习
虾球xz1 小时前
CppCon 2016 学习:Parallelism in Modern C++
开发语言·c++·学习
无名小猴2 小时前
Charpter14-Business Logic Vulnerabilities
学习
紫青宝剑2 小时前
Pydantic 学习与使用
学习
小庞在加油2 小时前
从零到一:C语言基础入门学习路线与核心知识点全解析
c语言·开发语言·学习
大信团队—跨境TRO3 小时前
【25-cv-06522】Keith律所代理Helen Marie Wells版权图
笔记·跨境电商·亚马逊·侵权维权·tro