|
Message
From: Rudolf Usselmann <rudi@a...>
Date: Wed, 22 Oct 2003 12:14:49 +0700
Subject: Re: [usb] USB advice and pointers
On Wed, 2003-10-22 at 11:46, Rahul Kumar wrote:
> Hello everyone,
>
> I would like some pointers/help/advice from people who have used the 2.0 core.
> I'm working on a project that only consumes data that is provided by the host.
> The total data that the function uses is 16 bits(at a time). So I'm thinking of using the entire 32 bit words, but just to discard the higher/lower 16 bits and use the rest.
>
> I have Jan Axelsons USB complete book and I have read about the descriptors that are erquired during enumeration. If I'm not mistaken, the data on endpoints is stored in the respective endpoint registers. But how are the other descriptors sent to the host(device, config and interface)? Do we have to do that via firmware? (BTW, I'm not going to use a uController as I'm going to design an ASIC that will do all the firmware functions.) To make things simple, I have only 1 endpoint (besides 0), so
> I don't need a lot of memory (I need to use only 16 bits of data at a time and there is only one function.) How do I implement SSRAM in Verilog that works?
The descriptors you have to assemble and write in to the
control endpoints buffer memory. The host will request
different descriptors during the enumeration phase, and
you have to properly reply.
Take a look at my USB 1.1 IP core, it does the enumeration
in hardware and uses a ROM to store the descriptors.
> I tried this:
>
> reg [31:0] sram [0:8191];. (It compiles in Icarus verilog but is not supported by Maxplus along with other things.)
>
> Before I actually fab the ASIC, I would like to test it in FPGA. I tried compiling it in the free student version of Altera's maxplus 2, but I get a few errors, firstly, initial statements are not supported ( so I was thinking of changing them to always @(posedge rst) or something similar), also modules cannot be paramterized as shown in usbf_top.v instead I have to do:
>
> lpm_ff reg12a(.q(q[11:0]), .data(d[11:0]), .clock(clk));
> defparam reg12a.lpm_width = 12;
>
> is this ok? Or do I have to use Xilinx, or some other version of Altera's software? Does anyone have any experience with using these two products.
>
No, you must manually remove all code between "// synopsys
translate_off" and "// synopsys translate_on" - thats a
problem with the free tools: you get what you pay for.
There are a couple of places in the core where you have
to do that.
> I would also appreciate some pointers regarding writing applications. Can I use a generic mass storage USB driver instead of writing my own? Since I'm using 16 bits, I thought of using bulk transfers only. Any experiences anyone has had that they would like to share?
>
> Thank you in advance and sorry for the long email.
>
> Rahul
Regards,
rudi
========================================================
ASICS.ws ::: Solutions for your ASIC/FPGA needs :::
..............::: FPGAs * Full Custom ICs * IP Cores :::
FREE IP Cores -> http://www.asics.ws/ <- FREE EDA Tools
|
 |