I'm so glad you are excited about Zynq and the Zedboard as well are!
Let me try and take your questions on one at a time:
1. The ARM portion of the Zynq device is based off of traditional ARM IP, and thus will run Linux natively and support all of the traditional drivers and libraries compiled for ARM that any other A9 ARM processors support. The Ethernet controller on the the Zynq chip has drivers that are already supported within the Linux kernel, and thus if you would like to interface to an Ethernet connection it is simply just using the Ethernet interface that is available within the /dev directory within Linux (just like any other platform). So you question of "Will it just work" my answer is: yes, we have full 10BaseT/100BASET/1000BaseT Ethernet support which any Layer-7 application can take full advantage of.
2a. There are lots of global clock inputs available to bring an external clock into the Zynq device. The Zedboard also has this ability brought out to the FMC connector and an oscillator. You can see this in the Schematic that is posted here: http://zedboard.org/content/documentation
2b. Is your external trigger an analog voltage level, or a digital transition? We can support both. You can bring in an analog voltage level into our XADC Analog Mixed Signal (AMS) system and set a threshold to trigger a signal internally within FPGA fabric. If you want to use a digital transition as a signal, that can be done as well using a clock to sample an input pin.
2c. The XADC subsystem is Xilinx's offering for bringing in analog signals into the FPGA fabric of the device. The XADC system provides two ADC's that run at 1MSPS with a bit resolution of 12bits. There are two mux's available to bring in up to 32 single ended signals or 16 differential signals into the two ADC's.
3. The ARM subsystem within the Zynq device uses a standard called AXI to interface with internal peripherals. The standard of AXI4 is used within the Xilin FPGA fabric to interface with the ARM subsystem. This allows for a peripheral to be mapped to memory, and a driver to be written within Linux to have that memory area accessible through a /dev device.
Hope that helps!
Great, thanks for the excellent and quick reply!
Any chance that we can get some simple linux reference designs that use AXI4 to go between the ARM/Linux and the FPGA I/O? For example the user presses buttons on the Zedboard and data appears on the linux side or the user writes to a file on the linux side and controls LED's on the Zedboard?
These example projects are in the works, and should be posted shortly. Stay tuned! I'll post back here as soon as they are posted as well.
Are any of these projects available yet? I am also interested in creating a driver to talk to the FPGA logic from Linux.
Hi, I was wondering if I could get some info on internet connection using ethernet socket.
I am planning to connect or send a HTTP package or some sort of data to my FPGA (or ARM processor) on zedboard via internet. I would like to know if linux kernel unpacks this received package for me. In other words, how having a zedboard can help me to send data from internet to my board, and eventually updating some of the register?
I hope I was clear enough.
I truly appreciate your help in advance, any type of instructions or steps that can help me in overcoming this issue is tremendously appreciated.
There are three questions in your post. The answer is "yes" to all.
Yes, the zedboard can run web server software. The demo system runs Linux and, I believe, also includes the Apache web daemon. In general, almost every existing Linux app can be built to run on the zedboard. A web server is special only in that the standard package already includes it.
You can write your own software to interact with the FPGA system.
And last, your web page can call your software to control your hardware.
Good luck, and have fun.
Thanks for your help.
I am new to embedded world and networking. I have been working on a project where I want to turn on a LED or any pin on PMOD using web browser.
This is where I am. I have SDK up and running and I use peripheral example of the SDK to interact with GPIO (switches->LED). I was able to tweak the code to write switch values on LEDs.
I understand that I need to have a webserver on the board and also need to get to know how the socket or ethernet cable is programmed. Plus, I am not sure how to create a GUI(web page) on my webserver, like xilinx has in its lwIP manual
I have also looked at the project by Avnet where they have web-based control for a servo motor. I think that it is too complicated to tweak since their tutorial is to help customers to assemble.
Is anybody familiar with creating a "simple" webserver?
Should I use SDK example which is just a echo server?(will that help me!)
Is it better to move to linux?
I appreciate your help.
Hi Daniel. Do it in Linux; I'll explain shortly. Or if you've already gone ahead with XilKernel, don't worry about it. It's more important now to move on and not get hung up here. There is much more to explore.
I see the Zynq as somewhat special. Finding the right boundary between software and hardware systems is a continual challenge. With both sides integrated onto one device, it's the perfect vehicle for exploration. But to get there, you'll first have to become proficient with both. That's why it's so important to not get stuck here, not get sidetracked into building a webserver, or learning to write a "proper" driver.
Why Linux at this point? Simply, you'll want a full featured operating system at some future point, keeping in mind the software/hardware thing. (It appears that Linux will have to do. ;-) In any other context, the awful hacks of bit banging from user space would be intolerable. The point of the early exercise, though, is to illustrate how hardware can tie into the processors. There will be time enough later to build a real driver, when there's a real system to integrate.
Next steps, if you really want, is to focus a bit on the hardware side, learn how to build something in the FPGA. That's a large part of what sets the Zed apart from the likes of the Raspberry Pi and Arduino. I would recommend "FPGA Prototyping by VHDL Examples: Xilinx Spartan-3 Version", if not for its price. Even so, the progression and coverage are ideal for teaching and learning circuit design on an FPGA. The sections on interfacing PS2 mice and keyboards are obviously outdated, but integrating with AXI4 is suitable enough substitution.
Mike, I appreciate your help. I came to the same conclusion that Linux is the best for this type of projects. I got really stuck in interfacing Ethernet and creating a webserver as I, an Electrical Engineer, didn't have the knowledge for creating a webserver.
I have developed custom IP for Zedboard and I am able to use it in Bare metal. Now I want to write device driver for it. I have compiled open source linux kernel for zynq successfully and loaded on SD card.
But I am not getting how to start with device driver.
I have following doubts
1.If I should write driver in Host machine then what should be the directory for it.
2. Does driver should be compiled along with source code of kernel (not kernel image)? if yes ,then how?
3. How does driver is loaded on SD card? I mean separately or inside the kernel image?
4. Finally how to test the driver on sd card?
In short can anyone help me in how to cross-compile simple char module for zynq.
Thanks in advance.
Can I use Zedboards Zynq FPGA as a DataNode in a multi-node Hadoop Clustering on Linux(Ubuntu)?
It appears possible refering to this document
For any future questions please ask them over at the digilent forum as they are the main point of contact for educational support.
The Zedboard seems very interesting, it has an ARM processor on which a user can run a linux system, it is tightly coupled to an FPGA, and it includes several peripherals and an FMC connector.
I plan to run linux on the zedboard, and I want to stick the zedboard on a network and access the zedboard remotely using an ethernet connection, will that just work?
OK next, I want to create an FPGA application, I will want to use an external clock, is there an input for that? I also want to use an external trigger input, do I use the XADC for that? What is the XADC?
How about moving data back and forth between linux and the FPGA, what will be involved to make that work?