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

📄 uart_rx.v

📁 实现FPGA与PC机的串口通信功能
💻 V
字号:
/******************************************************************************* File:    uart_tb.v* Version: V0.0* Author:  minjingguo <jingguo.min@shhic.com>* Date:    20070814* Company: SHHIC Co., Ltd.******************************************************************************* Description:* ******************************************************************************** Version: V0.1* Modifier: name <email>* Date:* Description:******************************************************************************/// ************************* // *************************    // MODULE DEFINTION//**************************module  uart_rx     (    //INPUTS    rst     ,    clk16x  ,    rd      ,    rxd     ,    parity_def,       //OUTPUTS    dout    ,    dat_rdy ,    framing_error,    parity_error    );    // *************************// INPUTS// *************************input           rxd          ;input           clk16x       ;input           rst          ;input           rd           ;input           parity_def   ;// *************************// OUTPUTS // *************************output  [7:0]   dout         ;output          dat_rdy      ;output          framing_error;output          parity_error ;// *************************// INTERNAL SIGNALS// *************************reg     [7:0]   dout         ;reg             rxd1         ;reg             rxd2         ;reg     [3:0]   cnt_clk      ;reg     [3:0]   cnt_byte     ;reg     [7:0]   rsr          ;reg     [7:0]   rbr          ;reg             parity       ;reg             parity_error ;reg             framing_error;reg             dat_rdy      ;// *************************// CODE// *************************always @(posedge clk16x or negedge rst)begin    if (rst== 1'h0)    begin        dout    <= 8'b0 ;        dat_rdy <= 1'b0 ;    end    else if (rd)    begin        dout    <= 8'b0 ;        dat_rdy  <= 1'b0;    end        else if (cnt_byte==4'h9 & cnt_clk==4'h7)    begin        dout    <= rbr;        dat_rdy  <= 1'b1 ;    endendalways @(posedge clk16x or negedge rst)begin    if (rst== 1'h0)    begin        rxd1    <= 1'b1 ;        rxd2    <= 1'b1 ;    end    else    begin        rxd1    <= rxd  ;        rxd2    <= rxd1 ;    endendalways @(posedge clk16x or negedge rst)begin    if (rst== 1'h0)    begin        cnt_clk     <= 4'hf;        cnt_byte    <= 4'hf;    end    else    begin        if (cnt_byte==4'hf)        begin            if (!rxd1 && rxd2)            begin                cnt_clk     <= 4'b0;                cnt_byte    <= 4'b0;            end        end        else        begin            cnt_clk     <= cnt_clk+1;            if (cnt_clk==4'hf)            begin                if (cnt_byte==4'h9)                    cnt_byte    <= 4'hf;                else                    cnt_byte    <= cnt_byte+1;            end        end    endendalways @(posedge clk16x or negedge rst)begin    if (rst== 1'h0)    begin        rsr     <= 8'b0 ;        rbr     <= 8'b0 ;        parity <=  1'b1 ;        framing_error <= 1'b0 ;        parity_error  <= 1'b0 ;    end    else if (cnt_clk==4'h7)    begin                if (cnt_byte== 4'h0)                       parity  <= parity_def ;        else if (cnt_byte >= 4'h1 && cnt_byte <= 4'h8)         begin            rsr[0]  <= rxd2 ;            rsr[7:1]<= rsr[6:0] ;            parity  <= parity ^ rxd2 ;        end        else if (cnt_byte == 4'h9)        begin            rbr     <= rsr ;            framing_error <= rxd2 ;            parity_error  <= parity^rxd2;        end    endendendmodule

⌨️ 快捷键说明

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