Thông báo

Collapse
No announcement yet.

STOP_WATCH code VHDL

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • STOP_WATCH code VHDL

    share cho các tập viết phần cứng bằng vhdl như mình. Đã test thành công trên kit DE2-115
    Bài toán như sau:
    1. đếm từ 0 đến 5p.
    2. hiển thị giá trị lên LED 7 đoạn

    CODE :
    -- Thiet ke dong ho dem den 5p
    -- hien thi gia tri len 4 LED 7 doan tren KIT DE2-115
    -- Разработан: Н. Д. Ч.
    -- data: 17/06/2013

    Library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;

    entity STOP_WATCH_5P is

    port( clk: in std_logic; -- xung clock 50MHz pin Y2
    clr, go: in std_logic; -- xoa hoac cho phep bat dau dem giay -- SW1, SW0
    d3,d2,d1,d0: buffer std_logic_vector(3 downto 0); --d3 = kim phut, d2 chuc giay, d1 giay, d0 0.1s --gan vao pin LEDR14..0
    HEX3, HEX2, HEX1, HEX0: out std_logic_vector(0 to 6) -- hien thi gia tri tuong ung cua d3 d2 d1 d0
    );
    end STOP_WATCH_5P;

    architecture arch of STOP_WATCH_5P is

    constant Divider: integer := 5000_000;
    signal d3_reg, d2_reg, d1_reg, d0_reg: std_logic_vector(3 downto 0):=(others => '0');
    signal d3_next, d2_next, d1_next, d0_next: std_logic_vector(3 downto 0):= (others => '0');
    signal ms_tick: std_logic;
    begin

    process(clk, go, clr) -- dem den 5tr thi tang 0.1s
    variable count : integer := 0;
    begin
    if clr = '1' then
    count := 0;
    elsif rising_edge(clk) then
    d3_reg <= d3_next;
    d2_reg <= d2_next;
    d1_reg <= d1_next;
    d0_reg <= d0_next;
    if go = '1' then
    count := count + 1;
    if count = divider then -- dem den 5tr = x"4C4B40"
    ms_tick <= '1';
    count := 0;
    else
    ms_tick <= '0';
    end if;
    end if;
    end if;
    end process;

    process(d0_reg, d1_reg, d2_reg, d3_reg, ms_tick, clr)

    begin
    d0_next <= d0_reg;
    d1_next <= d1_reg;
    d2_next <= d2_reg;
    d3_next <= d3_reg;
    if clr = '1' then
    d0_next <= (others => '0');
    d1_next <= (others => '0');
    d2_next <= (others => '0');
    d3_next <= (others => '0');
    elsif ms_tick = '1' then
    if d0_reg /= "1001" then
    d0_next <= d0_reg + 1;
    else
    d0_next <= "0000";
    if d1_reg /= "1001" then
    d1_next <= d1_reg + 1;
    else
    d1_next <= "0000";
    if d2_reg /= "0101" then
    d2_next <= d2_reg + 1;
    else
    d2_next <= "0000";
    if d3_reg /= "0100" then
    d3_next <= d3_reg + 1;
    else
    d3_next <= "0000";
    end if;
    end if;
    end if;
    end if;
    end if;
    end process;
    d0 <= d0_reg;
    d1 <= d1_reg;
    d2 <= d2_reg;
    d3 <= d3_reg;

    with d3 select
    HEX3 <= "0000001" when "0000",-- so 0
    "1001111" when "0001",--1
    "0010010" when "0010",--2
    "0000110" when "0011",--3
    "1001100" when "0100",--4
    "0100100" when "0101",--5
    "0100000" when "0110",--6
    "0001111" when "0111",--7
    "0000000" when "1000",--8
    "0000100" when "1001",--9
    "1111111" when others; -- LED toi
    with d2 select
    HEX2 <= "0000001" when "0000",-- so 0
    "1001111" when "0001",--1
    "0010010" when "0010",--2
    "0000110" when "0011",--3
    "1001100" when "0100",--4
    "0100100" when "0101",--5
    "0100000" when "0110",--6
    "0001111" when "0111",--7
    "0000000" when "1000",--8
    "0000100" when "1001",--9
    "1111111" when others; -- LED toi
    with d1 select
    HEX1 <= "0000001" when "0000",-- so 0
    "1001111" when "0001",--1
    "0010010" when "0010",--2
    "0000110" when "0011",--3
    "1001100" when "0100",--4
    "0100100" when "0101",--5
    "0100000" when "0110",--6
    "0001111" when "0111",--7
    "0000000" when "1000",--8
    "0000100" when "1001",--9
    "1111111" when others; -- LED toi
    with d0 select
    HEX0 <= "0000001" when "0000",-- so 0
    "1001111" when "0001",--1
    "0010010" when "0010",--2
    "0000110" when "0011",--3
    "1001100" when "0100",--4
    "0100100" when "0101",--5
    "0100000" when "0110",--6
    "0001111" when "0111",--7
    "0000000" when "1000",--8
    "0000100" when "1001",--9
    "1111111" when others; -- LED toi


    end arch;

  • #2
    Bạn có gặp vấn đề khi xóa không?
    Bạn thư nhấp nhấp nút clr nhanh thật nhanh xem có chuyện gì xảy ra không?

    Comment


    • #3
      nếu dùng nút nhấn (vd : KEY0) trên kit thì fai viết lệnh chống rung phím ấn nữa. Nên mình dùng SW để chuyển mức logic 1 và 0.

      Comment


      • #4
        Nguyên văn bởi zhounguyen Xem bài viết
        nếu dùng nút nhấn (vd : KEY0) trên kit thì fai viết lệnh chống rung phím ấn nữa. Nên mình dùng SW để chuyển mức logic 1 và 0.
        Bạn thử bật "go" và "clr" cùng lúc ... rối thả clr ra ... Mính nghĩ sẽ có đôi lúc đồng hồ của bạn không clear về 0 hoàn toàn ...

        Comment


        • #5
          anh Jeffieu comment kinh nhỉ, kinh nghiệm đầy mình, đọc code thôi mà như thấy được cả mạch.

          Comment


          • #6
            Nguyên văn bởi klong19 Xem bài viết
            anh Jeffieu comment kinh nhỉ, kinh nghiệm đầy mình, đọc code thôi mà như thấy được cả mạch.
            Ực, không dám.
            50% kinh nghiệm, 50% đoán mò ...

            Comment

            Về tác giả

            Collapse

            zhounguyen Tìm hiểu thêm về zhounguyen

            Bài viết mới nhất

            Collapse

            • bqviet
              Trả lời cho Đấu tắt điện cho máy tính bảng
              bởi bqviet
              Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
              06-12-2025, 17:17
            • nguyendinhvan
              Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
              bởi nguyendinhvan
              Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
              05-12-2025, 19:59
            • afrendly
              Trả lời cho Đấu tắt điện cho máy tính bảng
              bởi afrendly
              Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
              04-12-2025, 01:27
            • nick22
              Trả lời cho Máy điện châm ?
              bởi nick22
              Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
              01-12-2025, 13:23
            Đang tải...
            X