Questions tagged [hdl]

HDL is a Hardware Description Language, a language used to design chips. The two major ones are Verilog and VHDL.

Taken from G.J. Lipovsky, "Hardware Description Languages: Voices from the Tower of Babel", Computer, Vol. 10, No. 6, June 1977, pp. 14-17. Paper available here.

A hardware description language can be used to describe the logic gates, the sequential machines, and the functional modules, along with their interconnection and their control, in a digital system. In a general sense, Boolean equations, logic diagrams, programrning languages, and Petri nets are hardware description languages: they can be used to describe some aspect of hardware and they have definable syntax and semantics. Specifically, what is more commonly referred to as a hardware description language is a variation of a programming language tuned to the overall needs of describing hardware.

Adapted from Hardware Description Language tutorial with very few modifications:

Hardware description language (HDL) is a specialized computer language used to program electronic and digital logic circuits. The structure, operation and design of the circuits are programmable using HDL. HDL includes a textual description consisting of operators, expressions, statements, inputs and outputs. Instead of generating a computer executable file, the HDL compilers provide a gate map. The gate map obtained is then downloaded to the programming device to check the operations of the desired circuit. The language helps to describe any digital circuit in the form of structural, behavioral and gate level and it is found to be an excellent programming language for FPGAs, CPLDs and ASICs.

The three common HDLs are Verilog, VHDL, and SystemC. Of these, SystemC is the newest. The HDLs will allow fast design and better verification. In most of the industries, Verilog and VHDL are common. Verilog, one of the main Hardware Description Language standardized as IEEE 1364 is used for designing all types of circuits. It consists of modules and the language allows Behavioral, Dataflow and Structural Description. VHDL (Very High Speed Integrated Circuit Hardware Description Language) is standardized by IEEE 1164. The design is composed of entities consisting of multiple architectures. SystemC is a language that consist a set of C++ classes and macros. It allows electronic system level and transaction modeling.

Need for HDLs

The Moore’s Law in the year 1970 has brought a drastic change in the field of IC technology. This change has made the developers to bring out complex digital and electronic circuits. But the problem was the absence of a better programming language allowing hardware and software codesign. Complex digital circuit designs require more time for development, synthesis, simulation and debugging. The arrival of HDLs has helped to solve this problem by allowing each module to be worked by a separate team.

All the goals like power, throughput, latency (delay), test coverage, functionality and area consumption required for a design can be known by using HDL. As a result, the designer can make the necessary engineering tradeoffs and can develop the design in a better and efficient way. Simple syntax, expressions, statements, concurrent and sequential programming is also necessary while describing the electronics circuits. All these features can be obtained by using a hardware description language. Now while comparing HDL and C languages, the major difference is that HDL provides the timing information of a design.

Benefits of HDL

The major benefit of the language is fast design and better verification. The Top-down design and hierarchical design method allows the design time; design cost and design errors to be reduced. Another major advantage is related to complex designs, which can be managed and verified easily. HDL provides the timing information and allows the design to be described in gate level and register transfer level. Reusability of resources is one of the other advantage.

See also:

906 questions
0
votes
2 answers

else block of if-else acting differently to different conditions

I'm coding a simple shift register using if else block. I noticed that the else block works as it should when the control signal is control = 2'b00 (meaning it retains the default vale) but when I give the control value control = 2'b11 it starts…
ipunished
  • 684
  • 2
  • 6
  • 22
0
votes
1 answer

Verilog HDL Negate Monitor Variable

I am teaching myself Verilog HDL as of today and attempting to understand. I am trying to display the opposite/negation of a variable in bit form that is passing through a logic diagram example. module My_Implementation(); reg A,B,C,D; wire…
Lakeside
  • 35
  • 1
  • 4
0
votes
1 answer

Verilog: Reg is not declared

Here is the declaration of the reg assignment reg [5:0]R = {bi7 ,[15:11]RGB}; //bi7 is a parameter but at the last line of the module i get this error where it points at the same reg assignment. ERROR:HDLCompiler:69 - "path.v" Line 58: is not…
0
votes
2 answers

Multiplying number by ten in verilog

How do you multiply a binary number by ten in verilog? Is it as simple as reg [7:0] a,b; reg[31:0] p; b= 8'b00001001; p=a*b; Upgraded to windows 8 and my xilinx is working atm. Need to know asap for planning stage.
David Flanagan
  • 373
  • 2
  • 7
  • 19
0
votes
1 answer

Is it possible to write verification procedures on simulations in ModelSim?

I am using ModelSim in order to design and simulate CPU architectures. For those like me who know about this, you are also probably aware that it is really difficult to verify simulation data when trying to handle all those signals in front of…
Andry
  • 16,172
  • 27
  • 138
  • 246
0
votes
1 answer

How to read and write using block ram?

How to read and write using block ram in spartan 3? I read in sim.pdf a manual of xilinix that each write needs one clock cycle and each read too as the BRAMs are synchronus. Are we supposed to make a finite state machine free each of the write and…
BlueHorse
  • 1
  • 1
  • 1
0
votes
1 answer

VHDL IEEE standard lib vs. component

I'm working on a VHDL project for a Xilinx FPGA, and found myself at a cross road. I need for example to add two signals (C=A+B), and found that Xilinx has Tool that can generate a component which will do the job. But this could also be implemented…
JakobJ
  • 1,253
  • 3
  • 16
  • 29
0
votes
2 answers

Signal or variable counter inside a generate statement

I have a problem with a generate statement. I'm generating a pipeline architecture, the basic problem is that I need another counter or variable besides the for index: architecture behav of blockPipelineCordic is constant total: integer :=…
nexobios
  • 1
  • 1
  • 2
0
votes
2 answers

Testing PCI Interface on FPGA

My boss has given a code for testing PCI express on an Altera board. The code consist of several c code files having instructions such as reading Bios, setting some registers, writing to buffers etc. My job at present is to see the functionality of…
gpuguy
  • 4,607
  • 17
  • 67
  • 125
-1
votes
1 answer

Synchronizing Negative-Edge and Positive-Edge Triggered Flip-Flops in HDL

I'm working on a VLSI design using SystemVerilog, and I have doubts with the use of signals between negative-edge and positive-edge triggered flip-flops. I have a negative-edge triggered flip-flop (reg1), and another for a positive-edge triggered…
-1
votes
1 answer

What is "first node name can be top of a hierarchy in Verilog" mean?

Is mod_2 and mod1 the top of the hierarchy? module Middle; initial begin fork:mod_1 #5 mod_2.mod_3.x=1; join fork:mod_2 fork:mod_3 reg x ; join join end endmodule Above codes also works and I can even use module name at…
-1
votes
1 answer

Iterating over struct members, SystemVerilog

I have a type parameter t, that expects a struct, I then want to; in a generate block, iterate over each named field/member in said struct to generate some code: typedef struct packed { bit a, bit[7:0] b, bit[15:0] c }; module x…
Guilty
  • 464
  • 4
  • 13
-1
votes
1 answer

Why would a non-blocking assignment like this cause the process to re-enter?

always @(clk) begin #10 clk <= ~clk;end //works always @(clk) begin #10 clk = ~clk;end //doesn't work Works means execution re-enters the always block, behaves like a oscillator. Does not work mean it execute only once. I've read…
-1
votes
1 answer

Using an entity from a different project (vhdl) (error: 10481)

I need to use an entity 'task3' from a different project 'lab3' the file name I need it from is also 'task3'. My current project is 'lab4'. The following is the current code for lab4. library ieee; use ieee.std_logic_1164.all; use…
-1
votes
1 answer

output or inout port must be connected to a structural net expression

Block1 module block1 (clk, inA, outA, outB, outC); input clk, inA; output outA, outB, outC; reg outA, outB, outC; always @ (posedge clk) begin outA = inA; outB = outA; outC = outB; end endmodule Block2 module block2 (clk, inA, outA,…
CJ. T
  • 1
  • 2