📄 uart_rx.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 + -