题解 | #信号发生器#
信号发生器
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 [5:0] wave_num;
reg [1:0] wave_choise_ray;
reg wave_down;
// 20,21,40
always @(posedge clk or negedge rst_n) begin
if (~rst_n) begin
wave <= 5'b0;
wave_num <= 6'b0;
wave_down <= 1;
end
else begin
wave_choise_ray <= wave_choise;
case(wave_choise)
2'b0: if (wave_choise_ray==wave_choise) begin
wave_num <= (wave_num<9)?(wave_num+1):0;
wave <= (wave_num<9)?wave:
((|wave)?5'b0:5'b10100);
end
else begin
wave_num <= 1;
wave <= 5'b00000;
end
2'b1: if (wave_choise_ray==wave_choise) begin
wave_num <= (wave_num<20)?(wave_num+1):0;
wave <= (wave_num<20)?(wave+1):5'b0;
end
else begin
wave_num <= 0;
wave <= 5'b0;
end
2'b10: if (wave==5'b10100) begin
wave <= 5'b10011;
wave_down <= 1;
end
else if (wave==5'b0) begin
wave <= 5'b00001;
wave_down <= 0;
end
else if (wave_down)
wave <= wave-1;
else
wave <= wave+1;
endcase
end
end
endmodule
