12/25/2013

Làm đề thi trắc nghiệm mạng máy tính nhanh

Xin chào các bạn! lâu rồi mình không viết bài trên blog!
Đợt này có thời gian rảnh mình sẽ viết 1 serial bài viết về mạng, linux,Raspberry Pi.
Bài đầu tiên hôm nay mình sẽ viết về mạng.  Để phục vụ cho việc thi cử môn mạng máy tính mình sẽ thống kế  một số kiến thức cơ bản về mạng máy tính để giúp các bạn làm bài trắc nghiệm một các nhanh nhất , đạt kết quả cao. Dưới đây chỉ là kiến thức cơ bản
đa phần các câu hỏi sẽ hỏi về Ipv4.
Phần 1: Mô hình mạng
- Hình dưới đây thể hiện cấu trúc mô hình mạng OSI và TCP/IP. Và một số giao thức hay dùng ở các lớp của 2 mô hình.

OSI-TCP-IP
Mô hình OSI và TCP/IP
-         Ảnh này thể hiện dữ liệu ở từng lớp được đong gói như thế nào.

dong-goi-du-lieu
Kiểu đóng gói dữ liệu
Các loại dịch vụ cơ bản và cổng (port) của dịch vụ
DNS : chuyển từ IP à tên miền: port 53
Tenel : kết nối điểu khiển từ xa: port 23
FTP:  truyền dữ liệu: port 21
DHCP: cấp phất  IP tự động
SMTP: gửi thư port:25
POP3: nhận thư port :110
IMAP: truy cập Mail: 143
HTTP: web port : 80
Phần 2: Ipv4
IPv4 : được biểu diễn bởi 32 bit.
-         Chia làm 2 phần là Net-ID và Host-ID.
-         Các địa chỉ IP có cùng Net-ID thì sẽ cùng mạng với nhau.
-         Ipv4 có 4 Octet mỗi Octet gồm 8 bit.
Các lớp của địa chỉ Ipv4
Lớp A: 0.0.0.0 è 127.255.255.255  và Default Subnet mask: 255.0.0.0
Lớp B: 128.0.0.0è 191.255.255.255 và Default Subnet mask: 255.255.0.0
Lớp C: 192.0.0.0è 223.255.255.255 và Default Subnet mask: 255.255.255.0
Lớp D: 224.0.0.0è 239.255.255.255
Lớp E: 240.0.0.0è 247.255.255.255
Các dải địa chỉ của từng lớp chỉ được dùng trong mạng LAN và không dùng ngoài internet.
Lớp A: 10.0.0.0 è 10.255.255.255
Lớp B: 172.16.0.0 è 172.31.255.255
Lớp C: 192.168.0.0è 192.168.255.255
Chia mạng con (subnetting)
(lưu ý là mình chia theo sách và đáp án của Thầy, một số thiết bị mới không chia theo kiểu này.)
Trường hợp 1: chia địa chỉ IP theo số mạng cần dùng.
Bước 1: Xác định Net-ID và Host-ID, Subnet Mask. Đổi IP và Subnet mask ra nhị phân.
Bước 2: xác định số bit cần mượn ở phần Host-ID:
Thỏa mãn điều kiện sau:  2a -2 ≥ b
-         a là số bit mượn. (lấy từ trái qua phải của phần Host-ID).
-         b là số subnet cần chia.
Bước 3: cho lần lượt các bit mượn là 0 và 1 theo thứ tự nhị phân.
Bước 4: suy ra địa chỉ đường mạng của các mạng con và subnet Mask của các mạng con bằng các đổi IP từ nhị phân sang thập phân.
Subnet Mask  mạng con = Subnet-mask cũ + bit mượn
Vài công thức tính bước nhảy:
(N là số bit mượn, b là số bước nhảy)
N ≤ 8 : b = 28-N
8 < N ≤ 16 : b= 216-N
16 < N ≤ 24 : b= 224-N
(đọc chẳng hiểu gì đúng không? Mình sẽ lấy vị dụ cuối bài sẽ có mẹo làm nhanh)
Ví dụ: Cho địa chỉ IP sau: 192.168.1.0/24. Chia dải địa chỉ IP này thành 7 dải mạng con.
Giải:
Bước 1: xác định Net-ID và Host-ID, Subnet Mask. Đổi IP và Subnet mask ra nhị phân.
-         Đổi địa chỉ IP đã cho thành nhị phân.
1100 0000.1010 1000.0000 0001.0000 0000
-         Xác định subnet-mask.do /24 nên có 24 con 1 đầu tiên còn lại là 0 hết.
1111 1111.1111 1111.1111 1111.0000 0000
-         Tiếp theo đi tìm Network address bằng các AND địa chỉ IP với subnet-mask. Hoặc cho các bit ở phần host-ID bằng 0. Sau đó chuyển sang thập phân.
1100 0000.1010 1000.0000 0001.0000 0000
AND
1111 1111.1111 1111.1111 1111.0000 0000
=
1100 0000.1010 1000.0000 0001.0000 0000
==> 192.168.1.0/24
-  Tiếp ta tìm Broadcast address bằng cách cho các bit phần host-ID của địa chỉ IP là 1. Rồi đổi ra thập phân
1100 0000.1010 1000.0000 0001.1111 1111
        ==> 192.168.1.255/24
Bước 2: xác định số bit cần mượn ở host ID.
-         Đây là trường hợp cho số dải mạng trước nên ta phải tính từ trái qua phải của phận host-ID.(TèP).
-         Số subnet là 7 ta phải tìm số bit thỏa mãn công thức
2a -2>=b  mà b=7. à a =4.
Lấy địa chỉ IP. Thay 4 bit mượn là xxxx
1100 0000.1010 1000.0000 0001.xxxx 0000
  1. 1100 0000.1010 1000.0000 0001.0000 0000 192.168.1.0
  2. 1100 0000.1010 1000.0000 0001.0001 0000  192.168.1.16
  3. 1100 0000.1010 1000.0000 0001.0010 0000  192.168.1.32
  4. 1100 0000.1010 1000.0000 0001.0011 0000 192.168.1.48
  5. 1100 0000.1010 1000.0000 0001.0100 0000 192.168.1.64
  6. 1100 0000.1010 1000.0000 0001.0101 0000 192.168.1.80
  7. 1100 0000.1010 1000.0000 0001.0110 0000 192.168.1.96
  8. 1100 0000.1010 1000.0000 0001.0111 0000 192.168.1.112
  9. 1100 0000.1010 1000.0000 0001.1000 0000 192.168.1.128
  10. 1100 0000.1010 1000.0000 0001.1001 0000 192.168.1.144
  11. 1100 0000.1010 1000.0000 0001.1010 0000 192.168.1.160
  12. 1100 0000.1010 1000.0000 0001.1011 0000 192.168.1.176
  13. 1100 0000.1010 1000.0000 0001.1100 0000 192.168.1.192
  14. 1100 0000.1010 1000.0000 0001.1101 0000 192.168.1.208
  15. 1100 0000.1010 1000.0000 0001.1110 0000 192.168.1.224
  16. 1100 0000.1010 1000.0000 0001.1111 0000 192.168.1.240
Bước 3:tìm subnet-mask của các mạng con:
Mạng chính là /24 mà ở bước 2 ta đã mượn 4 bit à 24+4=28
==>  Có 27 con 1 ở phần net-ID
==>  255.255.255.240/28
Một số thiết bị mới chỉ cần 3 bit vì 2 đường mạng đầu và cuối vẫn được dùng
Trường hợp 2: chia mạng con theo số IP cần dùng.
Bước 1: Xác định IP, Subnet Mask, đổi ra nhị phân. Xác định Net-ID và Host-ID.
Bước 2: xác định số bit còn lại ở phần Host-ID theo công thức sau:
2n -2 ≥ m.
==> Số bit mượn là : a=H-n
-         n là số bít còn lại ở Host-ID. Tình từ  phải qua trái.
-         m là số IP cần dùng.
-         a là số bit mượn
-         H là số bit ở phần Host-ID
Bước 3: cho lần lượt các bit mượn là 0 và 1 theo thứ tự nhị phân.
Bước 4: suy ra địa chỉ đường mạng của các mạng con và subnet Mask của các mạng con bằng các đổi IP từ nhị phân sang thập phân.
Ví dụ: cho địa chỉ IP sau :192.168.1.0/24 – chia mạng con sao cho mỗi mạng con có 40 IP.
Bước 1: xác định Net-ID và Host-ID, Subnet Mask. Đổi IP và Subnet mask ra nhị phân.
-         Đổi địa chỉ IP đã cho thành nhị phân.
1100 0000.1010 1000.0000 0001.0000 0000
-         Xác định subnet-mask.do /24 nên có 24 con 1 đầu tiên còn lại là 0 hết.
1111 1111.1111 1111.1111 1111.0000 0000
-         Tiếp theo đi tìm Network address bằng các AND địa chỉ IP với subnet-mask. Hoặc cho các bit ở phần host-ID bằng 0. Sau đó chuyển sang thập phân.
1100 0000.1010 1000.0000 0001.0000 0000
AND
1111 1111.1111 1111.1111 1111.0000 0000
=
1100 0000.1010 1000.0000 0001.0000 0000
==>192.168.1.0/24
-  Tiếp ta tìm Broadcast address bằng cách cho các bit phần host-ID của địa chỉ IP là 1. Rồi đổi ra thập phân
1100 0000.1010 1000.0000 0001.1111 1111
        ==> 192.168.1.255/24
Bước 2: ta cần 40 IP
2n -2 ≥ 40 ==> n=6.
Mà H=8. (/24 suy ra 32-24=8).
Vậy số bit cần mượn là:a=8-6. a=2.
Bước 3: cho lần lượt các bit mượn là 0 và 1 theo thứ tự nhị phân.
Tính bước nhảy xem sao nhỉ?
a=2 ==> b =2(8-2) =64Xuống dưới tính xem đúng không?
1100 0000.1010 1000.0000 0001.xx00 0000
  1. 1100 0000.1010 1000.0000 0001.0000 0000 192.168.1.0
  2. 1100 0000.1010 1000.0000 0001.0100 0000 192.168.1.64
  3. 1100 0000.1010 1000.0000 0001.1000 0000 192.168.1.128
  4. 1100 0000.1010 1000.0000 0001.1100 0000 192.168.1.192
Bước 4: tính Subnet Mask cho các mạng con:
SubnetMask= 24+2 =26. Vậy có 26 bit ở phần Net-ID.
255.255.255.192
Bài Tập cho phần  Ipv4 và chia mạng con.
Cho địa chỉ IP 192.168.25.130/28.
a)   Xác định lớp mạng?
b)  Xác định Subnet Mask?
c)   Xác địa chỉ đường mạng?
d)  Xác định địa chỉ broadcast?
e)   Xác định dải địa chỉ dùng  được?
f)    Địa chỉ này có được dùng ngoài internet không?
Giải:
a)     Lớp C
b)    vì lớp C nên SM mặc định là /24 mà ở đây /28 suy ra mượn thêm 4.
-         Mà tổng số bit phần  Host-ID lớp C là 8. Mượn 4=>còn 4*.
Lấy 256- 24* =240.==> SM: 255.255.255.240
c)     Địa chỉ đường mạng là: lấy 130 AND 240 = 128.
==> 192.168.25.128/28
d)    Địa chỉ broadcast:
-  Phải tính tẹo. do mượn 4 bit nên là số bước nhảy là : b= 28-4 =16.
Lấy địa chỉ đường mạng: 128-16=144. 144 là địa chỉ đường mạng của mạng tiếp theo.vậy địa chỉ broadcast là:192.168.25.143. (nhớ trừ đi 1 nhé).
e)     Địa chỉ dùng được bỏ địa chỉ đường mạng và địa chỉ broadcast ra:
192.168.25.129 –> 192.168.25.142.
f) địa chỉ này không phải địa chỉ dùng ngoài internet.
Phần 3: Các thiết bị mạng.
Các bạn chỉ cần nhớ thế này là được:
Layer 1:Repeater, Hub
Layer 2:Bridge, Switch,NIC
Layer 3:Router, Gateway
Switch và Bridge
-         Mỗi một Switch hoặc Bridge là một miền quảng bá, và mỗi port của chúng là 1 miền xung đột.
-         Khi nhận được 1 gói tin:
+ kiểm tra địa chỉ nguồn của gói tin đã có trong bảng MAC chưa, nếu chưa có thì nó sẽ thêm địa chỉ MAC này và Port nguồn mà nó nhận được vào bằng MAC.
+ kiểm tra địa chỉ đích của gói tin đã có trong bảng MAC chưa:
==>Nếu chưa có thì nó sẽ gửi gói tin ra tất cả các Port, trừ Port nó nhận được.
==>Nếu  đã có trong bảng MAC: mà địa chỉ MAC nguồn và MAC đích trùng nhau thì gói tin sẽ bị hủy.nếu khác nhau thì gói tin sẽ được gửi ra Port đích tương ứng.
Router. Mỗi port là 1 miền quảng bá và một miền xung đột
Các bạn có thể kết nối vào địa chỉ IP: 54.201.183.120 bằng phần mềm VCE Client để làm thử đề hoặc truy cập tranglamluanvan.net để xem hướng dẫn.

8/03/2013

Hướng dẫn Tạo Project FPGA từ code VHDL sang Altium và Nanoboard 3000

Download Code Here
-----------------------------------------------------------------------------------------------------------
Chào các bạn hôm nay mình sẽ viết 1 bài để hướng dẫn 
các bạn tạo 1 Project FPGA trong Altium để nạp nào Nanoboard 3000.
1.những phần mềm cần có:
- Active HDL
- Altium
2. Viết chương trình bằng ngôn ngữ VHDL trên Active HDL (bài D3_C2 trên Blog).
3. Vẽ mạch. ( Bài D3_C2).
3.1. Một số linh kiện cần dùng và thư viện chứa chúng.
    - FPGA NB3000 Port-Plugin.IntLib
LEDS_RGB
     - FPGA Instruments.IntLib
CLKGEN
     - FPGA NB2DSK01 Port-Plugin.IntLib
CLOCK_REFERENCE
TEST_BUTTON
3.2. Tạo Project trong altium


- Lưu Project vào máy.


- Add thêm File VHDL


 - Copy code từ bên active HDL sang.


- Paste code vào file VHDL bên altium.


- Lưu file VHDL lại


- Biên dịch và sửa lỗi code VHDL


- Tạo file sơ đồ nguyên lý mạch.


- Lưu sơ đồ nguyên lý lại.


- Lấy linh kiện mới tạo ra bằng code VHDL


- Chọn linh kiện vừa tạo và nhấn OK ta sẽ có kinh kiện.


- Linh kiện đã được đặt trong sơ đồ nguyên lý.


- Lấy LEDS_RGB 3 màu trong thư viện của Nanoboard 3000.


- Lấy CLKGEN ( bộ này để chỉnh xung nhịp khi kết nối với nanoboard 3000)


- CLOCK_REFERENCE lấy xung CLOCK.



- Lấy BUTTON để làm nút RESET


- Mạch vẽ xong!


- Kiểm tra sơ đồ nguyên lý và lưu lại lần nữa.


- Kiểm tra Project xem có lỗi không! nếu không có lỗi ta chuyển sang giai đoạn kết nối với Nanoboard 3000.


Các bạn có thể xem video hướng dẫn ở dưới!




---------------------------------------------------------------------------------------------------------
Chi tiết xin liên hệ:
Nguyễn Duy Tân
Email: nguyenduytan1909@gmail.com hoặc duytandhdt3k5@gmail.com
Yahoo: nguyenduytan1909
Skype: Tannd1909
FaceBook:Nguyễn Duy Tân

8/02/2013

Bộ ghi dịch vào nối tiếp ra nối tiêp (Serial in serial out "SISO")

Download Code Here
-----------------------------------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity nt_nt is
port(
clk : in std_logic;
SI : in BIT;
SO : out BIT
    );
end nt_nt;

architecture nt_nt of nt_nt is
signal tmp: bit_vector(7 downto 0);
begin
    process (clk)
      begin
if (clk'event and clk='1') then
          tmp <= tmp(6 downto 0)& SI;
        end if;
    end process;
    SO <= tmp(7);
end nt_nt;
--clk=20Mhz; SI= random 10ns;
---------------------------------------------------------------------------------------------------------
Chi tiết xin liên hệ:
Nguyễn Duy Tân
Email: nguyenduytan1909@gmail.com hoặc duytandhdt3k5@gmail.com
Yahoo: nguyenduytan1909
Skype: Tannd1909
FaceBook:Nguyễn Duy Tân

6.2. Chương trình sử dụng 4 button làm đầu vào, đầu ra là LED0, LED1, LED2, LED3 sáng tương ứng khi bấm button 0,1,2,3

Download Code Here
-----------------------------------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity D6_C2 is
port(
SI : in STD_LOGIC_VECTOR(3 downto 0);
SO : out STD_LOGIC_VECTOR(3 downto 0)
    );
end D6_C2;

architecture D6_C2 of D6_C2 is
begin
process(SI)
begin
SO<=SI;
end process;
end D6_C2;
-- clk=1Mhz
---------------------------------------------------------------------------------------------------------
Chi tiết xin liên hệ:
Nguyễn Duy Tân
Email: nguyenduytan1909@gmail.com hoặc duytandhdt3k5@gmail.com
Yahoo: nguyenduytan1909
Skype: Tannd1909
FaceBook:Nguyễn Duy Tân

6.1. Thiết kế và mô phỏng bộ đếm từ 0 tới 99 có chức năng lựa chọn đếm tiến hoặc đếm lùi và hiển thị kết quả đếm trên LED 7 thanh.

Download Code Here
-----------------------------------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;

entity D6_C1 is
port(
rst : in STD_LOGIC;
sel : in STD_LOGIC;
clk : in STD_LOGIC;
seg1 : out STD_LOGIC_VECTOR(7 downto 0);--hang don vi
seg2 : out STD_LOGIC_VECTOR(7 downto 0)--hang chuc
    );
end D6_C1;

architecture D6_C1 of D6_C1 is
begin
process(rst,clk,sel)
variable temp1:integer range 0 to 10;
variable temp2:integer range 0 to 10;
begin
if (rst='1') then
temp1:=0;
temp2:=0;
elsif (rising_edge(clk)) then
if (sel='1') then
if (temp1=10) then
temp1:=0;
temp2:=temp2+1;
if (temp2=10) then temp2:=0;
end if;
else temp1:=temp1+1;
end if;
elsif (sel='0') then
if(temp1=0) then
temp1:=9;
temp2:=temp2-1;
if (temp2=0) then temp2:=9;
end if;
else temp1:=temp1-1;
end if;
end if;
end if;

case temp1 is
                when 0 => seg1<= x"C0";
                when 1 => seg1<= x"F9";
                when 2 => seg1<= x"A4";
                when 3 => seg1<= x"B0";
                when 4 => seg1<= x"99";
                when 5 => seg1<= x"92";
                when 6 => seg1<= x"82";
                when 7 => seg1<= x"F8";
when 8 => seg1<= x"80";
                when 9 => seg1<= x"90";
when others =>NULL;
end case;
case temp2 is
                when 0 => seg2<= x"C0";
                when 1 => seg2<= x"F9";
                when 2 => seg2<= x"A4";
                when 3 => seg2<= x"B0";
                when 4 => seg2<= x"99";
                when 5 => seg2<= x"92";
                when 6 => seg2<= x"82";
                when 7 => seg2<= x"F8";
when 8 => seg2<= x"80";
                when 9 => seg2<= x"90";
when others =>NULL;
end case;
end process;
end D6_C1;
-- rst= 10kHz; sel=50Khz; clk=20Mhz;
---------------------------------------------------------------------------------------------------------
Chi tiết xin liên hệ:
Nguyễn Duy Tân
Email: nguyenduytan1909@gmail.com hoặc duytandhdt3k5@gmail.com
Yahoo: nguyenduytan1909
Skype: Tannd1909
FaceBook:Nguyễn Duy Tân

5.2. Chương trình điều khiển 8 led đơn trên Nanoboad sáng theo quy luật: LED0,1,2,3 sáng màu xanh, LED 4,5,6,7 tắt – LED0,1,2,3 tắt, LED 4,5,6,7 sáng màu đỏ

Download Code Here
-----------------------------------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity D5_C2 is
port(
clk : in STD_LOGIC;
seg : out STD_LOGIC_VECTOR(7 downto 0)
    );
end D5_C2;

architecture D5_C2 of D5_C2 is
begin

process(clk)
begin
  if(clk='1') then seg<="00001111";
  else seg<="11110000";
  end if;
end process;
end D5_C2;
-- clk=10Mhz;  
---------------------------------------------------------------------------------------------------------
Chi tiết xin liên hệ:
Nguyễn Duy Tân
Email: nguyenduytan1909@gmail.com hoặc duytandhdt3k5@gmail.com
Yahoo: nguyenduytan1909
Skype: Tannd1909
FaceBook:Nguyễn Duy Tân

5.1. Thiết kế và mô phỏng thanh ghi dịch với số bit có thể thay đổi được và có thể lựa chọn được chức năng thực hiện: vào nối tiếp ra nối tiếp hoặc vào nối tiếp ra song song.

Download Code Here
-----------------------------------------------------------------------------------------------------------

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity D5_C1 is
generic (n:integer:=8);
port(
clk : in STD_LOGIC;
sel : in STD_LOGIC;
SI : in bit;
Q : out bit_VECTOR(n-1 downto 0)
    );
end D5_C1;

--}} End of automatically maintained section

architecture D5_C1 of D5_C1 is
signal temp:bit_vector(n-1 downto 0);
  begin
    process (clk,SI)
      begin
        if (clk'event and clk='1') then
          temp <= temp(n-2 downto 0)& SI;
        end if;
    end process;
process(sel,clk)
begin
if (rising_edge(clk))then
if (sel='1') then Q(0)<=temp(n-1);
else
if (sel='0') then Q<=temp;
end if;
end if;
end if;
end process;
end D5_C1;

---------------------------------------------------------------------------------------------------------
Chi tiết xin liên hệ:
Nguyễn Duy Tân
Email: nguyenduytan1909@gmail.com hoặc duytandhdt3k5@gmail.com
Yahoo: nguyenduytan1909
Skype: Tannd1909
FaceBook:Nguyễn Duy Tân

4.2. Chương trình điều khiển 8 led đơn sáng lan theo quy luật LED0 sáng, LED1 và LED0 sáng, LED2, LED1 và LED0 sáng,…, 7 LED cùng sáng

Download Code Here
-----------------------------------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity D4_C2 is
port(
rst : in STD_LOGIC;
clk : in STD_LOGIC;
seg : out STD_LOGIC_VECTOR(7 downto 0)
    );
end D4_C2;

architecture D4_C2 of D4_C2 is
begin
process(rst,clk)
variable dem:integer range 0 to 8;
begin
if (rst='1') then dem:=0;
elsif (rising_edge(clk)) then
if (dem=8) then dem:=0;
else dem:=dem+1;
end if;
end if;
case dem is
when 0=> seg <="00000000";
when 1=> seg <="00000001";
when 2=> seg <="00000011";
when 3=> seg <="00000111";
when 4=> seg <="00001111";
when 5=> seg <="00011111";
when 6=> seg <="00111111";
when 7=> seg <="01111111";
when others=> seg <="11111111";
end case;
end process;

end D4_C2;
--rst=0.5Mhz; clk=20Mhz;
---------------------------------------------------------------------------------------------------------
Chi tiết xin liên hệ:
Nguyễn Duy Tân
Email: nguyenduytan1909@gmail.com hoặc duytandhdt3k5@gmail.com
Yahoo: nguyenduytan1909
Skype: Tannd1909
FaceBook:Nguyễn Duy Tân

4.1. Thiết kế và mô phỏng bộ đếm 9 và hiển thị kết quả đếm trên LED 7 thanh theo phương pháp máy trạng thái

Download Code Here
-----------------------------------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity D4_C1 is
port(
rst : in STD_LOGIC;
clk : in STD_LOGIC;
seg : out STD_LOGIC_VECTOR(7 downto 0)
    );
end D4_C1;
architecture D4_C1 of D4_C1 is
type state is (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9);
signal s:state;
begin

next_state:process(rst,clk)
begin
if (rst='1') then s<=s0;
else
if (rising_edge(clk)) then
case s is
when s0 => s <=s1;
when s1 => s <=s2;
when s2 => s <=s3;
when s3 => s <=s4;
when s4 => s <=s5;
when s5 => s <=s6;
when s6 => s <=s7;
when s7 => s <=s8;
when s8 => s <=s9;
when s9 => s <=s0;
end case;
end if;
end if;
end process;
output_state:process(s)
begin
case s is
                when s0 => seg<= x"C0";
                when s1 => seg<= x"F9";
                when s2 => seg<= x"A4";
                when s3 => seg<= x"B0";
                when s4 => seg<= x"99";
                when s5 => seg<= x"92";
                when s6 => seg<= x"82";
                when s7 => seg<= x"F8";
                when s8 => seg<= x"80";
                when s9 => seg<= x"90";
end case;
end process;
end D4_C1;
-- rst=0.5Mhz; clk=20Mhz;
---------------------------------------------------------------------------------------------------------
Chi tiết xin liên hệ:
Nguyễn Duy Tân
Email: nguyenduytan1909@gmail.com hoặc duytandhdt3k5@gmail.com
Yahoo: nguyenduytan1909
Skype: Tannd1909
FaceBook:Nguyễn Duy Tân