题解 | #信号发生器#

信号发生器

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] cnt;
	reg flag;

	always @(posedge clk or negedge rst_n) begin
		if(rst_n == 1'b0)
			cnt <= 5'd0;
		else if(cnt == 5'd19)
			cnt <= 5'd0;
		else
			cnt <= cnt + 1'b1;
	end

	always @(posedge clk or negedge rst_n) begin
		if(rst_n == 1'b0)begin
			wave <= 5'd0;
			flag <= 1'b0;
		end
		else begin
			case(wave_choise)
			2'd0: begin
					if(cnt == 5'd9)
						wave <= 5'd20;
					else if(cnt == 5'd19)
						wave <= 5'd0;
					else
						wave <= wave;
			end
			2'd1: begin
					if(wave == 5'd20)
						wave <= 5'd0;
					else
						wave <= wave + 1'b1;					 
			end
			2'd2: begin
					if(wave == 5'd0)begin
						wave <= 5'd1;
						flag <= 1'b1;
					end
					else if(wave == 5'd20)begin
						wave <= 5'd19;
						flag <= 1'd0;
					end
					else
						wave <= flag ? wave + 1'b1 : wave - 1'b1;
			end
			default: wave <= 5'd0;
			endcase
		end		
	end

	 
endmodule

这个题做的真是恶心哦,搞了好久。大家用vivado仿真的时候,选模拟时选择 hold,因为默认是linear。这样才能出最终波形。祝顺利!

全部评论

相关推荐

2025-12-15 11:27
门头沟学院 Java
哇哇的菜鸡oc:所有人不要理会,就好了,后面他就知道怎么回事了,只能说有的时候市场都是被宰的人搞坏的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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