描述

题目描述:

请编写一个信号发生器模块,根据波形选择信号wave_choise发出相应的波形:wave_choice=0时,发出方波信号;wave_choice=1时,发出锯齿波信号;wave_choice=2时,发出三角波信号。 模块的接口信号图如下: alt

`timescale 1ns/1ns
module signal_generator(
	input clk,
	input rst_n,
	input [1:0] wave_choise,
	output reg [4:0]wave
	);
    
    reg [4:0] cnt1;
    always@(posedge clk or negedge rst_n) begin: count1
        if(~rst_n)
            cnt1 <= 5'b0;
        else if(cnt1 == 5'd20)
            cnt1 <= 5'b0;
        else
            cnt1 <= cnt1 + 1;
    end
    
    reg [4:0] sequance_wave;
    always@(posedge clk or negedge rst_n) begin: gen_squance_wave
        if(~rst_n)
            sequance_wave <= 5'd0;
        else if(cnt1 <= 5'd10)
            sequance_wave <= 5'd0;
        else
            sequance_wave <= 5'd20;
    end
    
    reg [4:0] tri_wave;
    always@(posedge clk or negedge rst_n) begin: gen_sequance_wave
        if(~rst_n)
            tri_wave <= 5'd0;
        else if(tri_wave == 5'd20)
            tri_wave <= 5'd0;
        else
            tri_wave <= tri_wave + 1;
    end
        
    reg [4:0] juchi_wave;
    always@(posedge clk or negedge rst_n) begin: gen_juchi
        if(~rst_n)
            juchi_wave <= 5'd0;
        else if(cnt1 <= 5'd10)
            juchi_wave <= juchi_wave + 1;
        else
            juchi_wave <= juchi_wave - 1;
    end
    
    always@(posedge clk or negedge rst_n) begin:judge_wave
        if(~rst_n)
            wave <= 5'd0;
        else begin
            case(wave_choise)
                2'd0: wave <= sequance_wave;
                2'd1: wave <= tri_wave;
                2'd2: wave <= juchi_wave;
            endcase
        end
    end
    
  
endmodule