OpenCores
URL https://opencores.org/ocsvn/1g_ethernet_dpi/1g_ethernet_dpi/trunk

Subversion Repositories 1g_ethernet_dpi

[/] [1g_ethernet_dpi/] [tags/] [vmblite_base/] [hw/] [src/] [tb/] [uart_rx_if.sv] - Rev 7

Compare with Previous | Blame | View Log

//////////////////////////////////////////////////////////////////////////////////
// Company:          
// Engineer:        IK
// 
// Create Date:     11:35:01 03/21/2013 
// Design Name:     
// Module Name:     uart_rx_if
// Project Name:    
// Target Devices:  
// Tool versions:   
// Description:     
//                  
//                  
// Revision: 
// Revision 0.01 - File Created, {8N1}-cfg
//
//////////////////////////////////////////////////////////////////////////////////
`timescale 1ns / 1ps

interface uart_rx_if
(
    input   i_rxd
);
//////////////////////////////////////////////////////////////////////////////////
//
typedef struct {
    int speed_bod;
    int speed_ns;
    int speed_ns_half;
} cfg_t;
//////////////////////////////////////////////////////////////////////////////////
    // RXD
    bit [ 7:0]  sv_rxd;
    // ??
    cfg_t   sv_cfg;
    
//////////////////////////////////////////////////////////////////////////////////
//
task init(input int ii_speed=115_200);
    // 
    sv_rxd = 0;
    // 
    sv_cfg.speed_bod = ii_speed;
    sv_cfg.speed_ns  = (10**9)/ii_speed;
    sv_cfg.speed_ns_half = sv_cfg.speed_ns/2;
    
    // Final
endtask : init

task rxd;
    // dec vars
    bit s_done;
    // wait
    @(negedge i_rxd);
    // Data framing
    s_done = 0;
    for (int i = 0 ; i < 1+8+1; i++) // => sta+[0:7]+stp
        begin   :   DFRAME
            case(i)
                // START
                0   :   begin
                            #(sv_cfg.speed_ns_half*1ns);
                            if (i_rxd) // must be LOW
                                break; //   exit-loop
                        end
                // STOP
                9   :   begin
                            #(sv_cfg.speed_ns*1ns);
                            if (i_rxd) // must be HIGH
                                s_done = 1;
                        end
                // DATA
                default :   begin
                                #(sv_cfg.speed_ns*1ns);
                                sv_rxd[i-1] = i_rxd;
                            end
            endcase
        end
    //
    if (s_done)
        $display("[%t]: %m: rxd=%x / %c", $time, sv_rxd, (sv_rxd == 8'h0a)? " " : sv_rxd);
    else
        $display("[%t]: %m: rx-err", $time);
    // Final
endtask : rxd
//////////////////////////////////////////////////////////////////////////////////
endinterface : uart_rx_if

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.