libero Simulate - ModelSim ME 仿真 串口数据处理模块

//////////////////////////////////////////////////////////////////////
// Created by Microsemi SmartDesign Fri Apr 24 14:20:16 2026
// Testbench Template
// This is a basic testbench that instantiates your design with basic 
// clock and reset pins connected.  If your design has special
// clock/reset or testbench driver requirements then you should 
// copy this file and modify it. 
//////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////
// Company: <Name>
//
// File: uart_rx_testbench.v
// File history:
//      <Revision number>: <Date>: <Comments>
//      <Revision number>: <Date>: <Comments>
//      <Revision number>: <Date>: <Comments>
//
// Description: 
//
// <Description here>
//
// Targeted device: <Family::ProASIC3> <Die::A3P250> <Package::100 VQFP>
// Author: <Name>
//
/////////////////////////////////////////////////////////////////////////////////////////////////// 

`timescale 1ns/100ps

module uart_rx_testbench;

parameter SYSCLK_PERIOD = 25;// 40MHZ

reg SYSCLK;
reg NSYSRESET;

initial
begin
    SYSCLK = 1'b0;
    NSYSRESET = 1'b0;
end

//////////////////////////////////////////////////////////////////////
// Reset Pulse
//////////////////////////////////////////////////////////////////////
initial
begin
    #(SYSCLK_PERIOD * 1 )
        NSYSRESET = 1'b1;
end


//////////////////////////////////////////////////////////////////////
// Clock Driver
//////////////////////////////////////////////////////////////////////
always @(SYSCLK)
    #(SYSCLK_PERIOD / 2.0) SYSCLK <= !SYSCLK;


// sysclk 计数 方便观察时序
reg [31:0] clk_cnt;
always @(posedge SYSCLK or negedge NSYSRESET) begin
    if( !NSYSRESET ) begin
        clk_cnt <= 32'b0;
    end else begin
        clk_cnt <= clk_cnt + 32'b1;
    end
end

// 常用宏定义
// i_ input 信号
// o_ output 信号
// r_ reg  信号
// w_ wire 信号
// t_ trigger 信号
parameter TRUE  = 1'b1;
parameter FALSE = 1'b0;

// 测试串口接收处理模块

wire w_rx_oen;
reg [7:0] r_rx_data;
reg r_rx_ready;

uart_rx uart_rx_0
(
    .clk_40mhz(SYSCLK), // 时钟和复位信号 都是输入信号,因此不加 i_
    .rst_n(NSYSRESET),

    // UART RX
    // 低电平将 DATA_OUT 读入, 将  RXRDY 和 所有错误复位 ,溢出和校验错误 复位
    .o_rx_oen(w_rx_oen),
     // 输出数据总线 位宽 [7:0]
    .i_rx_data(r_rx_data),
    // 0= RX FIFO 空, 1= 可读取
    .i_rx_ready(r_rx_ready)

);


// 编写串口数据
reg [7:0] tx_cnt;
always @(posedge SYSCLK or negedge NSYSRESET) begin
    if( !NSYSRESET ) begin
        r_rx_data <= 8'd0;
        r_rx_ready <= FALSE;
        tx_cnt <= 8'd0;
    end else begin
        tx_cnt <= tx_cnt + 8'd1;

        case(tx_cnt)
            0: begin
                r_rx_data <= 8'hEC;
                r_rx_ready <= TRUE;
            end
            1: begin
                r_rx_ready <= FALSE;
            end
            2: begin
                r_rx_data <= 8'h91;
                r_rx_ready <= TRUE;
            end
            3: begin
                r_rx_ready <= FALSE;
            end
            4: begin
                r_rx_data <= 8'h00;
                r_rx_ready <= TRUE;
            end
            5: begin
                r_rx_ready <= FALSE;
            end
            6: begin
                r_rx_data <= 8'h07;
                r_rx_ready <= TRUE;
            end
            7: begin
                r_rx_ready <= FALSE;
            end
            8: begin
                r_rx_data <= 8'h01;
                r_rx_ready <= TRUE;
            end
            9: begin
                r_rx_ready <= FALSE;
            end
            10: begin
                r_rx_data <= 8'hF2;
                r_rx_ready <= TRUE;
            end
            11: begin
                r_rx_ready <= FALSE;
            end
            12: begin
                r_rx_data <= 8'h23;
                r_rx_ready <= TRUE;
            end
            13: begin
                r_rx_ready <= FALSE;
            end
            default: begin
                r_rx_ready <= FALSE;
            end
        endcase

    end
end

endmodule

image

 

posted on 2026-04-24 17:24  所长  阅读(23)  评论(0)    收藏  举报

导航