Best way to learn VHDL? [closed] - vhdl

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I want to learn VHDL but I really don't know from where to start.
I want some advice and explanation about the software I need to get started.
I would like also to get some references in order to learn it efficiently without wasting time by searching on the Internet, since there are a lot of e-books and tutorials and I'm really confused about which one to choose.

I suggest, you have good background in Digital Design. If not, start with any edition of "Digital Design" book or, alternatively "Contemporary logic design".
Download GHDL (VHDL compiler/simulator using GCC technology) or a little more friendly software tool boot.
Learn how to build a VHDL program with GHDL. Try to compile simple
"Hello, world!".
Learn VHDL syntax with the open-source book Free Range VHDL. It is very important step.

As others have said, you need to learn about digital design before learning VHDL. But don't let that scare you away, it isn't that hard. I believe you can get started very fast with VHDL if you get the books, board and software which I recommend below.
Learn about Digital Design
"Digital Design" by Frank Vahid is an excellent book for people who wants to learn about digital design from scratch. We used that book in an introduction course on digital design where we also got introduced to VHDL. You don't have to dig very deep into that book before you can start playing a bit with VHDL (this book doesn't teach any VHDL though).
I remember the book as being very 'reader-friendly'.
http://www.amazon.com/dp/0470044373/?tag=stackoverfl08-20
Buy a FPGA board!
Next you really need to buy or have access to a FPGA board, and some learning material that utilizes and explains about that particular FPGA board that you choose.
Even though I had access to a FPGA board at my university, I choose to buy a board so I also could play around with VHDL at home.
At university we used some virtex-pro Spartan-3E 100 MHz board (can't remember the exact name). And for home I bought the Nexys2 board which is also in the spartan-3E family, and is an excellent board for FPGA beginners IMO.
http://www.digilentinc.com/Products/Detail.cfm?Prod=NEXYS2
Learn VHDL
For VHDL we used the book "FPGA prototyping by VHDL examples" by Pong P. Chu, which is an excellent book for getting some experience with VHDL fast without having to read too many boring pages.
The book also introduce you to the 'Xillinx ISE' software.
http://www.amazon.com/FPGA-Prototyping-VHDL-Examples-Spartan-3/dp/0470185317
Software
For software we used Xillinx ISE, compatible with both Linux and Windows (I used it mostly in Linux). At university we used some old version of Xillinx ISE because the new version wasn't compatible with the virtex pro board. This was the worst piece of software I've ever used, it was full of bugs and it was driving everyone crazy!
BUT at home and on my laptop I used the newest version of Xillinx ISE which was a brilliant piece of software, and didn't have any annoying bugs. The only thing I didn't use Xillinx ISE for, was to transfer the synthesized VHDL (.bit files) to my board, for that I just used 'Digilent Adept software' (some small program made by Digilent, for transferring files to and testing the board). But it should also be possible to set up Xillinx to be able to transfer the synthesized VHDL, if you aren't lazy like me.
So if you want to use Xillinx ISE, be sure to buy a board that is compatible with the newer version of Xillinx ISE, to avoid too many head-aches. For example the Nexys2 board.
We also used some nifty tool for debugging, think it was ModelSim. This should also be included in the Xillinx ISE webpack download if I'm not wrong.
Link to Xillinx ISE:
http://www.xilinx.com/ise/logic_design_prod/webpack_faq.htm#2b

I am in a very similar situation. I discovered Free Range VHDL and am learning fast as I work through it. This book is an update of The Low-Carb VHDL Tutorial with exercises at the end of every chapter.
After completing the paper exercises, I plan to get an XuLA board from XESS. Dave Vandenbout has written an excellent tutorial referencing his XuLA board. This book complements Free Range VHDL as it discusses actual FPGA devices and practical issues such compilation, synthesis and software download. This book is also available from the Free Range Factory and I have found an earlier edition on this pdf.
Dave Vandenbout's site offers more hardware than the Free Range Factory, so it is worth checking out. I am based in Europe, so I will also be looking at Trenz Elektronik online shop.

The web page for the first part of this course (more specifically, the course literature, tools and links parts) contains a pretty good list of reading material and tools. The course doesn't offer any introduction to VHDL but is open to students with no prior VHDL experience even so, so learning on your own with the provided material works pretty well. (At least it did for me; YMMV.)

I recommend using a good VHDL IDE.
Sigasi is my favorite (disclaimer: I'm co-founder of Sigasi)

Related

Step 1 for Beginner who needs engagement

I'm a beginner with effectively 0 knowledge of programming in the typical sense (only programming I've done is Ladder for PLC's).
I'm a huge ADDer who has trouble staying focused on learning unless it's engaging (IE, with PLC's I was able to program, download to controller and immediately see an output change).
I have a lot of interest in python and other 'normal' programming and my most recent interest includes understanding the Google Assistant interface enough to figure out how to purchase basically any type of sensor (prox, moisture, etc) and interface it into Google Assistant to make my home automation do things for me...
IE - if light beam is broken on sensor 1, turn on output 2 (alarm).
I figured I can use Arduino but my lack of fundamentals make it incredibly hard for me to dive into some of these projects.
Does anyone have a good book that will help me get a good foundation into computer science AND something that might have some mini projects that will keep me engaged and lead me to where I want to be?
I struggled in school due to the concentration issues despite medicating, but did fantastic when doing PLC's. Unfortunately PLC's are really not used as often so 'real programming' is the way i need to go

How would a front-end developer learn some graphic design techniques [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 4 years ago.
Improve this question
As a front-end developer, I would like to develop nice and good usability web applications. However, normally developers are good at coding. So, I would ask how to get started with learning some UI design knowledge? What's your recommended books or courses for a newbie to learn? Basically for graphic design, fonts and colors etc etc.
As a UI/UX developer myself, graphic design techniques are questions related to Photoshop, Illustrator, color theory, typography, etc. Usability is related to UI/UX, coding and web architecture. Graphic design and web usability are two very distinctive fields.
What is User Experience Design? - Wiki article on UX
User Experience is any aspect of a person's interaction with a given
IT system, including the interface, graphics, industrial design,
physical interaction, and the manual.
What is graphic Design? - Wiki article on Graphic Design
"Graphic design is the art of communication, stylizing, and
problem-solving through the use of type and image."
Resources #Nathan provided are great, I would also add this to your reading arsenal, education and inspiration:
Open University classes
University of Washington - Visualization
MIT - Drawings & Numbers
USQ - Multimedia
Berkeley - Computer Graphics
Sites & Inspirations
OnePageLove
Responsive.ly
A List Apart
Awwwards
Css Tricks
Tuts plus
Can I use
As with any other skill set, to way to get better is practice, practice, practice. I would just keep building projects as case studies and learn the skill sets as you venture through different types of web applications.
Best of luck on this journey.
Books are good, but to stay upfront and get aware of what is happening the latest and what tools and techniques are in, I suggest you to actively participate on webistes like
Smashing Magazine,
Sitepoint &
Web design Ledger
to name a few, but top quality resources. To know more about the books, you can refer to
Apress Books for front end development
for start to ninja resources.
Hope this helps.
Build on the shoulders of those who have gone before. To be a great developer, you have to know your stuff. In the same way, to be a good designer requires understanding of some basic foundational guidelines. Some of it may seem pretty simple and tedious, but understanding the proper principles of typography, color theory, grid systems and so on can help you a lot. A few resources to get you going are:
Universal Principles of Design
The Elements of Typographic Design by Robert Bringhurst
Thinking with Type by Ellen Lupton
Grid Systems: Principles of Organizing Type by Kimberly Elam
The Design of Everyday Things by Donald Norman
Don't Make Me Think: A Common Sense Approach to Web Usability by Steve Krug
Microinteractions: Designing with Details by Dan Saffer
That list should generate it's own follow-on books / websites reading list for you.
Ask questions. Find some designers you really like and ask questions. Try to understand why they made the decisions they did. Most people are pretty willing to talk about their own work. Asking questions helps you to understand why designers use (or don't use) certain design principles in their work.
Actually design (and seek out constructive criticism.) Like anything you do in life, reading and learning can only take you so far. At some point, you have to start practicing. Find a small circle / community of more senior designers who can review your designers and give you some brutal, but constructive criticism. Your stuff will suck at first. Everyone's work does. Designers spend hours upon hours honing their talents and skills. Don't get discouraged by it. Just like anything you can gain mastery in, it takes time. Having people in your life who can give constructive feedback is a huge help.
Have a look at WebAwwards never let me down yet... Great selection and new websites added every day

How do I get started with image processing? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I am really interested in image processing. I downloaded OpenCV and started playing with it. But I think I lack the knowledge behind image processing. I would like to learn the basic fundamentals of image processing.
I searched for open course from MIT or other universities but didn't seem to find any good tutorial. I did find some slides, but they seem useless without the actually presentation. I searched for online tutorial but mostly they are not for beginners.
Is there a good online tutorial for image processing for beginners?
I recommend two books:
(1) R. C. Gonzalez and R. E. Woods, Digital Image Processing, 3rd ed. Prentice Hall, Aug. 2007.
(2) G. Bradski and A. Kaehler, Learning OpenCV: Computer Vision with the OpenCV Library, 1st ed. O'Reilly Media, Oct. 2008.
Visit the OpenCV documentation to get updated reference to the OpenCV functions (the Learning OpenCV book uses version 1.0 but the current version is 2.3). You can buy cheap access to the digital version of the book using Safari Books.
I really like Rich Szeliski's Computer Vision book which has a nice mix of theory and practice. You can also access the electronic drafts for free.
Other good ones are Hartley and Zissermann's Multi-View Projective Geometry and David Forsyth's Computer Vision: A Modern Approach
Sometimes the old fashioned way is best. I'd start by looking at what books could help me learn the subject.
Reading books is IMO definitely the way to go here.
The Learning OpenCV book also contains background information about the image processing tasks that can be executed with OpenCV. It might be a nice way of learning to immediately put in practice what you learn and read.
The OpenCV Wiki actually lists a few books they recomend, including one from O'Riley which I have always found to be a good source for learning.
Alan Peters Lectures on Image Processing
http://www.archive.org/details/Lectures_on_Image_Processing
PDF files: http://ia700307.us.archive.org/7/items/Lectures_on_Image_Processing/
--
MIT OCW: Biomedical Signal and Image Processing
See page
This site has tutorials in pdf format explaining how to do basic image processing with Microsoft C# (which is free of charge from Microsoft).
It also introduces and explains the mathematical notation that you will find in image processing books.

Learning COBOL Without Access to Mainframe [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Questions asking us to recommend or find a tool, library or favorite off-site resource are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.
Closed 8 years ago.
Improve this question
I am a graduate student majoring in Computer Science. My department teaches the majority of its courses using Java (though I did take one course on system architecture that used C to demonstrate processor scheduling, memory management, etc....but I digress).
I want to learn more about COBOL, but I don't have access to a mainframe system. Can anyone please recommend a free COBOL compiler for Windows that would enable me to get through some basic COBOL tutorials?
Disclaimer: yes, I've Googled this already, so hoping for some experienced individuals to give some further info.
Thanks!
Other posters have suggested Tiny COBOL, but have a look at OpenCOBOL too. OpenCOBOL
is a cross compiler to C and has a fairly active development community.
COBOL is not a difficult language to learn. Unless you are tying to work your way into a mainframe shop,
spending a lot of time studying COBOL may not have much career payback.
As belisarius pointed out, it is not the language as much as the environment that needs to be learned.
By analogy, there isn't very much to learn about the C language either. However,
just knowing C will not get you very far - you need to work with the
huge standard library that comes with it. COBOL is similar in that
respect. The difference is that COBOL does not come with a huge standard library, it is part of a package
that often includes: CICS, DB/2, MQ-Series and an array of other library services (LE Services in an IBM environment).
COBOL can be found outside of a mainframe environment but the mainframe
is its "real home". As a generalization, "mainframe" implies an IBM mainframe running Z/OS
(many may take exception to this statement). This publication: Introduction to the Mainframe - z/OS
is a good place to get a feel for what an IBM mainframe environment is like.
The things I find characterize COBOL are:
COBOL is a procedural language. Some vendors have added OO extensions
and new COBOL language standards include OO extensions, but this is largely window dressing.
COBOL is fundamentally a procedural language.
Data declaration. The PICTURE/USAGE thing is a bit of a mind bender. Data declaration combines
internal data representation (binary, packed decimal, floating point, character, etc.) with presentation
(number of digits, leading zeros, sign, etc.) into a single declaration.
REDEFINES used to provide different views of the same underlying memory.
Hierarchical data declarations. Data hierarchy is defined using level numbers. Level 1 defines the top of the
hierarchy and increasing numbers define lower levels. Levels 66 (in conjunction with RENAMES), 77, 88 have special meanings.
Flow of control. Many programmers (even some veteran COBOL programmers) view SECTION/PARAGRAPH
in a manner similar to a procedure call. They are completely different. SECTION/PARAGRAPH do
not follow normal stack oriented call/return semantics. COBOL uses a unique mechanism to manage
return from PERFORMed sections/paragraphs.
Monolithic programs with tons of global variables. It is not uncommon to find COBOL source files
running into thousands of lines with several hundred global variables.
COBOL doesn't have to be written this way - I believe this is a legacy dating back to a time when
procedure calls were considered costly but PERFORMing a SECTION/PARAGRAPH was very efficient. The habit
seems to have stuck and newer COBOL programs tend to be written as monolithic monsters too.
String handling nightmare. COBOL does financial calculations very well. It does not do
string handling very well at all. The string handling verbs INSPECT, STRING and UNSTRING can do
a number of interesting things, but manage to be quite aggravating too.
COPY/REPLACING and REPLACE compiler directives need to be understood. They behave somewhat
differently than file inclusion in most other languages. Most shops use COPY only for common record or
data declaration, others use them for common procedural code too (with REPLACING and or REPLACE).
Given a working knowledge of C, you should be able to pick up on COBOL without much difficulty.
I'll not address your specific question, since it was many years ago that I stopped working as a mainframe systems programmer (and with mainframes in general ... and that includes COBOL). Nevertheless, there are two points that I want to emphasize:
COBOL is an easy to learn language. You'll feel at first that the syntax is daunting. A lot of "divisions", "sections" , "paragraphs" ... just try to understand why they exist. Nobody writes those labels. The way COBOL uses and redefines data structures is perhaps the most interesting concept, try to understand it well.
This is the key point. I said "COBOL is easy". Now the bad news: being a fair mainframe COBOL programmer is NOT easy. But that has nothing to do with COBOL, it's the environment. The mainframe is big, and there are a lot of "ecosystems" in there. You have DB2, CICS, some JCL, and VSAM as a bare minimum, and perhaps a dozen more, depending on your installation. Printers, tapes and other specialized and hard to manage hardware too. Each one of them requires several years to tame, and that's the real value of a good mainframe programmer. Microfocus had an expensive compiler/environment product that was able to emulate a few of these features, but I think it's out of market now.
Anyway, dexterity with those features are usually acquired "on the shop" and very difficult (believe me) to get from a book or courseware.
That said, don't expect to get a mainframe job (other than a super-junior one) after learning and taming COBOL. That is just a first little step.
HTH!
There used to be a Cobol-to-C compiler and Eclipse IDE from a company called "The Kompany". The product was called "Kobol". It would let you write Cobol using an eclipse based environment that would be similar to what you would use for a mainframe (Rational Developer for Z). They have a free demo version and a cheap student version IIRC.
You will find that Cobol is easy to learn, easy to write and hard to shoot yourself in the foot with. That is one of the reasons it is so very popular with financial institutions.
I think it is great that you are adding Cobol to your toolbox.
Have you tried TinyCobol? I think I used it once and it wasn't bad.
A while back, MicroFocus had a free version of their IDE+Compiler (Net Express), but they no longer offer it. I'm pretty sure I have a copy of the installer somewhere around here, though I'm not sure that it would still be legal to install if they no longer offer the product. I can take a look later tonight (it would be on my other computer, which is currently headless and inactive) and see what I come up with.
Try OpenCOBOL http://www.opencobol.org/, it's free, it runs on Windows and Linux and is being actively developed.
Micro focus now offer their Personal Edition of Visual COBOL free for non-commercial use. This COBOL works with either Microsoft Visual Studio as a .Net language or Eclipse. It even comes with a lite version of Visual Studio so you don't have to buy that. You can download it from https://www.microfocus.com/product-downloads/vcpe/vcpe22/index.aspx
The open source OpenCOBOL at www.opencobol.org/ has now changed its name and location. Now called GNU Cobol it may be found at sourceforge.net/projects/open-cobol/. This is an excellent COBOL that implements a substantial part of the ANS 85 and ISO 2002 COBOL standards.
The GNU COBOL site also has a link to Gary Cutler's Programmers Guide to OpenCOBOL 1.1 which is an excellent language reference. If you are looking for learning materials you can try my COBOL tutorial at www.csis.ul.ie/cobol/course
There is also a very useful online version of COBOL that uses the OpenCOBOL compiler. It may be found at http://www.compileonline.com/compile_cobol_online.php
Check out their overly long "Hello world" program. In ISO 2002 COBOL the IDENTIFICATION DIVISION is not required and since the program stops when the end of the text is reached, the STOP RUN is not required either. Only the three lines shown below are actually required. Try it yourself.
PROGRAM-ID. HELLO-WORLD.
PROCEDURE DIVISION.
DISPLAY 'Hello, world'.

What is the "Processing" Programming language used for? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 6 years ago.
Improve this question
The language site: http://processing.org/
What are people using Processing for? I have the opportunity to learn this in a classroom setting and am wondering if it will be a good use of my time.
Yes, it is useful and not a waste of time. I'm using Processing mainly for building proof-of-concepts for visualisations and graphic experiments. The time between an idea in my head and working code on my laptop is small, mainly because Processing does not throw too many obstacles in that course.
The ease of experimenting with things in Processing is an advantage in learning to program. Processing is actually a front-end to Java programs. At run-time the Processing code is translated to Java code.
Processing comes with a small but capable development environment (IDE), excellent documentation, a large library of extensions and a significant set of examples and demos.
Finally, I strongly recommend the book Processing: A Programming Handbook for Visual Designers and Artists by Casey Reas and Ben Fry, the authors of Processing. It's a beautiful book, carefully edited and full of sources for inspiration.
Processing has been used for hundreds of high-end projects in a wide range of fields, from multimedia installations to information visualization. It is not a toy or an educational exercise, despite its roots as a teaching tool.
The core application framework simplifies most common multimedia needs (OpenGL, Quicktime, PDF export, camera capture), removing project overhead involved in the boring task of setting up basic applications.It uses an extensible code structure that has allowed the creation of dozens of useful libraries for everything from 3D import / export to complex geometry synthesis.
So no, it is not a waste of time.
A references from my own work:
Stockspace
Anything that beautiful could never be a waste of time. :) It's probably the leading tool in its space, which would be something like, "Declarative languages for visualizing data". (Though I'm told it can do more than that.) Its got a O'Reilly book - that's always a great sign.
'Useful' and 'Beautiful' do not describe the library (processing is not a language), but the programs written in it. They are usually beautiful, but can be useful, too. Perhaps browsing it's showcase can give you a hint about some useful programs. Processing is very well suited for visualization apps, so it can indeed be useful for that.
Now, that's for the usefulness of the applications. For the usefulness of programming them, I think it's a pretty cool way to show more visually how some fundamental concepts of programs work, which you may find enjoyable. Processing is being used a lot nowadays to teach fundamentals of programming; it'd be cool to learn recursion by making fractals.
I have used processing for many interactive installations and found it really useful, because you get real fast results. Programming visual effects is really easy and elegant.
Some examples to watch:
http://www.youtube.com/watch?v=Ziv8Q5N7mSU
http://www.youtube.com/watch?v=zrT5uJox0J0
http://www.youtube.com/watch?v=Y58wBAp7mac
http://www.youtube.com/watch?v=EZp5HsFKxCs
http://www.youtube.com/watch?v=d4LcfsHQnYw
If you are dealing with a lot of data (many bitmaps, videos and sound) you might consider its limitations. I was happy to use it and will continue using it for certain projects.
So as a conclusion: processing is no waste of time. It's a really useful language for real world applications (in its own domain of course).
I agree with what the other posters have said, but I would add that every development tool has advantages and disadvantages. While it is easy to jump right in and visualize stuff with processing, the drawback is that it is hard to incorporate processing code into another project. Tools are in development to make this easier, but if you want a graphical environment that works in your application, all the time that processing saves you when prototyping is mostly lost in the re-adaptation of the code or getting it to work.
Processing is definitely useful for many purposes.
I think the post on "Processing for Programmers" by Eliot Lash answers your question very well, and in much detail. I'll give some highlights based on my experience below, but I recommend you have a look at the post, which also covers practicalities.
Your question has to do with the perception of Processing as a simple programming language and environment that doesn't require much experience to use. However, Processing is also a neat tool that makes life easier for more experienced developers, and the skills you develop with Processing can be definitely useful outside the "classroom" or prototyping contexts.
First off, as a programming language, Processing acts merely as a "layer" on top of Java that simplifies things. All Processing code is translated to Java code first. This means you can write Java code and import Java libraries in your Processing code, within (or outside) the Processing IDE. Pedagogically, this helps Processing serve as a "gateway" programming language into Java and other fully-featured languages. You can start coding with Processing, slowly make way into Java in a familiar environment, and then progress to more advanced tools.
You can also import Processing functionality into your Java projects (see here and here). This lets you exploit the speed and simplicity of Processing for multimedia etc., in the context of complex applications that require a more fully-featured programming language.
On top of these innate features, over the years, people have developed tools, libraries, etc. that can make your Processing skills useful in many contexts. Some examples:
Web/browser: Processing.js is a JavaScript library that lets you run Processing code verbatim in the browser. p5.js is a library for writing JavaScript based on Processing principles and functionality.
Mobile: You can develop Android apps using Processing by using the IDE in "Android mode".
Electronics, IoT...: The Arduino programming language and environment are very, very similar to Processing.

Resources