题解 | #信号发生器#

信号发生器

https://www.nowcoder.com/practice/39f6766689cc448e928a0921d1d1f858

module signal_generator(
	input clk,
	input rst_n,
	input [1:0] wave_choise,
	output reg [4:0]wave
	);

    parameter max_vavlue = 20, T1 = 20, min_value = 0;
    reg [4:0] cnt;
    reg flag;

    // 仅在方波模式工作的计数器
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            cnt <= 0;
        end else begin
            // cnt <= wave_choise != 0 ? 0 : cnt == T1 - 1 ? 0 : cnt + 1;
            if (wave_choise == 0) cnt <= cnt == T1 - 1 ? 0 : cnt + 1;
            else cnt <= 0;
        end
    end

    // 仅在三角波模式工作的标志位
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            flag <= 0;
        end else begin
            // flag <= wave_choise != 2 ? 0 : wave == min_value + 1 ? 1 : wave == max_vavlue - 1 ? 0 : flag;
            if (wave_choise == 2) begin
                if (wave <= min_value + 1) flag <= 1;
                else if (wave >= max_vavlue - 1) flag <= 0;
                else flag <= flag;
            end
        end
    end

    // 波形变化
    always  @(posedge clk or negedge rst_n) begin
        if (!rst_n) begin
            wave <=0;
        end else begin
            case(wave_choise)
                0: begin
                    // wave <= cnt == T1/2 - 1 ? max_vavlue : cnt == T1 - 1 ? min_value : wave;
                    if (cnt == T1/2 - 1) wave <= max_vavlue;
                    else if (cnt == T1 - 1) wave <= min_value;
                    else wave <= wave;
                end
                1: wave <= wave == max_vavlue ? 0 : wave + 1;
                2: wave <= flag == 0 ? wave - 1 : wave + 1;
                default: wave <= 0;
            endcase
        end
    end
  
endmodule

全部评论

相关推荐

05-29 09:02
门头沟学院 Java
点赞 评论 收藏
分享
昨天 12:17
已编辑
商丘师范学院 Java
后来123321:别着急,我学院本大二,投了1100份,两个面试,其中一个还是我去线下招聘会投的简历,有时候这东西也得看运气
无实习如何秋招上岸
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 13:54
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务