A CPLD VHDL Introduction
|
|
|
- Aubrey Stafford
- 9 years ago
- Views:
Transcription
1 Application Note: CPLD R XAPP105 (v2.0) August 30, 2001 Summary This introduction covers the fundamentals of VHDL as applied to Complex Programmable Logic Devices (CPLDs). Specifically included are those design practices that translate soundly to CPLDs, permitting designers to use the best features of this powerful language to extract optimum performance for CPLD designs. Introduction Multiplexers VHDL, an extremely versatile tool developed to aid in many aspects of IC design, allows a user to structure circuits in many levels of detail. This versatility also makes the job of the VHDL synthesis tool a lot more complex, and there is latitude for interpretation depending on the VHDL coding style. One synthesis tool may implement the same code very differently from another. In order to achieve the best results using VHDL, the designer should work at the Register Transfer Level (RTL). Although working at the RTL for designs may be more time-consuming, all major synthesis tools on the market are capable of generating a clear cut implementation of designs for CPLDs at this level. Using higher levels of abstraction may give adequate results, but tend to be less efficient. Additionally, by expressing designs in this manner, the designer also gains the ability to port VHDL designs from one synthesis tool to another with minimal effort. The following examples will show designers the best design practices when targeting Xilinx XC9500XL, XC9500XV and CoolRunner TM XPLA3 families. This application note covers the following topics: Multiplexers Encoders Decoders Comparators Adders Modeling Synchronous Logic Circuits Asynchronous Counters Finite State Machines Coding Techniques Multiplexers can be modeled in various ways. The four common methods are to: 1. Use an if statement followed by multiple elsif statements. 2. Usage of a case statement. 3. Conditional signal assignment. 4. Selected signal assignment The example below shows the coding for a 1-bit wide 4:1 multiplexer Xilinx, Inc. All rights reserved. All Xilinx trademarks, registered trademarks, patents, and disclaimers are as listed at All other trademarks and registered trademarks are the property of their respective owners. All specifications are subject to change without notice. XAPP105 (v2.0) August 30,
2 R There is no incorrect method of modeling a multiplexer. However, case statements require less code than if statements. The conditional and selected signal assignments have to reside outside a process. Therefore, they will always be active and will take longer to simulate. One-bit Wide 4:1 Mux library ieee; use ieee.std_logic_1164.all; --Comments are denoted by two - signs. entity MUX4_1 is port ( Sel : in std_logic_vector(1 downto 0); A, B, C, D : in std_logic; Y : outstd_logic ); end MUX4_1; architecture behavior of MUX4_1 is --INSERT 1, 2, 3 or 4 here --1 : If statements process (Sel, A, B, C, D) if (Sel = 00 ) then Y<= A; Elsif (Sel = 01 ) then Y<= B; Elsif (Sel = 10 ) then Y<= C; Else Y<= D; end behavior; --2: case statements process (Sel, A, B, C, D) case Sel is when 00 => Y<=A; when 01 => Y<=B; when 10 => Y<=C; when 11 => Y<=D; when others => Y<=A; end case; end behavior; --3: Conditional signal assignment -- equivalent to if but is concurrent and so outside of a process. Y <= A when Sel = 00 B when Sel = 01 C when Sel = 10 D; -- when Sel = 11 ; End behavior; --4 Selected signal assignment -- Multiplexer selection is very clear. Again it is a concurrent statement. -- Equivalent to a case statement but outside of a process 2 XAPP105 (v2.0) August 30, 2001
3 R with Sel select Y<= A when 00, B when 01, C when 10, D when 11, A when others; End behavior; When compiled onto an XC9536XL, the resulting usage is as follows: Design name: Multi Device used: XC9536XL 5-PC44 Fitting Status: Successful **************************** Resource Summary **************************** Macrocells Product Terms Registers Pins used Function Block Inputs 1 /36 ( 2%) 4 /180 ( 2%) 0 /36 ( 0%) 7 /34 ( 20%) 6 /108 ( 5%) As shown above, a 4:1 multiplexer can be implemented in a single XC9500 macrocell. Seven pins are used in the design A, B, C, D, Sel<0>, and Sel<1> are inputs and Y is an output. The design is purely combinatorial, as there are no registers used. Four product terms are used. A closer look at the "Implemented Equations" section of the Fitter report will explain what these four product terms are: ; Implemented Equations. Y = A * /"Sel<0>" * /"Sel<1>" + "Sel<0>" * B * /"Sel<1>" + "Sel<0>" * D * "Sel<1>" + /"Sel<0>" * C * "Sel<1>" Two-bit Wide 8:1 Mux library IEEE; use IEEE.STD_LOGIC_1164.all, IEEE.NUMERIC_STD.all; entity MUX2X8_1_CASE is port (Sel: in integer range 0 to 7; A0, A1, A2, A3, A4, A5, A6, A7: in std_logic_vector(1 downto 0); Y: out std_logic_vector(1 downto 0)); End entity MUX2X8_1_CASE; Architecture behavior of MUX2X8_1_CASE is Begin --INSERT 1 or : case statements process (Sel, A0, A1, A2, A3, A4, A5, A6, A7) case Sel is when 0 => Y <= A0; when 1 => Y <= A1; when 2 => Y <= A2; when 3 => Y <= A3; when 4 => Y <= A4; when 5 => Y <= A5; when 6 => Y <= A6; when 7 => Y <= A7; end case; end architecture behavior; XAPP105 (v2.0) August 30,
4 R -- 2: selected signal assignment with Sel select Y <= A0 when 0, A1 when 1, A2 when 2, A3 when 3, A4 when 4, A5 when 5, A6 when 6, A7 when 7; End architecture behavior; In the example above, a 2-bit wide 8:1 multiplexer is implemented using case statements and selected signal assignments. The resulting code gives the following usage summary: Design Name: multi2 Device : XC9536XL 5 PC44 Fitting Status: Successful **************************** Resource Summary **************************** Macrocells Product Terms Registers Pins used Function Block Inputs 2 /36 ( 5%) 16 /180 ( 8%) 0 /36 ( 0%) 21 /34 ( 61%) 22 /108 ( 20%) This 8:1 multiplexer uses a total of 2 macrocells, 16 product terms and 21 pins. The two macrocells used in this design are for Y<0> and Y<1>, which reside in FB1_4 (Function Block 1, Macrocell 4) and FB2_4 respectively. Both Y<0> and Y<1> use eight product terms as shown in the "Implemented Equations" section below. The architecture of the XC9500 family has five local product terms available to it. When more than five P-terms are necessary, they may be borrowed from the neighboring macrocells above and/or below the macrocell. In this case, Y<0> and Y<1> borrow P-terms from macrocells above and below. For example, Y<0>, which is in FB1_4, borrows two product terms from its neighbor above, FB1_3, and also borrows one product term from its neighbor below, FB1_5. ; Implemented Equations. "Y<1>" = "Sel<2>" * "Sel<0>" * "A7<1>" * "Sel<1>" + "Sel<2>" * /"Sel<0>" * "A6<1>" * "Sel<1>" + /"Sel<2>" * "Sel<0>" * "A3<1>" * "Sel<1>" + /"Sel<2>" * /"Sel<0>" * "A2<1>" * "Sel<1>" + /"Sel<2>" * /"Sel<0>" * "A0<1>" * /"Sel<1>" ;Imported pterms FB1_3 + "Sel<2>" * /"Sel<0>" * "A4<1>" * /"Sel<1>" + /"Sel<2>" * "Sel<0>" * "A1<1>" * /"Sel<1>" ;Imported pterms FB1_5 + "Sel<2>" * "Sel<0>" * "A5<1>" * /"Sel<1>" "Y<0>" = "Sel<2>" * "Sel<0>" * "A7<0>" * "Sel<1>" + "Sel<2>" * /"Sel<0>" * "A6<0>" * "Sel<1>" + /"Sel<2>" * "Sel<0>" * "A3<0>" * "Sel<1>" + /"Sel<2>" * /"Sel<0>" * "A2<0>" * "Sel<1>" + /"Sel<2>" * /"Sel<0>" * "A0<0>" * /"Sel<1>" ;Imported pterms FB2_3 + "Sel<2>" * "Sel<0>" * "A5<0>" * /"Sel<1>" + /"Sel<2>" * "Sel<0>" * "A1<0>" * /"Sel<1>" ;Imported pterms FB2_5 + "Sel<2>" * /"Sel<0>" * "A4<0>" * /"Sel<1>" 4 XAPP105 (v2.0) August 30, 2001
5 R Encoders An encoder creates a data output set that is more compact than the input data. A decoder reverses the encoding process. The truth table for an 8:3 encoder is shown below. We must assume that only one input may have a value of "1" at any given time. Otherwise the circuit is undefined. Note that the binary value of the output matches the subscript of the asserted inputs. Table 1: Truth Table, 8:3 Encoder Inputs Outputs A 7 A6 A5 A4 A3 A2 A1 A0 Y2 Y1 Y The encoder described by the truth table may be modeled by using the if, case statements, or selected signal assignments. Once again, case statements are more concise and clear than if statements, and this becomes increasingly obvious when the number of inputs to the encoder increase. Selected signal assignment is also very clear. It is the concurrent equivalent of case statement. The for loop is better for modeling a larger or more generic encoder. The if statement and the for loop encoder are not depicted in this example. An 8:3 Binary Encoder Library IEEE; Use IEEE.STD_LOGIC_1164.all, IEEE.NUMERIC_STD.all; entity ENCODER8 is port (A: in std_logic_vector (7 downto 0); Y: out std_logic_vector (2 downto 0)); end entity ENCODER8; architecture ARCH of ENCODER8 is -- 1: case statement process (A) case A is when " " => Y <= "000"; when " " => Y <= "001"; when " " => Y <= "010"; when " " => Y <= "011"; when " " => Y <= "100"; when " " => Y <= "101"; when " " => Y <= "110"; XAPP105 (v2.0) August 30,
6 R when " " => Y <= "111"; when others => Y <= "XXX"; end case; end architecture ARCH; -- 2: selected signal assignment with A select Y <= "000" when " ", "001" when " ", "010" when " ", "011" when " ", "100" when " ", "101" when " ", "110" when " ", "111" when " ", "XXX" when others; end architecture ARCH; In both cases, three macrocells (one each for Y<1>, Y<2>, and Y<0>), twelve product terms, and eleven pins are used: Design Name: encoder8 Device : XC9536XL 5 PC44 Fitting Status: Successful **************************** Resource Summary **************************** Macrocells Product Terms Registers Pins used Function Block Inputs 3 /36 ( 8%) 12 /180 ( 6%) 0 /36 ( 0%) 11 /34 ( 32%) 16 /108 ( 14%) ; Implemented Equations. "y<1>" = /"a<0>" * /"a<1>" * "a<2>" * /"a<3>" * /"a<4>" * /"a<5>" * /"a<6>" * /"a<7>" + /"a<0>" * /"a<1>" * /"a<2>" * "a<3>" * /"a<4>" * /"a<5>" * /"a<6>" * /"a<7>" + /"a<0>" * /"a<1>" * /"a<2>" * /"a<3>" * /"a<4>" * /"a<5>" * "a<6>" * /"a<7>" + /"a<0>" * /"a<1>" * /"a<2>" * /"a<3>" * /"a<4>" * /"a<5>" * /"a<6>" * "a<7>" "y<2>" = /"a<0>" * /"a<1>" * /"a<2>" * /"a<3>" * "a<4>" * /"a<5>" * /"a<6>" * /"a<7>" + /"a<0>" * /"a<1>" * /"a<2>" * /"a<3>" * /"a<4>" * "a<5>" * /"a<6>" * /"a<7>" + /"a<0>" * /"a<1>" * /"a<2>" * /"a<3>" * /"a<4>" * /"a<5>" * "a<6>" * /"a<7>" + /"a<0>" * /"a<1>" * /"a<2>" * /"a<3>" * /"a<4>" * /"a<5>" * /"a<6>" * "a<7>" "y<0>" = /"a<0>" * "a<1>" * /"a<2>" * /"a<3>" * /"a<4>" * /"a<5>" * /"a<6>" * /"a<7>" + /"a<0>" * /"a<1>" * /"a<2>" * "a<3>" * /"a<4>" * /"a<5>" * /"a<6>" * /"a<7>" + /"a<0>" * /"a<1>" * /"a<2>" * /"a<3>" * /"a<4>" * "a<5>" * /"a<6>" * /"a<7>" + /"a<0>" * /"a<1>" * /"a<2>" * /"a<3>" * /"a<4>" * /"a<5>" * /"a<6>" * "a<7>" 6 XAPP105 (v2.0) August 30, 2001
7 R An additional standard encoder is the priority encoder which permits multiple asserted inputs. VHDL code for priority encoders is not presented but the operation is such that if two or more single bit inputs are at a logic "1", then the input with the highest priority will take precedence, and its particular coded value will be output. Decoders The truth table for a 3:8 decoder is shown in Table 2. Note the reverse relationship to Table 1. Table 2: Truth Table, 3:8 decoder Inputs Like the encoder, this decoder can be modeled by an if, case statements along with selected signal assignment. When inputs and outputs become wide, for statements should be used for code efficiency. However, all the models synthesize to the same circuit. 3:8 Decoder library IEEE; use IEEE.STD_LOGIC_1164.ALL, IEEE.NUMERIC_STD.all; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Decoder3_8 is Port ( A : in integer range 0 to 7; Y : out std_logic_vector(7 downto 0)); end Decoder3_8; architecture behavioral of Decoder3_8 is --1: Case statement process (A) case A is when 0 => Y <= " "; when 1 => Y <= " "; when 2 => Y <= " "; when 3 => Y <= " "; when 4 => Y <= " "; when 5 => Y <= " "; when 6 => Y <= " "; when 7 => Y <= " "; Outputs A2 A1 A0 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y XAPP105 (v2.0) August 30,
8 R end case; end behavioral; --2: Select Signal Assignment with A select Y <= " " when 0, " " when 1, " " when 2, " " when 3, " " when 4, " " when 5, " " when 6, " " when 7, " " when others; end behavioral; -- 3: for statement process (A) for N in 0 to 7 loop if (A = N) then Y(N) <= 1 ; Y(N) <= 0 ; end loop; end behavioral; Again, the corresponding result summary follows: Design Name: encoder8 Device : XC9536XL 5 PC44 Fitting Status: Successful **************************** Resource Summary **************************** Macrocells Product Terms Registers Pins used Function Block Inputs 8 /36 ( 22%) 8 /180 ( 4%) 0 /36 ( 0%) 11 /34 ( 32%) 6 /108 ( 5%) Eight macrocells are used, one for each of the individual bits of Y, and the design is combinational. The implemented equations are: ; Implemented Equations. "y<0>" = /"a<0>" * /"a<1>" * /"a<2>" "y<1>" = "a<0>" * /"a<1>" * /"a<2>" "y<2>" = /"a<0>" * "a<1>" * /"a<2>" "y<3>" = "a<0>" * "a<1>" * /"a<2>" "y<4>" = /"a<0>" * /"a<1>" * "a<2>" "y<5>" = "a<0>" * /"a<1>" * "a<2>" "y<6>" = /"a<0>" * "a<1>" * "a<2>" "y<7>" = "a<0>" * "a<1>" * "a<2>" Four Bit Address Decoder The following is an example of a 4-Bit Address Decoder. It provides enable signals for segments of memory. The address map for this example is shown in the figure below. 8 XAPP105 (v2.0) August 30, 2001
9 R Fourth Quarter Third Quarter 8-11 Second Quarter First Quarter 0-3 Figure 1: 4-bit Address Decoder Address Map The address map is divided into quarters. The second quarter is further divided into four segments. Thus, seven enable outputs (one for each memory segment) are provided. Two examples are provided below one that uses the for loop enclosing an if statement, and the other uses a case statement. Both model the same circuit, but in general, it is much more efficient to use a for loop when a large number of consecutively decoded outputs are required. A case statement requires a separate branch for every output, thus increasing the lines of code. Four Bit Address Decoder library IEEE; use IEEE.STD_LOGIC_1164.ALL, IEEE.NUMERIC_STD.all; entity decoder_4_bit is Port ( Address : in integer range 0 to 15; AddDec_0to3 : out std_logic; AddDec_8to11 : out st66d_logic; AddDec_12to15 : out std_logic; AddDec_4to7 : out std_logic_vector(3 downto 0)); end decoder_4_bit; architecture behavioral of decoder_4_bit is -- 1: for loop process (Address) -- First quarter if (Address >= 0 and Address <=3) then AddDec_0to3 <= 1 ; AddDec_0to3 <= 0 ; -- Third quarter if (Address >= 8 and Address <= 11) then XAPP105 (v2.0) August 30,
10 R AddDec_8to11 <= 1 ; AddDec_8to11 <= 0 ; --Fourth Quarter if (Address >= 12 and Address <= 15) then AddDec_12to15 <= 1 ; AddDec_12to15 <= 0 ; -- Second Quarter for N in AddDec_4to7 range loop if (Address = N+4) then AddDec_4to7(N) <= 1 ; AddDec_4to7(N) <= 0 ; end loop; end behavioral; --2: case statements process (Address) AddDec_0to3 <= 0 ; AddDec_4to7 <= (others => 0 ); AddDec_8to11 <= 0 ; AddDec_12to15 <= 0 ; case Address is --First quarter when 0 to 3 => AddDec_0to3 <= 1 ; --second quarter when 4 => AddDec_4to7(0) <= 1 ; when 5 => AddDec_4to7(1) <= 1 ; when 6 => AddDec_4to7(2) <= 1 ; when 7 => AddDec_4to7(3) <= 1 ; --Third quarter when 8 to 11 => AddDec_8to11 <= 1 ; --Fourth quarter when 12 to 15 => AddDec_12to15 <= 1 ; end case; end behavioral; 10 XAPP105 (v2.0) August 30, 2001
11 R Here is the summary of the compiled results: Design Name: Fb_decoder Device : XC9536XL 5 PC44 Fitting Status: Successful **************************** Resource Summary **************************** Macrocells Product Terms Registers Pins used Function Block Inputs 7 /36 ( 19%) 7 /180 ( 3%) 0 /36 ( 0%) 11 /34 ( 32%) 8 /108 ( 7%) A total of seven equations have been mapped into two function blocks. Each of these seven equations occupies one macrocell. The six product terms used in this design can be seen in the Implemented equations: ; Implemented Equations. adddec_12to15 = "address<2>" * "address<3>" "adddec_4to7<0>" = /"address<0>" * /"address<1>" * "address<2>" * /"address<3>" "adddec_4to7<1>" = "address<0>" * /"address<1>" * "address<2>" * /"address<3>" "adddec_4to7<2>" = /"address<0>" * "address<1>" * "address<2>" * /"address<3>" "adddec_4to7<3>" = "address<0>" * "address<1>" * "address<2>" * /"address<3>" adddec_8to11 = /"address<2>" * "address<3>" adddec_0to3 = /"address<2>" * /"address<3>" Comparators The code for a simple 6-bit equality comparator is shown in the example below. Comparators are modeled using the if statement with an clause. A conditional signal assignment can also be used, but is less common as a sensitivity list cannot be specified to improve simulation. The equality and relational operators in VHDL are: =!= < <= > >= The logical operators are: not and or It is important to note that only two data objects can be compared at once. Thus, a statement like if(a=b=c) may not be used. Logical operators can, however, be used to test the result of multiple comparisons, such as if((a=b) and (A=C)). Six-Bit Equality Comparator library IEEE; use IEEE.STD_LOGIC_1164.ALL, IEEE.Numeric_STD.all; entity Comparator6 is Port ( A1, B1, A2, B2, A3, B3 : in std_logic_vector(5 downto 0); Y1, Y2, Y3 : out std_logic); end Comparator6; XAPP105 (v2.0) August 30,
12 R architecture behavioral of Comparator6 is COMPARE: process (A1, B1, A2, B2, A3, B3) Y1 <= 1 ; -- each bit is compared in a for loop for N in 0 to 5 loop if (A1(N) /= B1(N)) then Y1 <= 0 ; null; end loop; Y2 <= 0 ; if (A2 = B2) then Y2 <= 1 ; if (A3 =B3) then Y3 <= 1 ; Y3 <= 0 ; end behavioral; The corresponding resource summary is as follows when fit into a XC9572XL TQ100 device: Design Name: Comparator6 Device : XC9572XL 5 TQ100 Fitting Status: Successful **************************** Resource Summary **************************** Macrocells Product Terms Registers Pins used Function Block Inputs 3 /72 ( 4%) 36 /360 ( 10%) 0 /72 ( 0%) 39 /72 ( 54%) 36 /216 ( 16%) Three macrocells are used for this design although product terms are imported from the neighboring macrocells. ; Implemented Equations. /y1 = "a1<3>" * /"b1<3>" + /"a1<3>" * "b1<3>" + "a1<4>" * /"b1<4>" + "a1<2>" * /"b1<2>" + /"a1<2>" * "b1<2>" ;Imported pterms FB1_2 + /"a1<4>" * "b1<4>" + "a1<5>" * /"b1<5>" + /"a1<5>" * "b1<5>" + /"a1<0>" * "b1<0>" ;Imported pterms FB1_4 + "a1<0>" * /"b1<0>" + "a1<1>" * /"b1<1>" + /"a1<1>" * "b1<1>" /y2 = "a2<3>" * /"b2<3>" + /"a2<3>" * "b2<3>" + /"a2<2>" * "b2<2>" + "a2<4>" * /"b2<4>" + /"a2<4>" * "b2<4>" 12 XAPP105 (v2.0) August 30, 2001
13 R ;Imported pterms FB2_2 + "a2<2>" * /"b2<2>" + "a2<0>" * /"b2<0>" + /"a2<0>" * "b2<0>" + /"a2<5>" * "b2<5>" ;Imported pterms FB2_4 + "a2<1>" * /"b2<1>" + /"a2<1>" * "b2<1>" + "a2<5>" * /"b2<5>" /y3 = "a3<3>" * /"b3<3>" + /"a3<3>" * "b3<3>" + /"a3<2>" * "b3<2>" + "a3<4>" * /"b3<4>" + /"a3<4>" * "b3<4>" ;Imported pterms FB3_2 + "a3<2>" * /"b3<2>" + "a3<0>" * /"b3<0>" + /"a3<0>" * "b3<0>" + /"a3<5>" * "b3<5>" ;Imported pterms FB3_4 + "a3<1>" * /"b3<1>" + /"a3<1>" * "b3<1>" + "a3<5>" * /"b3<5>" Adders A dataflow model of a full adder is shown below. This is a single bit adder which can be easily extended using a parametric declaration. Single Bit Half Adder library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity half_adder is Port ( A, B : in std_logic; Sum, Cout : out std_logic); end half_adder; architecture behavioral of half_adder is Sum <= A xor B; Cout <= A and B; end behavioral; Full Adder Library IEEE; Use IEEE.STD_Logic_1164.all, IEEE.Numeric_STD.all; entity Fulladder is Port ( A, B, Cin : in std_logic; Cout, Sum : out std_logic); end Fulladder; architecture behavioral of Fulladder is component HALF_ADDER port (A, B: in std_logic; Sum, Cout: out std_logic); end component; signal AplusB, CoutHA1, CoutHA2: std_logic; HA1: HALF_ADDER port map (A=> A, B=> B, Sum => AplusB, XAPP105 (v2.0) August 30,
14 R Cout => CoutHA1); HA2: HALF_ADDER port map (A => AplusB, B=> Cin, Sum => Sum, Cout => CoutHA2); Cout <= CoutHA1 or CoutHA2; end behavioral; The corresponding resource summary is as follows when fit into an XC9572XL -TQ100 device: Design Name: FULLADDER Device : XC9572XL 5 TQ100 Fitting Status: Successful **************************** Resource Summary **************************** Macrocells Product Terms Registers Pins used Function Block Inputs 2 /72 ( 2%) 6 /360 ( 1%) 0 /72 ( 0%) 5 /72 ( 6%) 6 /216 ( 2%) Here is the corresponding implemented equations: ; Implemented Equations. cout = b * a + b * cin + a * cin /sum = cin Xor b * a + /b * /a Larger Adders can be defined behaviorally. The declaration statements are provided below. Larger Adder Defined Behaviorally library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Fulladder is generic (parameter: integer := 10); Port ( A, B: in std_logic_vector (parameter downto 0) Cin : in std_logic; Cout: out std_logic; Sum : out std_logic_vector (parameter downto 0)); end Fulladder; Modeling Synchronous Logic Circuits The following example shows how to implement a 16-bit counter. Sixteen Bit Counter library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; -- Two very useful use IEEE.STD_LOGIC_UNSIGNED.ALL; -- IEEE libraries entity sixteen is Port ( rst : in std_logic; clk : in std_logic; count: out std_logic_vector(15 downto 0)); end sixteen; architecture behavioral of sixteen is 14 XAPP105 (v2.0) August 30, 2001
15 R signal temp: std_logic_vector(15 downto 0); process (clk, rst) if (rst = 1 ) then temp <= " "; elsif (clk event and clk= 1 ) then temp <= temp + 1; count <= temp; end behavioral; In this implementation 16 registers are used, namely Count0 through Count15. The corresponding resource summary is as shown below: Design Name: Sixteen Device : XC9536XL 5 PC44 Fitting Status: Successful **************************** Resource Summary **************************** Macrocells Product Terms Registers Pins used Function Block Inputs 16 /36 ( 44%) 16 /180 ( 8%) 16 /36 ( 44%) 18 /34 ( 52%) 22 /108 ( 20%) The Implemented equations section of the fitter report, is given below. The equations were implemented with D-Type flops: ; Implemented Equations. "count<0>" := /"count<0>" "count<0>".clkf = clk;fclk/gck "count<0>".rstf = rst;gsr "count<0>".prld = GND "count<1>".t = "count<0>" "count<1>".clkf = clk;fclk/gck "count<1>".rstf = rst;gsr "count<1>".prld = GND "count<10>".t = "count<0>" * "count<1>" * "count<2>" * "count<3>" * "count<4>" * "count<5>" * "count<6>" * "count<7>" * "count<8>" * "count<9>" "count<10>".clkf = clk;fclk/gck "count<10>".rstf = rst;gsr "count<10>".prld = GND "count<11>".t = "count<0>" * "count<1>" * "count<2>" * "count<3>" * "count<4>" * "count<5>" * "count<6>" * "count<7>" * "count<8>" * "count<9>" * "count<10>" "count<11>".clkf = clk;fclk/gck "count<11>".rstf = rst;gsr "count<11>".prld = GND "count<12>".t = "count<0>" * "count<1>" * "count<2>" * "count<3>" * "count<4>" * "count<5>" * "count<6>" * "count<7>" * "count<8>" * "count<9>" * "count<10>" * "count<11>" "count<12>".clkf = clk;fclk/gck "count<12>".rstf = rst;gsr "count<12>".prld = GND XAPP105 (v2.0) August 30,
16 R "count<13>".t = "count<0>" * "count<1>" * "count<2>" * "count<3>" * "count<4>" * "count<5>" * "count<6>" * "count<7>" * "count<8>" * "count<9>" * "count<10>" * "count<11>" * "count<12>" "count<13>".clkf = clk;fclk/gck "count<13>".rstf = rst;gsr "count<13>".prld = GND "count<14>".t = "count<0>" * "count<1>" * "count<2>" * "count<3>" * "count<4>" * "count<5>" * "count<6>" * "count<7>" * "count<8>" * "count<9>" * "count<10>" * "count<11>" * "count<12>" * "count<13>" "count<14>".clkf = clk;fclk/gck "count<14>".rstf = rst;gsr "count<14>".prld = GND "count<15>".t = "count<0>" * "count<1>" * "count<2>" * "count<3>" * "count<4>" * "count<5>" * "count<6>" * "count<7>" * "count<8>" * "count<9>" * "count<10>" * "count<11>" * "count<12>" * "count<13>" * "count<14>" "count<15>".clkf = clk;fclk/gck "count<15>".rstf = rst;gsr "count<15>".prld = GND "count<2>".t = "count<0>" * "count<1>" "count<2>".clkf = clk;fclk/gck "count<2>".rstf = rst;gsr "count<2>".prld = GND "count<3>".t = "count<0>" * "count<1>" * "count<2>" "count<3>".clkf = clk;fclk/gck "count<3>".rstf = rst;gsr "count<3>".prld = GND "count<4>".t = "count<0>" * "count<1>" * "count<2>" * "count<3>" "count<4>".clkf = clk;fclk/gck "count<4>".rstf = rst;gsr "count<4>".prld = GND "count<5>".t = "count<0>" * "count<1>" * "count<2>" * "count<3>" * "count<4>" "count<5>".clkf = clk;fclk/gck "count<5>".rstf = rst;gsr "count<5>".prld = GND "count<6>".t = "count<0>" * "count<1>" * "count<2>" * "count<3>" * "count<4>" * "count<5>" "count<6>".clkf = clk;fclk/gck "count<6>".rstf = rst;gsr "count<6>".prld = GND "count<7>".t = "count<0>" * "count<1>" * "count<2>" * "count<3>" * "count<4>" * "count<5>" * "count<6>" "count<7>".clkf = clk;fclk/gck "count<7>".rstf = rst;gsr "count<7>".prld = GND "count<8>".t = "count<0>" * "count<1>" * "count<2>" * "count<3>" * "count<4>" * "count<5>" * "count<6>" * "count<7>" 16 XAPP105 (v2.0) August 30, 2001
17 R "count<8>".clkf = clk;fclk/gck "count<8>".rstf = rst;gsr "count<8>".prld = GND "count<9>".t = "count<0>" * "count<1>" * "count<2>" * "count<3>" * "count<4>" * "count<5>" * "count<6>" * "count<7>" * "count<8>" "count<9>".clkf = clk;fclk/gck "count<9>".rstf = rst;gsr "count<9>".prld = GND The next example illustrates how to implement a 5-bit up by 1 down by 2 counter. This circuit counts up by 1 when the signal Up is a logic "1" and counts down by 2 when the signal down is logic "1". A case statement of the concatenation of Up and Down makes the model easy to read. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity CNT_UP1_DOWN2 is Port ( Clock, reset, Up, Down : in std_logic; Count : out std_logic_vector(4 downto 0)); end CNT_UP1_DOWN2; architecture behavioral of CNT_UP1_DOWN2 is process (Clock) variable UpDown: std_logic_vector (1 downto 0); variable Count_V: std_logic_vector (4 downto 0); UpDown := Up & Down; if (clock event and clock = 1 )then if (Reset = 1 ) then Count_V := "00000"; case UpDown is when "00" => Count_V := Count_V; when "10" => Count_V := Count_V +1; when "01" => Count_V := Count_V -2; when others => Count_V := Count_V; end case; Count <= Count_V; end behavioral; Note the utilization is three P-terms per bit. Design Name: UPONEDOWNTWO Device : XC9536XL 5 -PC44 Fitting Status: Successful **************************** Resource Summary **************************** Macrocells Product Terms Registers Pins used Function Block Inputs 5 /36 ( 13%) 15 /180 ( 8%) 5 /36 ( 13%) 9 /34 ( 26%) 14 /108 ( 12%) All bits of the count signal have been automatically converted to T-type registers. XAPP105 (v2.0) August 30,
18 R ; Implemented Equations. "count<0>".t = reset * "count<0>" + /reset * /down * up "count<0>".clkf = clock;fclk/gck "count<0>".prld = GND /"count<1>".t = reset * /"count<1>" + /reset * /"count<0>" * /down + /reset * down * up + /reset * /down * /up "count<1>".clkf = clock;fclk/gck "count<1>".prld = GND "count<2>".t = reset * "count<2>" + /reset * /"count<1>" * down * /up + /reset * "count<0>" * "count<1>" * /down * up "count<2>".clkf = clock;fclk/gck "count<2>".prld = GND "count<3>".t = reset * "count<3>" + /reset * /"count<2>" * /"count<1>" * down * /up + /reset * "count<0>" * "count<2>" * "count<1>" * /down * up "count<3>".clkf = clock;fclk/gck "count<3>".prld = GND "count<4>".t = reset * "count<4>" + /reset * /"count<2>" * /"count<3>" * /"count<1>" * down * /up + /reset * "count<0>" * "count<2>" * "count<3>" * "count<1>" * /down * up "count<4>".clkf = clock;fclk/gck "count<4>".prld = GND Asynchronous Counters Asynchronous Counters are sometimes referred to as Ripple Counters. Each single flip-flop phase divides the input signal by two. The example below is of a Divide by 16 Clock divider using an asynchronous (ripple) approach. It has four ripple stages each consisting of a D-type flip-flop. Each of the flip-flops Q-bar outputs is connected back to its D input. A fifth flip-flop is needed to synchronize the divided by 16 clock (Div16) to the source clock (Clock). Divide by 16 Clock Divider Using an Asynchronous (ripple) Counter library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Async_counter is Port ( Clk, Reset : in std_logic; Y : out std_logic); end Async_counter; architecture behavioral of Async_counter is signal Div2, Div4, Div8, Div16: std_logic; process (Clk, Reset, Div2, Div4, Div8) if (Reset = 0 ) then Div2 <= 0 ; elsif rising_edge(clk) then 18 XAPP105 (v2.0) August 30, 2001
19 R Div2 <= not Div2; if (Reset = 0 ) then Div4 <= 0 ; elsif rising_edge (Div2) then Div4 <= not Div4; if (Reset = 0 ) then Div8 <= 0 ; elsif rising_edge (Div4) then Div8 <= not Div8; if (Reset = 0 ) then Div16 <= 0 ; elsif rising_edge (Div8) then Div16 <= not Div16; -- resynchronize back to clock if (Reset = 0 ) then Y <= 0 ; elsif rising_edge(clk) then Y <= Div16; end behavioral; Design Name: Asynch_adder Device used: XC9536XL 5 PC44 Fitting Status: Successful **************************** Resource Summary **************************** Macrocells Product Terms Registers Pins used Function Block Inputs 5 /36 ( 13%) 8 /180 ( 4%) 5 /36 ( 13%) 3 /34 ( 8%) 4 /108 ( 3%) It uses only two macrocells and six product terms, and the implemented equations are as follows: ; Implemented Equations. y := div16 y.clkf = clk;fclk/gck y.rstf = /reset;gsr y.prld = GND div16 := /div16 div16.clkf = div8 div16.rstf = /reset;gsr div16.prld = GND div2 := /div2 div2.clkf = clk;fclk/gck div2.rstf = /reset;gsr div2.prld = GND div4 := /div4 XAPP105 (v2.0) August 30,
20 R div4.clkf = div2 div4.rstf = /reset;gsr div4.prld = GND div8 := /div8 div8.clkf = div4 div8.rstf = /reset;gsr div8.prld = GND Finite State Machines A Finite State Machine is a circuit specifically designed to cycle through a chosen sequence of operations (states) in a well defined manner. FSMs are an important aspect of hardware design. A well written model will function correctly and meet requirements in an optimal manner; a poorly written model may not. Therefore, a designer should fully understand and be familiar with different HDL modeling basics. FSM Design and Modeling Issues FSM issues to consider are: HDL coding style Resets and fail safe behavior State encoding Mealy or Moore type outputs HDL coding style There are many ways of modeling the same state machine. HDL code may be partitioned into three different portions to represent the three parts of a state machine (next state logic, current state logic, and output logic). It may also be structured so that the three different portions are combined in the model. For example, current state and next state logic may be combined with separate output logic, as shown in example FSM1; or next state and output logic may be combined with a separate current state logic, as shown in example FSM2. However, in VHDL, it is impossible to synthesize a combined current state, next state, and output logic in a single always statement. A FSM with n state flip-flops may have 2 n binary numbers that can represent states. Often, all of the 2 n states are not needed. Unused states should be managed by specifying a fall back state during normal operation. For example, a state machine with six states requires a minimum of three flip-flops. Since 2 3 = 8 possible states, there are two unused states. Therefore, Next-state logic is best modeled using the case statement even though this means the FSM can not be modeled in one process. The default clause used in a case statement avoids having to define these unused states. Resets and fail safe behavior Depending on the application, different types of resets may or may not be available. There may be a synchronous and an asynchronous reset, there may only be one, or there may be none. In any case, to ensure fail safe behavior, one of two things must be done, depending on the type of reset: Use an asynchronous reset. This ensures the FSM is always initialized to a known state before the first clock transition and before normal operation commences. This has the advantage of minimizing the next state logic by not having to decode any unused current state values. With no reset or a synchronous reset. When an asynchronous reset is unavailable, there is no way of predicting the initial value of the state register flip-flops when the IC is powered up. In the worst case scenario, it could power up and become stuck in an uncoded state. Therefore, all 2 n binary values must be decoded in the next state logic, whether they form part of the state machine or not XAPP105 (v2.0) August 30, 2001
21 R In VHDL an asynchronous reset can only be modeled using the if statement, while a synchronous reset can be modeled using either a wait or if statement; the disadvantage of using the wait statement is that the whole process is synchronous so other if statements cannot be used to model purely combinational logic. Table 3: Asynchronous and Synchronous Reset Asynchronous Reset Example Synchronous Reset Example Process (Clock, Reset) Begin If (Reset = 1 ) then State <= ST0; Elsif rising_edge (Clock) then Case (State) is.. end case; State Encoding The way in which states are assigned binary values is referred to as state encoding. Some different state encoding schemes commonly used are: Binary Gray Johnson One-hot Process (Clock, Reset) Begin If (rising_edge (clock) then If (Reset = 1 ) then State <= ST0; Else Case (State) is end case; Table 4: State Encoding Format Values No. Binary Gray Johnson One-hot CPLDs, unlike FPGAs, have fewer flip-flops available to the designer. While one-hot encoding is sometimes preferred because it is easy, a large state machine will require a large number of flip-flops (n states will require n flops). Therefore, when implementing finite state machines on CPLDs, in order to conserve available resources, it is recommended that binary or gray encoding be used. Doing so enables the largest number of states to be represented by as few flip-flops as possible. XAPP105 (v2.0) August 30,
22 R Mealy or Moore type outputs There are generally two ways to describe a state machine Mealy and Moore. A Mealy state machine has outputs that are a function of the current state and primary inputs. A Moore state machine has outputs that are a function of the current state only, and so includes outputs direct from the state register. If outputs come direct from the state register only, there is no output logic. The examples below show the same state machine modeled with a Mealy or Moore type output. A state diagram is also associated with each of the two examples. Figure 2: State Machines FSM Example 1 FSM modeled with NewColor as a Mealy type output library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity FSMEX_1 is Port ( clock : in std_logic; reset : in std_logic; red, green, blue : in std_logic; NewColor : out std_logic); end FSMEX_1; architecture behavioral of FSMEX_1 is type Color is (Redstate, GreenState, BlueState, WhiteState); signal CurrentState, NextState: Color; FSM_COMB: process (Red, Green, Blue, CurrentState) case CurrentState is when Redstate => if (Red = 1 ) then NewColor <= 0 ; NextState <= RedState; if (Green = 1 or Blue = 1 ) then NewColor <= 1 ; NewColor <= 0 ; 22 XAPP105 (v2.0) August 30, 2001
23 R NextState <= WhiteState; when GreenState => if (Green = 1 ) then NewColor <= 0 ; NextState <= GreenState; if (Red = 1 or Blue = 1 ) then NewColor <= 1 ; NewColor <= 0 ; NextState <= WhiteState; when BlueState => if (Blue = 1 ) then NewColor <= 0 ; NextState <= BlueState; if (Red = 1 or Green = 1 ) then NewColor <= 1 ; NewColor <= 0 ; NextState <= WhiteState; when WhiteState => if (Red = 1 ) then NewColor <= 1 ; NextState <= RedState; elsif (Green = 1 ) then NewColor <= 1 ; NextState <= GreenState; elsif (Blue = 1 ) then NewColor <= 1 ; NextState <= BlueState; NewColor <= 0 ; NextState <= WhiteState; when others => NewColor <= 0 ; NextState <= WhiteState; end case; end process FSM_COMB; FSM_SEQ: process (clock, reset) if (Reset = 0 ) then CurrentState <= WhiteState; elsif rising_edge (Clock) then CurrentState <= NextState; end process FSM_SEQ; end behavioral; When fit into a XC9536XL device, here is the resource summary: XAPP105 (v2.0) August 30,
24 R Design Name: FSM_EX1 Device used: XC9536XL 5 PC44 Fitting Status: Successful **************************** Resource Summary **************************** Macrocells Product Terms Registers Pins used Function Block Inputs 3 /36 ( 8%) 8 /180 ( 4%) 2 /36 ( 5%) 6 /34 ( 17%) 5 /108 ( 4%) FSM Example 2 FSM modeled with NewColor as a Moore type output library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity FSM_EX_Moore is Port ( Clock, Reset : in std_logic; Red, Green, Blue : in std_logic; NewColor : out std_logic); end FSM_EX_Moore; architecture behavioral of FSM_EX_Moore is type Color is (Redstate, GreenState, BlueState, WhiteState); signal CurrentState, NextState: Color; FSM_COMB: process (Red, Green, Blue, CurrentState) case CurrentState is when RedState => NewColor <= 1 ; -- Moore Output independent of Red, Green or Blue if (Red = 1 ) then NextState <= RedState; NextState <= WhiteState; when GreenState => NewColor <= 1 ; if (Green = 1 ) then NextState <= GreenState; NextState <= WhiteState; when BlueState => NewColor <= 1 ; if (Blue = 1 ) then NextState <= BlueState; NextState <= WhiteState; when WhiteState => NewColor <= 0 ; if (Red = 1 ) then NextState <= RedState; elsif (Green = 1 ) then 24 XAPP105 (v2.0) August 30, 2001
25 R NextState <= GreenState; elsif (Blue = 1 ) then NextState <= BlueState; NextState <= WhiteState; when others => NewColor <= 0 ; NextState <= WhiteState; end case; end process FSM_COMB; FSM_SEQ: process (clock, reset) if (Reset = 0 ) then CurrentState <= WhiteState; elsif rising_edge (Clock) then CurrentState <= NextState; end process FSM_SEQ; end behavioral; When fit into a 9536XL device, here is the resource summary: Design Name: FSM_EX2 Device used: XC9536XL 5 PC44 Fitting Status: Successful **************************** Resource Summary **************************** Macrocells Product Terms Registers Pins used Function Block Inputs 3 /36 ( 8%) 11 /180 ( 6%) 2 /36 ( 5%) 6 /34 ( 17%) 5 /108 ( 4%) Coding Techniques Efficient synthesis of VHDL often depends on how the design was coded. As distinct synthesis engines produce different results, leaving as little as possible to chance will increase the speed and regulate the density of your design. This, however, often trades off some of the advantages of using higher level constructs and libraries. Compare Functions Address decodes often require a decode of a range of address locations. It is inevitable to use the greater than or less than test. Wait state generation, however, often waits a known number of clock cycles. Consider this VHDL code. when wait_state => if wait_counter < wait_time then wait_counter <= wait_counter + 1; my_state <= wait_state; my_state <= next_state; This generates extensive logic to implement the compare. A more efficient implementation would be to branch on the equality condition. when wait_state => if wait_counter = wait_time then XAPP105 (v2.0) August 30,
26 R my_state <= next_state; wait_counter <= wait_counter + 1; my_state <= wait_state; Don t Care Conditions When writing VHDL, it is quite easy to forget about signals that are of no concern in the specific piece of code handling a certain function. For example, you may be generating a memory address for a memory controller that is important when your address strobes are active, however, these outputs are essentially don t care conditions otherwise. Do not forget to assign them as such; otherwise, the VHDL synthesizer will assume that it should hold the output of the last known value. when RAS_ADDRESS => memory_address <= bus_address[31 downto 16]; RAS <= 0 ; CAS <= 1 ; my_state <= CAS_ADDRESS; when CAS_ADDRESS => memory_address <= bus_address[15 downto 0]; RAS <= 0 ; CAS <= 0 ; wait_count <= zero; my_state <= WAIT_1; when WAIT_1 => RAS <= 0 ; CAS <= 1 ; if wait_count = wait_length then my_state <= NEXT_ADDRESS; wait_count <= wait_count + 1; This design can be implemented much more efficiently if it is coded as: when RAS_ADDRESS => memory_address <= bus_address[31 downto 16]; RAS <= 0 ; CAS <= 1 ; wait_count <= "XXXX"; my_state <= CAS_ADDRESS; when CAS_ADDRESS => memory_address <= bus_address[15 downto 0]; RAS <= 0 ; CAS <= 0 ; wait_count <= "0000"; my_state <= WAIT_1; when WAIT_1 => memory_address <= "XXXXXXXXXXXXXXXX"; RAS <= 0 ; CAS <= 1 ; if wait_count = wait_length then my_state <= NEXT_ADDRESS; wait_count <= wait_count + 1; 26 XAPP105 (v2.0) August 30, 2001
27 R Note that we add "don t care" for the wait_count register in the RAS_ADDRESS state as well as adding a "don t care" assignment for the memory address register in the WAIT_1 state. By specifying these don t cares, the final optimized implementation will be improved. Using Specific Assignments There is a temptation with VHDL to use language tricks to compact code. For example, using a counter to increment a state variable. While this allows you to write prompter and visually appealing code, it results in the synthesis tool generating more complex logic to implement the adder and trying to optimize the logic that is unused later. It is generally better to simply assign your desired bit pattern directly. This generates logic that is quicker to collapse during the subsequent fitter process. Modularity A designer can rubber stamp a design by instantiating multiple instances of an existing design entity. Component instantiation is basically the same as applying schematic macros. First, apply the COMPONENT declaration to define what the input and output ports are. The component declaration must match the actual entity declaration of the component. For example, if we want to reuse the flip-flop from our previous example in another design, we can declare it with: component DFLOP port ( my_clk :in std_logic; D_input :in std_logic; Q_output :out std_logic ); The component DFLOP can than be instantiated with the signals necessary to connect the component to the rest of the design. The signals can be mapped positionally or explicitly. Positional mapping is quicker to enter, but forbids omitting unnecessary logic. For example, if you had an 8-bit loadable counter that was never reloaded, explicit mapping allows you to omit signal assignment to the input ports and still use the same 8-bit counter definition. To instantiate the component requires a unique label. Then we state the component name being instantiated followed by the positional signal assignments we are attaching to the component. An example of position signal mapping would be: my_flop: DFF port map(clk, my_input, my_output); The same flop mapped explicitly is shown below. Note that the order can be altered when mapping explicitly. my_second_flop: DFLOP port map (my_clk => clk, Q_output => my_other_output, D_input => my_other_input); Bidirectional Ports To implement bidirectional ports, we must first define the port to be of type inout. Then, we must define when the port is driving, and when it is in a high-z mode. This example implements this structure. library ieee; use ieee.std_logic_1164.all; entity bidi is port ( Data:inout std_logic_vector (7 downto 0); XAPP105 (v2.0) August 30,
28 R direction: in std_logic; clk:in std_logic ); end bidi; architecture behavior of bidi is signal my_register: std_logic_vector (7 downto 0); process (direction, my_register) if (direction = 1 ) then Data <= "ZZZZZZZZ"; Data <= my_register; process (clk) if (clk event and clk = 1 ) then my_register <= Data; end behavior; Summary Revision History The basic structure of a VHDL design has been illustrated, along with numerous examples of basic building blocks. The examples provided are implemented using Xilinx Webpack ISE software. WebPACK ISE software is a free package that provides everything needed to implement a XC9500/XL/XV or CoolRunner design. Webpack not only supports VHDL, but also Verilog, ABEL, and EDIF netlist designs completely free of charge. Webpack can be downloaded at Alternatively, the Xilinx WebFITTER, a web-based design evaluation tool that may also be used. WebFITTER accepts VHDL, Verilog, ABEL, EDIF, and XNF files and returns to the designer a fitter report and a JEDEC file to program the device. WebFITTER may be accessed at Should any problems arise, Xilinx support is available at The following table shows the revision history for this document Date Version Revision 1/12/ Initial Xilinx Release 8/30/ Update 28 XAPP105 (v2.0) August 30, 2001
Finite State Machine Design and VHDL Coding Techniques
Finite State Machine Design and VHDL Coding Techniques Iuliana CHIUCHISAN, Alin Dan POTORAC, Adrian GRAUR "Stefan cel Mare" University of Suceava str.universitatii nr.13, RO-720229 Suceava [email protected],
12. A B C A B C A B C 1 A B C A B C A B C JK-FF NETr
2..,.,.. Flip-Flops :, Flip-Flops, Flip Flop. ( MOD)... -8 8, 7 ( ).. n Flip-Flops. n Flip-Flops : 2 n. 2 n, Modulo. (-5) -4 ( -), (-) - ( -).. / A A A 2 3 4 5 MOD-5 6 MOD-6 7 MOD-7 8 9 / A A A 2 3 4 5
if-then else : 2-1 mux mux: process (A, B, Select) begin if (select= 1 ) then Z <= A; else Z <= B; end if; end process;
if-then else : 2-1 mux mux: process (A, B, Select) begin if (select= 1 ) then Z
ECE 3401 Lecture 7. Concurrent Statements & Sequential Statements (Process)
ECE 3401 Lecture 7 Concurrent Statements & Sequential Statements (Process) Concurrent Statements VHDL provides four different types of concurrent statements namely: Signal Assignment Statement Simple Assignment
Digital Design with VHDL
Digital Design with VHDL CSE 560M Lecture 5 Shakir James Shakir James 1 Plan for Today Announcement Commentary due Wednesday HW1 assigned today. Begin immediately! Questions VHDL help session Assignment
VHDL GUIDELINES FOR SYNTHESIS
VHDL GUIDELINES FOR SYNTHESIS Claudio Talarico For internal use only 1/19 BASICS VHDL VHDL (Very high speed integrated circuit Hardware Description Language) is a hardware description language that allows
ETEC 2301 Programmable Logic Devices. Chapter 10 Counters. Shawnee State University Department of Industrial and Engineering Technologies
ETEC 2301 Programmable Logic Devices Chapter 10 Counters Shawnee State University Department of Industrial and Engineering Technologies Copyright 2007 by Janna B. Gallaher Asynchronous Counter Operation
ECE232: Hardware Organization and Design. Part 3: Verilog Tutorial. http://www.ecs.umass.edu/ece/ece232/ Basic Verilog
ECE232: Hardware Organization and Design Part 3: Verilog Tutorial http://www.ecs.umass.edu/ece/ece232/ Basic Verilog module ();
State Machines in VHDL
State Machines in VHDL Implementing state machines in VHDL is fun and easy provided you stick to some fairly well established forms. These styles for state machine coding given here is not intended to
Modeling Latches and Flip-flops
Lab Workbook Introduction Sequential circuits are digital circuits in which the output depends not only on the present input (like combinatorial circuits), but also on the past sequence of inputs. In effect,
VHDL Test Bench Tutorial
University of Pennsylvania Department of Electrical and Systems Engineering ESE171 - Digital Design Laboratory VHDL Test Bench Tutorial Purpose The goal of this tutorial is to demonstrate how to automate
CNC FOR EDM MACHINE TOOL HARDWARE STRUCTURE. Ioan Lemeni
CNC FOR EDM MACHINE TOOL HARDWARE STRUCTURE Ioan Lemeni Computer and Communication Engineering Department Faculty of Automation, Computers and Electronics University of Craiova 13, A.I. Cuza, Craiova,
LAB #3 VHDL RECOGNITION AND GAL IC PROGRAMMING USING ALL-11 UNIVERSAL PROGRAMMER
LAB #3 VHDL RECOGNITION AND GAL IC PROGRAMMING USING ALL-11 UNIVERSAL PROGRAMMER OBJECTIVES 1. Learn the basic elements of VHDL that are implemented in Warp. 2. Build a simple application using VHDL and
Lenguaje VHDL. Diseño de sistemas digitales secuenciales
Lenguaje VHDL Diseño de sistemas digitales secuenciales Flip-Flop D 1 entity d_ff is clk: in std_logic; d: in std_logic; q: out std_logic 2 end d_ff; P3 P1 5 Q D Q Q(t+1) 0 0 0 0 1 0 1 0 1 1 1 1 architecture
Using Xilinx ISE for VHDL Based Design
ECE 561 Project 4-1 - Using Xilinx ISE for VHDL Based Design In this project you will learn to create a design module from VHDL code. With Xilinx ISE, you can easily create modules from VHDL code using
Digital Design with Synthesizable VHDL
Digital Design with Synthesizable VHDL Prof. Stephen A. Edwards Columbia University Spring 2012 Combinational Logic in a Dataflow Style Hierarchy: Instantiating Components (entities) Combinational Logic
FINITE STATE MACHINE: PRINCIPLE AND PRACTICE
CHAPTER 10 FINITE STATE MACHINE: PRINCIPLE AND PRACTICE A finite state machine (FSM) is a sequential circuit with random next-state logic. Unlike the regular sequential circuit discussed in Chapters 8
Manchester Encoder-Decoder for Xilinx CPLDs
Application Note: CoolRunner CPLDs R XAPP339 (v.3) October, 22 Manchester Encoder-Decoder for Xilinx CPLDs Summary This application note provides a functional description of VHDL and Verilog source code
A New Paradigm for Synchronous State Machine Design in Verilog
A New Paradigm for Synchronous State Machine Design in Verilog Randy Nuss Copyright 1999 Idea Consulting Introduction Synchronous State Machines are one of the most common building blocks in modern digital
VGA video signal generation
A VGA display controller VGA video signal generation A VGA video signal contains 5 active signals: horizontal sync: digital signal, used for synchronisation of the video vertical sync: digital signal,
An Example VHDL Application for the TM-4
An Example VHDL Application for the TM-4 Dave Galloway Edward S. Rogers Sr. Department of Electrical and Computer Engineering University of Toronto March 2005 Introduction This document describes a simple
Step : Create Dependency Graph for Data Path Step b: 8-way Addition? So, the data operations are: 8 multiplications one 8-way addition Balanced binary
RTL Design RTL Overview Gate-level design is now rare! design automation is necessary to manage the complexity of modern circuits only library designers use gates automated RTL synthesis is now almost
A Verilog HDL Test Bench Primer Application Note
A Verilog HDL Test Bench Primer Application Note Table of Contents Introduction...1 Overview...1 The Device Under Test (D.U.T.)...1 The Test Bench...1 Instantiations...2 Figure 1- DUT Instantiation...2
More Verilog. 8-bit Register with Synchronous Reset. Shift Register Example. N-bit Register with Asynchronous Reset.
More Verilog 8-bit Register with Synchronous Reset module reg8 (reset, CLK, D, Q); input reset; input [7:0] D; output [7:0] Q; reg [7:0] Q; if (reset) Q = 0; else Q = D; module // reg8 Verilog - 1 Verilog
(1) D Flip-Flop with Asynchronous Reset. (2) 4:1 Multiplexor. CS/EE120A VHDL Lab Programming Reference
VHDL is an abbreviation for Very High Speed Integrated Circuit Hardware Description Language, and is used for modeling digital systems. VHDL coding includes behavior modeling, structure modeling and dataflow
Digital Electronics Detailed Outline
Digital Electronics Detailed Outline Unit 1: Fundamentals of Analog and Digital Electronics (32 Total Days) Lesson 1.1: Foundations and the Board Game Counter (9 days) 1. Safety is an important concept
Introduction. Jim Duckworth ECE Department, WPI. VHDL Short Course - Module 1
VHDL Short Course Module 1 Introduction Jim Duckworth ECE Department, WPI Jim Duckworth, WPI 1 Topics Background to VHDL Introduction to language Programmable Logic Devices CPLDs and FPGAs FPGA architecture
Modeling Sequential Elements with Verilog. Prof. Chien-Nan Liu TEL: 03-4227151 ext:34534 Email: [email protected]. Sequential Circuit
Modeling Sequential Elements with Verilog Prof. Chien-Nan Liu TEL: 03-4227151 ext:34534 Email: [email protected] 4-1 Sequential Circuit Outputs are functions of inputs and present states of storage elements
Module 3: Floyd, Digital Fundamental
Module 3: Lecturer : Yongsheng Gao Room : Tech - 3.25 Email : [email protected] Structure : 6 lectures 1 Tutorial Assessment: 1 Laboratory (5%) 1 Test (20%) Textbook : Floyd, Digital Fundamental
Hardware Implementation of the Stone Metamorphic Cipher
International Journal of Computer Science & Network Security VOL.10 No.8, 2010 Hardware Implementation of the Stone Metamorphic Cipher Rabie A. Mahmoud 1, Magdy Saeb 2 1. Department of Mathematics, Faculty
To design digital counter circuits using JK-Flip-Flop. To implement counter using 74LS193 IC.
8.1 Objectives To design digital counter circuits using JK-Flip-Flop. To implement counter using 74LS193 IC. 8.2 Introduction Circuits for counting events are frequently used in computers and other digital
EXPERIMENT 8. Flip-Flops and Sequential Circuits
EXPERIMENT 8. Flip-Flops and Sequential Circuits I. Introduction I.a. Objectives The objective of this experiment is to become familiar with the basic operational principles of flip-flops and counters.
Digital Systems Design. VGA Video Display Generation
Digital Systems Design Video Signal Generation for the Altera DE Board Dr. D. J. Jackson Lecture 12-1 VGA Video Display Generation A VGA signal contains 5 active signals Two TTL compatible signals for
CHAPTER 3 Boolean Algebra and Digital Logic
CHAPTER 3 Boolean Algebra and Digital Logic 3.1 Introduction 121 3.2 Boolean Algebra 122 3.2.1 Boolean Expressions 123 3.2.2 Boolean Identities 124 3.2.3 Simplification of Boolean Expressions 126 3.2.4
Modeling Registers and Counters
Lab Workbook Introduction When several flip-flops are grouped together, with a common clock, to hold related information the resulting circuit is called a register. Just like flip-flops, registers may
Having read this workbook you should be able to: recognise the arrangement of NAND gates used to form an S-R flip-flop.
Objectives Having read this workbook you should be able to: recognise the arrangement of NAND gates used to form an S-R flip-flop. describe how such a flip-flop can be SET and RESET. describe the disadvantage
Digital Systems Design! Lecture 1 - Introduction!!
ECE 3401! Digital Systems Design! Lecture 1 - Introduction!! Course Basics Classes: Tu/Th 11-12:15, ITE 127 Instructor Mohammad Tehranipoor Office hours: T 1-2pm, or upon appointments @ ITE 441 Email:
Computer organization
Computer organization Computer design an application of digital logic design procedures Computer = processing unit + memory system Processing unit = control + datapath Control = finite state machine inputs
Asynchronous & Synchronous Reset Design Techniques - Part Deux
Clifford E. Cummings Don Mills Steve Golson Sunburst Design, Inc. LCDM Engineering Trilobyte Systems [email protected] [email protected] [email protected] ABSTRACT This paper will investigate
The components. E3: Digital electronics. Goals:
E3: Digital electronics Goals: Basic understanding of logic circuits. Become familiar with the most common digital components and their use. Equipment: 1 st. LED bridge 1 st. 7-segment display. 2 st. IC
Experiment # 9. Clock generator circuits & Counters. Eng. Waleed Y. Mousa
Experiment # 9 Clock generator circuits & Counters Eng. Waleed Y. Mousa 1. Objectives: 1. Understanding the principles and construction of Clock generator. 2. To be familiar with clock pulse generation
ASYNCHRONOUS COUNTERS
LB no.. SYNCHONOUS COUNTES. Introduction Counters are sequential logic circuits that counts the pulses applied at their clock input. They usually have 4 bits, delivering at the outputs the corresponding
DIGITAL COUNTERS. Q B Q A = 00 initially. Q B Q A = 01 after the first clock pulse.
DIGITAL COUNTERS http://www.tutorialspoint.com/computer_logical_organization/digital_counters.htm Copyright tutorialspoint.com Counter is a sequential circuit. A digital circuit which is used for a counting
DEPARTMENT OF INFORMATION TECHNLOGY
DRONACHARYA GROUP OF INSTITUTIONS, GREATER NOIDA Affiliated to Mahamaya Technical University, Noida Approved by AICTE DEPARTMENT OF INFORMATION TECHNLOGY Lab Manual for Computer Organization Lab ECS-453
The 104 Duke_ACC Machine
The 104 Duke_ACC Machine The goal of the next two lessons is to design and simulate a simple accumulator-based processor. The specifications for this processor and some of the QuartusII design components
Quartus II Introduction for VHDL Users
Quartus II Introduction for VHDL Users This tutorial presents an introduction to the Quartus II software. It gives a general overview of a typical CAD flow for designing circuits that are implemented by
Digital Design and Synthesis INTRODUCTION
Digital Design and Synthesis INTRODUCTION The advances in digital design owe its progress to 3 factors. First the acceleration at which the CMOS technology has advanced in last few decades and the way
Design and Verification of Nine port Network Router
Design and Verification of Nine port Network Router G. Sri Lakshmi 1, A Ganga Mani 2 1 Assistant Professor, Department of Electronics and Communication Engineering, Pragathi Engineering College, Andhra
Getting the Most Out of Synthesis
Outline Getting the Most Out of Synthesis Dr. Paul D. Franzon 1. Timing Optimization Approaches 2. Area Optimization Approaches 3. Design Partitioning References 1. Smith and Franzon, Chapter 11 2. D.Smith,
Digital Logic Design. Basics Combinational Circuits Sequential Circuits. Pu-Jen Cheng
Digital Logic Design Basics Combinational Circuits Sequential Circuits Pu-Jen Cheng Adapted from the slides prepared by S. Dandamudi for the book, Fundamentals of Computer Organization and Design. Introduction
Contents COUNTER. Unit III- Counters
COUNTER Contents COUNTER...1 Frequency Division...2 Divide-by-2 Counter... 3 Toggle Flip-Flop...3 Frequency Division using Toggle Flip-flops...5 Truth Table for a 3-bit Asynchronous Up Counter...6 Modulo
Take-Home Exercise. z y x. Erik Jonsson School of Engineering and Computer Science. The University of Texas at Dallas
Take-Home Exercise Assume you want the counter below to count mod-6 backward. That is, it would count 0-5-4-3-2-1-0, etc. Assume it is reset on startup, and design the wiring to make the counter count
Implementation of Web-Server Using Altera DE2-70 FPGA Development Kit
1 Implementation of Web-Server Using Altera DE2-70 FPGA Development Kit A THESIS SUBMITTED IN PARTIAL FULFILLMENT OF THE REQUIREMENT OF FOR THE DEGREE IN Bachelor of Technology In Electronics and Communication
Lecture 8: Synchronous Digital Systems
Lecture 8: Synchronous Digital Systems The distinguishing feature of a synchronous digital system is that the circuit only changes in response to a system clock. For example, consider the edge triggered
Finite State Machine. RTL Hardware Design by P. Chu. Chapter 10 1
Finite State Machine Chapter 10 1 Outline 1. Overview 2. FSM representation 3. Timing and performance of an FSM 4. Moore machine versus Mealy machine 5. VHDL description of FSMs 6. State assignment 7.
EC313 - VHDL State Machine Example
EC313 - VHDL State Machine Example One of the best ways to learn how to code is seeing a working example. Below is an example of a Roulette Table Wheel. Essentially Roulette is a game that selects a random
Combinational-Circuit Building Blocks
May 9, 24 :4 vra6857_ch6 Sheet number Page number 35 black chapter 6 Combinational-Circuit Building Blocks Chapter Objectives In this chapter you will learn about: Commonly used combinational subcircuits
Design and Implementation of Vending Machine using Verilog HDL
2011 2nd International Conference on Networking and Information Technology IPCSIT vol.17 (2011) (2011) IACSIT Press, Singapore Design and Implementation of Vending Machine using Verilog HDL Muhammad Ali
LAB #4 Sequential Logic, Latches, Flip-Flops, Shift Registers, and Counters
LAB #4 Sequential Logic, Latches, Flip-Flops, Shift Registers, and Counters LAB OBJECTIVES 1. Introduction to latches and the D type flip-flop 2. Use of actual flip-flops to help you understand sequential
Chapter 4 Register Transfer and Microoperations. Section 4.1 Register Transfer Language
Chapter 4 Register Transfer and Microoperations Section 4.1 Register Transfer Language Digital systems are composed of modules that are constructed from digital components, such as registers, decoders,
Registers & Counters
Objectives This section deals with some simple and useful sequential circuits. Its objectives are to: Introduce registers as multi-bit storage devices. Introduce counters by adding logic to registers implementing
Using Altera MAX Series as Microcontroller I/O Expanders
2014.09.22 Using Altera MAX Series as Microcontroller I/O Expanders AN-265 Subscribe Many microcontroller and microprocessor chips limit the available I/O ports and pins to conserve pin counts and reduce
COMBINATIONAL and SEQUENTIAL LOGIC CIRCUITS Hardware implementation and software design
PH-315 COMINATIONAL and SEUENTIAL LOGIC CIRCUITS Hardware implementation and software design A La Rosa I PURPOSE: To familiarize with combinational and sequential logic circuits Combinational circuits
Chapter 7. Registers & Register Transfers. J.J. Shann. J. J. Shann
Chapter 7 Registers & Register Transfers J. J. Shann J.J. Shann Chapter Overview 7- Registers and Load Enable 7-2 Register Transfers 7-3 Register Transfer Operations 7-4 A Note for VHDL and Verilog Users
DIGITAL ELECTRONICS. Counters. By: Electrical Engineering Department
Counters By: Electrical Engineering Department 1 Counters Upon completion of the chapter, students should be able to:.1 Understand the basic concepts of asynchronous counter and synchronous counters, and
ECE 451 Verilog Exercises. Sept 14, 2007. James Barnes ([email protected])
ECE 451 Verilog Exercises Sept 14, 2007 James Barnes ([email protected]) Organization These slides give a series of self-paced exercises. Read the specification of each exercise and write your
WEEK 8.1 Registers and Counters. ECE124 Digital Circuits and Systems Page 1
WEEK 8.1 egisters and Counters ECE124 igital Circuits and Systems Page 1 Additional schematic FF symbols Active low set and reset signals. S Active high set and reset signals. S ECE124 igital Circuits
Introduction to Programmable Logic Devices. John Coughlan RAL Technology Department Detector & Electronics Division
Introduction to Programmable Logic Devices John Coughlan RAL Technology Department Detector & Electronics Division PPD Lectures Programmable Logic is Key Underlying Technology. First-Level and High-Level
Lab 1: Introduction to Xilinx ISE Tutorial
Lab 1: Introduction to Xilinx ISE Tutorial This tutorial will introduce the reader to the Xilinx ISE software. Stepby-step instructions will be given to guide the reader through generating a project, creating
No serious hazards are involved in this laboratory experiment, but be careful to connect the components with the proper polarity to avoid damage.
HARDWARE LAB 5/DESIGN PROJECT Finite State Machine Design of a Vending Machine Using Xilinx ISE Project Navigator and Spartan 3E FPGA Development Board with VHDL Acknowledgements: Developed by Bassam Matar,
Sistemas Digitais I LESI - 2º ano
Sistemas Digitais I LESI - 2º ano Lesson 6 - Combinational Design Practices Prof. João Miguel Fernandes ([email protected]) Dept. Informática UNIVERSIDADE DO MINHO ESCOLA DE ENGENHARIA - PLDs (1) - The
Let s put together a Manual Processor
Lecture 14 Let s put together a Manual Processor Hardware Lecture 14 Slide 1 The processor Inside every computer there is at least one processor which can take an instruction, some operands and produce
Using Xilinx CPLDs to Interface to a NAND Flash Memory Device
Application Note: Coolunner CPLD XAPP354 (v1.1) September 30, 2002 Using Xilinx CPLDs to Interface to a NAND Flash Memory Device Summary This application note describes the use of a Xilinx Coolunner CPLD
Cascaded Counters. Page 1 BYU
Cascaded Counters Page 1 Mod-N Counters Generally we are interested in counters that count up to specific count values Not just powers of 2 A mod-n counter has N states Counts from 0 to N-1 then rolls
Combinational Logic Design Process
Combinational Logic Design Process Create truth table from specification Generate K-maps & obtain logic equations Draw logic diagram (sharing common gates) Simulate circuit for design verification Debug
COMBINATIONAL CIRCUITS
COMBINATIONAL CIRCUITS http://www.tutorialspoint.com/computer_logical_organization/combinational_circuits.htm Copyright tutorialspoint.com Combinational circuit is a circuit in which we combine the different
In this example the length of the vector is determined by D length and used for the index variable.
Loops Loop statements are a catagory of control structures that allow you to specify repeating sequences of behavior in a circuit. There are three primary types of loops in VHDL: for loops, while loops,
DDS. 16-bit Direct Digital Synthesizer / Periodic waveform generator Rev. 1.4. Key Design Features. Block Diagram. Generic Parameters.
Key Design Features Block Diagram Synthesizable, technology independent VHDL IP Core 16-bit signed output samples 32-bit phase accumulator (tuning word) 32-bit phase shift feature Phase resolution of 2π/2
Asynchronous Counters. Asynchronous Counters
Counters and State Machine Design November 25 Asynchronous Counters ENGI 25 ELEC 24 Asynchronous Counters The term Asynchronous refers to events that do not occur at the same time With respect to counter
Lab 7: VHDL 16-Bit Shifter
Lab 7: VHDL 16-Bit Shifter Objectives : Design a 16-bit shifter which need implement eight shift operations: logic shift right, logic shift left, arithmetic shift right, arithmetic shift left, rotate right,
Systems I: Computer Organization and Architecture
Systems I: omputer Organization and Architecture Lecture 8: Registers and ounters Registers A register is a group of flip-flops. Each flip-flop stores one bit of data; n flip-flops are required to store
Systems I: Computer Organization and Architecture
Systems I: Computer Organization and Architecture Lecture : Microprogrammed Control Microprogramming The control unit is responsible for initiating the sequence of microoperations that comprise instructions.
Digital Systems Based on Principles and Applications of Electrical Engineering/Rizzoni (McGraw Hill
Digital Systems Based on Principles and Applications of Electrical Engineering/Rizzoni (McGraw Hill Objectives: Analyze the operation of sequential logic circuits. Understand the operation of digital counters.
MAX II ISP Update with I/O Control & Register Data Retention
MAX II ISP Update with I/O Control & Register Data Retention March 2006, ver 1.0 Application Note 410 Introduction MAX II devices support the real-time in-system mability (ISP) feature that allows you
Life Cycle of a Memory Request. Ring Example: 2 requests for lock 17
Life Cycle of a Memory Request (1) Use AQR or AQW to place address in AQ (2) If A[31]==0, check for hit in DCache Ring (3) Read Hit: place cache word in RQ; Write Hit: replace cache word with WQ RDDest/RDreturn
150127-Microprocessor & Assembly Language
Chapter 3 Z80 Microprocessor Architecture The Z 80 is one of the most talented 8 bit microprocessors, and many microprocessor-based systems are designed around the Z80. The Z80 microprocessor needs an
7. Latches and Flip-Flops
Chapter 7 Latches and Flip-Flops Page 1 of 18 7. Latches and Flip-Flops Latches and flip-flops are the basic elements for storing information. One latch or flip-flop can store one bit of information. The
Digital Circuit Design Using Xilinx ISE Tools
Digital Circuit Design Using Xilinx ISE Tools Contents 1. Introduction... 1 2. Programmable Logic Device: FPGA... 2 3. Creating a New Project... 2 4. Synthesis and Implementation of the Design... 11 5.
AC 2007-2485: PRACTICAL DESIGN PROJECTS UTILIZING COMPLEX PROGRAMMABLE LOGIC DEVICES (CPLD)
AC 2007-2485: PRACTICAL DESIGN PROJECTS UTILIZING COMPLEX PROGRAMMABLE LOGIC DEVICES (CPLD) Samuel Lakeou, University of the District of Columbia Samuel Lakeou received a BSEE (1974) and a MSEE (1976)
RAPID PROTOTYPING OF DIGITAL SYSTEMS Second Edition
RAPID PROTOTYPING OF DIGITAL SYSTEMS Second Edition A Tutorial Approach James O. Hamblen Georgia Institute of Technology Michael D. Furman Georgia Institute of Technology KLUWER ACADEMIC PUBLISHERS Boston
Chapter 5. Sequential Logic
Chapter 5 Sequential Logic Sequential Circuits (/2) Combinational circuits: a. contain no memory elements b. the outputs depends on the current inputs Sequential circuits: a feedback path outputs depends
SDLC Controller. Documentation. Design File Formats. Verification
January 15, 2004 Product Specification 11 Stonewall Court Woodcliff Lake, NJ 07677 USA Phone: +1-201-391-8300 Fax: +1-201-391-8694 E-mail: [email protected] URL: www.cast-inc.com Features AllianceCORE
Figure 1 FPGA Growth and Usage Trends
White Paper Avoiding PCB Design Mistakes in FPGA-Based Systems System design using FPGAs is significantly different from the regular ASIC and processor based system design. In this white paper, we will
VHDL programmering H2
VHDL programmering H2 VHDL (Very high speed Integrated circuits) Hardware Description Language IEEE standard 1076-1993 Den benytter vi!! Hvornår blev den frigivet som standard første gang?? Ca. 1980!!
Figure 8-1 Four Possible Results of Adding Two Bits
CHPTER EIGHT Combinational Logic pplications Thus far, our discussion has focused on the theoretical design issues of computer systems. We have not yet addressed any of the actual hardware you might find
DIGITAL TECHNICS II. Dr. Bálint Pődör. Óbuda University, Microelectronics and Technology Institute. 2nd (Spring) term 2012/2013
DIGITAL TECHNICS II Dr. Bálint Pődör Óbuda University, Microelectronics and Technology Institute 4. LECTURE: COUNTERS AND RELATED 2nd (Spring) term 2012/2013 1 4. LECTURE: COUNTERS AND RELATED 1. Counters,
Upon completion of unit 1.1, students will be able to
Upon completion of unit 1.1, students will be able to 1. Demonstrate safety of the individual, class, and overall environment of the classroom/laboratory, and understand that electricity, even at the nominal
Printed Circuit Board Design with HDL Designer
Printed Circuit Board Design with HDL Designer Tom Winkert Teresa LaFourcade NASNGoddard Space Flight Center 301-286-291 7 NASNGoddard Space Flight Center 301-286-0019 tom.winkert8 nasa.gov teresa. 1.
