Logic Synthesis with VHDL System Synthesis Bob Reese Electrical ...
Logic Synthesis with VHDL System Synthesis Bob Reese Electrical ...
Logic Synthesis with VHDL System Synthesis Bob Reese Electrical ...
- No tags were found...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Logic</strong> <strong>Synthesis</strong> <strong>with</strong> <strong>VHDL</strong><strong>System</strong> <strong>Synthesis</strong><strong>Bob</strong> <strong>Reese</strong><strong>Electrical</strong> Engineering DepartmentMississippi State University
<strong>Electrical</strong> & Computer EngineeringMississippi State University<strong>VHDL</strong> Packages⇒ A VDHL package is a mechanism for collecting procedures, functions,constants, and components for future re–use.⇒ A package contains a package declaration followed by a packagebody.→ Package declarationpackage package_name is{ external constant, procedure, function,component declarations }end package_name;→Package bodypackage body package_name is{constant, procedure, function, componentdefinitions }end package_name;⇒ Any items in the package declaration are available for externaluse. There can be items in the package body which are not in thepackage declaration; these items are only available for use <strong>with</strong>inthe package.<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–2<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityExample <strong>VHDL</strong> PackageLibrary IEEE; use IEEE.std_logic_1164.all;package iscas isprocedure ripple_adder (a,b: in std_logic_vector; cin: in std_logic;sum: inout std_logic_vector; cout: out std_logic);end iscas;package body iscas isfunction xor3 (a,b,c: in std_logic) return std_logic isbeginreturn (a xor b xor c);end xor3;procedure ripple_adder (a,b: in std_logic_vector; cin: in std_logic;sum: inout std_logic_vector; cout: out std_logic) isvariable c: std_logic_vector((a’high–a’low+1) downto 0);beginc(0) := cin;for i in 0 to (a’high–a’low) loopsum(i+sum’low) := xor3 (a(i+a’low), b(i+b’low), c(i) );c(i+1) := (a(i+a’low) and b(i+b’low)) or(c(i) and (a(i+a’low) or b(i+b’low)));end loop;cout := c(c’high);end ripple_adder;end iscas;<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–3<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State University<strong>VHDL</strong> Functions⇒ General form:function function_name ( parameter list) return return_type is{variable declarations}begin{sequential statements}end function_name;function xor3 (a,b,c: in std_logic) return std_logic isbeginreturn (a xor b xor c);end xor3;⇒ A <strong>VHDL</strong> function computes a return value based upon its parameterlist.→ All parameters passed to a <strong>VHDL</strong> function must be of mode in;i.e, the function is not allowed to modify any of the functionparameters.→ The default class of the elements in a parameter list for eitherprocedures or functions is variable.→ Signals can be passed in the parameter list; in this case theparameter list would look like:(signal a, b, c: std_logic)→ More on the difference between variables and signals will begiven later.<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–4<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State University<strong>VHDL</strong> Procedures⇒ General form:procedure procedure_name ( parameter list) is{variable declarations}begin{sequential statements}end procedure_name;⇒ The ripple_adder procedure implements the ripple carry adderused in previous examples.⇒ The ripple_adder procedure uses the local xor3 function defined<strong>with</strong>in the package.sum(i+sum’low) := xor3 (a(i+a’low), b(i+b’low), c(i) );⇒ For generality, the input parameters ’a’ and ’b’ as well as the output’sum’ are declared as unconstrained array types; i.e., no arraybounds are given for the std_logic_vector type.→ Allows any width vector to be passed as a parameter.→ Array indices must be computed using the ’low attribute as anoffset in order to achieve independence from the actual arrayindices which are passed in.<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–5<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversitySignals vs Variables⇒ Only signals are used as the connection ports for <strong>VHDL</strong> entities.→ Variables are declared <strong>with</strong>in process blocks, procedures,and functions.→ Signals can only be declared <strong>with</strong>in architecture bodies; theycan be passed as parameters to functions and procedures.⇒ Signals are assigned via ”
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityUsing the ripple_adder ProcedureLibrary IEEE;use IEEE.std_logic_1164.all;use work.iscas.all;entity adder_test isport (signal a,b: in std_logic_vector (15 downto 0);signal cin: in std_logic;signal sum: out std_logic_vector(15 downto 0);signal cout: out std_logic);end adder_test;architecture behavior of adder_test isbeginprocess (a,b,cin)variable temp_sum: std_logic_vector (sum’range);variable temp_cout: std_logic;beginripple_adder(a, b, cin, temp_sum, temp_cout);sum
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityA Carry Select AdderK bitsCIASUMBCOUTSUMEach stage computes part of thesum. Typically, the stage sizes increase;so a 16 bit adder stagesizes might be 4, 5, 7 = total of16 bits. Ripple adders are usedfor stage adders.CS001L bitsCIASUMBCOUTCIASUMBCOUT01MUXSUMCS001CS1M bitsCIASUMBCOUTCIASUMBCOUT01MUXSUMCS1CS2....... etc.<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–8<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityCarry_Select_Adder Procedureprocedure carry_select_adder(groups: iarray; a,b: in std_logic_vector; cin: in std_logic;sum: inout std_logic_vector; cout: out std_logic) isvariable low_index, high_index :integer;variable temp_sum_a, temp_sum_b : std_logic_vector(sum’range);variable carry_selects :std_logic_vector(groups’range);variable carry_zero :std_logic_vector(groups’low to (groups’high–1));variable carry_one :std_logic_vector(groups’low to (groups’high–1));beginlow_index := 0;for i in groups’low to groups’high loophigh_index := (groups(i)–1) + low_index ;if (i = 0) then –– first group, just do one ripple–carryripple_adder (a(high_index downto low_index), b(high_index downto low_index),cin, sum(high_index downto low_index), carry_selects(0) );else–– need to do two ripple carry adders then use mux to selectripple_adder (a(high_index downto low_index), b(high_index downto low_index),’0’, temp_sum_a(high_index downto low_index), carry_zero(i–1));ripple_adder (a(high_index downto low_index), b(high_index downto low_index),’1’, temp_sum_b(high_index downto low_index), carry_one(i–1));if (carry_selects(i–1) = ’0’) thensum(high_index downto low_index) := temp_sum_a(high_index downto low_index);elsesum(high_index downto low_index) := temp_sum_b(high_index downto low_index);end if;carry_selects(i) := (carry_selects(i–1) and carry_one(i–1) ) or carry_zero(i–1);end if;low_index := high_index + 1;end loop;cout := carry_selects(groups’high);end ripple_adder;<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–9<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State Universityiscas Package DeclarationLibrary IEEE;use IEEE.std_logic_1164.all;package iscas istype IARRAY is array (natural range ) of integer;procedure ripple_adder (a,b: in std_logic_vector; cin: in std_logic;sum: inout std_logic_vector; cout: out std_logic);procedure carry_select_adder(groups: iarray; a,b: in std_logic_vector; cin: in std_logic;sum: inout std_logic_vector; cout: out std_logic);end iscas;⇒ We need to declare an array type for integers; call this IARRAY.This type will be used to pass in an integer array to the carry_select_adderprocedure; the integer array will be define the stagesizes for the adder.⇒ Since xor3 is to be local to the iscas package; it is not in the packagedeclaration. However, if it was to be made externally available,its declaration would be:function xor3 (a,b,c: in std_logic) return std_logic;<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–10<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityUsing the carry_select_adder ProcedureLibrary IEEE;use IEEE.std_logic_1164.all;use work.iscas.all;entity adder_cs isport (signal a,b: in std_logic_vector (15 downto 0);signal cin: in std_logic;signal sum: out std_logic_vector(15 downto 0);signal cout: out std_logic);end adder_cs;architecture behavior of adder_cs isbeginprocess (a,b,cin)variable temp_sum: std_logic_vector (sum’range);variable temp_cout: std_logic;constant groups: iarray(0 to 2) := (4,5,7);begincarry_select_adder(groups,a,b,cin,temp_sum, temp_cout);sum
<strong>Electrical</strong> & Computer EngineeringMississippi State University1 2 3 4 5 6 7 81 2 3 4 5 6 7 8ABCDcinA1215411004119101210231214BCD652145621101281314897312151001961014814861411138151510151239845111373115732a(4)a(6)a(1)a(7)a(11)a(12)a(12)a(8)a(13)a(14)n1042813144893210a(15:0)a(15:0)n1044n1038n1031n1024n1018n1011n1027b(15:0)b(6)a(6)n1065n1016sum(6)0019236612756n1035b(7)b(11)n1043n1040n1041n1039n993 n1034sum(7)n1033a(7)n1037n1036b(7)7n1028n1029n1055 n1026sum(11)n1025a(11)n1030b(11)a(12)n1063b(12) n1022sum(12)n1023n1020b(15:0)n1021n1019n1057 n10131112n1015sum(13)n1012a(13)n1017b(13)n1060a(14)a(14) b(14) n1009b(14) n1062 n1010sum(14)n1061n1008n1007b(14)a(9) a(0) sum(0)n1005b(0)b(9)a(10)b(10)13140n997n958b(5)n1004sum(15:0)n1032n1053n994b(8)n984n1058n1059b(4)n1000a(10) sum(10)b(10)n1054 n976n974n1001n975b(0) n1056cin b(12) n973n965b(0)a(0)b(10)a(10)b(1) a(9)n966 sum(15)a(1) n1047n999b(1) n1048 n983b(2) n985a(2)b(12)n1014 a(1) sum(1)n991b(13)b(1)b(2) b(3)n967a(2) a(3)a(2)b(3) n988n968 b(2) sum(2)a(3)b(8)a(3) sum(3)n987b(8) b(3)a(8)n962a(5)n1006n1049n969 n996 sum(9)n964b(9) a(9)b(6) n1052n998b(5)n972n971a(6) n995a(8) n1064 sum(8)n961b(6) a(8)n977 n1002n980n981n979n970sum(4)a(4)n1046b(4)a(5)n1051n1003n1050n982sum(5)n1045n992n978n963n960n959n990n989n986b(15)n957a(15)a(15)b(15)coutsum(15:0)cout<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–12<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State University<strong>VHDL</strong> Generic listsLibrary IEEE;use IEEE.std_logic_1164.all;use work.iscas.all;entity adder_test isgeneric ( N : integer := 16);port (signal a,b: in std_logic_vector (N–1 downto 0);signal cin: in std_logic;signal sum: out std_logic_vector(N–1 downto 0);signal cout: out std_logic);end adder_test;architecture behavior of adder_test isbeginprocess (a,b,cin)variable temp_sum: std_logic_vector (sum’range);variable temp_cout: std_logic;beginripple_adder(a, b, cin, temp_sum, temp_cout);sum
<strong>Electrical</strong> & Computer EngineeringMississippi State University<strong>VHDL</strong> Generic lists (cont.)⇒ <strong>VHDL</strong> generic lists are used in entity declarations for passing staticinformation.→ Typical uses of generics are for controlling bus widths, featureinclusion, message generation, timing values.⇒ A generic will usually have a specified default value; this value canbe overridden via <strong>VHDL</strong> configurations or by vendor–specificback–annotation methods.→Generics offer a method for parameterizing entitydeclarations and architectures. Because the method ofspecifying generic values (other than defaults) can bevendor specific, generics will not be covered further in thistutorial.<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–14<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityOperator OverloadingLibrary IEEE; use IEEE.std_logic_1164.all;package genmux is–– 2/1 version, 1 bit inputsfunction mux (a,b: std_logic; sel: std_logic) return std_logic;–– 2/1 version, N bit inputsfunction mux (a,b: std_logic_vector; sel: std_logic) return std_logic_vector;–– 3/1 version, 1 bit inputsfunction mux (a,b,c: std_logic; sel: std_logic_vector) return std_logic;–– 3/1 version, N bit inputsfunction mux (a,b,c: std_logic_vector; sel: std_logic_vector) return std_logic_vector;–– 4/1 version, 1 bit inputsfunction mux (a,b,c,d: std_logic; sel: std_logic_vector) return std_logic;–– 4/1 version, N bit inputsfunction mux (a,b,c,d: std_logic_vector; sel: std_logic_vector) return std_logic_vector;end genmux;package body genmux isfunction mux (a,b: std_logic; sel: std_logic) return std_logic isvariable y: std_logic;beginy := a;if (sel = ’1’) then y := b; end if;return(y);end mux; –– 2/1 version, 1 bit inputsfunction mux (a,b: std_logic_vector; sel: std_logic) return std_logic_vector isvariable y: std_logic_vector(a’range);beginy := a;if (sel = ’1’) then y := b; end if;return(y);end mux; –– 2/1 version, N bit inputs<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–15<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityOperator Overloading (cont.)function mux (a,b,c: std_logic; sel: std_logic_vector) return std_logic isvariable y: std_logic;beginy := ’–’; –– Don’t care for default stateif (sel = ”00”) then y := a; end if; if (sel = ”01”) then y := b; end if;if (sel = ”10”) then y := c; end if;return(y);end mux; –– 3/1 version, 1 bit inputsfunction mux (a,b,c: std_logic_vector; sel: std_logic_vector) return std_logic_vector isvariable y: std_logic_vector(a’range);beginy := (others => ’–’); –– Don’t care for default stateif (sel = ”00”) then y := a; end if; if (sel = ”01”) then y := b; end if;if (sel = ”10”) then y := c; end if;return(y);end mux; –– 3/1 version, N bit inputsfunction mux (a,b,c,d: std_logic; sel: std_logic_vector) return std_logic isvariable y: std_logic;beginy := d;if (sel = ”00”) then y := a; end if; if (sel = ”01”) then y := b; end if;if (sel = ”10”) then y := c; end if;return(y);end mux; –– 4/1 version, 1 bit inputsfunction mux (a,b,c,d: std_logic_vector; sel: std_logic_vector) return std_logic_vector isvariable y: std_logic_vector(a’range);beginy := d;if (sel = ”00”) then y := a; end if; if (sel = ”01”) then y := b; end if;if (sel = ”10”) then y := c; end if;return(y);end mux; –– 4/1 version, N bit inputsend genmux;<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–16<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityTest of ’mux’ FunctionLibrary IEEE;use IEEE.std_logic_1164.all;use work.genmux.all;entity muxtest isport (signal a,b,c: in std_logic;signal s_a: in std_logic_vector(1 downto 0);signal y: out std_logic;signal j,k,l: in std_logic_vector(3 downto 0);signal s_b: in std_logic_vector(1 downto 0);signal z: out std_logic_vector(3 downto 0));end muxtest;architecture behavior of muxtest isbeginy
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityABCD1 2 3 4 5 6 7 8s_a(1:0)s_a(1:0)012s_b(1:0)s_b(0) 0n149z(3) 3s_b(1) 1n150n161n163s_b(0) 01 2 3 4 5 6 7 8ABCD1k(3:0)k(3:0)j(3:0)j(3:0)l(3:0)bl(3:0)abn164 yayccs_a(1)n157s_a(0) 0s_a(0) 0n158n1590 k(0)n1600j(0)n155z(0)0l(0)n156k(1) 11j(1)n153z(1)1l(1)n154k(2) 2z(3:0)2j(2)n151z(2)2l(2)n152k(3) 3s_b(1:0)3 j(3)n162z(3:0)3l(3)<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–18<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityBlackJack Dealer Control (cont)TESTCancel ACE=11Fscore16gtTMUX: Select SUB10REG: Load scoreF→ace11flag.outscore21gtFTace11flagFTT→stand.outT→broke.outScore is > 16 and< 21 so standScore > 21 and wecan’t adjust anACE value so weare brokeTo GET state<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–21<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityBlackJack Datapath+105clearCard Switches4–1055MUX255ADDER 5 ScoreREG5selAce Finderacecardscoreloadace11flag.outace11flagMiscellanous Flip Flops tobe included in Control5Comparatorscore16gtscore21gtCardRdybuttoncard.rdy.syncstand.outstandcard.rdy.delaybroke.outbroke<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–22<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State University<strong>VHDL</strong> File for BlackJack Datapath (cont.)–– adder process–– adder_out
<strong>Electrical</strong> & Computer EngineeringMississippi State University<strong>VHDL</strong> File for BlackJack Controlentity bjcontrol is port (signal clk, reset_b, card_rdy, acecard: in std_logic;signal score16gt, score21gt: in std_logic;signal hit, broke, stand: out std_logic;signal sel: out std_logic_vector(1 downto 0);signal score_clear_b, score_load: out std_logic); end bjcontrol;Entity declarationarchitecture behavior of bjcontrol is and State Assignments–– declare internal signals heresignal n_state, p_state : std_logic_vector(1 downto 0);signal ace11flag_pstate, ace11flag_nstate: std_logic;signal broke_pstate, broke_nstate: std_logic;signal stand_pstate, stand_nstate: std_logic;signal card_rdy_dly, card_rdy_sync: std_logic;–– state assignments are as followsconstant get_state: std_logic_vector(1 downto 0) := B”00”;constant add_state: std_logic_vector(1 downto 0) := B”01”;constant test_state: std_logic_vector(1 downto 0) := B”10”;constant use_state: std_logic_vector(1 downto 0) := B”11”;constantconstantconstantadd_10_plus: std_logic_vector(1 downto 0) := B”00”;add_card: std_logic_vector(1 downto 0) := B”01”;add_10_minus: std_logic_vector(1 downto 0) := B”10”;<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–25<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State University<strong>VHDL</strong> File for BlackJack Control (cont.)begin–– state process to implement flag flip–flops and FSM statestate: process(clk, reset_b)beginif (reset_b = ’0’) then p_state
<strong>Electrical</strong> & Computer EngineeringMississippi State University<strong>VHDL</strong> File for BlackJack Control (cont.)comb: process (p_state, ace11flag_pstate, broke_pstate, stand_pstate,acecard, card_rdy_dly, card_rdy_sync, score16gt, score21gt)beginsel
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityBlackjack Dealer Simulation (cont.)First card is an’Ace’.Next card isa ’2’Next card isa ’9’Final cardis a ’10’(facecard)Assertion ofSTAND fromprevious gamecauses us tostart newgame.We will use thefirst ’Ace’ as a valueof ’11’.Score = 11 + 2 = 1313 + 9 > 21 so we break;however, we have an ’Ace’so we can treat it as a valueof ’1’; the new score is:1 + 2 + 9 = 12.12 + 10 > 21 so weare ’BROKE’.<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–31<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityStructural <strong>VHDL</strong>⇒ You do not have to use a schematic to connect <strong>VHDL</strong> blocks. Youcan write a structural <strong>VHDL</strong> model which ties the blocks together.⇒ Pros:→ When you synthesize the design all of the <strong>VHDL</strong> blocks areflattened (collapsed into one block) and it is possible that theresulting logic may be more efficient.→ The structural <strong>VHDL</strong> code is more portable to other designsystems than a schematic.⇒ Cons:→ Writing structural <strong>VHDL</strong> code can be more error prone thancreating a schematic (very easy to misplace a net when youdon’t have a ’picture’ to go by).→ The resulting flattened netlist can be more difficult to debug.<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–32<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityStructural <strong>VHDL</strong> for BlackJack Playerentity bj_struct is port (Normal entitysignal reset_b, clk, card_rdy : in std_logic; declaration.signal card: in std_logic_vector(3 downto 0);signal stand, broke,hit:out std_logic;signal score: out std_logic_vector(4 downto 0) );end bj_struct;architecture structure of bj_struct iscomponent bjcontrol port (signal clk,reset_b:signal card_rdy, acecard:signal score16gt, score21gt:signal hit, broke,stand:in std_logic;in std_logic;in std_logic;out std_logic;signal sel: out std_logic_vector(1 downto 0);signal score_clear_b:out std_logic;signal score_load: out std_logic );end component;component bjdpathport (signal clk, reset_b:in std_logic;signal load, clear_b:in std_logic;signal sel: in std_logic_vector(1 downto 0);signal card: in std_logic_vector(3 downto 0);signal acecard, score16gt: out std_logic;signal score21gt:out std_logic;signal score: out std_logic_vector(4 downto 0) );end component;Need a component declarationfor each differenttype of componentused in the schematic<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–33<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityStructural <strong>VHDL</strong> for BlackJack Player (cont)signal load_net, clear_net, acecard_net : std_logic;signal sel_net : std_logic_vector (1 downto 0);signal s21gt_net, s16gt_net: std_logic;beginc1: bjcontrolport map (clk => clk,reset_b => reset_b,card_rdy => card_rdy,acecard => acecard_net,score16gt => s16gt_net,score21gt => s21gt_net,hit => hit, broke => broke, stand => stand,sel => sel_net,score_clear_b => clear_net,score_load => load_net);c2: bjdpathport map (clk => clk,reset_b => reset_b,load => load_net,clear_b => clear_net,sel => sel_net,card => card,acecard => acecard_net,score16gt => s16gt_net,score21gt => s21gt_net,score => score );end structure;Internal signal declarationfor those nets notconnected to externalports.Each component used in thedesign is given along <strong>with</strong>its port map.’c1’ is the component label,’bjcontrol’ gives the componenttype.Only two components inthis design.<strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–34<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>
<strong>Electrical</strong> & Computer EngineeringMississippi State UniversityResults of bj_struct <strong>Synthesis</strong><strong>Bob</strong> <strong>Reese</strong> 5/95<strong>System</strong>–35<strong>System</strong> Design <strong>with</strong> <strong>VHDL</strong>