The difference between a system administrator and a programmer. The difference between a system administrator and a programmer What is the difference between a programmer and a user briefly

FPGA stands for "Field Programmable Gate Array" and is a huge array of gates that can be programmed and rebuilt anytime, anywhere. Many users still do not understand what an FPGA is. “A huge set of gates” is a simplified description of the model. Some FPGAs have built-in hard blocks: memory controllers, high-speed communication interfaces, and PCIe endpoints. There are many gates inside the FPGA that can be freely connected together. The principle of operation is more or less similar to the connection of individual logic circuits. FPGAs are produced by the world's leading companies Xilinx, Altera, and Microsemi.

History of FPGA development

The FPGA industry grew out of PROM and PLD logic devices. In 1970 Philips invented the field programmable matrix. In the design of such an FPGA, which consisted of two plans, a specific implementation of logic circuits was achieved: programmable wired "AND" or "OR". This gave her the opportunity to implement the function in the form of Sum of Products.

Altera was founded in 1983, and already in 1984 released the industry's first reprogrammable logic device - EP300 with a quartz window in the package, which allowed the use of an ultraviolet lamp on the matrix to remove the EPROM mark.

To overcome cost and speed difficulties, a programmable array logic was developed that included only one programmable "AND" entered into a fixed "OR" gate. PAL and PLA, along with other variants, are grouped as Simple Programmable Logic Devices (SPLDs). Such FPGAs, which are integrated on a single chip with interconnects provided to programmatically connect blocks, have been used to meet growing technology requirements. They are called complex PLDs and are developed by Altera.

Transistors are another class of electronic devices that are programmed based on gate array masks. They consist of transistor arrays that can be connected using custom wires. They have given way to logical blocks, and now the user can perform configuration on site, and not in the production laboratory.

The idea to develop the first commercially viable FPGA belongs to Xilinx co-founders Ross Freeman and Bernard Vonderschmitt. The XC2064 was invented in 1985 and consisted of 64 configurable logic blocks with 3 lookup tables. It gives a modern understanding of what an FPGA is. It was in late 1980 when Steve Casselman's proposed computer experiment with 6,000,000 reprogrammed gates found sponsors in the U.S. Navy Surface Warfare Division and then received a patent in 1992.

By the end of 1990, there was a lot of competition in the production of FPGAs, then Xilinx's market share began to decline. Players such as Actel, Altera, Lattice, QuickLogic, Cypress, Lucent and SiliconBlue have carved their niche in the global FPGA market alongside Xilinx. In 1997, Adrian Thompson managed to combine FPGA programming and genetic algorithm technology with the FPGA, ushering in a new era of Evolvable.

Today, FPGAs have become quite affordable, and therefore continue to gain popularity in consumer markets. They consist of a set of logical cells called lookup tables LUTs surrounded by an interconnect network providing a flexible system that can implement almost any digital algorithm.

Programming principles

FPGA programming for beginners is the process of learning, planning, designing, and implementing an FPGA solution. The number and type of layouts vary from program to program. Creating a requirements document and creating a design document explaining how the proposed solution will be implemented can be very helpful in solving potential problems.

The time spent on creating a quality design document will save it on refactoring, debugging, and bug fixing in the future. Implementing a solution using FPGA programming involves creating a project using one of the project entry methods. Among them are schematics or HDL code such as Verilog or VHDL. FPGAs can program an output file to a physical FPGA device using Altera's FPGA programming tools. The introduction of schema design is no longer used in the industry. Synthesis and programming is almost entirely taken care of by vendor tools such as ISE and Vivado and Numato Lab configuration tools.

RTL stands for register transfer level. The designer may also come across the terms Register Transfer Logic or Register Transfer Language, they all mean the same thing in the context of hardware design. RTL is a higher-level abstraction for digital hardware design that sits somewhere between strictly behavioral modeling at one end and purely structural at the gateway level at the other.

Modeling gates means describing the hardware using basic gates, which is quite tedious. RTL can be thought of as analogous to the term "pseudocode" used in basic FPGA programming. One can describe hardware design as a sequence of steps or data flow from one set of registers to the next in every clock cycle.

RTL is also referred to as "data flow" design. Once an RTL design is ready, it is easier to turn it into real HDL code using languages ​​such as Verilog, VHDL, SystemVerilog, or any other hardware description language.

An FPGA is much more than just a bunch of gates. Although it is possible to build logical circuits of any complexity by organizing and connecting logical elements. It's a way to express logic in a simple format that can eventually be turned into an array of elements. Two popular methods to do this are Schema Introduction and Hardware Description Language HDL. Before it became widely used, engineers designed everything with schematics. They were very simple for small projects, but painfully unmanageable for large ones. One has only to imagine how Intel engineers draw circuits for a Pentium that has millions of gateways! This is unacceptably difficult.

Verilog is an HDL hardware description language that can be used for digital circuits in plain text. Learning Verilog is not that difficult if the user has programming experience. VHDL is another popular HDL widely used in the industry. Verilog and VHDL have more or less the same market acceptance, but users usually choose Verilog because it is easy to learn and has a syntactical similarity to the C language.

FPGAs can be thought of as the building blocks that allow you to customize your hardware. This is a special form of PLD with higher density and more functionality in a shorter amount of time using CAD. FPGAs are available in a variety of options based on the programming technology used.

They can be programmed using:

  1. Antifuse Technology.
  2. Programming based on Flash technology as a device from Actel.
  3. The FPGA can be reprogrammed several thousand times, which takes several minutes in the reprogramming field itself and has a non-volatile memory.

FPGA based on SRAM technology that offers unlimited reprogramming and very fast reconfiguration or partial reconfiguration on the fly with few extra circuits. Most companies such as Altera, Actel, Atmel and Xilinx manufacture these devices.

Configurable Logic Blocks

Regardless of different manufacturers and slightly different architectures and feature sets, most FPGAs have a common approach. The basic building blocks of any FPGA are a flexible programmable "logic block" (CLB) surrounded by programmable "I/O blocks" with a hierarchy of routing channels connecting the various blocks on the board.

In addition, they may consist of DLLs for distributing and managing clocks and dedicated block RAM memory with the main building block of a logical cell. The latter consists of an input function generator, transfer logic, and storage elements. Generators are implemented as lookup tables and depend on the introduction. For example, the Xilinx Spartan II has 4 input LUTs, each provided with 16X1 bit synchronous RAM, using multiplexers as shift registers to capture data in burst mode. The storage elements are sensitive to the edges of the triggers or to the level of the gates.

  1. The arithmetic logic includes an XOR gate for full adder operation and the selection of logical carry lines.
  2. I/O block and routing matrix. This block has inputs and outputs supporting a wide range of signaling standards and interfaces.

The basic I/O block is shown below.

Buffers in the input and output paths route signals to the internal logic and output pads directly or via a flip-flop. They are configurable to various supported signaling standards, which can be user-defined and set externally.

Routing matrix

On any assembly line, the slow segment determines the overall productivity. Routing algorithms are used to develop the most efficient paths for optimal performance. Routing is done at different levels, such as local, general purpose routing between different CLBs, I/O routing between blocks and CLBs, dedicated routing for certain signal classes to maximize performance, and Global Routing for distributing clocks and other signals with very large fanouts. . The FPGA families also have large block RAM structures to complement distributed RAM LUTs, which vary in size for different FPGA devices.

FPGA design assumes basically the same approach as any VLSI system, the main steps being design, behavior simulation, synthesis, post-synthesis simulation, translation, mapping, and routing, and subsequent analysis such as timing simulation and static timing analysis. On a computer, the design looks ordered and tiled, but there is actually imperfect placement and routing, resulting in poor performance.

To improve the performance of an FPGA, more transistors can always be used. Service area is high. Installing more transistors means that large scale designs are possible. Leakage is a serious problem for FPGAs and at the same time is of interest. The use of an asynchronous FPGA architecture shows the best results when combined with pipelining technology that reduces global inputs and improves throughput.

Gate quality and problems

System security has always been a major concern, as the code must be exposed each time it is loaded into the FPGA. This flexibility makes the FPGA a potential threat of malicious modifications during manufacture, so bitstream encryption came to its rescue just in time.

Often inexperienced designers and users are faced with the dilemma of how powerful an FPGA is right for their designs. Manufacturers often provide metrics such as "number of gates". For example, Xilinx FPGA programming uses 3 metrics to measure FPGA volume, maximum gates, maximum memory bits, and typical gateway range. As long as they are consistent, migration between models is somewhat easier, but it rarely offers an accurate comparison across vendors due to diversity in architectures and performance differences.

The best indicator is a comparison of the type and number of logical resources provided. In addition to this, the developer must be fully aware of what exactly is needed from the device, since manufacturers can boast of features that will be of the least importance for work. For example, Altera's Stratix II EP2S180 has about 1,86,576 LUTs with 4 inputs, while the Xilinx Virtex-4 XC4VLX200 has 1,78,176 respectively. However, if only 177K LUTs are needed for the design, this will be enough.

If RAM is a desirable metric for a designer, then neither the 6Mb of Xilinx XC4VLX200 nor the 9Mb of Altera EP2S180 would be preferred over the less advertised, older 9.9Mb XC4VFX140 model.

Programming languages ​​and software

Altera FPGA programming for beginners starts with language selection. The C, C++ or System C option allows you to use the capabilities of the largest devices and, at the same time, achieve the similarity of realistic development graphics. The ability to use C-based for FPGA design is provided by HLS (high-level synthesis), which has been on the verge of a breakthrough for many years with a tool like Handle-C. This has become a reality recently with major vendors Altera and Xilinx offering HLS in their Spectra-Q and Vivado HLx toolboxes, respectively.

A number of other C-based implementations of Altera FPGA programming for beginners are available, such as OpenCL, which is intended for software developers who wish to improve performance with FPGAs without a deep understanding of FPGA design.

As with HDL, HLS has limitations when using C FPGA programming approaches, and as with traditional HDL, developers have to work with a subset of the language. For example, it's hard to synthesize and implement system calls because you have to make sure everything is bounded and has a fixed size. The nice thing about HLS is that you can develop your own floating point algorithms and there is an HLS floating point to fixed point conversion tool.

Programming an FPGA with Xilinx software is not difficult at all. You can get it by purchasing Xilinx products, either for free or at a model-specific price. You can access the video on the profile site, which clearly shows the procedure for use. Of all the companies to choose from when looking for a programmable gate array, Xilinx is by far the best of the lot. They are the creators of this product and have made improvements to it over the years. Proprietary software is more powerful than ever before.

Design stages

FPGA programming training can be done online, as the platform is well represented on the Internet. When setting up an FPGA, the first step is to design the circuit, which requires knowledge of digital electronics. Unlike programming, it is much more difficult to start slicing code if the architecture of the program is not clear. As soon as it becomes clear what needs to be implemented, they begin to describe the circuit using one of the languages: Verilog or VHDL.

The fact that indicates a paradigm shift is that they are not called FPGA programming languages, but are description languages. Due to the complexity of testing digital circuits, banks of tests that simulate the behavior of the equipment are usually used at this stage. This type of tool allows you to see the state of the signal at any time and check if there are transitions with the desired results.

The third stage known as circuit synthesis is one of the key. It selects the elements to be used and their relationship according to the description files. This step requires tools that facilitate and automate tasks in most situations.

Hardware and setup

Intel Quartus Prime Software Suite Lite Edition is FPGA design software. It is ideal for beginners as it is free to download and no license file is required. You can download the software from the manufacturer's website. The files are large (several gigabytes) and may take a long time to download and install. To minimize the time and disk space required, it is recommended that you download only those items that are required for user tasks. When prompted for files to download, uncheck "Select All" and select only Quartus Prime and Cyclone V capable devices.

Project creation algorithm:

  1. Open the New Project Wizard.
  2. Select Next > Directory > Name > top-level object.
  3. Select a directory to place the project, for example, "Blink" and place it in the intelFPGA_lite folder, but you can place it anywhere and click "Next".
  4. When prompted to create a directory, select Yes.
  5. Select "Empty Project" and click "Next".
  6. Add files and "Next".
  7. Set up families, devices, and boards by selecting the following: family - Cyclone V, device - Cyclone V SE, base, device name: 5CSEBA6U2317.
  8. To select a specific device, press the up/down arrows to see a list of supported devices until 5CSEBA6U2317 appears.
  9. The user may need to expand the "Name" field to see the full name of the device, click "Next".
  10. When setting up the EDA tool, use standard tools, so there will be no changes, click "Next" and "Finish". The summary screen will appear.
  11. Create an HDL file with Verilog embedded as HDL.
  12. Go to the File tab (main window) and select New.
  13. Select Verilog HDL File and click the OK button.
  14. Choose File > Save As.
  15. Choose a file name. This is the top-level file name and must match the project name.
  16. Press "Save".
  17. Create a Verilog module.
  18. Copy and paste the Verilog code below into the blink.v window, and then save the code file.
  19. Right click "Analysis and Synthesis" and then click "Start" to perform syntax check and synthesis of Verilog code.

If the process completes successfully, a green check mark is displayed next to the analysis and synthesis. If there is an error, check the syntax and make sure it exactly matches the block of code above.

All experienced programmers know that complex programs, even subroutines, don't work right the first time. Human abstraction abilities, based on experience, allow him to find solutions without worrying about the smallest details. But the hard truth is that the physical system that programs are built into requires that every little detail be taken into account before everything will work.

With the improvement of software tools for FPGA development, mainly from traditional vendors, as well as independent tool vendors: Synplicity, FPGA - is becoming more and more popular day by day. Now FPGAs have begun to include specialized hardware for the functions required by the customer, reducing manufacturers' costs. Thus, in the future there may be competition between rigid and cheap systems with flexible cores. Costs are expected to drop even further in the near future as FPGAs become more popular.

Manufacturers have begun experimenting with the concept of integrating FPGAs into integrated circuits to create a hybrid device. The focus remains on interconnect routing, with less change in CLB architectures. As FPGAs continue to include processors, the next generation will require not only knowledge of digital design hardware, but also the experience of developers in the one-time FPGA programming process. Overall, FPGA is expected to take market share in ASIC devices and become the dominant technology covering many applications from various fields.

Being a programmer is now fashionable. Films are made about successful programmers, books are written, in many countries developers are well paid. But despite the vogue for "techies" and innovation, there are many things that are known to programmers, and surprising to the rest. Quora members discussed these sociocultural and cognitive differences. Below are the most interesting comments from the discussion.

So, programmers, unlike ordinary people:

1. Realize that all burglary scenes in movies are bullshit. Here, for example, you can read where the codes that appear on the screens of "IT people" in films are actually taken from. In general, a lot of cinematic stereotypes about programmers are nonsense, writes Bill Coleman: “We are not all fat, lazy geniuses in a row. In real life, we know how to communicate normally: our work depends on it. And don’t confuse us with electricians, many people don’t even have a soldering iron at home.”

The main "hacker" effect on the uninitiated has an open console. “Most people will think that I'm just staring at the screen and killing time while I'm actually working. But as soon as I open the console and start typing, they will be sure that I am trying to hack the Pentagon or doing other magical things, ”writes one of the participants in the discussion.

2. While working, 25% of the time they puzzle over how to figure out what the user can “break” in the application being created. “It's relatively easy to write rules for what a program should do if everything works as it should. It is much more difficult to write rules for what the program should do if something goes wrong,” writes Kim Moser. At the same time, many users believe that programs should behave like their smarter and more knowledgeable friends.

3. They know that in fact, even the most important software that users use every day contains a terrifying amount of "crutches" that somehow miraculously come together into a working whole. “It’s like taking apart a Boeing and discovering that the brakes are taped on,” writes one of the discussion participants, Ben Cherry. Programmers know that a staggering amount of medical, financial, and personal information is stored in a system of negligible security.

5. They know: if a person had, for example, six fingers on each hand, the main number system in the world would be 12, and not 10, as it is now.

6. They can name many more powers of two without a calculator than an ordinary person. The abbreviation "k" in expressions like 100k is understood not as "x1000", but as "x1024". But if most ordinary people think that programming is mainly about mathematics, programmers know that logic comes first here.

7. Know how complicated simple things are on the Internet. After all, simple actions, like searching the Internet, are actually provided by many complex processes at different levels.

8. Think that most people are too vague when trying to explain what they want.


9. They get furious when ordinary people from among relatives, friends and acquaintances constantly ask to “fix the computer”.

10. It is quite possible for beauty to compare the code with a poem, although for the user it will look as terrible as an error message.

In the context of working with software products, people are divided into users and programmers (maintainers, implementers, etc.). This article is devoted to the relationship between these two categories. Perhaps this will help in resolving some conflicts between young professionals and users.

Most users are very conservative when it comes to automation. It can be very difficult to convince a person of the advisability of changing the system (docking problems arise, for some time you will have to work in two systems simultaneously, the new system may require a different approach to doing the usual work.) But gradually adapting to the new system, the user will appreciate all its advantages by Compared to the old one, this is the best reward for a programmer.

One small note.

Most users don't see the difference between a system administrator, a programmer, or a Unixoid. For them, a programmer means he can fix a computer, find everything on the Internet, solder a broken wire, restore information deleted from a hard drive. Of course, this is not entirely true, but such is the image of a programmer in the view of an ordinary user.

Some points that deserve special attention during the installation and further operation of the system:

  • Any user prefers to work with the same specialist who is aware of all the problems that periodically arise during operation. Therefore, whenever possible, avoid situations where another specialist works with your client.
  • Don't be too intrusive with your advice, especially if you're not asked for it. And do not insist on your point of view - just express your opinion. Let the final decision rest with the user.
  • Strive to improve your knowledge not only in programming, but also in the professional field of your client - this will allow you to communicate in the same language. Users often ask questions related to the specifics of their professional activities.
  • The user wants the system to work constantly and without failures. He cares little about explaining the reasons for the failure of his system. If, nevertheless, something happened (which is always part of the workflow), the user must know who is to blame and when the system will be adjusted.
  • Although the user always knows in advance about changes in the structure of the department, legislative changes, do not wait for him to ask about the timing of the system update. Always keep the user up to date with such information.

It often happens that people do not understand the difference between a system administrator and a programmer, and all IT people are called programmers. Some are offended, but some are already used to it. But I want to try to clarify this difference so that it is clear to most who read this article :)
If an organization has an IT department (engineering and technical), or, more simply, a computer department, then it has the following division:

- the main task is to control the operation of servers and server software, the administration of telephone exchanges, security policy - in general, these are the brains of the entire computer structure of the organization.

Technical support specialists (or engineers)- these are guys who deal with ordinary users' computers, set them up, help users solve current problems, catch viruses on users' computers, etc. etc. In fact, the Specialist is a future system administrator, because a system administrator can also perform the work of a specialist. A specialist can perform the work of a system administrator if he is allowed by the management - the management has more trust in the system administrator :)

Programmers- these are guys who constantly write various texts in a language that is incomprehensible to the average user. These texts are then turned into useful programs, utilities, or simply modules (additional options) for useful programs.

A few years ago, to the question “what do you work for?” you could meaningfully move your eyebrows and say: "computer". That was enough. Explaining subtle matters to unprepared people who, at best, could boast of a line in the resume "Confident PC user" was superfluous, as it would only give rise to even more questions. But times are changing, literacy is on the rise, and now that "confident PC user" has become a throwback, the once universal word "geek" has followed suit.

The professions of a programmer and a developer have a lot in common, and in everyday life these words are often used as synonyms, but there is a difference, although not always noticeable. Otherwise, why did such concepts as software developer, computer scientist and programmer appear at all?

Programming

Today there are no clearly defined rules of who is called a programmer and who is a developer. Therefore, there is no other way out than to turn to the origins.

Computers, the Internet, mobile communications, as well as a host of other wonderful things that are now in the public domain, if not invented by the military, then sooner or later fell under their sensitive wing and supervision. If anything can fly, shoot, explode, or defend against similar enemy action, here's a brigade of scientists. Subscribe, get it. In a high-tech age, a soldier without a scientist would have had a hard time - after all, even such trifles as berets and body armor absorbed a lot of technological know-how. What can we say about the programming of laser guns and intercontinental missiles!

If it were not for the need that stimulated the state to find money for financing, it is not known how many decades later we would have received computers and the Internet at our disposal. So those who have not had time yet can mentally thank the aggressor states that, in the fire of wars, gave birth and continue to give birth to new technologies.

And even having moved into the future for a couple of decades, it is still difficult to imagine any Bill Gates who would assemble a computer 17 meters long and more than 2.5 meters high in his garage, which would consist of 765 thousand parts, synchronized using 15 -meter shaft and was driven by an electric motor with a capacity of 5 horsepower - like Mark-1, developed by several Harvard mathematicians under contract with IBM in 1941.

This business was too laborious and brain-intensive, therefore historically it so happened that whoever built a computer “danced” it. There were few computers - the same "Colossus" by the end of the war, only 10 pieces worked. Only a few years later, the first commercial models began to appear - for example, IBM 701 (19 units were sold in the first year, or IBM 650 (450 units were already sold in the first year). The main buyers were scientific laboratories, airlines, government institutions.

And even if since 1965, thousands of Americans have begun to produce the PDP-8, which costs "only" 18 thousand dollars - it has an imperfect memory architecture, which is why a considerable number of resource-demanding projects have died on it. So programming in those days was not easy (hello hardware) and not at all as convenient and accessible as it is now. There were only a few people who knew how to program. Those who could earn something on this - even less. And all this time, the programmer deservedly keeps the fame of a “nerd”, a wearer of one sweater and a frequenter of libraries. What a child prodigy out of this world, who is engaged in a very narrow area, inaccessible to the masses.

Historically, people with brains who could talk to machines like “you” worked exclusively for the military-industrial complex or in science. From here true programmer in the historical sense of the word, this is a person who writes programs for the defense / weapons complex, for computing power in some design bureaus or scientific institutes, programming robots, rockets for space flight, and so on. Exclusively cases of national importance. Maximum innovation. Monetary interest is either absent or takes second place. The public doesn't care how many billions of dollars they gave to inventors for computers and the internet, and they don't care how much money went into the Apollo program either. But now everyone has a computer in their pocket, and on the moon there is a flag and footprints. Nobody remembers the rich, but everyone remembers the innovators, because the former consume, while the latter give.

Development

Commercial programming in its pure form did not exist and still does not exist - the word "programming" is clearly out of place here. Here development- another thing. The fact that Microsoft, IBM, HP, Apple and other computer pioneers were taking over markets and making huge amounts of money didn't change the fact that every new product was a step forward. They solved new, non-trivial problems.

Was Torvalds a programmer? Of course. After all, he wrote the kernel for Linux. At the same time, it does not matter at all whether he used the best practices and development methodologies in the course of his work (for example, whether he correctly named variables, whether he optimally used memory, and so on). The main thing is that it works. And the winners are not judged. Just like Brendan Eich, the creator of JavaScript, is not judged, although objectively there is something for it.

Is a genius and part-time chief of zeros and ones, being even smarter than Torvalds and Eich, a programmer, if he only does what he solves typical problems? For example, writes online stores. Leading question: a man who served in the special forces, but now works as a security guard in a store - is he a special forces officer or a security guard? Many guards, in order to look better in their own eyes, meaningfully rubbing army tattoos, call themselves special forces. Rarely will anyone put the word "former" next to their profession. But only a few admit that either they have lost their qualifications and therefore work in security, or they are too cool for their position, thereby firing a cannon at sparrows.

Some of today's programmers just resemble this special forces officer, who is clearly out of place and is solely engaged in making money by blowing his talent into the pipe. There is another, much more numerous category of people (99%) who call themselves programmers, but in fact they are developers (this category also includes bydlocoders). They write and change their own or someone else's code, communicate with the customer, clients, constantly fix bugs - because the developer can afford to allow them; they work not for an idea, but for loot: today for one uncle, tomorrow for another. Who will give more.

As one academician said, “A dissertation on philosophy must end with a revolution, otherwise it is not a dissertation”; or, in our opinion, the work of a programmer should end with a technological breakthrough. Otherwise, this is not the work of a programmer.

And do not be misled by the entries in the labor a la "software engineer of the first category". HRs themselves do not know what they are doing, using the stamps of a country that disappeared 25 years ago. It is enough to ask a leading question: “What are you working on now?”. Because you can do arbitrarily complex development with a cumbersome and difficult to understand architecture, stuffed with a lot of dependencies and brain-crushing elements that require extraordinary mental abilities. But if this is an online store, another “service” sucked out of your finger, a spam robot or, Jesus forbid, a browser game, and a person does not do programming in his free time, then it smells like development. As in the phrase "development of oil fields."

Therefore, to the question “Who do you work for?” a more accurate answer could be “I am a programmer at heart, but I work as a developer”, “I am a developer, but someday I will become a programmer”, or: “I am a developer, chopping cabbage”. When the situation requires an inaccurate and quick response, the "programmer" can be understood - after all developer in the context of software - the word is relatively new. But calling yourself a programmer, drinking juice in the backyard of outsourcing, is deceiving yourself.