题解 | #信号发生器#

信号发生器

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

//一个用cnt计数 一个是用flag判断 需要
`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;
	always@(posedge clk or negedge rst_n)
    begin
		if(!rst_n)
		cnt<=0;
		else
		begin
			if(wave_choise==0)
			begin
		    if (cnt>=5'd19)
			cnt<=0;
			else 
			cnt<=cnt+1;
			end
			else
			cnt<=0;
			end
	end

	reg flag;
	always@(posedge clk or negedge rst_n)
    begin
		if(!rst_n)
		flag<=1;
		else begin
			if(wave_choise==2)
			begin
			if (wave==5'd19)
			flag<=1;
			else if(wave==1)//等于0的时候 下一个时钟信号就溢出到31去了
			flag<=0;
			else
			flag<=flag;
			end
			else 
			begin
			if (wave==0)
			flag<=0;
			else
			flag<=1;
			end

	end
	end
	
	always@(posedge clk or negedge rst_n)
    begin
		if(!rst_n)
		wave<=0;
		else begin
			case(wave_choise)
			2'b00:begin
				wave<=cnt<9?0:cnt<19?5'd20:0;
			end
			2'b01:begin
				wave<=wave>=20?0:wave+1;
			end
			2'b10:begin
				wave<=flag==1?wave-1:wave+1;
			end
			default wave<=0;
			endcase
		end
	end


  
endmodule

全部评论

相关推荐

点赞 评论 收藏
分享
11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
死在JAVA的王小美:哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我也是,让我免了一轮,但是硬气拒绝了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务