题解 | #信号发生器#
信号发生器
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;
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
cnt <= 0;
end
else if(cnt >= 19) begin
cnt <= 0;
end
else begin
cnt <= cnt + 1'b1;
end
end
reg flag;
// 三角波模式下,标志位控制
always@(posedge clk or negedge rst_n) begin
if(~rst_n)
flag <= 0;
else
flag <= wave_choise!=2 ? 0:
wave ==1 ? 1:
wave ==19? 0:
flag;
end
always @(posedge clk or negedge rst_n) begin
if(!rst_n) begin
wave <= 0;
end
else begin
case(wave_choise)
0: wave <= (cnt == 9)?(20):(cnt == 19?0:wave);
//0: wave <= (cnt >= 9)?(20):(0);
1: wave <= (wave == 20)?0:(wave + 1'b1);
2: wave <= (flag == 0)?(wave - 1'b1):(wave + 1'b1);
default: wave <= 0;
endcase
end
end
endmodule
查看7道真题和解析
