题解 | 信号发生器

信号发生器

https://www.nowcoder.com/practice/39f6766689cc448e928a0921d1d1f858

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

reg [4:0] count;
always@(posedge clk or negedge rst_n) begin
	if(!rst_n) begin
		count <= 5'd0;
	end else begin
		if(wave_choise == 2'b00) begin
			if(count == 5'd19) begin
				count <= 5'd0;
			end else begin
				count <= count + 1'b1;
			end
		end
	end
end

reg flag;
always@(posedge clk or negedge rst_n) begin
	if(!rst_n) begin
		wave <= 5'd0;
		flag <= 1'b0;
	end else begin
		case(wave_choise) 
			2'b00: begin
				if(count == 5'd9) begin
					wave <= 5'd20;
				end else if(count == 5'd19) begin
					wave <= 5'd0;
				end else begin
					wave <= wave;
				end
			end

			2'b01: begin
				if(wave == 5'd20) begin
					wave <= 0;
				end else begin
					wave <= wave + 1'b1;
				end
			end

			2'b10: begin
				if(flag == 1'b1) begin //上升状态
					if(wave == 5'd20) begin
						wave <= wave - 1'b1;
						flag <= 1'b0;
					end else begin
						wave <= wave + 1'b1;
					end	
				end else begin
					if(wave == 5'd0) begin
						flag <= 1'b1;
						wave <= wave + 1'b1;
					end else begin
						wave <= wave - 1'b1;
					end
				end
			end

			default: begin
				wave <= 5'd0;
			end
		endcase

	end
end
endmodule

全部评论

相关推荐

03-06 18:20
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务