这个题目有点离谱,题里什么也没给,需要去题解中才知道方波、锯齿波和三角波最大值都为20,方波周期20,锯齿波周期21,三角波周期40
对三种波形具体分析
方波:周期为20且最大值也为20的方波,就是0-19的计数器,在0-9时wave输出0,在10-19wave输出20。
锯齿波:wave即为0-20计数器,在0-19过程中持续增加,在计数器为20时进行清零
三角波:wave为0-19和19到0的先加再减计数器,0-19过程中递增,19-0过程中递减。
波形里存在一个小三角,是陷阱,要求在从锯齿波或者方波切换到三角波时,默认在递减状态,减到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] cyc_count ;
reg flag ;
always @(posedge clk or negedge rst_n) begin
if(!rst_n)
cyc_count <= 'd0 ;
else if(wave_choise==2'd0) begin
if(cyc_count == 5'd19)
cyc_count <= 5'd0 ;
else
cyc_count <= cyc_count + 1;
end
else
cyc_count <= 5'd0 ;
end
always @(posedge clk or negedge rst_n) begin
if(!rst_n)
flag <= 1'b0 ;
else if(wave_choise == 2'd2) begin
if(wave == 5'd19)
flag <= 1'b1 ;
else if(wave == 5'd1)
flag <= 1'b0 ;
else
flag <= flag ;
end
else begin
if(wave == 5'd0 )
flag <= 1'b0 ;
else
flag <= 1'b1 ;
end
end
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
wave<=0;
else begin
if (wave_choise==0) begin
wave <= (cyc_count < 9) ? 0 : (cyc_count < 19 ? 20 : 0);
end
else if (wave_choise==1) begin
wave <= (wave >= 20) ? 0 : wave+1;
end
else if (wave_choise==2) begin
wave <= flag ? wave-1: wave+1;
end
else
wave <= 0;
end
end
endmodule
标签:20,进阶,19,方波,wave,锯齿,牛客,计数器,发生器
From: https://www.cnblogs.com/icwangpu/p/17026156.html