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

📄 uart_top.v.bak

📁 实现FPGA与PC机的串口通信功能
💻 BAK
字号:
/******************************************************************************* File:    uart_tb.v* Version: V0.0* Author:  minjingguo <jingguo.min@shhic.com>* Date:    20070816* Company: SHHIC Co., Ltd.******************************************************************************* Description:* to transmit 8 bits and receive 8 bits for one cycle time******************************************************************************** Version: V0.1* Modifier: name <email>* Date:* Description: the signal clk16x is needed to gobal time constrait******************************************************************************/// *************************// INCLUDES// ************************* // *************************    // MODULE DEFINTION//**************************module  uart    (    //INPUTS    wr      ,   //the wr=1 width > one cycle of clk, to start transmit    rst     ,   //rst = 0 for reset module    clk     ,   //input clock    rd      ,   //the rd=1 width > one cycle of clk, to start receive    rxd     ,   //the data receive from the wire         data_in ,   //the data for transmit    parity_def, //the parity pre-define,0 or 1    //OUTPUTS    int     ,       txd     ,   //the transmit wire    dat_rdy ,   //when dat_rdy = 0 for receive is idle    tbre    ,   //when tbre = 0 for transmit is idle    framing_error,//framing_error default value = 0    parity_error,//parity_error default value =0. it is error when parity_error is not equal to framing_error,    data_out     //the receive data    );    // *************************// INPUTS// *************************input           clk         ;input           rst         ;input           rxd         ;input           wr,rd       ;input           parity_def  ;input     [7:0] data_in     ;// *************************// OUTPUTS // *************************output          int          ;output          txd          ;output          dat_rdy      ;output          tbre         ;output          framing_error;output          parity_error ;output    [7:0] data_out     ;// *************************// INTERNAL SIGNALS// *************************reg     [8:0]   clkdiv_cnt   ;reg             clk16x       ;// **************************************************//---------------setup baud rate---------------------// **************************************************always @(posedge clk or negedge rst)begin    if (rst== 1'h0)       clkdiv_cnt  <= 9'b0;    else if (clkdiv_cnt==26)         //baud rate=115.75 k   and pc's baud rate=115.2k//     if (clkdiv_cnt==325);       clkdiv_cnt  <= 9'b0;    else       clkdiv_cnt  <= clkdiv_cnt+1;endalways @(posedge clk or negedge rst)begin    if (rst== 1'h0)        clk16x  <= 1'b0;               else if (clkdiv_cnt==13)  //clk16x ~ 1852k        clk16x  <= 1'b1;    else if (clkdiv_cnt==26)        clk16x  <= 1'b0;end reg clk16x_b1;reg	[1:0]	wr_pls,rd_pls;always @(posedge clk) clk16x_b1 <= clk16x;wire clk16x_nege = ~clk16x & clk16x_b1;// **************************************************//--------------------receive---------------------// **************************************************always @(posedge clk or negedge rst)begin    if (rst== 1'h0)      rd_pls  <= 2'h0;    else if (rd)      rd_pls  <= 2'h1;    else if (rd_pls==2'h1 && clk16x_nege)      rd_pls  <= 2'h3;    else if (rd_pls==2'h3 && clk16x_nege)      rd_pls  <= 2'h0;endalways @(posedge clk or negedge rst)begin    if (rst== 1'h0)      wr_pls  <= 2'h0;    else if (wr)      wr_pls  <= 2'h1;    else if (wr_pls==2'h1 && clk16x_nege)      wr_pls  <= 2'h3;    else if (wr_pls==2'h3 && clk16x_nege)      wr_pls  <= 2'h0;end       //Assert interrupt if transmitting or rcving completereg tbre_b1, dat_rdy_b1;always @(posedge clk) begin    tbre_b1 <= tbre;    dat_rdy_b1 <= dat_rdy;endassign int = ((~tbre & tbre_b1) || (~dat_rdy_b1 & dat_rdy));// *************************// SUBMODULE INSTANTIATION// *************************uart_tx     U_TX    (    //INPUT    .rst     (rst       ),    .clk16x  (clk16x    ),    .din     (data_in   ),    .wr      (wr_pls[1] ),    .parity_def(parity_def),    //OUTPUT    .tbre    (tbre      ),    .sdo     (txd       )    );    uart_rx     U_RX    (    //INPUTS    .rst     (rst         ),    .clk16x  (clk16x      ),    .rd      (rd_pls[1]   ),    .rxd     (rxd         ),    .parity_def(parity_def),                            //OUTPUT                .dout    (data_out  ),    .dat_rdy (dat_rdy   ),    .framing_error(framing_error),    .parity_error (parity_error )       );endmodule

⌨️ 快捷键说明

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