Wednesday, February 29, 2012

Dual Priority Encoder VHDL code (A dual-priority encoder returns the codes of the highest and second-highest priority requests)

Project specification:
A dual-priority encoder returns the codes of the highest and second-highest priority requests.
The input is the 10-bit r signal, in which the r(10) has the highest priority and r(1) has the lowest
priority. The outputs are fst and snd, which are the 4-bit binary codes of the highest and secondhighest
priority requests, respectively. The input and output signals are
   input:
r: 10-bit input request

   output:
fst: 4-bit output, the binary code of the highest priority request
snd: 4-bit output, the binary code of the second-highest priority request


Design Procedures:
   1. Encoder circuit
The best way to derive efficient VHDL code is to think in terms of hardware. First, draw a
conceptual top-level schematic diagram (i.e., what you will do if no HDL/synthesis software is
available) and then derive the code accordingly.


   2. Testing circuit with 7-segment display
Use 10-bit switch as the request signal. Decode the fst and snd signals and display the two
codes in hex format in two seven-segment LED displays.


   3. Implementation with truth table
A combination circuit can be exhaustively specified by a truth table, which can be realized by
one VHDL selected assignment statement. For the 10-request dual-priority encoder in this
experiment, a 210-by-8 table is needed. The architecture body looks like
architecture table_arch of dual_prio is
signal both: std_logic_vector(7 downto 0); -- codes of 1st & 2nd
begin
with r select
both <=
"00000000" when "0000000000", -- 1st:0; 2nd:0
"00010000" when "0000000001", -- 1st:1; 2nd:0
"00100000" when "0000000010", -- 1st:2; 2nd:0
"00100001" when "0000000011", -- 1st:2; 2nd:1
... -- 1024 lines
fst <= both(7 downto 4);
snd <= both(3 downto 0);
end table_arch;
While the code is straightforward, manually completing the 1024 rows is tedious and time
consuming. If you wish, you can write a program in the language of your choice (C, Java, Perl,
etc.) to generate theses rows and copy/paste them to the VHDL code.

Priority encode VHDL code:
library ieee;
use ieee.std_logic_1164.all;
entity prio_encoder is
port
(
p: in std_logic_vector(10 downto 1);
pcode: out std_logic_vector(3 downto 0)
);
end prio_encoder;
architecture encode of prio_encoder is
begin
process(p)
begin
if (p(10)='1') then
pcode <= "1010";
elsif (p(9)='1')then
pcode <= "1001";
elsif (p(8)='1')then
pcode <= "1000";
elsif (p(7)='1')then
pcode <= "0111";
elsif (p(6)='1')then
pcode <= "0110";
elsif (p(5)='1')then
pcode <= "0101";
elsif (p(4)='1')then
pcode <= "0100";
elsif (p(3)='1')then
pcode <= "0011";
elsif (p(2)='1')then
pcode <= "0010";
elsif (p(1)='1')then
pcode <= "0001";
else
pcode <= "0000";
end if;
end process;
end encode;

4 to 10 bit Decoder VHDL code:

library ieee;
use ieee.std_logic_1164.all;
entity decoder_4_10 is
   port(
      x: in std_logic_vector(3 downto 0);
      y: out std_logic_vector(10 downto 1)
   );
end decoder_4_10;
architecture if_arch of decoder_4_10 is begin
   process(x)
   begin
      if (x="1010") then
         y <= "1000000000";
      elsif (x="1001")then
         y <= "0100000000";
      elsif (x="1000")then
         y <= "0010000000";
      elsif (x="0111")then
         y <= "0001000000";
      elsif (x="0110")then
         y <= "0000100000";
      elsif (x="0101")then
         y <= "0000010000";
      elsif (x="0100")then
         y <= "0000001000";
      elsif (x="0011")then
         y <= "0000000100";
      elsif (x="0010")then
         y <= "0000000010";
      elsif (x="0001")then
         y <= "0000000001";
      else
y <= "0000000000";
      end if;
   end process;
end if_arch;


Dual priority bit checker VHDL code:

use ieee.std_logic_1164.all;
entity dual_prio is
 port
 (
r: in std_logic_vector(9 downto 0);
fst, snd: out std_logic_vector(3 downto 0);
hex0, hex1: out std_logic_vector(6 downto 0)
 );
end dual_prio;
architecture func_dual_prio of dual_prio is
--signal p: std_logic_vector(10 downto 1);
signal q: std_logic_vector(3 downto 0);
signal s: std_logic_vector(3 downto 0);
--signal m: std_logic_vector(3 downto 0);
signal n: std_logic_vector(10 downto 1);
signal z: std_logic_vector(10 downto 1);
begin
prio1_unit: entity work.prio_encoder(encode)
      port map(p=>r, pcode=>q);
fst <= q;
hex1_unit: entity work.hex_toshow_LES(arch)
      port map(bin=>q, sseg=>hex1);
deco1_unit: entity work.decoder_4_10(if_arch)
      port map(x=>q, y=>n);
z <= (not n) and r;
prio2_unit: entity work.prio_encoder(encode)
      port map(p=>z, pcode=>s);
snd <= s;
hex0_unit: entity work.hex_toshow_LES(arch)
      port map(bin=>s, sseg=>hex0);
end func_dual_prio;

LED hexes to show LES VHDL code:
library ieee;
use ieee.std_logic_1164.all;
entity hex_toshow_LES is
   port(
      bin: in std_logic_vector(3 downto 0);
      sseg: out std_logic_vector(6 downto 0)
   );
end hex_toshow_LES;
architecture arch of hex_toshow_LES is
begin
with bin select
         sseg <=
"1000000" when "0000",
"1111001" when "0001",
"0100100" when "0010",
"0110000" when "0011",
"0011001" when "0100",
"0010010" when "0101",
"0000010" when "0110",
"1111000" when "0111",
"0000000" when "1000",
"0010000" when "1001",
"0001000" when "1010",
"0000011" when "1011",
"1000110" when "1100",
"0100001" when "1101",
"0000110" when "1110",
"0001110" when others;
end arch; 

Comparator Circuit (2-bit, 4-bit, 8-bit) VHDL code (A comparator compares two n-bit inputs and generates three status signals)

Project specification:
A comparator compares two n-bit inputs and generates three status signals. The input and
output signals are
   input:

a: n-bit input operand
b: n-bit input operand
  output:

lt: 1-bit output. It is asserted when a is larger than b.
st: 1-bit output. It is asserted when a is smaller than b.
eq: 1-bit output. It is asserted when a is equal to than b.


Design Procedures:

   1. 2-bit comparator
In a 2-bit comparator, the input size of an operand (i.e., n) is 2. The circuit should have four inputs and three outputs.

   2.4-bit comparator

In a 4-bit comparator, the input size of an operand (i.e., n) is 4. The circuit should have eight inputs and three outputs. The circuit can be constructed from two 2-bit comparators of theprevious section.

   3. 4-bit comparator with 7-segment display
An additional seven-segment LED display can be used to show the output status. The display will show “L”, “E” or “S” pattern for the larger-than, equal-to, or smaller-than condition. Conditional signal assignment or selected signal assignment statements can be used for the 7- sgement LED circuit.

   4. 8-bit comparator
In an 8-bit comparator, the input size of an operand (i.e., n) is 8. The circuit should have 16 inputs and three outputs. The circuit can be constructed from the previously designed comparators.

2-bit Comparator VHDL code:

library ieee;
use ieee.std_logic_1164.all;
entity comp2 is
port(
a,b: in std_logic_vector(1 downto 0);
lt, st, eq: out std_logic
);
end comp2;
architecture bit2_Comparator of comp2 is
signal p0,p1,p2,p3,p4,p5,p6,p7,p8,p9: std_logic;
begin
eq <= p0 or p1 or p2 or p3;
p0 <= ( (not a(1)) and (not a(0)) and (not b(1)) and (not b(0)) );
p1 <= ( (not a(1)) and a(0) and (not b(1)) and b(0) );
p2 <= ( a(1) and (not a(0)) and b(1) and (not b(0)) );
p3 <= ( a(1) and a(0) and b(1) and b(0) );
st <= p4 or p5 or p6;
p4 <= ( (not a(0)) and b(1) and b(0) );
p5 <= ( (not a(1)) and (not a(0)) and b(0) );
p6 <= ( (not a(1)) and b(1) );
lt <= p7 or p8 or p9;
p7 <= ( a(1) and a(0) and (not b(0)) );
p8 <= ( a(1) and (not b(1)) );
p9 <= ( a(0) and (not b(1)) and (not b(0)) );
end bit2_Comparator;
4-Bit Comparator VHDL code:

library ieee;
use ieee.std_logic_1164.all;
entity comp4 is
port(
a,b: in std_logic_vector(3 downto 0);
lt, st, eq: out std_logic;
LED: out std_logic_vector(6 downto 0)
);
end comp4;
architecture bit4_Comparator of comp4 is
signal e1,e0,s1,s0,l1,l0: std_logic;
begin
comp1_unit: entity work.comp2(bit2_Comparator)
port map(a(1)=>a(3), a(0)=>a(2), b(1)=>b(3), b(0)=>b(2), eq=>e1, st=>s1, lt=>l1 );
comp2_unit: entity work.comp2(bit2_Comparator)
port map(a(1)=>a(1), a(0)=>a(0), b(1)=>b(1), b(0)=>b(0), eq=>e0, st=>s0, lt=>l0 );
eq <= e1 and e0;
lt <= l1 or (e1 and l0);
st <= s1 or (e1 and s0);
end bit4_Comparator;
4-bit comparator with 7-segment display:
library ieee;
use ieee.std_logic_1164.all;
entity comp4 is
port(
a,b: in std_logic_vector(3 downto 0);
lt, st, eq: out std_logic;
LED: out std_logic_vector(6 downto 0)
);
end comp4;
architecture bit4_Comparator of comp4 is
signal e1,e0,s1,s0,l1,l0: std_logic;
begin
comp1_unit: entity work.comp2(bit2_Comparator)
port map(a(1)=>a(3), a(0)=>a(2), b(1)=>b(3), b(0)=>b(2), eq=>e1, st=>s1, lt=>l1 );
comp2_unit: entity work.comp2(bit2_Comparator)
port map(a(1)=>a(1), a(0)=>a(0), b(1)=>b(1), b(0)=>b(0), eq=>e0, st=>s0, lt=>l0 );
eq <= e1 and e0;
lt <= l1 or (e1 and l0);
st <= s1 or (e1 and s0);
LED(6) <= l1 or (e1 and l0);
LED(4) <= s1 or (e1 and s0);
LED(2) <= l1 or (e1 and l0) or (e1 and e0);
LED(1) <= e1 or l1 or s1;
LED(0) <= l1 or (e1 and l0);

   sseg_unit: entity work.hex_toshow_LES(arch)
port map(s=>st, l=>lt, sseg=>LED);
"0001000" when (l='1') else  --larger
"0010010" when (s='1') else --smaller
"0000110";
end bit4_Comparator;

8-bit Comparator VHDL code:

library ieee;
use ieee.std_logic_1164.all;
entity comp8 is
port(
a,b: in std_logic_vector(7 downto 0);
lt, st, eq: out std_logic
);
end comp8;
architecture bit8_Comparator of comp8 is
signal e1,e0,s1,s0,l1,l0: std_logic;
begin
comp1_unit: entity work.comp4(bit4_Comparator)
port map(a(3)=>a(7), a(2)=>a(6), a(1)=>a(5), a(0)=>a(4), b(3)=>b(7), b(2)=>b(6), b(1)=>b(5), b(0)=>b(4), eq=>e1, st=>s1, lt=>l1 );
comp2_unit: entity work.comp4(bit4_Comparator)
port map(a(3)=>a(3), a(2)=>a(2), a(1)=>a(1), a(0)=>a(0), b(3)=>b(3), b(2)=>b(2), b(1)=>b(1), b(0)=>b(0), eq=>e0, st=>s0, lt=>l0 );
eq <= e1 and e0;
lt <= l1 or (e1 and l0);
st <= s1 or (e1 and s0);
end bit8_Comparator;


Majority Circuit VHDL Code (a circuit that counts 4 votes and displays the results)

Project specification:
We want to design a circuit that counts 4 votes and displays the results. Only VHDL logical operators (i.e., and, or, not, and xor) can be used in VHDL code and no process is allowed.

Our input and outputs should be as follows:

  1. v: 4-bit inputs representing 4 votes, with 1 for yes and 0 for no..output
  2. fail: 1-bit output. It is asserted when the motion fails (i.e., less than two 1’s).
  3. tie: 1-bit output. It is asserted when the vote is a tie (i.e., two 1’s and two 0’s).
  4. pass: 1-bit output. It is asserted when there is a majority (i.e., three or four 1’s).

Majority Circuit VHDL code:
library ieee;
use ieee.std_logic_1164.all;
entity majority_circuit is
port(
v: in std_logic_vector(3 downto 0);
fail, tie, pass: out std_logic
);
end majority_circuit;
architecture decisionMaker of majority_circuit is
signal p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13: std_logic;
begin
fail <= p0 or p1 or p2 or p3;
p0 <= ((not v(3)) and (not v(2)) and (not v(0)));
p1 <= ((not v(3)) and (not v(2)) and (not v(1)));
p2 <= ((not v(3)) and (not v(1)) and (not v(0)));
p3 <= ((not v(2)) and (not v(1)) and (not v(0)));
tie <= p4 or p5 or p6 or p7 or p8 or p9;
p4 <= ((not v(3)) and (not v(2)) and v(1) and v(0));
p5 <= ((not v(3)) and v(2) and (not v(1)) and v(0));
p6 <= ((not v(3)) and v(2) and v(1) and (not v(0)));
p7 <= (v(3) and (not v(2)) and (not v(1)) and v(0));
p8 <= (v(3) and (not v(2)) and v(1) and (not v(0)));
p9 <= (v(3) and v(2) and (not v(1)) and (not v(0)));
pass <= p10 or p11 or p12 or p13;
p10 <= (v(3) and v(2) and v(0));
p11 <= (v(2) and v(1) and v(0));
p12 <= (v(3) and v(1) and v(0));
p13 <= (v(3) and v(2) and v(1));
end decisionMaker;

Tuesday, February 28, 2012

4-Request Priority Encoder VHDL Code (Conditional Signal Assignment)

Conditional Signal Assignment
Syntax:
• Overall effect somewhat like if-then-else
• Simplified syntax:
signal_name
<= value_expr_1 when boolean_expr_1 else value_expr_2 when boolean_expr_2 else value_expr_3 when boolean_expr_3 else . . . value_expr_n Sample VHDL code for 4-request priority encoder:
library ieee;
use ieee.std_logic_1164.all;
entity prio_encoder is
port(
r: in std_logic_vector(4 downto 1);
pcode: out std_logic_vector(2 downto 0)
);
end prio_encoder;

architecture cond_arch of prio_encoder is
begin
pcode <= "100" when (r(4)='1') else
"011" when (r(3)='1') else
"010" when (r(2)='1') else
"001" when (r(1)='1') else
"000";
end cond_arch;

Phase control thyristors Research Details

Phase control thyristors

Manufacturer: Vishay Micro Measurements

Data sheet: Attachment

Price quotations:




Highest voltage: 1600 V

Highest current: 9420 A





Parameter
Rating Values
Units
I
720
A
IT(AV)@Ths
55
0C
IT(RMS)
1420
A
IT(RMS)@Ths
25
0C
9000
A
9420
A
VDRM/VRRM
400 - 1600
V







Local Distributors:

Allied Electronics
5755 Granger Road
Ste 756
Independence, Ohio
44131
United States
Phone: 1-800-433-5700     
Fax: 1-216-335-9979


What is Schottky Barrier Diode?

Manufacturer: Sanyo

Product: Schottky Barrier Diode (Twin Type · Cathode Common)

Model Number: SBA120-18

Ratings:  180V, 12A Rectifier

Description: SBA120-18J is a dual 180 V, 12 A Schottky barrier diode for high frequency circuit rectification in switching regulators, converters, and choppers. It has a common cathode configuration.

Budgetary Price/Unit: $2.3593

Applications

· High frequency rectification (switching regulators,

 converters, choppers).



Features

· Low forward voltage (VF max=0.85V).

· Fast reverse recovery time.

· Low switching noise.

· High reliability due to highly reliable planar

 structure.

· Micaless package facilitating easy mounting.

Moisture Sensitivity level (MSL) for surface mount devices (lead free measured at 260°C reflow, non lead free at 235°C reflow)

Vendors in Ohio: Bear VAI Technology
6910 Treeline Dr., Unit H
Brecksville , Ohio  44141
(440) 526-1991









What are the principal functions of the 4 layers in generic information system architecture?

What are the principal functions of the 4 layers in generic information system architecture?
Answer: 1. The top layer is responsible for implementing the user interface. In this case, the
UI has been implemented using a web browser.
2. The second layer provides the user interface functionality that is delivered through the web browser. It includes components to allow users to log in to the system and checking components that ensure that the operations they use are allowed by their role. This layer includes form and menu management components that present information to users, and data validation components that check information consistency.
3. The third layer implements the functionality of the system and provides components that implement system security, patient information creation and updating, import and export of patient data from other databases, and report generators that create management reports.
4. Finally, the lowest layer, which is built using a commercial database management system, provides transaction management and persistent data storage.

What are transaction-processing applications?

What are transaction-processing applications?
Answer: Transaction processing (TP) systems are designed to process user requests for information from a database, or requests to update a database. Technically, a database transaction is sequence of operations that is treated as a single unit (an atomic unit). All of the operations in a transaction have to be completed before the database changes are made permanent. This ensures that failure of operations within the transaction does not lead to inconsistencies in the database. An example of a transaction is a customer request to withdraw money from a bank account using an ATM.

Briefly describe pipe and filter architecture?

Briefly describe pipe and filter architecture?
Answer: Pipe and filter architecture is a model of the run-time organization of a system where functional transformations process their inputs and produce outputs. Data flows from one to another and is transformed as it moves through the sequence. Each processing step is implemented as a transform. Input data flows through these transforms until converted to output. The transformations may execute sequentially or in parallel. The data can be processed by each transform item by item or in a single batch.

What is the most important advantage of client-server architecture?

What is the most important advantage of client-server architecture?
Answer: The most important advantage of this model is that servers can be distributed across a network. General functionality (e.g., a printing service) can be available to all clients and does not need to be implemented by all services.

What is the fundamental characteristic of repository architecture?

What is the fundamental characteristic of repository architecture?
Answer: The majority of systems that use large amounts of data are organized around a shared database or repository. This model is therefore suited to applications in which data is generated by one component and used by another. Examples of this type of system include command and control systems, management information systems, CAD systems, and interactive development environments for software. Organizing tools around a repository is an efficient way to share large amounts of data. There is no need to transmit data explicitly from one component to another. However, components must operate around an agreed repository data model. You should use this pattern when you have a system in which large volumes of information are generated that has to be stored for a long time. You may also use it in data-driven systems where the inclusion of data in the repository triggers an action or tool.

What is an architectural pattern?

What is an architectural pattern?
Answer: An architectural pattern is a stylized description of good design practice, which has been tried and tested in different environments. Patterns are a means of representing, sharing and reusing knowledge. Patterns should include information about when they are and when they are not useful. Patterns may be represented using tabular and graphical descriptions.

What are the fundamental architectural views proposed in Krutchenʼs 4+1 model?

What are the fundamental architectural views proposed in Krutchenʼs 4+1 model?
Answer: 1. A logical view, which shows the key abstractions in the system as objects or object classes. It should be possible to relate the system requirements to entities in this logical view.
2. A process view, which shows how, at run-time, the system is composed of interacting processes. This view is useful for making judgments about nonfunctional system characteristics such as performance and availability.
3. A development view, which shows how the software is decomposed for development, that is, it shows the breakdown of the software into components that are implemented by a single developer or development team. This view is useful for software managers and programmers.
4. A physical view, which shows the system hardware and how software components are distributed across the processors in the system. This view is useful for systems engineers planning a system deployment.

List 4 fundamental questions that should be addressed in architectural design?

List 4 fundamental questions that should be addressed in architectural design?
Answer: 1. Is there a generic application architecture that can act as a template for the system
that is being designed?
2. How will the system be distributed across a number of cores or processors?
3. What architectural patterns or styles might be used?
4. What will be the fundamental approach used to structure the system?
5. How will the structural components in the system be decomposed into subcomponents?
6. What strategy will be used to control the operation of the components in the system?
7. What architectural organization is best for delivering the non-functional requirements of the system?
(7 ways - pick yours)

What are the two ways in which an architectural model of a system may be used?

What are the two ways in which an architectural model of a system may be used?
Answer: 1. As a way of facilitating discussion about the system design. A high-level architectural view of a system is useful for communication with system stakeholders and project planning because it is not cluttered with detail. Stakeholders can relate to it and understand an abstract view of the system. They can then discuss the system as a whole without being confused by detail. The architectural model identifies the key components that are to be developed so managers can start assigning people to plan the development of these systems.
2. As a way of documenting an architecture that has been designed. The aim here is to produce a complete system model that shows the different components in a system, their interfaces, and their connections. The argument for this is that such a detailed architectural description makes it easier to understand and evolve the system.

What are the advantages of explicitly designing and documenting software architecture?

What are the advantages of explicitly designing and documenting software architecture?
Answer: 1. Stakeholder communication: The architecture is a high-level presentation of the system that may be used as a focus for discussion by a range of different stakeholders.
2. System analysis: Making the system architecture explicit at an early stage in the system development requires some analysis. Architectural design decisions have a profound effect on whether or not the system can meet critical requirements such as performance, reliability, and maintainability.
3. Large-scale reuse: A model of system architecture is a compact, manageable description of how a system is organized and how the components interoperate. The system architecture is often the same for systems with similar requirements and so can support large-scale software reuse.

Monday, February 27, 2012

What are the three types of abstract system model that are recommended by the MDA method?

What are the three types of abstract system model that are recommended by the MDA method?
Answer: 1. A computation independent model (CIM) that models the important domain abstractions used in the system. CIMs are sometimes called domain models. You may develop several different CIMs, reflecting different views of the system.
2. A platform independent model (PIM) that models the operation of the system without reference to its implementation. The PIM is usually described using UML models that show the static system structure and how it responds to external and internal events.
3. Platform specific models (PSM) which are transformations of the platform independent model with a separate PSM for each application platform.

What are the claimed benefits of model-driven engineering?

What are the claimed benefits of model-driven engineering?
Answer: Model-based engineering allows engineers to think about systems at a high level of abstraction, without concern for the details of their implementation. This reduces the likelihood of errors, speeds up the design and implementation process, and allows for the creation of reusable, platform-independent application models. By using powerful tools, system implementations can be generated for different platforms from the same model. Therefore, to adapt the system to some new platform technology, it is only necessary to write a translator for that platform. When this is available, all platform-independent models can be rapidly rehosted on the new platform.

What is the basic assumption that underlies event-driven modeling?

What is the basic assumption that underlies event-driven modeling?
Answer: Event-driven modeling is based on the assumption that a system has a finite number of states and that events (stimuli) may cause a transition from one state to another. For example, a system controlling a valve may move from a state ‘Valve open’ to a state ‘Valve closed’ when an operator command (the stimulus) is received. Event-driven modeling shows how a system responds to external and internal events.

How is generalization used to simplify the models of a system with many similar objects?

How is generalization used to simplify the models of a system with many similar objects?
Answer: Generalization is an everyday technique that we use to manage complexity. It is often useful to examine the classes in a system to see if there is scope for generalization. This means that common information will be maintained in one place only. This is good design practice as it means that, if changes are proposed, then you do not have to look at all classes in the system to see if they are affected by the change. In object-oriented languages, such as Java, generalization is implemented using the class inheritance mechanisms built into the language. In a generalization, the attributes and operations associated with higher-level classes are also associated with the lower-level classes.

What is illustrated in a UML sequence diagram?

What is illustrated in a UML sequence diagram?
Answer: Sequence diagrams in the UML are primarily used to model the interactions between the actors and the objects in a system and the interactions between the objects themselves. A sequence diagram shows the sequence of interactions that take place during a particular use case or use case instance. The UML has a rich syntax for sequence diagrams, which allows many different kinds of interaction to be modeled. The objects and actors involved are listed along the top of the diagram, with a dotted line drawn vertically from these. Interactions between objects are indicated by annotated arrows.

What are the principal components of a textual use-case description?

What are the principal components of a textual use-case description?
Answer: Name: The name of the use case.
Brief Description: A brief description of the role and purpose of the use case.
Flow of events: A textual description of what the system does in regard to the use case (not how specific problems are solved by the system). The description is understandable by the customer.
Special requirements: A textual description that collects all requirements, such as non-functional requirements, on the use case, that are not considered in the use-case model, but that need to be taken care of during design or implementation.
Preconditions: A textual description that defines a constraint on the system when the use case may start.
Post conditions: A textual description that defines a constraint on the system when the use cases have terminated.
Extension points: A list of locations within the flow of events of the use case at which additional behavior can be inserted using the extend-relationship.

How are activity diagrams used in describing the context of use of a system?

How are activity diagrams used in describing the context of use of a system?
Answer: Activity diagrams are intended to show the activities that make up a system process and the flow of control from one activity to another. The start of a process is indicated by a filled circle and the end by a filled circle inside another circle. In a UML activity diagram, arrows represent the flow of work from one activity to another. A solid bar is used to indicate activity coordination.

What is described in a context model?

What is described in a context model?
Answer: Context models show what lays outside the system boundaries by illustrating the operational context of a system. This involves working with system stakeholders to decide what functionality should be included in the system and what is provided by the system’s environment. Social and organisational concerns may affect the decision on where to position system boundaries. Context models normally show that the environment includes several other automated systems. However, they do not show the types of relationships between the systems in the environment and the system that is being specified. Architectural models show the system and its relationship with other systems.

What UML diagram types may be used to represent the essential features of a system?

What UML diagram types may be used to represent the essential features of a system?
Answer: (a) Activity diagrams, which show the activities involved in a process or in data processing.
(b) Use case diagrams, which show the interactions between a system and its environment.
(c) Sequence diagrams, which show interactions between actors and the system and between system components.
(d) Class diagrams, which show the object classes in the system and the associations between these classes.
(e) State diagrams, which show how the system reacts to internal and external events.

What perspectives may be used for system modeling?

What perspectives may be used for system modeling?
Ans: (a) An external perspective, where you model the context or environment of the system.
(b) An interaction perspective where you model the interactions between a system and its environment or between the components of a system.
(c) A structural perspective, where you model the organization of a system or the structure of the data that is processed by the system.
(d) A behavioral perspective, where you model the dynamic behavior of the system and how it responds to events.

Thursday, February 23, 2012

2 to 4 Decoder VHDL Code (Case conditional Statements)

In digital electronics, a decoder can take the form of a multiple-input, multiple-output logic circuit that converts coded inputs into coded outputs, where the input and output codes are different.
e.g. n-to-2n, binary-coded decimal decoders.
Enable inputs must be on for the decoder to function, otherwise its outputs assume a single "disabled" output code word. Decoding is necessary in applications such as data multiplexing, 7 segment display and memory address decoding.
The example decoder circuit would be an AND gate because the output of an AND gate is "High" (1) only when all its inputs are "High." Such output is called as "active High output". If instead of AND gate, the NAND gate is connected the output will be "Low" (0) only when all its inputs are "High". Such output is called as "active low output".

library ieee;

use ieee.std_logic_1164.all;

entity decoder_2_4 is

port(

a: in std_logic_vector(1 downto 0);

en: in std_logic;

y: out std_logic_vector(3 downto 0)

);

end decoder_2_4;

architecture case_arch of decoder_2_4 is

signal s: std_logic_vector(2 downto 0);

begin

s <= en & a;

process(s)

begin

case s is

when "000"|"001"|"010"|"011" =>

y <= "0001";

when "100" =>

y <= "0001";

when "101" =>

y <= "0010";

when "110" =>

y <= "0100";

when others =>

y <= "1000";

end case;

end process;

end case_arch;

WORKING 32-BIT ALU VHDL CODE: To Implement ALU and control circuit for 32bit MIPS CPU computer architecture


Project Description: Implement 32-bit ALU, ALU control and main control circuit that supports add, sub, slt, and, or, nor, lw, sw, beq, bne, j instructions using HDL.
This project contains 15 files as follows:
4 files for 32-bit ALU, 1 file for ALUctrl, 1 file for main control circuit, 3 simulation test case files for 32-bit ALU, 3 simulation test case files for ALUctrl and 3 simulation test case files for main control circuit.

Brief info about what is this ALU thing:
In computing, an arithmetic logic unit (ALU) is a digital circuit that performs arithmetic and logical operations. The ALU is a fundamental building block of the central processing unit of a computer, and even the simplest microprocessors contain one for purposes such as maintaining timers. The processors found inside modern CPUs and graphics processing units (GPUs) accommodate very powerful and very complex ALUs; a single component may contain a number of ALUs.

Now lets get started >
32-bit ALU:
(1)   mux_for_invertion file inverts the input signal(a or b) to execute sub, slt, nor, beq and bne instructions. Its 2-to-1 mux basically.
(2)   mux_for_operation file deals with selecting what kind of operation is needed to be executed using 4-to-1 mux. It would select from and(00), or(01), add/sub(10) and slt(11).
(3)   alu_1bit file perform all the required instructions but only 1 bit.
(4)   alu file perform functions of 32-bit ALU in 32 bit mips processor.


ALUctrl: It extracts 4-bit alu control signal from mips instruction.


Main control: Main control circuit uses information from 6-bit op code to control 11 output control signals.


Simulation files for Model Sim software: Simulation was done on ModelSim - Altera, which is free simulating software from Altera which can smoothly simulate your vhdl code files. ModelSim - Altera also provides pretty nice ways to debug your vhdl code, it allows you to literally go through every single line of execution code while your program is running(how registers are updating new values, how control signals are getting new values, either alucontrol or main control). There are 3 individual simulation test case files, 1 for each, to check the functionality of 32-bit ALU, ALUctrl and main control signal files.
   
**********************************************************************************
START OF 1BIT ALU VHDL FILE
**********************************************************************************


--*************************************************************** 
--  
-- Author: Sikander
--    
-- File: alu_1bit.vhd 
-- Design units: 
--  ENTITY alu_1bit  
--  ARCHITECTURE alu_1bit_operation
-- Purpose: perform functions of 1-bit ALU   
--  Inputs:  1 bit input a, b, carryIn, less, set_slt and 4 bit ALUctl control signal
--  Outputs: 1 bit result, carryOut
--   
-- Library/Package: 
--  ieee.std_logic_1164: to use std_logic 
-- 
-- Software/Version:  
--  Simulated by: Altera Quartus v11.0 
--  Synthesized by: Altera Quartus v11.0 
--   
-- Revision History 
--  Version 1.0: 
--  Date: 9/29/2006 
--  Comments: Original  
-- 
--***************************************************************
library ieee;
use ieee.std_logic_1164.all;
entity alu_1bit is
port(
ctrSignal: in std_logic_vector(3 downto 0);
a,b: in std_logic;
result: out std_logic;
carryOut: out std_logic;
carryIn: in std_logic;
set_slt: out std_logic;
less: in std_logic
);
end alu_1bit;
architecture alu_1bit_operation of alu_1bit is
signal a_final,b_final,and_final,or_final,add_final,slt_final,temp_result: std_logic;
begin
ainvert_unit: entity work.mux_for_invertion(invertion)
port map(input=>a, invert=>ctrSignal(3), output=>a_final);    --inverting a if needed
binvert_unit: entity work.mux_for_invertion(invertion)
port map(input=>b, invert=>ctrSignal(2), output=>b_final);    --inverting b if needed
and_final <= a_final and b_final;                                --doing and operation 
or_final <= a_final or b_final;
--carryIn <= ctrSignal(2);
add_final <= a_final xor b_final xor carryIn;
set_slt <= add_final;
carryOut <= (a_final and b_final) or (a_final and carryIn) or (b_final and carryIn);
--slt_final <= '0';
operation_unit: entity work.mux_for_operation(mux_4to1)             --passing out 4 results thru 4to1 mux
port map(control(1)=>ctrSignal(1), control(0)=>ctrSignal(0), 
input(3)=>and_final, input(2)=>or_final, input(1)=>add_final, input(0)=>less, output=>temp_result);
result <= temp_result;
end alu_1bit_operation;


**********************************************************************************
END OF 1BIT ALU VHDL FILE
**********************************************************************************


**********************************************************************************
START OF MUX OF INVERSION VHDL FILE
**********************************************************************************

--*************************************************************** 
--  
-- Author: Sikander 
--    
-- File: mux_for_invertion.vhd 
-- Design units: 
--  ENTITY mux_for_invertion  
--  ARCHITECTURE invertion
-- Purpose: to invert formal signal when needed   
--  Inputs: 1 bit input and invert
--  Outputs: 1 bit output
--   
-- Library/Package: 
--  ieee.std_logic_1164: to use std_logic 
-- 
-- Software/Version:  
--  Simulated by: Altera Quartus v11.0 
--  Synthesized by: Altera Quartus v11.0 
--   
-- Revision History 
--  Version 1.0: 
--  Date: 9/29/2006 
--  Comments: Original  
-- 
--***************************************************************
library ieee;
use ieee.std_logic_1164.all;
entity mux_for_invertion is
port(
input: in std_logic;
invert: in std_logic;
output: out std_logic
);
end mux_for_invertion;
architecture invertion of mux_for_invertion is
begin
output <= ((not input) and invert) or (input and (not invert));
end invertion;


**********************************************************************************
END OF MUX OF INVERSION VHDL FILE
**********************************************************************************


**********************************************************************************
START OF MUX OF OPERATION VHDL FILE
**********************************************************************************

--*************************************************************** 
--  
-- Author: Sikander
--    
-- File: mux_for_operation.vhd 
-- Design units: 
--  ENTITY mux_for_operation  
--  ARCHITECTURE mux_4to1 
-- Purpose: mux to find out what instruction to execute
--  Inputs:  2 bit operation signal and 4 bit input
--  Outputs: 1 bit output
--   
-- Library/Package: 
--  ieee.std_logic_1164: to use std_logic 
-- 
-- Software/Version:  
--  Simulated by: Altera Quartus v11.0 
--  Synthesized by: Altera Quartus v11.0 
--   
-- Revision History 
--  Version 1.0: 
--  Date: 9/29/2006 
--  Comments: Original  
-- 
--***************************************************************
library ieee;
use ieee.std_logic_1164.all;
entity mux_for_operation is
port(
control: in std_logic_vector(1 downto 0);
input: in std_logic_vector(3 downto 0);
output: out std_logic
);
end mux_for_operation;
architecture mux_4to1 of mux_for_operation is
signal temp: std_logic_vector(3 downto 0);
begin
output <= temp(3) or temp(2) or temp(1) or temp(0);
temp(3) <= (not control(1)) and (not control(0)) and input(3);
temp(2) <= (not control(1)) and control(0) and input(2);
temp(1) <= control(1) and (not control(0)) and input(1);
temp(0) <= control(1) and control(0) and input(0);
end mux_4to1;



**********************************************************************************
END OF MUX OF OPERATION VHDL FILE
**********************************************************************************


**********************************************************************************
START OF ALU CONTROL VHDL FILE
**********************************************************************************

--*************************************************************** 
--  
-- Author: Sikander
--    
-- File: aluctrl.vhd 
-- Design units: 
--  ENTITY aluctrl  
--  ARCHITECTURE aluctrl_behav 
-- Purpose: to find out alu control signal from mips instruction   
--  Inputs:  2 bit ALUOp and 6 bit Func code
--  Outputs: 4 bit ALUctl 
--   
-- Library/Package: 
--  ieee.std_logic_1164: to use std_logic 
-- 
-- Software/Version:  
--  Simulated by: Altera Quartus v11.0 
--  Synthesized by: Altera Quartus v11.0 
--   
-- Revision History 
--  Version 1.0: 
--  Date: 9/29/2006 
--  Comments: Original  
-- 
--***************************************************************
library ieee;
use ieee.std_logic_1164.all;
entity aluctrl is
port
(
ALUOp: in std_logic_vector(1 downto 0);
Func: in std_logic_vector(5 downto 0);
ALUctl: out std_logic_vector(3 downto 0)
);
end aluctrl;
architecture aluctrl_behav of aluctrl is
signal p0,p1,p2,p3,p4,p5,p6,p7: std_logic;
begin
ALUctl(3) <= p1;
ALUctl(2) <= p0 or p1 or p2 ;
ALUctl(1) <= p3 or p4 or p7;
ALUctl(0) <= p5 or p6;

p0 <= ALUOp(1) and (not ALUOp(0)) and (not Func(2)) and Func(1) and (not Func(0));
p1 <= ALUOp(1) and (not ALUOp(0)) and (not Func(3)) and Func(2) and Func(1) and Func(0);   --for ain also
p2 <= (not ALUOp(1)) and ALUOp(0);   
p3 <= ALUOp(1) and (not ALUOp(0)) and (not Func(3)) and (not Func(2)) and (not Func(0));
p4 <= (not ALUOp(1));
p5 <= ALUOp(1) and (not ALUOp(0)) and Func(3) and (not Func(2)) and Func(1) and (not Func(0));
p6 <= ALUOp(1) and (not ALUOp(0)) and (not Func(3)) and Func(2) and (not Func(1)) and Func(0);
p7 <= ALUOp(1) and (not ALUOp(0)) and Func(3) and (not Func(2)) and (not Func(0)) and Func(1);
end aluctrl_behav;

**********************************************************************************
END OF ALU CONTROL VHDL FILE
**********************************************************************************


**********************************************************************************
START OF 32-BIT ALU VHDL FILE
**********************************************************************************

--*************************************************************** 
--  
-- Author: Sikander
--    
-- File: alu.vhd 
-- Design units: 
--  ENTITY alu  
--  ARCHITECTURE alu_behav 
-- Purpose: perform functions of 32-bit ALU in 32 bit mips processor   
--  Inputs:  32 bit a,b and 4 bit ALUctl control signal
--  Outputs: 32 bit ALUOut and 1 bit zero flag
--   
-- Library/Package: 
--  ieee.std_logic_1164: to use std_logic 
-- 
-- Software/Version:  
--  Simulated by: Altera Quartus v11.0 
--  Synthesized by: Altera Quartus v11.0 
--   
-- Revision History 
--  Version 1.0: 
--  Date: 9/29/2006 
--  Comments: Original  
-- 
--***************************************************************
library ieee;
use ieee.std_logic_1164.all;
entity alu is
port
(
ALUctl: in std_logic_vector(3 downto 0);
A, B: in std_logic_vector(31 downto 0);
ALUOut: out std_logic_vector(31 downto 0);
Zero: out std_logic
);
end alu;


architecture alu_behav of alu is
signal carry: std_logic_vector(31 downto 0);
signal get,set: std_logic;
signal aout: std_logic_vector(31 downto 0);
begin
   bit0_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(0), b=>B(0), ctrSignal=>ALUctl, carryIn=>ALUctl(2), less=>set, carryOut=>carry(0), result=>aout(0));
bit1_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(1), b=>B(1), ctrSignal=>ALUctl, carryIn=>carry(0), less=>'0', carryOut=>carry(1), result=>aout(1));
bit2_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(2), b=>B(2), ctrSignal=>ALUctl, carryIn=>carry(1), less=>'0', carryOut=>carry(2), result=>aout(2));
bit3_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(3), b=>B(3), ctrSignal=>ALUctl, carryIn=>carry(2), less=>'0', carryOut=>carry(3), result=>aout(3));
bit4_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(4), b=>B(4), ctrSignal=>ALUctl, carryIn=>carry(3), less=>'0', carryOut=>carry(4), result=>aout(4));
bit5_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(5), b=>B(5), ctrSignal=>ALUctl, carryIn=>carry(4), less=>'0', carryOut=>carry(5), result=>aout(5));
bit6_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(6), b=>B(6), ctrSignal=>ALUctl, carryIn=>carry(5), less=>'0', carryOut=>carry(6), result=>aout(6));
bit7_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(7), b=>B(7), ctrSignal=>ALUctl, carryIn=>carry(6), less=>'0', carryOut=>carry(7), result=>aout(7));
bit8_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(8), b=>B(8), ctrSignal=>ALUctl, carryIn=>carry(7), less=>'0', carryOut=>carry(8), result=>aout(8));
bit9_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(9), b=>B(9), ctrSignal=>ALUctl, carryIn=>carry(8), less=>'0', carryOut=>carry(9), result=>aout(9));
bit10_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(10), b=>B(10), ctrSignal=>ALUctl, carryIn=>carry(9), less=>'0', carryOut=>carry(10), result=>aout(10));
bit11_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(11), b=>B(11), ctrSignal=>ALUctl, carryIn=>carry(10), less=>'0', carryOut=>carry(11), result=>aout(11));
bit12_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(12), b=>B(12), ctrSignal=>ALUctl, carryIn=>carry(11), less=>'0', carryOut=>carry(12), result=>aout(12));
bit13_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(13), b=>B(13), ctrSignal=>ALUctl, carryIn=>carry(12), less=>'0', carryOut=>carry(13), result=>aout(13));
bit14_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(14), b=>B(14), ctrSignal=>ALUctl, carryIn=>carry(13), less=>'0', carryOut=>carry(14), result=>aout(14));
bit15_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(15), b=>B(15), ctrSignal=>ALUctl, carryIn=>carry(14), less=>'0', carryOut=>carry(15), result=>aout(15));
bit16_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(16), b=>B(16), ctrSignal=>ALUctl, carryIn=>carry(15), less=>'0', carryOut=>carry(16), result=>aout(16));
bit17_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(17), b=>B(17), ctrSignal=>ALUctl, carryIn=>carry(16), less=>'0', carryOut=>carry(17), result=>aout(17));
bit18_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(18), b=>B(18), ctrSignal=>ALUctl, carryIn=>carry(17), less=>'0', carryOut=>carry(18), result=>aout(18));
bit19_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(19), b=>B(19), ctrSignal=>ALUctl, carryIn=>carry(18), less=>'0', carryOut=>carry(19), result=>aout(19));
bit20_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(20), b=>B(20), ctrSignal=>ALUctl, carryIn=>carry(19), less=>'0', carryOut=>carry(20), result=>aout(20));
bit21_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(21), b=>B(21), ctrSignal=>ALUctl, carryIn=>carry(20), less=>'0', carryOut=>carry(21), result=>aout(21));
bit22_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(22), b=>B(22), ctrSignal=>ALUctl, carryIn=>carry(21), less=>'0', carryOut=>carry(22), result=>aout(22));
bit23_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(23), b=>B(23), ctrSignal=>ALUctl, carryIn=>carry(22), less=>'0', carryOut=>carry(23), result=>aout(23));
bit24_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(24), b=>B(24), ctrSignal=>ALUctl, carryIn=>carry(23), less=>'0', carryOut=>carry(24), result=>aout(24));
bit25_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(25), b=>B(25), ctrSignal=>ALUctl, carryIn=>carry(24), less=>'0', carryOut=>carry(25), result=>aout(25));
bit26_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(26), b=>B(26), ctrSignal=>ALUctl, carryIn=>carry(25), less=>'0', carryOut=>carry(26), result=>aout(26));
bit27_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(27), b=>B(27), ctrSignal=>ALUctl, carryIn=>carry(26), less=>'0', carryOut=>carry(27), result=>aout(27));
bit28_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(28), b=>B(28), ctrSignal=>ALUctl, carryIn=>carry(27), less=>'0', carryOut=>carry(28), result=>aout(28));
bit29_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(29), b=>B(29), ctrSignal=>ALUctl, carryIn=>carry(28), less=>'0', carryOut=>carry(29), result=>aout(29));
bit30_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(30), b=>B(30), ctrSignal=>ALUctl, carryIn=>carry(29), less=>'0', carryOut=>carry(30), result=>aout(30));
bit31_unit: entity work.alu_1bit(alu_1bit_operation)
port map(a=>A(31), b=>B(31), ctrSignal=>ALUctl, carryIn=>carry(30), less=>'0', carryOut=>carry(31), set_slt=>get, result=>aout(31));
set <= get;
ALUOut <= aout;
Zero <= (not (aout(0) or aout(1) or aout(2) or aout(3) or aout(4) or aout(5) or aout(6) or aout(7) or 
aout(8) or aout(9) or aout(10) or aout (11) or aout (12) or aout (13) or aout (14) or aout(15) or 
aout(16) or aout(17) or aout(18) or aout(19) or aout(20) or aout(21) or aout(22) or aout(23) or 
aout(24) or aout(25) or aout(26) or aout (27) or aout (28) or aout (29) or aout (30) or aout (31)));

end alu_behav;

**********************************************************************************
END OF 32-BIT ALU VHDL FILE
**********************************************************************************


**********************************************************************************
START OF MAIN CONTROL VHDL FILE
**********************************************************************************

--***************************************************************
--
-- Author: S
ikander

--  
-- File: control.vhd
-- Design units:
--  ENTITY control
--  ARCHITECTURE control_behav
-- Purpose: function as main control circuit  
--  Inputs:  6 bit op code
--  Outputs: 11 1-bit control signals
--
-- Library/Package:
--  ieee.std_logic_1164: to use std_logic
--
-- Software/Version:
--  Simulated by: Altera Quartus v11.0
--  Synthesized by: Altera Quartus v11.0
--
-- Revision History
--  Version 1.0:
--  Date: 9/29/2006
--  Comments: Original
--
--***************************************************************
library ieee;
use ieee.std_logic_1164.all;
entity control is
port
(
ID_op: in std_logic_vector(5 downto 0);
ID_ALUOp: out std_logic_vector(1 downto 0);
ID_RegDst, ID_ALUSrc: out std_logic;
ID_Branch, ID_MemRead, ID_MemWrite: out std_logic;
ID_RegWrite, ID_MemToReg: out std_logic;
ID_BranchNE, ID_Jump: out std_logic
);
end control;
architecture control_behav of control is
signal p0,p1,p2,p3,p4,p5: std_logic;
begin
   --loading values to variables using temp signals
ID_RegDst <= p0;
ID_ALUSrc <= p1 or p2;
ID_MemToReg <= p1;
ID_RegWrite <= p0 or p1;
ID_MemRead <= p1;
ID_MemWrite <= p2;
ID_Branch <= p3;
ID_ALUOp(1) <= p0;
ID_ALUOp(0) <= p3 or p4;
ID_BranchNE <= p4;
ID_Jump <= p5;
   --assinging values to temp signals
p0 <= (not ID_op(5)) and (not ID_op(4)) and (not ID_op(3)) and (not ID_op(2)) and (not ID_op(1)) and (not ID_op(0));
p1 <= ID_op(5) and (not ID_op(4)) and (not ID_op(3)) and (not ID_op(2)) and ID_op(1) and ID_op(0);
p2 <= ID_op(5) and (not ID_op(4)) and ID_op(3) and (not ID_op(2)) and ID_op(1) and ID_op(0);
p3 <= (not ID_op(5)) and (not ID_op(4)) and (not ID_op(3)) and ID_op(2) and (not ID_op(1)) and (not ID_op(0));
p4 <= (not ID_op(5)) and (not ID_op(4)) and (not ID_op(3)) and ID_op(2) and (not ID_op(1)) and ID_op(0);
p5 <= (not ID_op(5)) and (not ID_op(4)) and (not ID_op(3)) and (not ID_op(2)) and ID_op(1) and (not ID_op(0));
end control_behav;

**********************************************************************************
END OF MAIN CONTROL VHDL FILE
**********************************************************************************


**********************************************************************************
START OF 32-BIT ALU SIMULATION VHDL FILE FOR MODELSIM
**********************************************************************************

library  ieee;
use STD.TEXTIO.all;
use  ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.numeric_std.all;
entity sim_alu1 is
end sim_alu1;

architecture sim_alu1_behav of sim_alu1 is

signal ALUctl : std_logic_vector(3 downto 0);
signal A,B : std_logic_vector(31 downto 0);
signal ALUOut : std_logic_vector(31 downto 0);
signal Zero : std_logic;

component alu
port(
ALUctl : in std_logic_vector(3 downto 0);
 A, B : in std_logic_vector(31 downto 0);
 ALUOut : out std_logic_vector(31 downto 0);
 Zero : out std_logic
);
end component;
begin


FA1: alu
 port map(ALUctl, A, B, ALUOut, Zero);


ALUctl <= "0111";
A <= std_logic_vector(to_unsigned(1200,32));
B <= std_logic_vector(to_unsigned(12000,32));
-- #1;
-- $display("ALUOut = ", ALUOut);
-- $display("Zero = ", Zero);
-- $finish;

PROCESS (ALUOut,Zero)
variable BufLine: line;

variable zoutput  : integer;--:std_logic_vector(31 downto 0);
variable zZero : integer;
variable tmpZero : std_logic_vector(0 downto 0);
begin
zoutput := to_integer(unsigned(ALUOut));

tmpZero(0) := Zero;
zZero := to_integer(unsigned(tmpZero));

write(bufline,string'("ALUOut: "));
write(bufline,zoutput);
writeline(output,bufline);
write(bufline, string'("Zero: "));
write(bufline,zZero);
writeline(output,bufline);

end PROCESS;
end sim_alu1_behav;


**********************************************************************************
END OF 32-BIT ALU SIMULATION VHDL FILE FOR MODELSIM
**********************************************************************************


**********************************************************************************
START OF  MAIN CONTROL SIMULATION VHDL FILE FOR MODELSIM
**********************************************************************************

library  ieee;
use STD.TEXTIO.all;
use  ieee.std_logic_1164.all;
use ieee.numeric_std.all;

use ieee.numeric_std.all;


entity sim_control1 is


end sim_control1;



architecture sim_control1_behav of sim_control1 is


signal ID_op: std_logic_vector(5 downto 0);
signal ID_ALUOp: std_logic_vector(1 downto 0);
signal ID_RegDst, ID_ALUSrc: std_logic;
signal ID_Branch, ID_MemRead, ID_MemWrite: std_logic;
signal ID_RegWrite, ID_MemToReg: std_logic;
signal ID_BranchNE, ID_Jump: std_logic;

component control
port(
ID_op: in std_logic_vector(5 downto 0);
ID_ALUOp: out std_logic_vector(1 downto 0);
ID_RegDst, ID_ALUSrc: out std_logic;
ID_Branch, ID_MemRead, ID_MemWrite: out std_logic;
ID_RegWrite, ID_MemToReg: out std_logic;
ID_BranchNE, ID_Jump: out std_logic
);
end component;




begin
FA1: control
 port map(ID_op, ID_ALUOp, ID_RegDst, ID_ALUSrc, ID_Branch, 
ID_MemRead, ID_MemWrite, ID_RegWrite, ID_MemToReg, ID_BranchNE, ID_Jump);


ID_op <= "000000";
-- #1;
-- $display("ALUOut = ", ALUOut);
-- $display("Zero = ", Zero);
-- $finish;


PROCESS (ID_ALUOp, ID_RegDst, ID_ALUSrc, ID_Branch, 
ID_MemRead, ID_MemWrite, ID_RegWrite, ID_MemToReg, ID_BranchNE, ID_Jump)


variable BufLine: line;
variable  ALUOp: integer;
--variable ALUOp0: integer;
variable  RegDst: integer;
variable ALUSrc: integer;
variable  Branch: integer;
variable MemRead: integer;
variable  MemWrite: integer;
variable RegWrite: integer;
variable  MemToReg: integer;
variable BranchNE: integer;
variable  Jump: integer;
variable rd: std_logic_vector(0 downto 0);
variable as: std_logic_vector(0 downto 0);
variable b: std_logic_vector(0 downto 0);
variable mr: std_logic_vector(0 downto 0);
variable mw: std_logic_vector(0 downto 0);
variable rw: std_logic_vector(0 downto 0);
variable mtr: std_logic_vector(0 downto 0);
variable bne: std_logic_vector(0 downto 0);
variable j: std_logic_vector(0 downto 0);


begin
rd(0):= ID_RegDst;
as(0):= ID_ALUSrc;
b(0):= ID_Branch;
mr(0):= ID_MemRead;
mw(0):= ID_MemWrite;
rw(0):= ID_RegWrite;
mtr(0):= ID_MemToReg;
bne(0):= ID_BranchNE;
j(0):= ID_Jump;


 ALUOp:=to_integer(unsigned(ID_ALUOp));

 RegDst:=to_integer(unsigned(rd));

 ALUSrc:=to_integer(unsigned(as));
 Branch:=to_integer(unsigned(b));
 MemRead:=to_integer(unsigned(mr));
 MemWrite:=to_integer(unsigned(mw));
 RegWrite:=to_integer(unsigned(rw));
 MemToReg:=to_integer(unsigned(mtr));
 BranchNE:=to_integer(unsigned(bne));
 Jump:=to_integer(unsigned(j));
write(bufline,string'("ID_ALUOp: "));
write(bufline,ALUOp);
writeline(output,bufline);
write(bufline,string'("ID_RegDst: "));
write(bufline,RegDst);
writeline(output,bufline);
write(bufline,string'("ID_ALUSrc: "));
write(bufline,ALUSrc);
writeline(output,bufline);
write(bufline,string'("ID_Branch: "));
write(bufline,Branch);
writeline(output,bufline);
write(bufline,string'("ID_MemRead: "));
write(bufline,MemRead);
writeline(output,bufline);
write(bufline,string'("ID_MemWrite: "));
write(bufline,MemWrite);
writeline(output,bufline);
write(bufline,string'("ID_RegWrite: "));
write(bufline,RegWrite);
writeline(output,bufline);
write(bufline,string'("ID_MemToReg: "));
write(bufline,MemToReg);
writeline(output,bufline);
write(bufline,string'("ID_BranchNE: "));
write(bufline,BranchNE);
writeline(output,bufline);
write(bufline,string'("ID_Jump: "));
write(bufline,Jump);
writeline(output,bufline);


end PROCESS;
end sim_control1_behav;


**********************************************************************************
END OF MAIN CONTROL SIMULATION VHDL FILE FOR MODELSIM
**********************************************************************************


**********************************************************************************
START OF  ALU CONTROL SIMULATION VHDL FILE FOR MODELSIM
**********************************************************************************

library  ieee;
use STD.TEXTIO.all;
use  ieee.std_logic_1164.all;
use ieee.numeric_std.all;


use ieee.numeric_std.all;

entity sim_aluctrl1 is


end sim_aluctrl1;





architecture sim_aluctrl1_behav of sim_aluctrl1 is


signal ALUOp: std_logic_vector(1 downto 0);

signal Func: std_logic_vector(5 downto 0);
signal ALUctl: std_logic_vector(3 downto 0);

component aluctrl

port(
ALUOp: in std_logic_vector(1 downto 0);
Func: in std_logic_vector(5 downto 0);
ALUctl: out std_logic_vector(3 downto 0)
);
end component;




begin
FA1: aluctrl
 port map(ALUOp, Func, ALUctl);




ALUOp <= "10";
Func <= "000010";
-- #1;
-- $display("ALUOut = ", ALUOut);
-- $display("Zero = ", Zero);
-- $finish;


PROCESS (ALUctl)


variable BufLine: line;
variable tmp : integer;
begin


tmp := to_integer(unsigned(ALUctl));


write(bufline,string'("ALUctl: "));
write(bufline,tmp);
writeline(output,bufline);
end PROCESS;


end sim_aluctrl1_behav;


**********************************************************************************
END OF ALU CONTROL SIMULATION VHDL FILE FOR MODELSIM
**********************************************************************************