OpenCores
URL https://opencores.org/ocsvn/sata_phy/sata_phy/trunk

Subversion Repositories sata_phy

[/] [sata_phy/] [trunk/] [hdl/] [mux.v] - Rev 9

Compare with Previous | Blame | View Log

////////////////////////////////////////////////////////////
//
// This confidential and proprietary software may be used
// only as authorized by a licensing agreement from
// Bean Digital Ltd
// In the event of publication, the following notice is
// applicable:
//
// (C)COPYRIGHT 2009 BEAN DIGITAL LTD.
// ALL RIGHTS RESERVED
//
// The entire notice above must be reproduced on all
// authorized copies.
//
// File        : mux.v
// Author      : J.Bean
// Date        : Sep 2009
// Description : Multiplexer
////////////////////////////////////////////////////////////
 
`resetall
`timescale 1ns/10ps
 
module mux
  #(parameter DATA_BITS  = 16,                // Data bits
    parameter IP_NUM     = 4,                 // Number of inputs
    parameter USE_OP_REG = 0)(                // Enable Register on Output 
  input  wire                        clk,     // Clock
  input  wire [IP_NUM*DATA_BITS-1:0] data_i,  // Data Input
  input  wire [7:0]                  sel_i,   // Input Select
  output wire [DATA_BITS-1:0]        data_o   // Data Output
);
 
////////////////////////////////////////////////////////////
// Signals
//////////////////////////////////////////////////////////// 
 
genvar i;
reg  [DATA_BITS-1:0] ip_array [0:IP_NUM-1];
wire [DATA_BITS-1:0] data_c;
reg  [DATA_BITS-1:0] data_r;
 
////////////////////////////////////////////////////////////
// Comb Assign : Data Output
// Description : 
////////////////////////////////////////////////////////////
 
assign data_o = (USE_OP_REG == 1) ? data_r : data_c;
 
////////////////////////////////////////////////////////////
// Comb Assign : Data Comb
// Description : Assign an input vector from the array.
////////////////////////////////////////////////////////////
 
assign data_c = ip_array[sel_i];
 
////////////////////////////////////////////////////////////
// Generate    : Input array
// Description : Create an array of input vectors.
////////////////////////////////////////////////////////////
 
generate
  for(i=0; i<IP_NUM; i=i+1) begin: mux_gen  
    always @(*)
    begin
      ip_array[i] = data_i[(i+1)*DATA_BITS-1:i*DATA_BITS];
    end
  end
endgenerate
 
////////////////////////////////////////////////////////////
// Seq Block   : Data Registered
// Description : 
// Assign an input vector from the array.
////////////////////////////////////////////////////////////
 
always @(posedge clk)
begin
  data_r <= ip_array[sel_i];
end
 
endmodule

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.