⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receiver.v

📁 实现串并口通信,共有发送和接受两个模块。
💻 V
字号:
module uart2(clk, rst_n, outdate, outbyte);
input clk, rst_n, outdate;
output [7:0] outbyte;
reg [7:0] outbyte, store;
reg [3:0] counter, st, next_st;
reg pre_outbit;
parameter st_0 = 0, st_1 = 1, st_2 = 2, st_3 = 3, st_4 = 4, 
st_5 = 5, st_6 = 6, st_7 = 7, st_8 = 8, st_9 = 9, st_10 = 10, st_11 = 11, st_12 = 12, st_13 = 13;
////////////////////////////////////////
always@(posedge clk or negedge rst_n)
begin
    if(rst_n == 0)
    st <= st_0;
    else
    st <= next_st;
end
/////////////////////////////////////////
always@(posedge clk or negedge rst_n)
begin
    if(rst_n == 0)
    pre_outbit <= 0;
    else
    pre_outbit <= outdate;
end
/////////////////////////////////////////
always@(posedge clk or negedge rst_n)
begin
    if(rst_n == 0)
    next_st <= st_0;
    else
    case(st)
    st_0:
    begin
        if(outdate == 0 && pre_outbit == 1)
        begin
            counter <= 0;
            next_st <= st_1;
        end
        else
        next_st <= st;
    end
    st_1:
    begin
        if(counter == 7)
        begin
            counter <= counter + 1;
            if(outdate == 0)
            next_st <= st;
            else
            next_st <= st_0;
        end
        else if(counter == 15)
        begin
            counter <= 0;
            next_st <= st_2;
        end
        else
        begin
            counter <= counter + 1;
            next_st <= st;
        end
    end
    st_2:
    begin
        if(counter == 7)
        begin
            counter <= counter + 1;
            if(outdate == 0)
            next_st <= st;
            else
            next_st <= st_0;
        end
        else if(counter == 15)
        begin
            counter <= 0;
            next_st <= st_3;
        end
        else
        begin
            counter <= counter + 1;
            next_st <= st;
        end
    end
    st_3:
    begin
        if(counter == 7)
        begin
            store[7] <= outdate;
            next_st <= st;
            counter <= counter + 1;
        end
        else if(counter == 15)
        begin
            counter <= 0;
            next_st <= st_4;
        end
        else
        begin
            counter <= counter + 1;
            next_st <= st;
        end
    end
    st_4:
    begin
        if(counter == 7)
        begin
            store[6] <= outdate;
            next_st <= st;
            counter <= counter + 1;
        end
        else if(counter == 15)
        begin
            counter <= 0;
            next_st <= st_5;
        end
        else
        begin
            counter <= counter + 1;
            next_st <= st;
        end
    end
    st_5:
    begin
        if(counter == 7)
        begin
            store[5] <= outdate;
            next_st <= st;
            counter <= counter + 1;
        end
        else if(counter == 15)
        begin
            counter <= 0;
            next_st <= st_6;
        end
        else
        begin
            counter <= counter + 1;
            next_st <= st;
        end
    end
    st_6:
    begin
        if(counter == 7)
        begin
            store[4] <= outdate;
            next_st <= st;
            counter <= counter + 1;
        end
        else if(counter == 15)
        begin
            counter <= 0;
            next_st <= st_7;
        end
        else
        begin
            counter <= counter + 1;
            next_st <= st;
        end
    end
    st_7:
    begin
        if(counter == 7)
        begin
            store[3] <= outdate;
            next_st <= st;
            counter <= counter + 1;
        end
        else if(counter == 15)
        begin
            counter <= 0;
            next_st <= st_8;
        end
        else
        begin
            counter <= counter + 1;
            next_st <= st;
        end
    end
    st_8:
    begin
        if(counter == 7)
        begin
            store[2] <= outdate;
            next_st <= st;
            counter <= counter + 1;
        end
        else if(counter == 15)
        begin
            counter <= 0;
            next_st <= st_9;
        end
        else
        begin
            counter <= counter + 1;
            next_st <= st;
        end
    end
    st_9:
    begin
        if(counter == 7)
        begin
            store[1] <= outdate;
            next_st <= st;
            counter <= counter + 1;
        end
        else if(counter == 15)
        begin
            counter <= 0;
            next_st <= st_10;
        end
        else
        begin
            counter <= counter + 1;
            next_st <= st;
        end
    end
    st_10:
    begin
        if(counter == 7)
        begin
            store[0] <= outdate;
            next_st <= st;
            counter <= counter + 1;
        end
        else if(counter == 15)
        begin
            counter <= 0;
            next_st <= st_11;
        end
        else
        begin
            counter <= counter + 1;
            next_st <= st;
        end
    end
    st_11:
    begin
        if(counter == 7)
        begin
            if(outdate == (store[7] + store[6] + store[5] + store[4] + store[3] + store[2] + store[1] + store[0])%2)
            begin
                next_st <= st;
                counter <= counter + 1;
            end
            else
            next_st <= st_0;
        end
        else if(counter == 15)
        begin
            counter <= 0;
            next_st <= st_12;
        end
        else
        begin
            counter <= counter + 1;
            next_st <= st;
        end
    end
    st_12:
    begin
        if(counter == 7)
        begin
            counter <= counter + 1;
            if(outdate == 0)
            next_st <= st;
            else
            next_st <= st_0;
        end
        else if(counter == 15)
        begin
            counter <= 0;
            next_st <= st_13;
        end
        else
        begin
            counter <= counter + 1;
            next_st <= st;
        end
    end
    st_13:
    begin
        if(counter == 7)
        begin
            counter <= counter + 1;
            if(outdate == 0)
            next_st <= st;
            else
            next_st <= st_0;
        end
        else if(counter == 15)
        begin
            counter <= 0;
            next_st <= st_0;
            outbyte <= store;
        end
        else
        begin
            counter <= counter + 1;
            next_st <= st;
        end
    end
    default:
    next_st <= st_0;
    endcase
end
////////////////////////////////////////////////////
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -