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

📄 tb_uart_driver.v

📁 32位单精度浮点加法器
💻 V
字号:
//-----------------------------------------------------------------------------//  //  Copyright (c) 2009 Xilinx Inc.////  Project  : Programmable Wave Generator//  Module   : tb_uart_driver.v//  Parent   : tb_uart_rx//  Children : none////  Description: //    This testbench module generates serial data. It is essentially//    a behavioral implementation of a UART transmitter, sending one character//    at a time (when invoked through one of its tasks), at a specified bit//    period. The character is sent using the RS232 protocol; START, 8 data//    bits (LSbit first), STOP.////  Parameters: ////  Tasks://    send_char_bitper : Sends a character at the specified bit period//                       (in NANOSECONDS)//    set_bitper       : Sets the default bit period in NANOSECONDS//    send_char        : Sends a character at the default bit period//    send_char_push   : Sends a character at the default bit period, and//                       pushes the character into the data FIFO////  Functions:////  Internal variables://    reg [63:0]   bit_period//    ////  Notes       : //    ////  Multicycle and False Paths//    None - this is a testbench file only, and is not intended for synthesis//// All times in this testbench are expressed in units of nanoseconds, with a // precision of 1ps increments`timescale 1ns/1psmodule tb_uart_driver (  output      data_out       // Transmitted serial data);//***************************************************************************// Parameter definitions//***************************************************************************  parameter BAUD_RATE = 57_600; // This is the default bit rate - can be                                // overridden by "set_bitper"//***************************************************************************// Register declarations//***************************************************************************    // bit_period is 1/BAUD_RATE, but needs to be in ns (not seconds), so   // we multiply by 1e9. We need to round  reg  [63:0]       bit_period = (1_000_000_000 + BAUD_RATE/2) /BAUD_RATE;   reg               data_out_reg = 1'b1;//***************************************************************************// Tasks//***************************************************************************  // The bit period is in nanoseconds since you can't pass a real to a task  task set_bitper;    input [63:0] new_bit_per;  begin    bit_period = new_bit_per;  end  endtask  task send_char_bitper (    input [7:0]  char,    input [63:0] bit_per  );    integer      i;  begin    $display ("%t       Sending character %x (%c)",$realtime, char,char);    data_out_reg = 1'b0; // send start bit    #(bit_per);    for (i=0; i<=7; i=i+1)    begin      data_out_reg = char[i];      #(bit_per);    end    data_out_reg = 1'b1; // send stop bit    #(bit_per);  end  endtask  task send_char (    input [7:0]  char  );  begin    send_char_bitper(char,bit_period);  end  endtask  task send_char_push (    input [7:0] char  );  begin    tb.tb_char_fifo_i0.push(char);    send_char(char);  end  endtask//***************************************************************************// Code//***************************************************************************  assign data_out = data_out_reg;endmodule

⌨️ 快捷键说明

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