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 ...


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 ...


10

Modern digital logic devices are usually(*) designed with "synchronous design practice": a globally synchronous edge-triggered register-transfer design style (RTL): All sequential circuits are broken up into edge-triggered registers connected to the global clock signal CLK and pure combinational logic. That design style allows people to quickly design ...


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 ...


9

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 ...


8

From Wikipedia: In a synchronous circuit clock skew (\$T_{Skew}\$) is the difference in the arrival time between two sequentially-adjacent registers. Given two sequentially-adjacent registers \$R_i\$ and \$R_j\$ with clock arrival times at register clock pins as \$T_{Ci}\$ and \$T_{Cj}\$ respectively, then clock skew can be defined as: $$T_{...


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

When you assign to a register in an edge-sensitive always block, you're defining a flip-flop. FPGAs do not have flip-flops that can trigger on both edges of a clock. In order to do what you want, you are going to need to have two separate always blocks, one for each edge of the clock, and then figure out a way to combine the outputs of the two blocks ...


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

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 ...


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

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 ...


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

Add this tcl expression... set_global_assignment -name NUM_PARALLEL_PROCESSORS 4 ... 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

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

Make sure you have selected the proper programming hardware by clicking 'Hardware Setup...' (e.g. 'USB-Blaster'). Select the proper 'Mode' from the dropdown based on what your target board supports. For Active Serial Programming, click 'Add File...' and select the .pof file (I think the dialog forces this). JTAG and Passive Serial modes use .sof files. For ...


5

There are two reasons. The pins on Cyclone II chips can supply only around 8mA of current. On the DE2 board, the expansion header pins are connected to the FPGA through a 47 ohm resistor. If your expansion device draws too much current, the voltage will drop.


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