题解 | #信号发生器#
信号发生器
https://www.nowcoder.com/practice/39f6766689cc448e928a0921d1d1f858
本题的解法就是一个case语句就行,但是需要注意的是每个波形之间的转换,特别是在三角波的时候,其默认是减少的,但是也要看是否wave为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] rec_cnt; reg trig_flag; always@(posedge clk or negedge rst_n) begin if(!rst_n) begin wave <= 5'b0; rec_cnt <= 5'b0; trig_flag <= 1'b0; end else begin case(wave_choise) 2'd0 : begin if(rec_cnt == 5'd9) begin wave <= 5'd20; rec_cnt <= rec_cnt + 1'b1; end else if(rec_cnt == 5'd19) begin wave <= 1'b0; rec_cnt <= 5'b0; end else begin wave <= wave; rec_cnt <= rec_cnt + 1'b1; end end 2'd1 : wave <= ((wave == 5'd20) ? 5'b0 : (wave + 1'b1)); 2'd2 : begin if(wave == 5'd0) begin trig_flag <= 1'b1; wave <= wave + 1'b1; end else if(wave == 5'd20) begin trig_flag <= 1'b0; wave <= wave - 1'b1; end else begin if(trig_flag) wave <= wave + 1'b1; else wave <= wave - 1'b1; end end default : wave <= 5'b0; endcase end end endmodule
顺丰集团工作强度 381人发布