23

Just like a procedural programming language goes through several steps (compile, assemble, link) to produce an executable, HDLs must pass through several processes before a usable configuration file for the FPGA is generated. These include Synthesis --- convert the HDL code into a netlist describing connections between logical elements. Mapping --- Convert ...


19

Triplication means (as noted) to make 3 of everything. It is used in space and safety critical designs, and data results are voted; a disagreement in the vote has to be designed such that the erroneous result circuit is reset. For this to work within a single device, partial reconfiguration in the FPGA is required. The reason this is necessary in SRAM ...


16

Register Transfer Logic (RTL) is the result of the first translation phase, before it is mapped to the vendor-specific resources, which are not portable between vendors or even between different FPGA from the same vendor. Essentially RTL shows both the combinational logic and the synchronous registers (D flip flops), so state machines are recognizable. RTL ...


13

I also read an article that they are used for testing purposes alone. That is so ridiculous that I think you misunderstood the article. FPGAs are used for various applications, including data processing in specialized applications, and as glue logic in low volume applications where developing a fixed function ASIC would not be viable. Open up all kinds of ...


12

Your interpretation is overly simplistic. Real FPGAs have a complex hierarchy of routing resources, some for local connections only, some for medium-range connections and some for spanning the entire chip. These structures have been developed over many years of studying application designs, trying to strike a balance between the area required for routing ...


11

By default, Quartus II used to set unused pins as outputs driving low. This wasn't good as you can imagine - one wrong pin constraint and a used input pin could be wrongly considered unused and be driving a shorting low onto the input signal. In more recent versions, it was changed to the sensible 'as input tri-stated with weak pull-up', which saved me ...


11

The physical primitive of an FPGA is a configurable logic block (CLB). Each logic block is given a dedicated location in memory, so-called configuration memory, that determines how it is configured and where it connects to. HDL ultimately ends up as a bunch of ones and zeroes, a so-called bitstream that is placed in this configuration memory. Most FPGAs ...


10

The simple answer is maybe, but probably not. It really depends what is using the memory. It is important to consider the structure of the memory. The M9K memory modules are true dual port. This means that they have two independent read/write ports. Each of these ports has one address bus, one read data bus, and one write data bus. What that means is that ...


9

It's non-obvious how to use the QuartusII built in reports. You need to start from the page Multicorner Timing Analysis Summary and look down the right hand side looking for any setup, hold, recovery or removal slacks that are negative. Once you find the failing clock and type of failure (setup, hold) you can hunt around for the details in other sections. As ...


8

You have a conceptual difficulty here. VHDL is not a program in the computer program sense, it is a DESCRIPTION how hardware elements are connected. There is no particular order. Once you "program" the VHDL code into FPGA, it creates proper links between logical blocks and configures them. Once you turn the power on and configuration bits are loaded into ...


7

Without the code, you can only expect general advice. However the most likely scenario is that the outputs don't actually depend on the inputs, so that optimisation eliminates all the logic in between them and hardwires the outputs to '1', '0' or 'Z'. This can often be due to a mistake in your logic, or a reflection of the fact that you are trying out an ...


7

http://quartushelp.altera.com/10.0/mergedProjects/reference/glossary/def_alm.htm The Adaptive Logic Module (ALM) is the basic building block of supported device families and is designed to maximize performance and resource usage. Each ALM, composed of two Adaptive Look-Up Tables (ALUT) ... LE has meant "logic element" for many years, although what ...


7

Inside an 'always' block remove the assign, just use LEDG[index] = ... Also, change the output declaration to 'output reg [7:0] LEDG'. The reg data type is the variable data type referenced by the error message.


7

The presented four-phase synchronizer is a good and correct implementation. It has only one disadvantage: It has a V input, to notify the synchronizer of changed inputs. This can be automated by a n-bit register in the source clock domain and n-bit comparator: if input changed, assert V=1. Input_d <= Input when rising_edge(Clock); V <= '1' ...


7

The FPGA doesn't use 5V, but some of the other parts on the board might. (The HD44780 LCD they're using often requires 5V on VCC, for instance.) Since it's there, they might as well provide it on the expansion connector in case you find it useful. Absolutely not. The clamp diodes are a last resort, and are only intended to protect the FPGA from brief ...


7

Add this tcl expression... set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL ... to either assignment_defaults.qdf or the .qsf file. Both should be in the project's directory. The .qdf file may need to be created.


6

(a) My own preference is (strongly) for VHDL - in many ways, with VHDL, you know where you are, more accurately, than in Verilog. I described some of these ways in this answer and another answer there gave this useful link. VHDL is said to be more verbose, but I find that its HLL features let me create hardware at a higher level, and that offsets the ...


6

I'll preface this with the caveat that I'm not that up to date on the interior workings of recent FPGA architectures. So this answer may not be appropos. depending upon whether the FPGA tools support the design flow I will discuss. It's probably true the total volume of raw gates shipped into the market are probably latch based designs. This is because of ...


6

My usual technique is to implement a 2-stage synchronizer to bring the asynchronous input in to the clock's timing domain, and then use one more flip-flop as the edge detector. Depending on the logic you use in the last statement, you can detect rising edges, falling edges or both. module control ( output logic pcEn, input clock, ready ); reg r1,...


6

No, it's not possible to do this. The module.wire syntax works in some systems, but all the synthesis tools will require you to use the ports properly.


6

You do not drive LEDR output at all. You need an assignment like: assign LEDR = M; You probably wanted to achieve that by assigning LEDR[3:0] to M (i.e. assign M = LEDR[3:0]), but this two assignments are not equivalent in Verilog.


6

Unfortunately no. There is no way to modify Quartus to work with an unsupported device. You'd have to find an older version of Quartus which supports the device and use that. Alternatively, and probably more sensibly, you could upgrade to a more modern device. There are for example many Cyclone V based dev kits that are pretty cheap, though I'll let you ...


6

I've also now just tried compiling for a Stratix V with Quartus 15.0 which does have M20K blocks, and you are correct - it infers two M20Ks which should not be the case. In fact using the Verilog test code I have just removed from my answer also infers two M20Ks. Why? The True Dual-Port Requirements A single-port RAM of the size you are interested in ...


6

Just connect it up directly with a wire (you will see a little blob appear to show it is connected). Then, name the bus something like name[msb..lsb], and then name the wire name[whichbit]. That will tell Quartus to connect them because they both have the same name and tell it which bit it should connect to. You will get errors if you choose a whichbit which ...


6

Since you say you met the correct functionality at 2 MHz, but not in higher frequency. It is most probably a setup/hold timing violation. Do timing analysis of the entire design for clock constraint 325 MHz and verify that your design will work at 325 MHz. Then proceed to on-board testing.


5

In the main menu (File|Edit|etc.) choose Assignments->Assignment Editor (or simply Ctrl+Shift+A). A window/tab with the assignments will open. In there you can add the assignment that you want, which in this case is I/O Maximum Toggle Rate for the related pin. The drop-down list under Assignment Name is long and alphabetically ordered, and since the ...


5

VCCINT is indeed the power to the logic core of the chip. The "banks" refer to the I/O pads, which are divided into groups; each I/O bank can have a different supply voltage for compatibility with different kinds of external interfaces. Those bank VCC connections supply power only to the I/O pads, and have nothing to do with the core logic supply. To ...


Only top voted, non community-wiki answers of a minimum length are eligible