Fpga practice full

57
VIETNAM NATIONAL UNIVERSITY, HANOI VIETNAM NATIONAL UNIVERSITY, HANOI College of Technology College of Technology Jun 10, 2022 FPGA Design Course Part 2: Practice – Working with ModelSim Nguyen Ngoc Mai Tran Van Huan Researchers, SIS Laboratory – Coltech (VNU) http://www.coltech.vnu.vn/sis

Transcript of Fpga practice full

Page 1: Fpga practice full

VIETNAM NATIONAL UNIVERSITY, HANOIVIETNAM NATIONAL UNIVERSITY, HANOI

College of TechnologyCollege of Technology

Apr 12, 2023

FPGA Design Course

Part 2: Practice – Working with ModelSim

Nguyen Ngoc Mai

Tran Van Huan

Researchers, SIS Laboratory – Coltech (VNU)

http://www.coltech.vnu.vn/sis

Page 2: Fpga practice full

Apr 12, 2023April 12, 2023

2

Topics

1. ModelSim Quick Guide• Introduction• Getting start with Projects

2. Practice:• Lab 1: Design a 2-to-1 Multiplexer

Page 3: Fpga practice full

Apr 12, 2023April 12, 2023

3

Goals

• Be familiar with using ModelSim• Be able to program some basic digital circuits by VHDL

Page 4: Fpga practice full

Apr 12, 2023April 12, 2023

4

Section 1: ModelSim Quick Guide

1. Introduction2. Getting start with Projects

Page 5: Fpga practice full

Apr 12, 2023April 12, 2023

5

Introduction to ModelSim

• (C) Mentor Graphics• A Simulator and Debugger HDL Tool• Support: VHDL, Verilog, SystemC, …• Docs (pdf):

• User’s Guide• Reference Manual

Page 6: Fpga practice full

Apr 12, 2023April 12, 2023

6

Getting start with ModelSim Projects

Page 7: Fpga practice full

Apr 12, 2023

1 – Creating a new project

Launch ModelSim Create new folder for each project

Command: mkdir <folder_name> Example: mkdir counter_demo

Select File > New > Project Enter Project Name OK

April 12, 2023

7

Page 8: Fpga practice full

Apr 12, 2023

2 – Adding Items to the project

Example: Add counter.vhd file to the project

April 12, 2023

8

Page 9: Fpga practice full

Apr 12, 2023

3 – Compiling the project

GUI: Select Compile > Compile All or

April 12, 2023

9

Page 10: Fpga practice full

Apr 12, 2023

4 – Simulating the design

GUI: Select Simulate > Start Simulation… or Double-click on Library.work.counter.only or Command: vsim counter.vhd

April 12, 2023

10

Page 11: Fpga practice full

Apr 12, 2023

4 – Simulating the design (cnt.)

Add All signals to wave: GUI: Right-click on Objects window > Add to wave >

Signals in Design Command: add wave –r /*

Create wave for a signal

Modify/Edit Waveform

Run Simulation

April 12, 2023

11

Page 12: Fpga practice full

Apr 12, 2023

5 – Analyzing Waveforms

Add cursor

April 12, 2023

12

Page 13: Fpga practice full

Apr 12, 2023

Section 2: Practice

A 8-bit wide 2-to-1 Multiplexer

See Laboratory Exercise 1.doc

April 12, 2023

13

Page 14: Fpga practice full

Apr 12, 2023Apr 12, 2023

14

Các bước thiết kế

Tổng kết

Hợp kênh 8-bit 2 lối vào dữ liệu

Hợp kênh 3-bit 5 lối vào dữ liệu

Bộ cộng Ripple-Carry Adder

Page 15: Fpga practice full

Apr 12, 2023Apr 12, 2023

15

Các bước thiết kế

Thiết kế mạch tổ hợp:

- Bảng trị các lối vào-ra (bảng chân lý)

- Lập phương trình logic

- Rút gọn phương trình (pp đại số, Karnaugh …)

- Mô tả mạch (hình vẽ, ngôn ngữ HDL …)

Ví dụ: các mạch mã hóa, giải mã, hợp kênh, phân kênh, bộ cộng, bộ so sánh …

Thiết kế mạch dãy:

- Xây dựng đồ hình trạng thái

- Tối thiểu hóa trạng thái

- Mô tả mạch (hình vẽ, ngôn ngữ HDL …)

Ví dụ: các mạch đếm, bộ ghi dịch, giám sát dữ liệu nối tiếp, các mạch điều khiển dạng máy trạng thái hữu hạn …

(mạch đếm & mạch nhớ là các mạch dãy đơn giản)

Thiết kế hệ thống số:

- Xác định các lối vào-ra

- Mô tả trực tiếp hoạt động của hệ thống

- Phân chia hệ thống thành các mạch số đơn giản

- 2 loại mạch số: mạch tổ hợp và mạch dãy

Page 16: Fpga practice full

Apr 12, 2023Apr 12, 2023

16

Các bước thiết kế

Tổng kết

Hợp kênh 8-bit 2 lối vào dữ liệu

Hợp kênh 3-bit 5 lối vào dữ liệu

Bộ cộng Ripple-Carry Adder

Page 17: Fpga practice full

Apr 12, 2023Apr 12, 2023

17

LabEx1 Part1

m <= (NOT (s) AND x) OR (s AND y);

Page 18: Fpga practice full

Apr 12, 2023Apr 12, 2023

18

1. library ieee;

2. use ieee.std_logic_1164.all;

3. entity mux8bit2to1 is

4. port(

5. < … >

6. );

7. end mux8bit2to1;

8. architecture behavior of mux8bit2to1 is

9. begin

10. < … >

11. end behavior;

LabEx1 Part1

Page 19: Fpga practice full

Apr 12, 2023Apr 12, 2023

19

LabEx1 Part1

1. architecture behavior of mux8bit2to1 is

2. begin

3. < … >

4. end behavior;

Page 20: Fpga practice full

Apr 12, 2023Apr 12, 2023

20

LabEx1 Part1

1. library ieee;2. use ieee.std_logic_1164.all;

3. entity mux8bit2to1 is4. port(5. X,Y : in std_logic_vector(7 downto 0);6. s : in std_logic;7. M : out std_logic_vector(7 downto 0)8. );9. end mux8bit2to1;

10. architecture behavior of mux8bit2to1 is11. begin12. M(7) <= (NOT (s) AND X(7)) OR (s AND Y(7));13. M(6) <= (NOT (s) AND X(6)) OR (s AND Y(6));14. M(5) <= (NOT (s) AND X(5)) OR (s AND Y(5));15. M(4) <= (NOT (s) AND X(4)) OR (s AND Y(4));16. M(3) <= (NOT (s) AND X(3)) OR (s AND Y(3));17. M(2) <= (NOT (s) AND X(2)) OR (s AND Y(2));18. M(1) <= (NOT (s) AND X(1)) OR (s AND Y(1));19. M(0) <= (NOT (s) AND X(0)) OR (s AND Y(0));20. end behavior;

Page 21: Fpga practice full

Apr 12, 2023Apr 12, 2023

21

Các bước thiết kế

Tổng kết

Hợp kênh 8-bit 2 lối vào dữ liệu

Hợp kênh 3-bit 5 lối vào dữ liệu

Bộ cộng Ripple-Carry Adder

Page 22: Fpga practice full

Apr 12, 2023Apr 12, 2023

22

Page 23: Fpga practice full

Apr 12, 2023Apr 12, 2023

23

LabEx1 Part2

Page 24: Fpga practice full

Apr 12, 2023Apr 12, 2023

24

LabEx1 Part2

1. library ieee;2. use ieee.std_logic_1164.all;

3. entity mux1bit5to1 is4. port(5. u,v,w,x,y : in std_logic;6. s2,s1,s0 : in std_logic;7. m : out std_logic8. );9. end mux1bit5to1;

10. architecture behavior of mux1bit5to1 is11. signal m2,m1,m0: std_logic;12. begin13. m2 <= (NOT (s0) AND u) OR (s0 AND v);14. m1 <= (NOT (s0) AND w) OR (s0 AND x);15. m0 <= (NOT (s1) AND m2) OR (s1 AND

m1);16. m <= (NOT (s2) AND m0) OR (s2 AND y);17. end behavior;

m2

m1

m0

Page 25: Fpga practice full

Apr 12, 2023Apr 12, 2023

25

LabEx1 Part2

000001010011100

000001010011100

000001010011100

M(2)

M(1)

M(0)

U(2)V(2)W(2)

Y(2)X(2)

U(1)V(1)W(1)

Y(1)X(1)

U(0)V(0)W(0)

Y(0)X(0)

s0 s1 s2

Page 26: Fpga practice full

Apr 12, 2023Apr 12, 2023

26

LabEx1 Part2

1. library ieee;2. use ieee.std_logic_1164.all;

3. entity mux3bit5to1 is4. port(5. U,V,W,X,Y : in std_logic_vector(2 downto 0);6. s2,s1,s0 : in std_logic;7. M : out std_logic_vector(2 downto 0)8. );9. end mux3bit5to1;

10. architecture structure of mux3bit5to1 is11. component mux1bit5to112. port(13. u,v,w,x,y : in std_logic;14. s2,s1,s0 : in std_logic;15. m : out std_logic16. );17. end component;18. begin19. mux_2: mux1bit5to1 port map (U(2),V(2),W(2),X(2),Y(2),s2,s1,s0,M(2));20. mux_1: mux1bit5to1 port map (U(1),V(1),W(1),X(1),Y(1),s2,s1,s0,M(1));21. mux_0: mux1bit5to1 port map (U(0),V(0),W(0),X(0),Y(0),s2,s1,s0,M(0));22. end structure;

Page 27: Fpga practice full

Apr 12, 2023Apr 12, 2023

27

Các bước thiết kế

Tổng kết

Hợp kênh 8-bit 2 lối vào dữ liệu

Hợp kênh 3-bit 5 lối vào dữ liệu

Bộ cộng Ripple-Carry Adder

Page 28: Fpga practice full

Apr 12, 2023Apr 12, 2023

28

LabEx2 Part1

Page 29: Fpga practice full

Apr 12, 2023Apr 12, 2023

29

LabEx2 Part1

1. library ieee;2. use ieee.std_logic_1164.all;

3. entity full_adder is4. port(5. a,b,ci : in std_logic;6. co,s : out std_logic7. );8. end full_adder;

9. architecture behavior of full_adder is10. signal ab : std_logic;11. begin12. ab <= a xor b;13. s <= ab xor ci;14. co <= (NOT (ab) AND b) OR (ab AND

ci);15. end behavior;

Page 30: Fpga practice full

Apr 12, 2023Apr 12, 2023

30

LabEx2 Part1

1. library ieee;2. use ieee.std_logic_1164.all;

3. entity RCA_4bit is4. port(5. A,B : in std_logic_vector(3 downto 0);6. cin : in std_logic;7. cout : out std_logic;8. S : out std_logic_vector(3 downto 0)9. );10. end RCA_4bit;

11. architecture structure of RCA_4bit is12. signal c3,c2,c1 : std_logic;13. component full_adder14. port(15. a,b,ci : in std_logic;16. co,s : out std_logic17. );18. end component;19. Begin -- <….>

Page 31: Fpga practice full

Apr 12, 2023Apr 12, 2023

31

LabEx2 Part1

19. begin20. FA_0: full_adder port map( a => A(0),21. b => B(0),22. ci => cin,23. co => c1,24. s => S(0)25. );26. FA_1: full_adder port map ( a => A(1),27. b => B(1),28. ci => c1,29. co => c2,30. s => S(1)31. );32. FA_2: full_adder port map ( a => A(2),33. b => B(2),34. ci => c2,35. co => c3,36. s => S(2)37. );38. FA_3: full_adder port map ( a => A(3),39. b => B(3),40. ci => c3,41. co => cout,42. s => S(3)43. );44. end structure;

Page 32: Fpga practice full

Apr 12, 2023Apr 12, 2023

32

LabEx2 Part2

FA

S(1)

c(1)a(1)b(1)

FA

S(0)

C_ina(0)b(0)

FA

S(n-1)

c(n-1)a(n-1)b(n-1)

C_out

FA

S(2)

c(2)a(2)b(2)

. . .

Bộ cộng n bit (n-bit ripple carry adder circuit)

Page 33: Fpga practice full

Apr 12, 2023Apr 12, 2023

33

LabEx2 Part2

1. library ieee;2. use ieee.std_logic_1164.all;

3. entity RCA_Nbit is4. generic( N : integer := 4 );5. port( A,B : in std_logic_vector(N-1 downto 0);6. cin : in std_logic;7. cout : out std_logic;8. S : out std_logic_vector(N-1 downto 0) );9. end RCA_Nbit;

10. architecture structure of RCA_Nbit is11. signal C : std_logic_vector(N downto 0);12. component full_adder13. port( a,b,ci : in std_logic;14. co,s : out std_logic );15. end component;16. begin17. C(0) <= cin;18. RCAdder: for i in 0 to N-1 generate19. FA: full_adder port map (A(i),B(i),C(i),C(i+1),S(i));20. end generate;21. cout <= C(N);22. end structure;

Page 34: Fpga practice full

Apr 12, 2023Apr 12, 2023

34

LabEx2 Part2

1. entity RCA_8bit is2. port( A,B : in std_logic_vector(7 downto 0);3. cin : in std_logic;4. cout : out std_logic;5. S : out std_logic_vector(7 downto 0) );6. end RCA_8bit;

7. architecture structure of RCA_8bit is8. component RCA_Nbit9. generic( N : integer := 4 );10. port( A,B : in std_logic_vector(N-1 downto 0);11. cin : in std_logic;12. cout : out std_logic;13. S : out std_logic_vector(N-1 downto 0) );14. end component;15. begin16. adder: RCA_Nbit generic map (N => 8)17. port map( A => A,18. B => B,19. cin => cin,20. cout => cout,21. S => S );22. end structure;

Page 35: Fpga practice full

Apr 12, 2023Apr 12, 2023

35

Các bước thiết kế

Tổng kết

Hợp kênh 8-bit 2 lối vào dữ liệu

Hợp kênh 3-bit 5 lối vào dữ liệu

Bộ cộng Ripple-Carry Adder

Page 36: Fpga practice full

Apr 12, 2023Apr 12, 2023

36

Công cụ phần mềm (ModelSim): tạo project, viết file mô tả VHDL, biên dịch, mô phỏng

Ngôn ngữ VHDL:

- cấu trúc một file VHDL

- Có khái niệm về entity, port, signal, component, generic…

- Cú pháp khai báo và sử dụng các đối tượng trên

- Cú pháp vòng for … generate Thiết kế các mạch số: một vài mạch TỔ HỢP đơn giản (hợp

kênh và bộ cộng)

Page 37: Fpga practice full

Apr 12, 2023

Buổi thực hành 2

Thiết kế một số phần tử nhớ, bộ đếm Mô phỏng trên ModelSim Thực thi các mạch tổ hợp và mạch dãy đã thiết kế trên FPGA

EP2C35F672C6 của hãng Altera

37

Page 38: Fpga practice full

Apr 12, 2023

Thực thi các mạch trên FPGA

Sử dụng phần mềm Quartus của hãng Altera

Tạo project Add các file nguồn VHDL Gán các port của entity top-level với các chân

của FPGA Biên dịch-Tổng hợp Nạp chương trình lên chip

38

Page 39: Fpga practice full

Apr 12, 2023

LabEx0 Part1

Mạch giải mã 7 đoạn: với đầu vào là tín hiệu biểu diễn số nhị phân 4 bit, đầu ra là các mã hiển thị LED 7 đoạn với Anode chung.

Thực hiện nạp lên FPGA trên kit DE2 sao cho LED7 đoạn HEX0 hiển thị giá trị số nhị phân được cho bới các công tắc SW3, SW2, SW1, SW0.

D(0)

D(6)

D(3)

D(5)

D(4)

D(1)

D(2)

Decoder4 7

BN

(binary number)

D

(Display code)

39

Page 40: Fpga practice full

Apr 12, 2023

Bảng chân lý:BN3 BN2 BN1 BN0 D6 D5 D4 D3 D2 D1 D0

0 0 0 0 1 0 0 0 0 0 0

0 0 0 1 1 1 1 1 0 0 1

0 0 1 0 0 1 0 0 1 0 0

0 0 1 1 0 1 1 0 0 0 0

0 1 0 0 0 0 1 1 0 0 1

0 1 0 1 0 0 1 0 0 1 0

0 1 1 0 0 0 0 0 0 1 0

0 1 1 1 1 1 1 1 0 0 0

1 0 0 0 0 0 0 0 0 0 0

1 0 0 1 0 0 1 0 0 0 0

1 0 1 0 0 0 0 1 0 0 0

1 0 1 1 0 0 0 0 0 1 1

1 1 0 0 1 0 0 0 1 1 0

1 1 0 1 0 1 0 0 0 0 1

1 1 1 0 0 0 0 0 1 1 0

1 1 1 1 0 0 0 1 1 1 0

40

Page 41: Fpga practice full

Apr 12, 2023

LabEx0 Part1

Có thể viết 7 phương trình logic để mô tả mạch giải mã trênhoặc viết đoạn code sau:

1. architecture simple of LED7seg_decoder is

2. begin3. process(BN)4. begin5. case BN is6. when "0000" => D <="1000000";7. when "0001" => D <="1111001";8. when "0010" => D <="0100100";9. when "0011" => D <="0110000";10. when "0100" => D <="0011001";11. when "0101“ => D <="0010010";12. when "0110" => D <="0000010";13. when "0111" => D <="1111000";14. when "1000" => D <="0000000";15. when "1001" => D <="0010000";16. when "1010“ => D <="0001000";17. when "1011“ => D <="0000011";18. when "1100“ => D <="1000110";19. when "1101“ => D <="0100001";20. when "1110“ => D <="0000110";21. when "1111“ => D <="0001110";22. when others => D <="1111111";23. end case;24. end process;25. end simple;

41

Combinational process:<optional_label>:process(<sensitivity_list>)-- Declaration(s)begin-- Sequential Statement(s)end process;

Sensitivity list: danh sách các tín hiệu màsự thay đổi của chúng có ảnh hưởngtới mạch (gây ra thay đổi trên lối ra)Declaration: khai báo các tín hiệu vàbiến dùng trong processSequential statement: các câu lệnh tuần tựnhư if, case, for … loop, …

Page 42: Fpga practice full

Apr 12, 2023

LabEx0 Part1

Tạo project

(chú ý: tên project, tên file top-level.vhd, tên entity top-level phải giống nhau)

File>New project wizard…

Chọn thư mục và đặt tên project

Đường dẫntới thư mụcchứa project

Tên project

42

Page 43: Fpga practice full

Apr 12, 2023

LabEx0 Part1

Nếu đã có file nguồn VHDL, có thể add vào project:

43

Page 44: Fpga practice full

Apr 12, 2023

LabEx0 Part1

Lựa chọn Family CycloneII và tên FPGA là EP2C35F672C6

44

Page 45: Fpga practice full

Apr 12, 2023

LabEx0 Part1

File>New để tạo file VHDL mới Hoặc Project>Add/Remove Files In Project… để add các file

VHDL vào project Processing>Start Complitation để biên dịch Trên kit DE2, các chân của FPGA được kết nối với các phần cứng

(như công tắc SW, KEY, các LED …)(xem file DE2_UserManual.pdf)Để mạch số được thiết kế có thể hoạt động trên kit DE2, ta cần thực hiện gán các đầu vào và đầu ra của mạch với các chân tương ứng của FPGA.Trong bài này cần gán các port BN của entity với các công tắc SW3, SW2, SW1, SW0 và các lối ra D được gán với LED 7 đoạn HEX0.Assignments > Assignment Editor để thực hiện gán chân

Tại cửa sổ Assignment Editor, chọn Category là Pin (xem hình slide sau)

45

Page 46: Fpga practice full

Apr 12, 2023

LabEx0 Part1

Double Click vào <<new>> ở cột To để lựa chọn port cần gán sau đó lựa chọn chân tương ứng của FPGA ở cột Location bên cạnh(xem file DE2_UserManual.pdf)

46

Page 47: Fpga practice full

Apr 12, 2023

LabEx0 Part1

Save file Assignment Editor như sau:

Biên dịch & tổng hợp lại với file gán chân

47

Page 48: Fpga practice full

Apr 12, 2023

LabEx0 Part1

Tools>Programmer để nạp vào FPGA: đánh dấu vào program/configure rồi chọn Start

48

Page 49: Fpga practice full

Apr 12, 2023

LabEx3 part1

Yêu cầu thiết kế 3 phần tử nhớ:a. Chốt Db. Flipflop hoạt động

theo sườn lênc. Flipflop hoạt động

theo sườn xuốngQa có giá trị = D khi Clk=1Khi Clk=0, Qa nhớ trạng thái

trước đóQb chỉ nhận giá trị của D tại

thời điểm có sườn lêncủa Clk, sau đó giá trị nàyđược nhớ tới khi có sườn lêntiếp theo trên Clk

Qc tương tự với Qb nhưnghoạt động theo sườn xuốngcủa Clk

49

Page 50: Fpga practice full

Apr 12, 2023

LabEx3 part1

1. library ieee;2. use ieee.std_logic_1164.all;

3. entity latch is4. port(5. D,Clk : in std_logic;6. Q,notQ : out std_logic7. );8. end latch;

9. architecture behavior of latch is10. begin11. process (D,Clk)12. begin13. if Clk ='1' then14. Q <= D;15. notQ <= not D;16. end if;17. end process;18. end behavior;

50

Page 51: Fpga practice full

Apr 12, 2023

LabEx3 part1

1. library ieee;2. use ieee.std_logic_1164.all;

3. entity PE_FlipFlop is4. port(5. D,Clk : in std_logic;6. Q,notQ : out std_logic7. );8. end PE_FlipFlop;

9. architecture behavior of PE_FlipFlop is10. begin11. process (Clk)12. begin13. if Clk'event and Clk ='1' then

-- if rising_edge(Clk) then14. Q <= D;15. notQ <= not D;16. end if;17. end process;18. end behavior;

51

Sequential process:<optional_label>:process(reset, clk)-- Declaration(s)beginif(reset = '1') then-- Asynchronous Sequential Statement(s)elsif(rising_edge(clk)) then-- Synchronous Sequential Statement(s)end if;end process;

- Asynchronous Sequential Statement:các lệnh tuần tự hoạt động không theo clock(không đồng bộ/dị bộ)- Synchronous Sequential Statement:các lệnh tuần tự hoạt động theo clock(đồng bộ)

Page 52: Fpga practice full

Apr 12, 2023

LabEx3 part1

1. library ieee;2. use ieee.std_logic_1164.all;

3. entity NE_FlipFlop is4. port(5. D,Clk : in std_logic;6. Q,notQ : out std_logic7. );8. end NE_FlipFlop;

9. architecture behavior of NE_FlipFlop is10. begin11. process (Clk)12. begin13. if Clk'event and Clk ='0' then-- if falling_edge(Clk) then14. Q <= D;15. notQ <= not D;16. end if;17. end process;18. end behavior;

52

Page 53: Fpga practice full

Apr 12, 2023

LabEx3 part2

Thiết kế bộ đếm 16 bit có cấu trúc tương tự bộ đếm 4 bit dưới đây (gồm các flip-flop kiểu T):

Các flip-flop kiểu T có dạng:sau mỗi xung clock,nếu en ở mức tích cực,clr không tích cựcgiá trị lối ra Q sẽ bị đảoso với trước

53

D-typeflip-flop

D Q

notQ

en

clrclk

Page 54: Fpga practice full

Apr 12, 2023

LabEx3 part2

1. library ieee;2. use ieee.std_logic_1164.all;

3. entity D_FlipFlop is4. port(5. D,Clk,En,Rst : in std_logic;6. Q,notQ : out std_logic7. );8. end D_FlipFlop;

9. architecture behavior of D_FlipFlop is10. begin11. process (Clk)12. begin13. if Clk'event and Clk ='1' then -- if rising_edge(Clk) then14. if Rst = '0' then15. Q <= '0';16. notQ <= '1';17. elsif En = '1' then18. Q <= D;19. notQ <= not D;20. end if;21. end if;22. end process;23. end behavior;

54

Page 55: Fpga practice full

Apr 12, 2023

LabEx3 part2

1. library ieee;2. use ieee.std_logic_1164.all;

3. entity T_FlipFlop is4. port(5. Clk,T,Rst : in std_logic;6. Q : out std_logic7. );8. end T_FlipFlop;

9. architecture structure of T_FlipFlop is10. component D_FlipFlop11. port(12. D,Clk,En,Rst : in std_logic;13. Q,notQ : out std_logic14. );15. end component;16. signal notQ : std_logic;17. begin18. comp1: D_Flipflop port map (D => notQ, Clk => Clk, En => T, Rst => Rst,

Q => Q, notQ => notQ);19. end structure;

55

Page 56: Fpga practice full

Apr 12, 2023

LabEx3 part2

1. library ieee;2. use ieee.std_logic_1164.all;3. entity Cntr_16bit is4. port( Clock,Enable,Clear : in std_logic;5. Count : out std_logic_vector(15 downto 0));6. end Cntr_16bit;7. architecture structure of Cntr_16bit is8. component T_FlipFlop9. port( Clk,T,Rst : in std_logic;10. Q : out std_logic );11. end component;12. signal En,Q : std_logic_vector(15 downto 0);13. Begin14. En(0) <= Enable;15. comp0: T_Flipflop port map (Clk => Clock, T => En(0), Rst => Clear, Q => Q(0));16. Count(0) <= Q(0);17. generate_label: for i in 1 to 15 generate18. En(i) <= En(i-1) and Q(i-1);19. comp: T_Flipflop port map (Clk => Clock, T => En(i), Rst => Clear, Q => Q(i));20. Count(i) <= Q(i);21. end generate;22. end structure;

56

Page 57: Fpga practice full

Apr 12, 2023

LabEx0 Part2

Với các bước tương tự trên, Part2 yêu cầu thiết kế một mạch số thực hiện đếm số lần ấn công tắc KEY0 trên kit DE2 và hiển thị kết quả đếm được bằng số nhị phân 16 bit trên 4 LED 7 đoạn HEX3, HEX2, HEX1, HEX0.

Việc đếm này chỉ được thực hiện khi công tắc SW0 và SW1 được đặt bằng 1. Nếu SW0=‘0’, bộ đếm bị xóa. Nếu SW1=‘0’ thì không đếm

57