20.02.2021

Category: 4 to 1 multiplexer using behavioral verilog code

4 to 1 multiplexer using behavioral verilog code

A multiplexer is a device that selects one output from multiple inputs. It is also known as a data selector. Multiplexers are used in communication systems to increase the amount of data that can be sent over a network within a certain amount of time and bandwidth. The multiplexer MUX functions as a multi-input and single-output switch.

The selection of the input is done using select lines. You can find the detailed working and schematic representation of a multiplexer here.

Well, in Verilog hardware descriptive language, we have four main abstraction layers or modeling styles. Now before jumping to the coding section, a brief description of each modeling style has been presented before you. As the name suggests, this style of modeling will include primitive gates that are predefined in Verilog. The prerequisite for this style is knowing the basic logic diagram of the digital circuit that you wish to code.

The input signals are D0 and D1. S is the select line with Y as its output. We can orally solve for the expression of the output that comes out to be:. For the gate level, we will first declare the module for 2: 1 MUX, followed by the input-output signals. The order of mentioning output and input variables is crucial here, the output variable is written first in the bracket, then the input ones. The module is a keyword here. Y is the output and D0D1 and S being input are written after.

Next comes the declaration of input, output, and intermediate signals. You might have noticed that other modeling styles include the declaration of variables along-with their respective data- types.

Next comes the instantiation part for gates. For example for not gate, Sbar is the output and S is the input. This is the design abstraction, which shows the internal circuitry involved. It is the hardware implementation of a system.

The dataflow level shows the nature of the flow of data in continuous assignment statements assign keyword. It describes the combinational circuit by their functions rather than their gate structures.

For coding in the dataflow style, we only need to know about the logical expression of the circuit. To start with this, first, you need to declare the module. Now since this the dataflow style, one is supposed to use assign statements.

I have used a ternary operator for the output Y. This operator? The hardware schematic for a multiplexer in dataflow level modeling is shown below.

You will notice that this schematic is different from that of the gate-level. It involves the symbol of a multiplexer rather than showing up the logic gates involved, unlike gate-level modeling. This level describes the behavior of a digital system. In most of the cases, we code the behavioral model using the truth table of the circuit. Now to find the expression, we will use K- map for final output Y. Since it is the behavioral modeling, we will declare the output Y as reg while the rest of the inputs as wire.

You should notice that the output is equal to the second input if the select line is high. Otherwise, it is equal to the first input itself.A multiplexer is a data selector which selects a particular input data line and produce that in the output section. It is implemented using combinational circuits and is very commonly used in digital systems. Sending data over multiplexing reduces the cost of transmission lines, and saves bandwidth. You can find a detailed explanation and schematic representation for multiplexers over here.

This article will deal with the modeling styles for an multiplexer. The gate-level modeling is virtually the lowest abstract level of modeling. This style of modeling will include primitive gates that are predefined in Verilog HDL. The designer should know the basic logic circuit and the logic gates that are employed in that circuit for a particular system.

There is another abstraction layer below gate-level: switch level modeling, which deals with the transistor technologies. First of all, we need to mention the timescale directive for the compiler. This will control the time unit, which measures the delays and simulation time, and time precision specifies how delays are rounded off for the simulation. The following code will be simulated in nanoseconds, as mentioned in the time unit 1 nsand the precision is up to 1 picosecond.

We can declare the data lines and select lines as vector nets also. In some of the complex circuits, we need intermediate signals, and they are declared as wire s.

If there exist more than two same gates, we can concatenate the expression into one single statement. The RTL schematic shows the hardware layout of a circuit. The following window will open up when you click on the RTL analysis section. This modeling represents the flow of the data through the combinational circuit. Instead, we should know the final output expression of the given circuit. This is the highest abstraction layer of all.

It emphasizes the behavior of the digital circuit. In most cases, implementing the truth table will describe the behavior with no failure. One can find numerous ways to implement the truth table, whether it is a nested if-else statement or case statement. In the structural style of modeling, we only define the physical structure of the circuit. This modeling is somewhat similar to gate-level modeling.Now before jumping to the coding section, a brief description of each modeling style has been presented before you.

As the name suggests, this style of modeling will include primitive gates that are predefined in Verilog. The prerequisite for this style is knowing the basic logic diagram of the digital circuit that you wish to code. We can orally solve for the expression of the output that comes out to be:.

For the gate level, we will first declare the module for 2: 1 MUX, followed by the input-output signals. The order of mentioning output and input variables is crucial here, the output variable is written first in the bracket, then the input ones.

Next comes the declaration of input, output, and intermediate signals. You might have noticed that other modeling styles include the declaration of variables along-with their respective data- types.

Verilog Code for 4:1 Mux using Structural Modeling

Next comes the instantiation part for gates. This is the design abstraction, which shows the internal circuitry involved. It is the hardware implementation of a system. For coding in the dataflow style, we only need to know about the logical expression of the circuit. The equation for mux is:. To start with this, first, you need to declare the module. This operator? Final code:. The hardware schematic for a multiplexer in dataflow level modeling is shown below. You will notice that this schematic is different from that of the gate-level.

It involves the symbol of a multiplexer rather than showing up the logic gates involved, unlike gate-level modeling. This level describes the behavior of a digital system. In most of the cases, we code the behavioral model using the truth table of the circuit. Behavioral modeling mainly includes two statements:. You should notice that the output is equal to the second input if the select line is high. Otherwise, it is equal to the first input itself. Now, if the S event is true, the output Y will be D1, else the output will be D0.Post a comment.

VHDL Projects. FaceBook Likes. Powered by Blogger. About Me Unknown View my complete profile. Popular Posts. Share to Twitter Share to Facebook. Newer Post Older Post Home. Search Here. Total Pageviews. Design of 8 : 3 Parity Encoder using conditional o Design of 8 nibble queue using Behavior Modeling S Design of 8 nibble Stack using Behavior Modeling S Design of Integer Counter using Behavior Modeling Design of Frequency Divider Divide by 10 using B Design of Frequency Divider Divide by 8 using Be Design of Frequency Divider Divide by 4 using Be Design of Frequency Divider Divide by 2 using Be Design of 4 Bit Comparator using Behavior Modeling Small Description about Behavior Modeling Style in Design of 4 to 1 Multiplexer using case statements Design of 2 to 4 Decoder using if-else statements Design of 4 to 2 Encoder using if -else statementsA demultiplexer is a circuit that places the value of a single data input onto multiple data outputs.

The demultiplexer circuit can also be implemented using a decoder circuit. The below diagram shows the circuit of the 1-to-4 demultiplexer. Here a 1 and a 0 are control or select lines y 0y 1, y 2, y 3 are outputs, and D in is the data line.

The values of a 1 a 0 determine which of the outputs are set to the value of D in. Here we will be elaborating on the first two. Along the way, we would also emphasize some common design errors. The module declaration is made as follows:. For starters, module is a keyword. It is followed by an identifier. After naming the module, in a pair of parentheses, we specify:. If a port has multiple bits, then it is known as a vector.

The reg data object holds its value from one procedural assignment statement to the next and means it holds its value over simulation data cycles. Another style of declaration in the port list is to declare the port size and port direction after the module declaration. Next up, since its behavioral modeling stylehere comes the always statement.

4 to 1 multiplexer using behavioral verilog code

Using the always statement, a procedural statement in Verilog, we will run the program sequentially. Y, A is known as the sensitivity list or the trigger list. The sensitivity list includes all input signals used by the always block. It controls when the statements in the always block are to be evaluated. The case statement in Verilog is analogous to switch-case in C language. First, let us see the general format to write a case statement in Verilog.

Otherwise, the default case is executed. So, now we can write. As we see here in the first case, 2'b00 represents the case when the input A is 2'b These cases indicate that, according to the value of Aone of the four statements is selected.

The colon then marks the end of a case item and starts the action that must happen in that particular case. The terms begin and end are part of the Verilog syntax if you are writing more than one statement in that block.

After this, those statements are mentioned, such as the output port Y[0] should be attached to the din, Y[] to 0and so on, according to the truth table.

This modeling is based on the behavior of the circuit; hence it is called behavioral modeling. Observe that we are not specifying the structure of the circuit, we are only creating the logic of the circuit which can implement that hardware. The test bench is the file through which we give inputs and observe the outputs.

It is a setup to test our Verilog code. We start by writing 'include which is a keyword to include a file. It is followed by the file name in inverted commas. The next line declares the name of the module for testbench according to the syntax as mentioned above. But we do not specify any ports in this module as there will be ports inside the testbench and not outside.

Here we declare the data types of the arguments used in the instantiation of the demultiplexer design. A continuous assignment statement assigns values to the wire datatype and makes a connection to an actual wire in the circuit.A multiplexer is a data selector device that selects one input from several input lines, depending upon the enabled, select lines, and yields one single output.

A multiplexer of 2 n inputs has n select linesare used to select which input line to send to the output. These devices are used extensively in the areas where the multiple data can be transferred over a single line like in the communication systems and bus architecture hardware.

Visit this post for a crystal clear explanation to multiplexers. The gate-level abstraction is the lowest level of modeling. The gate-level modeling style uses the built-in basic logic gates predefined in Verilog. We only need to know the logic diagram of the system since the only requirement is to know the layout of the particular logic gates.

The port-list will contain the output variable first in gate-level modeling. This is because the built-in logic gates are designed such that the output is written first, followed by the other input variables or signals. The intermediate signals are declared as wires.

Note that the intermediate signals are those that are not involved in the port list. Example: signals that are emerging from the NOT gate. Time for us to write for the logic gates. Separate the list for a particular gate by appropriate brackets, if there exists more than one same logic gate. Here s0bar and s1bar are the output to the first and second NOT gate respectively and s0 and s1 are the input to the first and second NOT gate. This hardware schematic is the RTL design of the circuit.

Notice the resemblance between the logic circuit of MUX and this picture. It is clear that the gate-level modeling will give the exact involved hardware in the circuit of the system. The dataflow modeling represents the flow of the data. It is described through the data flow through the combinational circuits rather than the logic gates used. It is necessary to know the logical expression of the circuit to make a dataflow model.

The equation for MUX is:. Start with the module and input-output declaration. Using the assign statement to express the logical expression of the circuit. A ternary operator? This operator works similar to that of C programming language. This shows that if s1 is high, the s0? Further, if s0 is high, d OR b will get transferred to the out variable, depending on the s1 select line, else c OR a will be the output.

Thus, the final code for the multiplexer using data-flow modeling is given below. The figure consists of two individual multiplexers, connected by the two select lines s0 and s1. The behavioral style, as the name suggests, describes the behavior of a circuit. It is the highest abstraction layer in the Verilog modeling of digital systems.

4 to 1 multiplexer using behavioral verilog code

The truth table of the MUX has six input variables, out of which two are select lines, and one is the output signal. The input data lines a, b, c, d are selected depending on the values of the select lines. To start with the behavioral style of coding, we first need to declare the name of the module and its port associativity list, which will further contain the input and output variables.

Point to be noted here; we are supposed to define the data- type of the declared variable also since it will account for the behavior of the input and output signals.In this post, we will take a look at implementing the VHDL code for a multiplexer using the behavioral architecture method.

We will also write a testbench to verify our code. Then we will generate the RTL schematic and the simulation waveforms. For the full code, scroll down. A multiplexer is a data selector. It has multiple inputs, out of which it selects one and connects it to the output. This selection is made based on the values of the select inputs.

VHDL code for multiplexer using behavioral method – full code and explanation

A mux will have two select inputs. Note the two begin statements with the process statement in between as is customary with behavioral architecture in VHDL. We will code the behavior of the circuit using the if-elsif statements that are available to us in the behavioral architecture. We have seen on multiple occasions in this VHDL course that the benefit of using the if-elsif statements versus the if-else statements is that you have to use only one closing statement for the entire command.

So you can encode multiple if statements and have to remember to use only one end if statement at the end of the VHDL program. The syntax for coding in the truth table is shown below:. We will be using a testbench with a process statement. You can check out the different types of testbenches in VHDL here. Were you able to encode your multiplexer?

4 to 1 multiplexer using behavioral verilog code

Let us know what you did differently by commenting below. Also, would you like us to include the VHDL code for an mux?

Verilog Code for Demultiplexer Using Behavioral Modeling

Related courses to VHDL code for multiplexer using behavioral method — full code and explanation. A free and complete Verilog course for students. Learn everything from scratch including syntax, different modeling styles and testbenches. A free course on digital electronics and digital logic design for engineers.

Everything is taught from the basics in an easy to understand manner. This site uses Akismet to reduce spam. Learn how your comment data is processed.

Umair Hussaini. Umair has a Bachelors Degree in Electronics and Telecommunication. Verilog course A free and complete Verilog course for students. Digital Electronics Course A free course on digital electronics and digital logic design for engineers.

Leave a Reply Cancel reply.


thoughts on “4 to 1 multiplexer using behavioral verilog code

Leave a Reply

Your email address will not be published. Required fields are marked *