Комбинационе мреже Ефикасно HDL моделовање Дељење оператора

Slides:



Advertisements
Similar presentations
Sequential Statements
Advertisements

Lecture 6 Chap 8: Sequential VHDL Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
Ring Counter Discussion D5.3 Example 32. Ring Counter if rising_edge(CLK) then for i in 0 to 2 loop s(i)
Mridula Allani Fall 2010 (Refer to the comments if required) ELEC Fall 2010, Nov 21(Adopted from Profs. Nelson and Stroud)
VHDL ELEC 418 Advanced Digital Systems Dr. Ron Hayne Images Courtesy of Thomson Engineering.
Introduction to VHDL VHDL Tutorial R. E. Haskell and D. M. Hanna T1: Combinational Logic Circuits.
Sequential Statements Module F3.2. Sequential Statements Statements executed sequentially within a process If Statements Case Statements Loop Statements.
FPGAs and VHDL Lecture L12.1. FPGAs and VHDL Field Programmable Gate Arrays (FPGAs) VHDL –2 x 1 MUX –4 x 1 MUX –An Adder –Binary-to-BCD Converter –A Register.
Introduction to VHDL Multiplexers. Introduction to VHDL VHDL is an acronym for VHSIC (Very High Speed Integrated Circuit) Hardware Description Language.
ELEN 468 Lecture 191 ELEN 468 Advanced Logic Design Lecture 19 VHDL.
CSCI 660 EEGN-CSCI 660 Introduction to VLSI Design Lecture 3 Khurram Kazi Some of the slides were taken from K Gaj ’ s lecture slides from GMU ’ s VHDL.
HDL-Based Digital Design Part I: Introduction to VHDL (I) Dr. Yingtao Jiang Department Electrical and Computer Engineering University of Nevada Las Vegas.
Introduction to VHDL Multiplexers Discussion D1.1.
4-bit Shift Register. 2-bit Register Serial-in-serial-out Shift Register.
Introduction to VHDL (part 2)
VHDL 9/12/2015www.noteshit.com1. What is VHDL? A Standard Language VHDL is the VHSIC (Very High Speed Integrated Circuit) Hardware Description Language.
1 Part V: VHDL CODING. 2 Design StructureData TypesOperators and AttributesConcurrent DesignSequential DesignSignals and VariablesState Machines A VHDL.
ENG6090 RCS1 ENG6090 Reconfigurable Computing Systems Hardware Description Languages Part 4: Modeling Dataflow.
VHDL TUTORIAL Preetha Thulasiraman ECE 223 Winter 2007.
Sequential Statements
7/10/2007DSD,USIT,GGSIPU1 Basic concept of Sequential Design.
VHDL in 1h Martin Schöberl. AK: JVMHWVHDL2 VHDL /= C, Java,… Think in hardware All constructs run concurrent Different from software programming Forget.
陳慶瀚 機器智慧與自動化技術 (MIAT) 實驗室 國立中央大學資工系 2009 年 10 月 8 日 ESD-04 VHDL 硬體描述語言概論 VHDL Hardware Description Language.
IAY 0600 Digital Systems Design VHDL discussion Dataflow&Behavioral Styles Combinational Design Alexander Sudnitson Tallinn University of Technology.
VHDL for Combinational Circuits. VHDL We Know Simple assignment statements –f
1 ECE 545 – Introduction to VHDL Dataflow Modeling of Combinational Logic Simple Testbenches ECE 656. Lecture 2.
Copyright(c) 1996 W. B. Ligon III1 Getting Started with VHDL VHDL code is composed of a number of entities Entities describe the interface of the component.
VHDL Very High Speed Integrated Circuit Hardware Description Language Shiraz University of shiraz spring 2011.
ECE 331 – Digital System Design Multiplexers and Demultiplexers (Lecture #13)
Sequential statements. If statement [if_label:] if boolean_expression then {sequential_statement} {elsif boolean_expression then {sequential_statement}}
IAY 0600 Digital Systems Design VHDL discussion Dataflow Style Combinational Design Alexander Sudnitson Tallinn University of Technology.
15-Dec-15EE5141 Chapter 4 Sequential Statements ä Variable assignment statement ä Signal assignment statement ä If statement ä Case statement ä Loop statement.
George Mason University Data Flow Modeling in VHDL ECE 545 Lecture 7.
VHDL Discussion Sequential Sytems. Memory Elements. Registers. Counters IAY 0600 Digital Systems Design Alexander Sudnitson Tallinn University of Technology.
Digital Design with VHDL Presented by: Amir Masoud Gharehbaghi
1 Part III: VHDL CODING. 2 Design StructureData TypesOperators and AttributesConcurrent DesignSequential DesignSignals and VariablesState Machines A VHDL.
04/26/20031 ECE 551: Digital System Design & Synthesis Lecture Set : Introduction to VHDL 12.2: VHDL versus Verilog (Separate File)
Controllers ENGIN 341 – Advanced Digital Design University of Massachusetts Boston Department of Engineering Dr. Filip Cuckov.
Data Flow Modeling in VHDL
VHDL Programming Fundamentals Presented By Dr. Pradyut Kumar Biswal Department of Electronics, IIIT Bhubaneswar.
Relational Operators Result is boolean: greater than (>) less than (=) less than or equal to (
Sequential Statements Multi-valued logic systems Bus example Case Statement Looping statement Assert statement Finite State machines.
Joal 2006 HT:1 Em3 Digital Electronics Design 1 Lecture 3-4 Sequential VHDLChap 4.
Data Flow and Behavioral Modeling in VHDL 1 MS EMBEDDED SYSTEMS.
Fundamentals of Digital Signal Processing יהודה אפק, נתן אינטרטור אוניברסיטת תל אביב.
1 Introduction to Engineering Spring 2007 Lecture 19: Digital Tools 3.
Sequential statements (1) process
Part III: SYSTEM DESIGN
Dataflow Style Combinational Design with VHDL
CHAPTER 17 VHDL FOR SEQUENTIAL LOGIC
Sequential Design.
IAS 0600 Digital Systems Design
Увод у VHDL.
ECE 434 Advanced Digital System L08
CHAPTER 17 VHDL FOR SEQUENTIAL LOGIC
Sequential Statements
RTL Style در RTL مدار ترتيبي به دو بخش (تركيبي و عناصر حافظه) تقسيم مي شود. مي توان براي هر بخش يك پروسس نوشت يا براي هر دو فقط يك پروسس نوشت. مرتضي صاحب.
ELEC 5200/6200 Computer Architecture and Design Review of VHDL
A Data Stack CoreGen Discussion 12.1.
Signals - Drivers Value holder for a signal.
Data Flow Modeling of Combinational Logic
CPE 528: Lecture #5 Department of Electrical and Computer Engineering University of Alabama in Huntsville.
Modeling of Circuits with a Regular Structure
Modeling of Circuits with a Regular Structure
Modeling of Circuits with Regular Structure
4-Input Gates VHDL for Loops
디 지 털 시 스 템 설 계 UP2 Kit를 이용한 카운터 설계
EEL4712 Digital Design (VHDL Tutorial).
(Simple Testbenches & Arithmetic Operations)
Presentation transcript:

Комбинационе мреже Ефикасно HDL моделовање Дељење оператора Дељење функционалности Оптимизација распоређивања Опште мреже

Ефикасно HDL моделовање Језик за МОДЕЛОВАЊЕ физичких уређаја Погрешан приступ замислити C програм и превести га у HDL код Добар приступ истраживање области да се пронађе ефикасан модел преточити дати модел у HDL код

Дељење (sharing) Сложеност физичких модела варира Аритметички оператори: гломазни минимална оптимизација од стране алата Оптимизација може да се постигне дељењем на RTL нивоу: дељење оператора дељење функционалности

CMOS имплементација стандардних ћелија

Дељење оператора Израчунавање више израза је међусобно искључиво. Само један од резултата се прослеђује на излаз. Пример представља условна додела вредности сигналу: sig <= value_1 when boolean_1 else value_2 when boolean_2 else value_3 when boolean_3 else . . . value_n;

Дељење оператора Пример: r <= a + b when boolean_exp else a + c;

Дељење оператора Модификован код: src0 <= b when boolean_exp else r <= a + src0;

Дељење оператора Простор: 2 add, 1 mux Кашњење: max(Tadd, Tbool) + Tmux Простор: 1 add, 1 mux Кашњење: Tadd + Tbool + Tmux

Дељење оператора Дељење се ради додавањем мреже за рутирање Добробити од дељења зависe од сложености имплементације оператора и мреже за рутирање У идеалном случају би алат обављао овај посао

Дељење функционалности Велика мрежа може имати пуно функционалности Неке од функционалности могу бити сличне Сличне функционалности могу да деле исти hardware Ради се за конкретан случај (ad hoc) Алат не може лако да одради дељење функционалности, јер не разуме тј. не тумачи функционалности

Компаратор – пример (1) Компаратор са два мода рада: поређење неозначених бројева поређење означених бројева Ширина података је 8 бита водити рачуна о проширивости тј. скалабилности

Компаратор – пример (2) library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity cmp2m is port( a, b: in std_logic_vector(7 downto 0); mode : in std_logic; f_out : out std_logic ); end entity cmp2m;

Компаратор – пример (3) architecture direct_arch of cmp2m is signal f_out_signed, f_out_unsigned : std_logic; begin f_out_signed <= '1' when signed(a) > signed(b) else '0'; f_out_unsigned <= '1' when unsigned(a) > unsigned(b) else f_out <= f_out_unsigned when mode = '0' else f_out_signed; end architecture direct_arch;

Компаратор – пример (4)

Компаратор – пример (5) architecture shared_arch of cmp2m is signal a1_b0, f_out_cmp : std_logic; begin a1_b0 <= '1' when a(7) = '1' and b(7) = '0' else '0'; f_out_cmp <= '1' when a(6 downto 0) > b(6 downto 0) else f_out <= f_out_cmp when (a(7) = b(7)) else a1_b0 when mode = '0' else not a1_b0; end architecture shared_arch;

Компаратор – пример (6)

Оптимизација распоређивања Распоређивање компоненти на самом чипу врши се у оквиру фазе Place and Route која следи након синтезе VHDL не може да специфицира тачан распоред VHDL може да специфицира приближан облик чип је дводимензионалан дводимензионални облик бољи од једнодимензионог условна додела генерише хоризонталан ланац селекциона додела генерише вертикалан ланац ни један ни други није идеалан

Вишебитно XOR коло (1)

Вишебитно XOR коло (2) library ieee; use ieee.std_logic_1164.all; entity r_xor is port( a : in std_logic_vector(7 downto 0); f : out std_logic ); end entity r_xor; architecture cascade_arch_1 of r_xor is begin f <= a(0) xor a(1) xor a(2) xor a(3) xor a(4) xor a(5) xor a(6) xor a(7); end architecture cascade_arch_1; Проблем?

loop Бесконачна петља: могуће искочити из средине. loop_statement ⇐ ⟦ loop_label: ⟧ loop ⦃ sequential_statement ⦄ end loop ⟦ loop_label ⟧; Бесконачна петља: могуће искочити из средине.

loop Пример: incrementer : process is variable count_value : natural := 0; begin count <= count_value; label: loop wait until clk; count_value := (count_value + 1) mod 16; count <= count_value; end loop label; end process incrementer;

exit Користи се за излазак из петље. exit_statement ⇐ ⟦ exit_label: ⟧ exit ⟦ loop_label ⟧ ⟦ when condition ⟧; Користи се за излазак из петље. Лабелом loop_label одређено је из које петље се излази: ако је наведена лабела loop_label, онда се излази из петље означене са том лабелом, ако није наведена лабела loop_label, онда се излази из окружујуће петље.

Пример outer : loop ... inner : loop ... exit outer when condition_1; -- target B ... exit when condition_2; -- target A ... end loop inner; ... -- target A exit outer when condition_3; -- target B ... end loop outer; ... -- target B

next Прескаче остатак текуће итерације петље. next_statement ⇐ ⟦ next_label: ⟧ next ⟦ loop_label ⟧ ⟦ when condition ⟧; Прескаче остатак текуће итерације петље. Уколико се лабелом loop_label специфицира нека окружујућа петља, угнежђене петље се завршавају и прескаче се остатак текуће итерације наведене петље.

while loop Петља са условом на почетку. while_loop_statement ⇐ ⟦ while_label: ⟧ while condition loop ⦃ sequential_statement ⦄ end loop ⟦ while_label ⟧ ; Петља са условом на почетку.

for loop Бројачку променљиву (identifier): for_loop_statement ⇐ ⟦ for_label: ⟧ for identifier in discrete_range loop ⦃ sequential_statement ⦄ end loop ⟦ for_label ⟧; discrete_range ⇐ simple_expression ⦅ to | downto ⦆ simple_expression Бројачку променљиву (identifier): није потребно експлицитно дефинисати, може се користити само у телу петље, није дозвољен упис у бројачку променљиву, прикрива друге променљиве истог назива.

Пример лоше употребе erroneous : process is variable i, j : integer; begin i := loop_param; -- error! for loop_param in 1 to 10 loop loop_param := 5; -- error! end loop; j := loop_param; -- error! end process erroneous;

Вишебитно XOR коло (3) architecture cascade_arch_2 of r_xor is constant WIDTH : integer := 8; begin process (a) is variable tmp : std_logic; tmp := a(0); for i in 1 to WIDTH-1 loop tmp := tmp xor a(i); end loop; f <= tmp; end process; end architecture cascade_arch_2;

Вишебитно XOR коло (4) architecture cascade_arch_3 of r_xor is constant WIDTH : integer := 8; signal p : std_logic_vector(WIDTH-1 downto 0); begin p <= (p(WIDTH-2 downto 0) & '0') xor a; f <= p(WIDTH-1); end architecture cascade_arch_3;

Вишебитно XOR коло (5) architecture tree_arch of r_xor is begin f <= (((a(0) xor a(1)) xor (a(2) xor a(3))) xor ((a(4) xor a(5)) xor (a(6) xor a(7)))); end architecture tree_arch;

Вишебитно XOR коло (6)

Вишебитно XOR коло (7) Упоређивање: Ланац: Простор: (n – 1) xor кола Кашњење: (n – 1) Кодирање: лако се скалира Дрво: Кашњење: log2n Кодирање: не скалира се лако У зависности од алата и технологије имплементације конверзија може да буде аутоматска

Опште мреже Пример – Грејев бројач:

Грејев бројач (1) library ieee; use ieee.std_logic_1164.all; entity gray_inc is port( g : in std_logic_vector(3 downto 0); g1 : out std_logic_vector(3 downto 0) ); end entity gray_inc;

Грејев бројач (2) architecture direct_arch of gray_inc is begin with g select g1 <= "0001" when "0000", "0011" when "0001", "0010" when "0011", "1001" when "1011", ... "1000" when "1001", "0000" when others; -- "1000" end architecture direct_arch;

Грејев бројач (3) Архитектура из претходног примера је нескалабилна у случају промене ширине улаза. Не постоји општи алгоритам за инкрементирање Грејевог кода. Други приступ: конвертовати у бинарни број, инкрементирати, вратити у Грејев код.

Грејев бројач (4) architecture compact_arch of gray_inc is constant WIDTH : integer := 4; signal b, b1 : std_logic_vector(WIDTH-1 downto 0); begin -- Gray to Binary b <= g xor ('0' & b(WIDTH-1 downto 1)); -- Binary increment b1 <= std_logic_vector((unsigned(b)) + 1); -- Binary to Gray g1 <= b1 xor ('0' & g1(WIDTH-1 downto 1)); end architecture compact_arch ;

wait wait_statement ⇐ ⟦ wait_label: ⟧ wait ⟦ on signal_name ⦃,...⦄ ⟧ ⟦ until boolean_expression ⟧ ⟦ for time_expression ⟧ Пружа могућност суспендовања секвенцијалног процесирања све до испуњења неке од клаузула: догађај на неком сигналу (sensitivity clause – on signal_name ⦃,...⦄), испуњење задатог логичког услова (condition clause – until boolean_expression), истек задатог временског интервала (timeout clause – for time_expression).

wait Један wait исказ може имати произвољну комбинацију клаузула (ниједна, једна или више клаузула). Тумачење wait исказа у случају постојања више клаузула: сваки пут када дође до догађаја на неком од сигнала наведених у on клаузули проверава се логички услов из until клаузуле (ако је логички услов испуњен наставља се са секвенцијалним процесирањем), дужина временског интервала суспендовања је увек ограничена временом наведеним у for клаузули. Логички услов се проверава: на сваки догађај било ког сигнала наведеног у until клаузули (ако није наведена on клаузула), на сваки догађај било ког сигнала наведеног у on клаузули (ако јесте наведена on клаузула).

wait -- sekvencijalno procesiranje se nastavlja kada se desi: -- dogadjaj na signalima a i/ili b wait on a, b; -- vrednost signala clk = '1' -- (uslov se proverava usled dogadjaja na signalu clk) wait until clk = '1' -- dogadjaj na signalu clk i vrednost signala rst = '0' wait on clk until rst = '0' -- vrednost signala trigger = '1' ili dok ne prodje 1 ms -- (uslov se proverava usled dogadjaja na signalu trigger) wait until trigger = '1' for 1 ms

if-then-else if_statement ⇐ ⟦ if_label: ⟧ if condition then ⦃ sequential_statement ⦄ ⦃ elsif condition then ⦃ sequential_statement ⦄ ⦄ ⟦ else ⦃ sequential_statement ⦄ ⟧ end if ⟦ if_label ⟧; Обезбеђује условно извршавање других секвенцијалних исказа. Условно извршавање је приоритирано; када се наиђе на први тачан услов, прекида се провера осталих. Могуће угнездити више if-then-else исказа.

Пример 1 if sel0 = '0' and sel1 = '0' then z <= d0; elsif sel0 = '1' and sel1 = '0' then z <= d1; elsif sel0 = '0' and sel1 = '1' then z <= d2; elsif sel0 = '1' and sel1 = '1' then z <= d3; end if;

Синтетизован модел примера 1 – RTL поглед Пример 1 Конкурентна условна додела вредности

Синтетизован модел примера 1 –технолошки поглед

Пример 2 if sel0 = '0' and sel1 = '0' then z <= d0; elsif sel0 = '1' and sel1 = '0' then z <= d1; elsif sel0 = '0' and sel1 = '1' then z <= d2; else z <= d3; end if; Због постојања else никада не остаје стара вредност. Зато синтетизовани модел нема леч коло. Погодно за синтезу, али при тестирању може да прикрије потенцијални проблем.

Синтетизован модел примера 2 – RTL поглед

Пример 3 if sel0 = '0' and sel1 = '0' then z <= d0; elsif sel0 = '1' and sel1 = '0' then z <= d1; elsif sel0 = '1' and sel1 = '1' then z <= d3; end if;

Синтетизован модел примера 3 – RTL поглед Пример 3 Конкурентна условна додела вредности

Пример 4 if sel0 = '0' and sel1 = '0' then z <= d0; elsif sel0 = '1' and sel1 = '0' then z <= d1; elsе z <= d3; end if;

Синтетизован модел примера 4 – RTL поглед Пример 4 Конкурентна условна додела вредности

Пример 5 if sel1 = '0' then if sel0 = '0' then z <= d0; else z <= d1; end if; else if sel0 = '0' then z <= d2; else z <= d3; end if; end if;

Синтетизован модел примера 5

Пример 6 Унутар било којег блока може да буде и више секвенцијалних исказа. if opcode = halt_opcode then PC := effective_address; executing := false; halt_indicator <= true; end if;

Секвенцијална условна додела променљивој conditional_variable_assignment ⇐ ⦅ name | aggregate ⦆ := expression when condition ⦃ else expression when condition ⦄ ⟦ else expression ⟧; Појављује се тек у стандарду VHDL-2008

Секвенцијална условна додела променљивој Пример: result := a - b when mode = subtract else a + b; Еквивалентно датом примеру: if mode = subtract then result := a - b; else result := a + b; end if;

case case_statement ⇐ ⟦ case_label: ⟧ case⟦?⟧ expression is ⦅ when choices => ⦃ sequential_statement ⦄ ⦆ ⦃...⦄ end case ⟦ case_label ⟧; choices ⇐ ⦅ simple_expr | discrete_range | others ⦆ ⦃|...⦄ Омогућава извршавање одговарајућег низа исказа у зависности од вредности исказа. Извршава се само једна опција. Нема приоритета. Свака могућа вредност се у опцијама мора појавити тачно једном (погледати белешке уз слајд). Израз за селекцију (expression између case и is) се може конвертовати у одговарајући подтип ако се жели скратити скуп опција. naziv_podtipa'(izraz)

Пример 1 case func is when pass1 => result := operand1; when pass2 => result := operand2; when add => result := operand1 + operand2; when subtract => result := operand1 - operand2; end case;

Пример 2 case opcode is when load | add | subtract => operand := memory_operand; when store | jump | jumpsub | branch => operand := address_operand; when others => operand := 0; end case;

Пример 3 entity mux is port( d0, d1, d2, d3 : in std_logic; sel : in std_logic_vector(1 downto 0); z : out std_logic ); end entity mux; architecture dataflow of mux is begin process (d0, d1, d2, d3, sel) is begin case sel is when "00" => z <= d0; when "01" => z <= d1; when "10" => z <= d2; when "11" => z <= d3; end case; end process; end architecture dataflow;

Пример 4 type opcodes is (nop, add, subtract, load, store, jump, jumpsub, branch, halt); case opcode is when add to load => operand := memory_operand; when branch downto store => operand := address_operand; when others => operand := 0; end case;

Пример 5 type opcodes is (nop, add, subtract, load, store, jump, jumpsub, branch, halt); subtype control_transfer_opcodes is opcodes range jump to branch; case opcode is when add to load => operand := memory_operand; when control_transfer_opcodes | store => operand := address_operand; when others => operand := 0; end case;

Пример нерегуларног case исказа variable N : integer := 1; case expression is when N | N+1 => ... when N+2 to N+5 => ... when others => ... end case; За случај да је N константа, горњи исказ би био коректан.

Секвенцијална селекциона додела променљивој Секвенцијална селекциона додела променљивој selected_variable_assignment ⇐ with expression select⟦?⟧ ⦅ name | aggregate ⦆ := ⦃ expression when choices , ⦄ expression when choices ; choices ⇐ ⦅ simple_expr | discrete_range | others ⦆ ⦃|...⦄ Појављује се тек у стандарду VHDL-2008

Секвенцијална селекциона додела променљивој Секвенцијална селекциона додела променљивој Пример: with func select result := operand1 when pass1, operand2 when pass2, operand1 + operand2 when add, operand1 - operand2 when subtract;

null Начин да се специфицира да се у неком случају не дешава ништа. Пример: case opcode is when add => Acc := Acc + operand; when subtract => Acc := Acc - operand; when nop => null; end case; control_section : process (sensitivity_list) is begin null; end process control_section;

assert Исказ намењен за помоћ при провери исправности модела. assertion_statement ⇐ ⟦ assert_label: ⟧ assert condition ⟦ report expression ⟧ ⟦ severity expression ⟧; Исказ намењен за помоћ при провери исправности модела. Генерише обавештење уколико се у току симулације деси да услов у оквиру assert клаузуле не буде испуњен. Алат за синтезу може сматрати да ће услов бити испуњен.

assert У оквиру assert клаузуле наводи се тврдња (assertion) тј. услов који мора бити испуњен. У оквиру report клаузуле пише се текст обавештења које ће симулатор исписати (на пример, детаљан опис грешке). У оквиру severity клаузуле дефинише се у којој мери одступање од тврдње утиче на извршавање симулације: note (подразумевано) – одступање од тврдње не утиче на извршавање симулације (испис поруке у току симулације), warning – одступање од тврдње након којег се симулација може наставити, али резултати могу бити неочекивани, error – одступање од тврдње тј. грешка услед које је неопходно покренути акције опоравка, failure – одступање од тврдње које представља ситуацију која се никако није смела догодити. Одступање од тврдње типа failure подразумевано зауставља симулацију.

assert Пример: assert curr_char >= '0' and curr_char <= '9' report "Input number " & input_string & " contains a non-digit" severity note;

report report_statement ⇐ ⟦ report_label: ⟧ report expression ⟦ severity expression ⟧; Исто тумачење као и assert исказ за који важи да је тврдња тј. услов увек нетачан. Представља краћи облик assert исказа који се најчешће користи за испис порука у току симулације.