zoukankan      html  css  js  c++  java
  • 实现序列1101从右到左的不重叠检测

    直接上RTL代码 estbench仿真图、状态图

    module    test_moore
    (
        clk,rst_n,data_in,out_test
    );
    parameter        IDLE        =    4'b0000,
                        state1    =    4'b0001,
                        state2    =    4'b0010,
                        state3    =    4'b0100,
                        state4    =    4'b1000;
    output                out_test;
    input                    data_in;
    input                    clk,rst_n;
    
    reg        out_test_reg;
    reg    [3:0]    state;
    
    
        
    always @ (posedge clk)
        begin
            if(!rst_n)
                state    =    IDLE;
            else
                case(state)
                IDLE:        begin    if(data_in    ==    1'b1)
                            state    <=    state1;
                            else
                            state    <=    IDLE;end
                state1:    begin    if(data_in    ==    1'b0)
                            state    <=    state2;
                            else    state    <=    state1;end
                state2:    begin    if(data_in    ==    1'b1)
                            state    <=    state3;
                            else    state    <=    IDLE;end
                state3:    begin    if(data_in    ==    1'b1)
                            state    <=    state4;
                            else    state    <=    state2;end
                state4:    begin    if(data_in    ==    1'b1)
                            state    <=    IDLE;
                            else    state    <=    state1;end
                default:    state    <=    IDLE;
                endcase
        end
    always @ (*)
    begin
            if(state    ==    state4)
                out_test_reg    =    1'b1;
            else
                out_test_reg    =    1'b0;
    end
    
    assign    out_test    =    out_test_reg;
    
    endmodule
    //testbench
    `timescale 1 ps/ 1 ps
    module test_moore_vlg_tst();
    
    reg clk;
    reg data_in;
    reg rst_n;
    reg    [15:0]    test_data;
    // wires                                               
    wire out_test;
                             
    test_moore i1 (
       
        .clk(clk),
        .data_in(data_in),
        .out_test(out_test),
        .rst_n(rst_n)
    );
    
    initial
        begin
            clk    =    1'b1;
            rst_n    =    1'b0;
            data_in    =    1'b0;
            test_data    =    16'b1011_0111_0111_1000;
            #10    rst_n    =    1'b1;
            #100000    $stop;
        end
    
    always #50    clk    =    ~clk;
    
    always @ (posedge clk)
        begin
            if(!rst_n)
                data_in    <=    1'b0;
                
            else
           begin
                test_data    <=    test_data<<1;
                data_in    <=    test_data[15];
                end
        end
    endmodule
    
    

  • 相关阅读:
    c3p0配置
    0624软件工程的回顾和总结
    0619学习进度条
    MySQL中wait_timeout的坑
    js/jquery禁止页面回退
    jquery打印页面(jquery.jqprint)
    input file multiple 批量上传文件
    Python学习笔记——Python Number(数字)
    正则表达式
    Python学习笔记(三)——条件语句、循环语句
  • 原文地址:https://www.cnblogs.com/wangbin0729/p/13453095.html
Copyright © 2011-2022 走看看