OpenCores
URL https://opencores.org/ocsvn/usb_ft232h_avalon-mm_interface/usb_ft232h_avalon-mm_interface/trunk

Subversion Repositories usb_ft232h_avalon-mm_interface

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 4 to Rev 5
    Reverse comparison

Rev 4 → Rev 5

/usb_ft232h_avalon-mm_interface/trunk/hw/usb_ft232h.sv
3,301 → 3,420
* не придет следующий пакет
*/
 
`define WRDATA_ADDR 0
`define RDDATA_ADDR 1
`define TXSTATUSL_ADDR 2
`define TXSTATUSH_ADDR 3
`define RXSTATUSL_ADDR 4
`define RXSTATUSH_ADDR 5
 
module usb_ft232h (
//Avalon-MM Slave
clk,
reset,
address,
read,
readdata,
write,
writedata,
clk_i,
reset_i,
address_i,
read_i,
readdata_o,
write_i,
writedata_i,
 
//FT232H
usb_clk,
usb_data,
usb_rxf_n,
usb_txe_n,
usb_rd_n,
usb_wr_n,
usb_oe_n
usb_clk_i,
usb_data_io,
usb_rxf_n_i,
usb_txe_n_i,
usb_rd_n_o,
usb_wr_n_o,
usb_oe_n_o
);
 
parameter FIFO_DEPTH = 512;
parameter FIFO_WIDTHU = 9;
parameter TX_FIFO_DEPTH = 512;
parameter TX_FIFO_WIDTHU = 9;
parameter RX_FIFO_DEPTH = 512;
parameter RX_FIFO_WIDTHU = 9;
 
localparam WRDATA_ADDR = 4'd0;
localparam RDDATA_ADDR = 4'd1;
localparam TXSTATUSL_ADDR = 4'd2;
localparam TXSTATUSH_ADDR = 4'd3;
localparam RXSTATUSL_ADDR = 4'd4;
localparam RXSTATUSH_ADDR = 4'd5;
 
input logic clk;
input logic reset;
input logic [3:0]address;
input logic read;
output logic [7:0]readdata;
input logic write;
input logic [7:0]writedata;
 
input logic usb_clk;
inout logic [7:0]usb_data;
input logic usb_rxf_n;
input logic usb_txe_n;
output logic usb_rd_n;
output logic usb_wr_n;
output logic usb_oe_n;
input logic clk_i;
input logic reset_i;
input logic [3:0] address_i;
input logic read_i;
output logic [7:0] readdata_o;
input logic write_i;
input logic [7:0] writedata_i;
 
input logic usb_clk_i;
inout logic [7:0] usb_data_io;
input logic usb_rxf_n_i;
input logic usb_txe_n_i;
output logic usb_rd_n_o;
output logic usb_wr_n_o;
output logic usb_oe_n_o;
 
logic [15:0]txstatus;
logic [15:0]rxstatus;
 
logic [3:0]addr;
reg reg_usb_rd_n;
reg reg_usb_oe_n;
reg reg_usb_wr_n;
reg reg_rxf_wrreq;
reg reg_txf_rdreq;
reg error;
 
reg error;
reg rxerror;
reg [7:0] rxerrdata;
logic [15:0] txstatus;
logic [15:0] rxstatus;
 
logic [7:0]txf_wrdata;
logic txf_wrclk;
logic txf_wrreq;
logic txf_wrfull;
logic [FIFO_WIDTHU-1:0]txf_wrusedw;
logic txf_rdclk;
logic txf_rdreq;
logic [7:0]txf_rddata;
logic txf_rdempty;
reg read_pipe;
reg read_pipe2;
 
logic [7:0]rxf_wrdata;
logic rxf_wrclk;
logic rxf_wrreq;
logic rxf_wrfull;
logic [FIFO_WIDTHU-1:0]rxf_rdusedw;
logic rxf_rdclk;
logic rxf_rdreq;
logic [7:0]rxf_rddata;
logic rxf_rdempty;
logic rxf_rdfull;
reg adr_data;
reg adr_txsl;
reg adr_txsh;
reg adr_rxsl;
reg adr_rxsh;
 
 
logic [7:0] txf_wrdata;
logic txf_wrclk;
logic txf_wrreq;
logic txf_wrfull;
logic [TX_FIFO_WIDTHU-1:0] txf_wrusedw;
logic txf_rdclk;
logic txf_rdreq;
logic [7:0] txf_rddata;
logic txf_rdempty;
 
assign usb_data = usb_oe_n ? txf_rddata : {8{1'bZ}};
assign rxf_wrdata = usb_oe_n ? 8'b0 : usb_data;
logic [7:0] rxf_wrdata;
logic rxf_wrclk;
logic rxf_wrreq;
logic rxf_wrfull;
logic [RX_FIFO_WIDTHU-1:0] rxf_rdusedw;
logic rxf_rdclk;
logic rxf_rdreq;
logic [7:0] rxf_rddata;
logic rxf_rdempty;
logic rxf_rdfull;
 
assign usb_oe_n = (~usb_rxf_n & ~rxf_wrfull) ? reg_usb_oe_n : 1'b1;
assign usb_rd_n = (~usb_rxf_n & ~rxf_wrfull) ? reg_usb_rd_n : 1'b1;
assign usb_wr_n = (usb_oe_n & ~usb_txe_n) ? reg_usb_wr_n : 1'b1;
assign rxf_wrreq = (~usb_rxf_n & ~rxf_wrfull) ? reg_rxf_wrreq : 1'b0;
assign txf_rdreq = (reg_txf_rdreq & (~error));
 
assign txstatus[15] = ~txf_wrfull; //can write
assign txstatus[14:FIFO_WIDTHU+1] = 0;
assign txstatus[FIFO_WIDTHU] = txf_wrfull;
assign txstatus[FIFO_WIDTHU-1:0] = txf_wrusedw;
assign usb_data_io = ( usb_oe_n_o ) ? ( txf_rddata ) : ( {8{1'bZ}} );
 
assign rxstatus[15] = ~rxf_rdempty; //can read
assign rxstatus[14:FIFO_WIDTHU+1] = 0;
assign rxstatus[FIFO_WIDTHU] = rxf_rdfull;
assign rxstatus[FIFO_WIDTHU-1:0] = rxf_rdusedw;
assign rxf_wrclk = ~usb_clk_i;
assign txf_rdclk = usb_clk_i;
assign rxf_rdclk = clk_i;
assign txf_wrclk = ~clk_i;
 
assign txf_wrclk = ~clk;
assign txf_wrreq = (~txf_wrfull & (address == `WRDATA_ADDR)) ? write : 0;
assign txf_wrdata = writedata;
assign txf_rdclk = usb_clk;
assign txstatus[15] = ~txf_wrfull; //can write
assign txstatus[14:TX_FIFO_WIDTHU+1] = 0;
assign txstatus[TX_FIFO_WIDTHU] = txf_wrfull;
assign txstatus[TX_FIFO_WIDTHU-1:0] = ( txf_wrfull ? {TX_FIFO_WIDTHU{1'b0}} : txf_wrusedw );
 
assign rxf_wrclk = usb_clk;
assign rxf_rdclk = ~clk;
assign rxf_rdreq = (address == `RDDATA_ADDR) ? read : 0;
assign rxstatus[15] = ~rxf_rdempty; //can read
assign rxstatus[14:RX_FIFO_WIDTHU+1] = 0;
assign rxstatus[RX_FIFO_WIDTHU] = rxf_rdfull;
assign rxstatus[RX_FIFO_WIDTHU-1:0] = ( rxf_rdempty ? {RX_FIFO_WIDTHU{1'b0}} : rxf_rdusedw );
 
 
dcfifo txfifo (
.aclr (reset),
.data (txf_wrdata),
.rdclk (txf_rdclk),
.rdreq (txf_rdreq),
.wrclk (txf_wrclk),
.wrreq (txf_wrreq),
.q (txf_rddata),
.rdempty (txf_rdempty),
.wrfull (txf_wrfull),
.wrusedw (txf_wrusedw),
.aclr ( reset_i ),
.data ( txf_wrdata ),
.rdclk ( txf_rdclk ),
.rdreq ( txf_rdreq ),
.wrclk ( txf_wrclk ),
.wrreq ( txf_wrreq ),
.q ( txf_rddata ),
.rdempty ( txf_rdempty ),
.wrfull ( txf_wrfull ),
.wrusedw ( txf_wrusedw ),
.eccstatus (),
.rdfull (),
.rdusedw (),
.wrempty ());
.rdfull (),
.rdusedw (),
.wrempty ());
defparam
txfifo.intended_device_family = "Cyclone IV E",
txfifo.lpm_numwords = FIFO_DEPTH,
txfifo.lpm_numwords = TX_FIFO_DEPTH,
txfifo.lpm_showahead = "OFF",
txfifo.lpm_type = "dcfifo",
txfifo.lpm_width = 8,
txfifo.lpm_widthu = FIFO_WIDTHU,
txfifo.lpm_widthu = TX_FIFO_WIDTHU,
txfifo.overflow_checking = "ON",
txfifo.rdsync_delaypipe = 4,
txfifo.read_aclr_synch = "OFF",
txfifo.rdsync_delaypipe = 11,
txfifo.read_aclr_synch = "ON",
txfifo.underflow_checking = "ON",
txfifo.use_eab = "ON",
txfifo.write_aclr_synch = "OFF",
txfifo.wrsync_delaypipe = 4;
txfifo.write_aclr_synch = "ON",
txfifo.wrsync_delaypipe = 11;
 
dcfifo rxfifo (
.aclr (reset),
.data (rxf_wrdata),
.rdclk (rxf_rdclk),
.rdreq (rxf_rdreq),
.wrclk (rxf_wrclk),
.wrreq (rxf_wrreq),
.q (rxf_rddata),
.rdempty (rxf_rdempty),
.wrfull (rxf_wrfull),
.wrusedw (),
.aclr ( reset_i ),
.data ( rxf_wrdata ),
.rdclk ( rxf_rdclk ),
.rdreq ( rxf_rdreq ),
.wrclk ( rxf_wrclk ),
.wrreq ( rxf_wrreq ),
.q ( rxf_rddata ),
.rdempty ( rxf_rdempty ),
.wrfull ( rxf_wrfull ),
.wrusedw (),
.eccstatus (),
.rdfull (rxf_rdfull),
.rdusedw (rxf_rdusedw),
.wrempty ());
.rdfull ( rxf_rdfull ),
.rdusedw ( rxf_rdusedw ),
.wrempty ());
defparam
rxfifo.intended_device_family = "Cyclone IV E",
rxfifo.lpm_numwords = FIFO_DEPTH,
rxfifo.lpm_numwords = RX_FIFO_DEPTH,
rxfifo.lpm_showahead = "OFF",
rxfifo.lpm_type = "dcfifo",
rxfifo.lpm_width = 8,
rxfifo.lpm_widthu = FIFO_WIDTHU,
rxfifo.lpm_widthu = RX_FIFO_WIDTHU,
rxfifo.overflow_checking = "ON",
rxfifo.rdsync_delaypipe = 4,
rxfifo.read_aclr_synch = "OFF",
rxfifo.rdsync_delaypipe = 11,
rxfifo.read_aclr_synch = "ON",
rxfifo.underflow_checking = "ON",
rxfifo.use_eab = "ON",
rxfifo.write_aclr_synch = "OFF",
rxfifo.wrsync_delaypipe = 4;
 
rxfifo.write_aclr_synch = "ON",
rxfifo.wrsync_delaypipe = 11;
 
always_ff @(negedge clk)
 
/* read usb data to rx fifo */
always_ff @( negedge rxf_wrclk or posedge reset_i )
begin
if(read)
addr <= address;
if( reset_i )
begin
rxf_wrreq <= 1'b0;
rxf_wrdata <= 8'b0;
rxerror <= 1'b0;
rxerrdata <= 8'b0;
end
else
begin
if( ~usb_rd_n_o & rxf_wrfull )
begin
rxerror <= 1'b1;
rxerrdata <= usb_data_io;
end
if( ~rxf_wrfull & ((~usb_rd_n_o & ~usb_rxf_n_i) | rxerror) )
begin
rxf_wrreq <= 1'b1;
if( rxerror )
begin
rxerror <= 1'b0;
rxf_wrdata <= rxerrdata;
end
else
rxf_wrdata <= usb_data_io;
end
else
begin
rxf_wrreq <= 1'b0;
end
end
end
always_ff @(posedge clk)
always_ff @( posedge usb_clk_i or posedge reset_i )
begin
case(addr)
`RDDATA_ADDR: begin
readdata <= rxf_rddata;
end
`TXSTATUSL_ADDR: begin
readdata <= txstatus[7:0];
end
`TXSTATUSH_ADDR: begin
readdata <= txstatus[15:8];
end
`RXSTATUSL_ADDR: begin
readdata <= rxstatus[7:0];
end
`RXSTATUSH_ADDR: begin
readdata <= rxstatus[15:8];
end
default: begin
readdata <= 8'b0;
end
endcase
if( reset_i )
begin
usb_oe_n_o <= 1'b1;
usb_rd_n_o <= 1'b1;
end
else
begin
if( ~usb_rxf_n_i & ~rxf_wrfull & ( usb_txe_n_i | ( ~txf_rdreq & ~error )) & ~rxerror )
begin
usb_oe_n_o <= 1'b0;
if( ~usb_oe_n_o )
usb_rd_n_o <= 1'b0;
end
else
begin
usb_oe_n_o <= 1'b1;
usb_rd_n_o <= 1'b1;
end
end
end
 
always_ff @(negedge txf_rdclk or posedge reset)
/*---------------------------------*/
 
/* write tx fifo data to usb */
always_ff @( negedge txf_rdclk or posedge reset_i )
begin
if(reset)
begin
reg_txf_rdreq <= 1'b0;
error <= 1'b0;
end
else
begin
if(usb_oe_n & (~txf_rdempty | error) & ~usb_txe_n)
begin
reg_txf_rdreq <= 1'b1;
end
if( reset_i )
begin
txf_rdreq <= 1'b0;
end
else
begin
if( ~usb_txe_n_i & ~txf_rdempty & ~error & usb_oe_n_o )
begin
txf_rdreq <= 1'b1;
end
else
begin
reg_txf_rdreq <= 1'b0;
end
if(reg_txf_rdreq)
begin
if(usb_txe_n)
error <= 1'b1;
else
error <= 1'b0;
end
end
txf_rdreq <= 1'b0;
end
end
always_ff @( posedge usb_clk_i or posedge reset_i )
begin
if( reset_i )
begin
usb_wr_n_o <= 1'b1;
error <= 1'b0;
end
else
begin
if( usb_txe_n_i & ~usb_wr_n_o )
begin
error <= 1'b1;
end
if( ~usb_txe_n_i & ( txf_rdreq | error ) & usb_oe_n_o )
begin
usb_wr_n_o <= 1'b0;
if( error )
error <= 1'b0;
end
else
begin
usb_wr_n_o <= 1'b1;
end
end
end
/*-----------------------------*/
 
always_ff @(posedge usb_clk or posedge reset)
 
/* avalon data to tx fifo*/
always_ff @( negedge txf_wrclk or posedge reset_i )
begin
if(reset)
begin
reg_usb_wr_n <= 1'b1;
end
else
begin
if(reg_txf_rdreq)
begin
reg_usb_wr_n <= 1'b0;
end
if( reset_i )
begin
txf_wrreq <= 1'b0;
txf_wrdata <= 8'b0;
end
else
begin
if( write_i & ( address_i == WRDATA_ADDR ) & ~txf_wrfull )
begin
txf_wrreq <= 1'b1;
txf_wrdata <= writedata_i;
end
else
reg_usb_wr_n <= 1'b1;
end
begin
txf_wrreq <= 1'b0;
end
end
end
/*------------------------------------*/
 
always_ff @(posedge usb_clk or posedge reset)
/* rx fifo data to avalon */
always_ff @( posedge clk_i or posedge reset_i )
begin
if(reset)
begin
reg_usb_rd_n <= 1'b1;
reg_usb_oe_n <= 1'b1;
end
else
begin
if((txf_rdempty | usb_txe_n | ~usb_oe_n) & ~rxf_wrfull & ~usb_rxf_n)
begin
reg_usb_oe_n <= 1'b0;
if(~reg_usb_oe_n)
begin
reg_usb_rd_n <= 1'b0;
end
else
begin
reg_usb_rd_n <= 1'b1;
end
end
if( reset_i )
begin
adr_data <= 1'b0;
adr_txsl <= 1'b0;
adr_txsh <= 1'b0;
adr_rxsl <= 1'b0;
adr_rxsh <= 1'b0;
end
else
begin
if( read_i )
begin
if( address_i == RDDATA_ADDR )
adr_data <= 1'b1;
else
adr_data <= 1'b0;
if( address_i == TXSTATUSL_ADDR )
adr_txsl <= 1'b1;
else
adr_txsl <= 1'b0;
if( address_i == TXSTATUSH_ADDR )
adr_txsh <= 1'b1;
else
adr_txsh <= 1'b0;
if( address_i == RXSTATUSL_ADDR )
adr_rxsl <= 1'b1;
else
adr_rxsl <= 1'b0;
if( address_i == RXSTATUSH_ADDR )
adr_rxsh <= 1'b1;
else
adr_rxsh <= 1'b0;
end
end
end
 
always_ff @( posedge clk_i or posedge reset_i )
begin
if( reset_i )
begin
read_pipe <= 1'b0;
end
else
begin
if( read_i )
read_pipe <= 1'b1;
else
begin
reg_usb_oe_n <= 1'b1;
reg_usb_rd_n <= 1'b1;
end
end
read_pipe <= 1'b0;
end
end
 
always_ff @(negedge rxf_wrclk or posedge reset)
always_ff @( negedge rxf_rdclk or posedge reset_i )
begin
if(reset)
begin
reg_rxf_wrreq <= 1'b0;
end
else
begin
if(~usb_rd_n & ~usb_rxf_n)
reg_rxf_wrreq <= 1'b1;
if( reset_i )
begin
rxf_rdreq <= 1'b0;
end
else
begin
if( read_pipe & adr_data & ~rxf_rdempty )
rxf_rdreq <= 1'b1;
else
reg_rxf_wrreq <= 1'b0;
end
rxf_rdreq <= 1'b0;
end
end
 
always_ff @( posedge clk_i or posedge reset_i )
begin
if( reset_i )
begin
read_pipe2 <= 1'b0;
end
else
begin
if( read_pipe )
read_pipe2 <= 1'b1;
else
read_pipe2 <= 1'b0;
end
end
 
always_ff @( posedge clk_i or posedge reset_i )
begin
if( reset_i )
begin
readdata_o <= 8'b0;
end
else
begin
if( read_pipe2 )
begin
if( adr_data )
readdata_o <= rxf_rddata;
else if( adr_txsl )
readdata_o <= txstatus[7:0];
else if( adr_txsh )
readdata_o <= txstatus[15:8];
else if( adr_rxsl )
readdata_o <= rxstatus[7:0];
else if( adr_rxsh )
readdata_o <= rxstatus[15:8];
else
readdata_o <= 8'b0;
end
end
end
/*------------------------------------*/
 
 
endmodule
/usb_ft232h_avalon-mm_interface/trunk/hw/usb_ft232h_hw.tcl
1,26 → 1,26
# TCL File Generated by Component Editor 15.1
# Tue May 31 16:12:41 BRT 2016
# TCL File Generated by Component Editor 16.0
# Wed Dec 07 11:31:54 BRT 2016
# DO NOT MODIFY
 
 
#
# usb_ft232h "USB FT232H" v1.0
# Dmitry Elmanov 2016.05.31.16:12:41
# USB FT232H Avalon-MM core
# usb_ft232h "USB FT232H" v1.3
# Dmitry Elmanov 2016.12.07.11:31:54
#
#
 
#
# request TCL package from ACDS 15.1
# request TCL package from ACDS 16.0
#
package require -exact qsys 15.1
package require -exact qsys 16.0
 
 
#
# module usb_ft232h
#
set_module_property DESCRIPTION "USB FT232H Avalon-MM core"
set_module_property DESCRIPTION ""
set_module_property NAME usb_ft232h
set_module_property VERSION 1.0
set_module_property VERSION 1.3
set_module_property INTERNAL false
set_module_property OPAQUE_ADDRESS_MAP true
set_module_property GROUP USB
46,22 → 46,34
#
# parameters
#
add_parameter FIFO_DEPTH INTEGER 512 ""
set_parameter_property FIFO_DEPTH DEFAULT_VALUE 512
set_parameter_property FIFO_DEPTH DISPLAY_NAME FIFO_DEPTH
set_parameter_property FIFO_DEPTH TYPE INTEGER
set_parameter_property FIFO_DEPTH UNITS None
set_parameter_property FIFO_DEPTH ALLOWED_RANGES -2147483648:2147483647
set_parameter_property FIFO_DEPTH DESCRIPTION ""
set_parameter_property FIFO_DEPTH HDL_PARAMETER true
add_parameter FIFO_WIDTHU INTEGER 9 ""
set_parameter_property FIFO_WIDTHU DEFAULT_VALUE 9
set_parameter_property FIFO_WIDTHU DISPLAY_NAME FIFO_WIDTHU
set_parameter_property FIFO_WIDTHU TYPE INTEGER
set_parameter_property FIFO_WIDTHU UNITS None
set_parameter_property FIFO_WIDTHU ALLOWED_RANGES -2147483648:2147483647
set_parameter_property FIFO_WIDTHU DESCRIPTION ""
set_parameter_property FIFO_WIDTHU HDL_PARAMETER true
add_parameter TX_FIFO_DEPTH INTEGER 512
set_parameter_property TX_FIFO_DEPTH DEFAULT_VALUE 512
set_parameter_property TX_FIFO_DEPTH DISPLAY_NAME TX_FIFO_DEPTH
set_parameter_property TX_FIFO_DEPTH TYPE INTEGER
set_parameter_property TX_FIFO_DEPTH UNITS None
set_parameter_property TX_FIFO_DEPTH ALLOWED_RANGES -2147483648:2147483647
set_parameter_property TX_FIFO_DEPTH HDL_PARAMETER true
add_parameter TX_FIFO_WIDTHU INTEGER 9
set_parameter_property TX_FIFO_WIDTHU DEFAULT_VALUE 9
set_parameter_property TX_FIFO_WIDTHU DISPLAY_NAME TX_FIFO_WIDTHU
set_parameter_property TX_FIFO_WIDTHU TYPE INTEGER
set_parameter_property TX_FIFO_WIDTHU UNITS None
set_parameter_property TX_FIFO_WIDTHU ALLOWED_RANGES -2147483648:2147483647
set_parameter_property TX_FIFO_WIDTHU HDL_PARAMETER true
add_parameter RX_FIFO_DEPTH INTEGER 512
set_parameter_property RX_FIFO_DEPTH DEFAULT_VALUE 512
set_parameter_property RX_FIFO_DEPTH DISPLAY_NAME RX_FIFO_DEPTH
set_parameter_property RX_FIFO_DEPTH TYPE INTEGER
set_parameter_property RX_FIFO_DEPTH UNITS None
set_parameter_property RX_FIFO_DEPTH ALLOWED_RANGES -2147483648:2147483647
set_parameter_property RX_FIFO_DEPTH HDL_PARAMETER true
add_parameter RX_FIFO_WIDTHU INTEGER 9
set_parameter_property RX_FIFO_WIDTHU DEFAULT_VALUE 9
set_parameter_property RX_FIFO_WIDTHU DISPLAY_NAME RX_FIFO_WIDTHU
set_parameter_property RX_FIFO_WIDTHU TYPE INTEGER
set_parameter_property RX_FIFO_WIDTHU UNITS None
set_parameter_property RX_FIFO_WIDTHU ALLOWED_RANGES -2147483648:2147483647
set_parameter_property RX_FIFO_WIDTHU HDL_PARAMETER true
 
 
#
70,62 → 82,12
 
 
#
# connection point clock
#
add_interface clock clock end
set_interface_property clock clockRate 0
set_interface_property clock ENABLED true
set_interface_property clock EXPORT_OF ""
set_interface_property clock PORT_NAME_MAP ""
set_interface_property clock CMSIS_SVD_VARIABLES ""
set_interface_property clock SVD_ADDRESS_GROUP ""
 
add_interface_port clock clk clk Input 1
 
 
#
# connection point reset
#
add_interface reset reset end
set_interface_property reset associatedClock clock
set_interface_property reset synchronousEdges DEASSERT
set_interface_property reset ENABLED true
set_interface_property reset EXPORT_OF ""
set_interface_property reset PORT_NAME_MAP ""
set_interface_property reset CMSIS_SVD_VARIABLES ""
set_interface_property reset SVD_ADDRESS_GROUP ""
 
add_interface_port reset reset reset Input 1
 
 
#
# connection point ft232h
#
add_interface ft232h conduit end
set_interface_property ft232h associatedClock clock
set_interface_property ft232h associatedReset reset
set_interface_property ft232h ENABLED true
set_interface_property ft232h EXPORT_OF ""
set_interface_property ft232h PORT_NAME_MAP ""
set_interface_property ft232h CMSIS_SVD_VARIABLES ""
set_interface_property ft232h SVD_ADDRESS_GROUP ""
 
add_interface_port ft232h usb_clk clock Input 1
add_interface_port ft232h usb_oe_n oe_n Output 1
add_interface_port ft232h usb_rd_n rd_n Output 1
add_interface_port ft232h usb_wr_n wr_n Output 1
add_interface_port ft232h usb_rxf_n rxf_n Input 1
add_interface_port ft232h usb_txe_n txe_n Input 1
add_interface_port ft232h usb_data data Bidir 8
 
 
#
# connection point avalon_slave
#
add_interface avalon_slave avalon end
set_interface_property avalon_slave addressUnits SYMBOLS
set_interface_property avalon_slave associatedClock clock
set_interface_property avalon_slave associatedReset reset
set_interface_property avalon_slave associatedClock clock_sink
set_interface_property avalon_slave associatedReset reset_sink
set_interface_property avalon_slave bitsPerSymbol 8
set_interface_property avalon_slave burstOnBurstBoundariesOnly false
set_interface_property avalon_slave burstcountUnits SYMBOLS
134,7 → 96,7
set_interface_property avalon_slave linewrapBursts false
set_interface_property avalon_slave maximumPendingReadTransactions 0
set_interface_property avalon_slave maximumPendingWriteTransactions 0
set_interface_property avalon_slave readLatency 1
set_interface_property avalon_slave readLatency 3
set_interface_property avalon_slave readWaitStates 0
set_interface_property avalon_slave readWaitTime 0
set_interface_property avalon_slave setupTime 0
146,13 → 108,63
set_interface_property avalon_slave CMSIS_SVD_VARIABLES ""
set_interface_property avalon_slave SVD_ADDRESS_GROUP ""
 
add_interface_port avalon_slave address address Input 4
add_interface_port avalon_slave read read Input 1
add_interface_port avalon_slave readdata readdata Output 8
add_interface_port avalon_slave write write Input 1
add_interface_port avalon_slave writedata writedata Input 8
add_interface_port avalon_slave address_i address Input 4
add_interface_port avalon_slave read_i read Input 1
add_interface_port avalon_slave write_i write Input 1
add_interface_port avalon_slave writedata_i writedata Input 8
add_interface_port avalon_slave readdata_o readdata Output 8
set_interface_assignment avalon_slave embeddedsw.configuration.isFlash 0
set_interface_assignment avalon_slave embeddedsw.configuration.isMemoryDevice 0
set_interface_assignment avalon_slave embeddedsw.configuration.isNonVolatileStorage 0
set_interface_assignment avalon_slave embeddedsw.configuration.isPrintableDevice 0
 
 
#
# connection point clock_sink
#
add_interface clock_sink clock end
set_interface_property clock_sink clockRate 0
set_interface_property clock_sink ENABLED true
set_interface_property clock_sink EXPORT_OF ""
set_interface_property clock_sink PORT_NAME_MAP ""
set_interface_property clock_sink CMSIS_SVD_VARIABLES ""
set_interface_property clock_sink SVD_ADDRESS_GROUP ""
 
add_interface_port clock_sink clk_i clk Input 1
 
 
#
# connection point ft232h
#
add_interface ft232h conduit end
set_interface_property ft232h associatedClock clock_sink
set_interface_property ft232h associatedReset reset_sink
set_interface_property ft232h ENABLED true
set_interface_property ft232h EXPORT_OF ""
set_interface_property ft232h PORT_NAME_MAP ""
set_interface_property ft232h CMSIS_SVD_VARIABLES ""
set_interface_property ft232h SVD_ADDRESS_GROUP ""
 
add_interface_port ft232h usb_clk_i usb_clk Input 1
add_interface_port ft232h usb_rxf_n_i usb_rxf_n Input 1
add_interface_port ft232h usb_oe_n_o usb_oe_n Output 1
add_interface_port ft232h usb_wr_n_o usb_wr_n Output 1
add_interface_port ft232h usb_rd_n_o usb_rd_n Output 1
add_interface_port ft232h usb_data_io usb_data Bidir 8
add_interface_port ft232h usb_txe_n_i usb_txe_n Input 1
 
 
#
# connection point reset_sink
#
add_interface reset_sink reset end
set_interface_property reset_sink associatedClock clock_sink
set_interface_property reset_sink synchronousEdges DEASSERT
set_interface_property reset_sink ENABLED true
set_interface_property reset_sink EXPORT_OF ""
set_interface_property reset_sink PORT_NAME_MAP ""
set_interface_property reset_sink CMSIS_SVD_VARIABLES ""
set_interface_property reset_sink SVD_ADDRESS_GROUP ""
 
add_interface_port reset_sink reset_i reset Input 1
 
usb_ft232h_avalon-mm_interface/trunk/sw/usb_ft232h.h Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: usb_ft232h_avalon-mm_interface/trunk/sw/usb_ft232h_c_style.h =================================================================== --- usb_ft232h_avalon-mm_interface/trunk/sw/usb_ft232h_c_style.h (nonexistent) +++ usb_ft232h_avalon-mm_interface/trunk/sw/usb_ft232h_c_style.h (revision 5) @@ -0,0 +1,33 @@ +/* + * usb_ft232h.h + * + * Created on: 06 may 2016. + * Author: Dmitry Elmanov + */ + +#include + +#ifndef USB_FT232H_H_ +#define USB_FT232H_H_ + + +#define USB_FT232H_WRDATA_ADDR 0x0 +#define USB_FT232H_RDDATA_ADDR 0x1 +#define USB_FT232H_TXSTATUSL_ADDR 0x2 +#define USB_FT232H_TXSTATUSH_ADDR 0x3 +#define USB_FT232H_RXSTATUSL_ADDR 0x4 +#define USB_FT232H_RXSTATUSH_ADDR 0x5 + +#define USB_FT232H_STATUS_READY_MSK 0x8000 +#define USB_FT232H_STATUS_COUNT_MSK 0x7FFF + + +#define IOWR_USB_FT232H_DATA(base, data) IOWR_8DIRECT(base, USB_FT232H_WRDATA_ADDR, data) +#define IORD_USB_FT232H_DATA(base) IORD_8DIRECT(base, USB_FT232H_RDDATA_ADDR) +#define IORD_USB_FT232H_TXSTATUS(base) (IORD_8DIRECT(base, USB_FT232H_TXSTATUSL_ADDR) | (IORD_8DIRECT(base, USB_FT232H_TXSTATUSH_ADDR) << 8)) +#define IORD_USB_FT232H_RXSTATUS(base) (IORD_8DIRECT(base, USB_FT232H_RXSTATUSL_ADDR) | (IORD_8DIRECT(base, USB_FT232H_RXSTATUSH_ADDR) << 8)) +#define IORD_USB_FT232H_TXDATA_COUNT(base) (IORD_USB_FT232H_TXSTATUS(base) & USB_FT232H_STATUS_COUNT_MSK) +#define IORD_USB_FT232H_RXDATA_COUNT(base) (IORD_USB_FT232H_RXSTATUS(base) & USB_FT232H_STATUS_COUNT_MSK) + + +#endif /* USB_FT232H_H_ */
usb_ft232h_avalon-mm_interface/trunk/sw/usb_ft232h_c_style.h Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: usb_ft232h_avalon-mm_interface/trunk/sw/usb_ft232h_cpp_style.h =================================================================== --- usb_ft232h_avalon-mm_interface/trunk/sw/usb_ft232h_cpp_style.h (nonexistent) +++ usb_ft232h_avalon-mm_interface/trunk/sw/usb_ft232h_cpp_style.h (revision 5) @@ -0,0 +1,87 @@ +/* + * usb_ft232h.h + * + * Created on: 06 february 2017. + * Author: Dmitry Elmanov + */ + +#ifndef USB_FT232H_H_ +#define USB_FT232H_H_ + +#include + + +const alt_u8 USB_FT232H_WRDATA_ADDR = 0x0; //!< Address for write data +const alt_u8 USB_FT232H_RDDATA_ADDR = 0x1; //!< Address for read data +const alt_u8 USB_FT232H_TXSTATUSL_ADDR = 0x2; //!< Address for low byte of TX FIFO status register +const alt_u8 USB_FT232H_TXSTATUSH_ADDR = 0x3; //!< Address for high byte of TX FIFO status register +const alt_u8 USB_FT232H_RXSTATUSL_ADDR = 0x4; //!< Address for low byte of RX FIFO status register +const alt_u8 USB_FT232H_RXSTATUSH_ADDR = 0x5; //!< Address for high byte of RX FIFO status register + +const alt_u16 USB_FT232H_STATUS_READY_MSK = 0x8000; //!< Ready bit mask of RX or TX FIFO status register +const alt_u16 USB_FT232H_STATUS_DATA_SIZE_MSK = 0x7FFF; //!< Data size mask of RX or TX FIFO status register + + + +/*! + * \brief Request data of rx FIFO status register + * \param[in] base Module address + * \return Rx FIFO status register data. + */ +inline alt_u16 usbFT232HGetRxFifoStatus(alt_u32 base) +{ + return (IORD_8DIRECT(base, USB_FT232H_RXSTATUSL_ADDR) | (IORD_8DIRECT(base, USB_FT232H_RXSTATUSH_ADDR) << 8)); +} + +/*! + * \brief Request data of tx FIFO status register + * \param[in] base Module address + * \return Tx FIFO status register data. + */ +inline alt_u16 usbFT232HGetTxFifoStatus(alt_u32 base) +{ + return (IORD_8DIRECT(base, USB_FT232H_TXSTATUSL_ADDR) | (IORD_8DIRECT(base, USB_FT232H_TXSTATUSH_ADDR) << 8)); +} + +/*! + * \brief Request number of bytes stored in rx FIFO + * \param[in] base Module address + * \return Number of bytes stored in rx FIFO + */ +inline alt_u16 usbFT232HGetNumberOfDataInRxFifo(alt_u32 base) +{ + return (usbFT232HGetRxFifoStatus(base) & USB_FT232H_STATUS_DATA_SIZE_MSK); +} + +/*! + * \brief Request number of bytes stored in tx FIFO + * \param[in] base Module address + * \return Number of bytes stored in tx FIFO + */ +inline alt_u16 usbFT232HGetNumberOfDataInTxFifo(alt_u32 base) +{ + return (usbFT232HGetTxFifoStatus(base) & USB_FT232H_STATUS_DATA_SIZE_MSK); +} + +/*! + * \brief Write byte to module + * \param[in] base Module address + * \param[in] byte Byte for write to the FIFO + */ +inline void usbFT232HWriteByte(alt_u32 base, alt_u8 byte) +{ + IOWR_8DIRECT(base, USB_FT232H_WRDATA_ADDR, byte); +} + +/*! + * \brief Read byte from the FIFO + * \param[in] base Module address + * \return Byte read from the FIFO + */ +inline alt_u8 usbFT232HReadByte(alt_u32 base) +{ + return IORD_8DIRECT(base, USB_FT232H_RDDATA_ADDR); +} + + +#endif /* USB_FT232H_H_ */
usb_ft232h_avalon-mm_interface/trunk/sw/usb_ft232h_cpp_style.h Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property

powered by: WebSVN 2.1.0

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