题解 | #信号发生器#

信号发生器

http://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
	);
    parameter [4:0] CLK_NUM = 5'd19;
//-------------wire define------------//
    
//-------------reg define-------------//
    reg [4:0] clk_cnt;   
    reg triangle_flag;
//     reg mode_shift;
//************************************//
//           Main code
//************************************//
//clk counter
always @ (posedge clk,negedge rst_n)
    begin
        if(!rst_n)
            clk_cnt <= 5'b0;
        else if(clk_cnt == CLK_NUM)
            clk_cnt <= 5'b0;
        else
            clk_cnt <= clk_cnt + 1'b1;
    end
// // 0 --> 1模式切换标志
// always @ (posedge clk,negedge rst_n)
//     begin
//         if(!rst_n)
//             mode_shift <= 1'b0;
//         else if(wave_choise == 2'b01)
//             mode_shift <= 1'b1;
//         else
//             mode_shift <= 1'b0;
//     end    
// //output
    always @ (posedge clk,negedge rst_n)
        begin
            if(!rst_n)
                begin
                    wave <= 5'b0;
                    triangle_flag <= 1'b0;
                end
            else
                case(wave_choise)
                    2'b00:begin
                        if(clk_cnt == 5'd9)
                            wave <= 5'd20;
                        else if(clk_cnt == CLK_NUM)
                            wave <= 5'd0;
                        else
                            wave <= wave;
                    end
                    2'b01:begin
                        wave <= wave==5'd20 ? 5'd0 : wave + 1'b1;
                    end
                    2'b10:begin
                        if(triangle_flag)
                            begin
                                wave <= wave + 1'b1;
                                triangle_flag <= wave==5'd19 ? ~triangle_flag : triangle_flag;
                            end
                        else
                            begin
                                wave <= wave - 1'b1;
                                triangle_flag <= wave==5'd1 ? ~triangle_flag : triangle_flag;
                            end
                    end
                    default:wave <= 5'b0;
                endcase
        end
    
  
endmodule

全部评论

相关推荐

专业嗎喽:个人信息名字太大,合到电话邮箱那一栏就行,有党员写过党,剩下其他全删,站空太大了 把实习经历丰富,放最前面,然后是个人评价,技能之类的,然后是学校信息。项目经历最后面,可以就选一个自己擅长的。 现在是学校不是92就扣分的,没必要放前面。 然后现在看重实习经历>竞赛经历(校园经历)>课程项目经历
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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