Thông báo

Collapse
No announcement yet.

Tại bộ đến 4 bit =VHDL

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

  • Tại bộ đến 4 bit =VHDL

    Tạo bộ đếm 4 bit. Bộ đếm tăng mỗi khi có xung dương đến chân clock, bằng không khi Reset = 1.
    ------------------------------
    Bác nào hướng dẫn cái VD đơn giản này với.
    Có Code luôn thì Thank very much.
    Last edited by hieutq; 03-06-2006, 15:48.

  • #2
    Hướng giải quyết

    - Em post thử đoạn Code em làm không biết có đúng không. Bác nào xem và giúp em cái.
    - Mới cả em cũng chưa biết mô phỏng nó ra sao. Help help
    (Em mới học được có 1 ngày, chả biết mấy, lên đây hỏi cao thủ cho nhanh)
    Code:
    Library ieee;
    Use ieee.std_logic_1164.all;
    use work.conversions.all;
    Entity COUNT16 Is
    	Port (Clk,Rst,Load: in std_ulogic;
    	Data: in std_ulogic_vector(3 downto 0);
    	Count: out std_ulogic_vector(3 downto 0)
    	);
    End COUNT16;
    Architecture COUNT16_A of COUNT16 Is
    Begin process(Rst,Clk)
    	variable Q: integer range 0 to 15;
       begin
    	if Rst = '1' then
    	Q := 0;
    	elsif rising_edge(Clk) then
    	if Load = '1' then
    	Q := to_unsigned(Data); -- Convert vector to integer
    	elsif Q = 15 then
    	Q := 0;
    	else
    	Q := Q + 1;
    	end if;
    	end if;
    	Count <= to_vector(4,Q);
    end process;
    End COUNT16_A;

    Comment


    • #3
      Về thuật toán thì không có gì sai cả. Chỉ có điều là cách viết chương trình thì không ai viết như thế cả.

      Về mô phỏng thì tùy thuộc vào công cụ mà bạn có. Mình thì hay dùng Modelsim. Để mô phỏng thì bạn chỉ việc định nghĩa các tín hiệu lối vào là okie.


      Comment


      • #4
        Em dùng phần mềm MultiVHDL (của WorkBench) để mô phỏng.

        Thuật toán như thế là Ok là em vui roài. Vậy anh có cách viết nào khác chỉ em với. Hoặc viết kiểu gì ngắn gọn hơn không?

        Comment


        • #5
          Nguyên văn bởi hieutq
          - Em post thử đoạn Code em làm không biết có đúng không. Bác nào xem và giúp em cái.
          - Mới cả em cũng chưa biết mô phỏng nó ra sao. Help help
          (Em mới học được có 1 ngày, chả biết mấy, lên đây hỏi cao thủ cho nhanh)
          Code:
          Library ieee;
          Use ieee.std_logic_1164.all;
          use work.conversions.all;
          Entity COUNT16 Is
          	Port (Clk,Rst,Load: in std_ulogic;
          	Data: in std_ulogic_vector(3 downto 0);
          	Count: out std_ulogic_vector(3 downto 0)
          	);
          End COUNT16;
          Architecture COUNT16_A of COUNT16 Is
          Begin process(Rst,Clk)
          	variable Q: integer range 0 to 15;
             begin
          	if Rst = '1' then
          	Q := 0;
          	elsif rising_edge(Clk) then
          	if Load = '1' then
          	Q := to_unsigned(Data); -- Convert vector to integer
          	elsif Q = 15 then
          	Q := 0;
          	else
          	Q := Q + 1;
          	end if;
          	end if;
          	Count <= to_vector(4,Q);
          end process;
          End COUNT16_A;
          Trong phần thư viện bạn nên khai thêm ieee.std_logic_unigned.all và bỏ cái thư viện use work.conversions.all đi vì ở đây bạn ko dùng đến nó. Các gate thì nên dùng std_logic hoặc std_logic_vector. Biến Q có thể khai báo lại thành std_logic_vector(3 downto 0). khai báo thế có cái lợi là khi Q=15 (bạn có thể viết trực tiếp vậy) và xung dương, Q+1 tự động trở về 0
          PS: Nếu chương trình ko chạy thì cũng ko có gì ghê ghớm cả. Tôi dung HDL Active, nhưng chắc sẽ ok thôi tại thư viện thêm vào là thư viện chuẩn rồi.Thử xem

          Comment


          • #6
            Không dùng thì chả phải bỏ. Bỏ hay không bỏ chả ảnh hưởng đến chương trình
            . Bạn thử mô phỏng bằng modelsim xem. Hay dùng chương trình mô phỏng của hãng cũng được.
            Cũ người mới ta!

            Comment


            • #7
              Thừa trong trường hợp này cũng chẳng sao nhưng đơn cử 1 vd thế này: vẫn trường hợp trên Q chạy từ 0->15 nhưng bạn chỉ khai báo Q:integer thì sẽ thế nào? trả lời rằng: kết quả ko có gì thay đổi cả. Nhưng mặc định Q kiêu integer sẽ dẫn đến ta phải mất nhiều resource hơn để biểu diễn giá trị Q. Tất nhiên càng về sau này các bộ Complier càng ngày càng "thông minh" hơn nó sẽ giải quyết cho bạn vấn đề này. Nhưng trong nhiều trường hợp, nếu project của bạn lớn thì "sự thừa" sẽ hay ho đấy, chip có thể sẽ không đủ reourse để synthesis chương trình của bạn đâu

              Comment


              • #8
                Cám ơn các bác.

                Gửi bác DmdR
                trong nhiều trường hợp, nếu project của bạn lớn thì "sự thừa" sẽ hay ho đấy, chip có thể sẽ không đủ reourse để synthesis chương trình của bạn đâu
                - "Sự thừa" ở đây có phải do mình khai báo thư viện thừa hay không?
                - Mới cả đối với nhưng con Chip dùng trong VHDL thì dung lượng có lớn không? Em mình biết thì VHDL cũng là một trong những ngôn ngữ máy nên việc dịch chắc sẽ không chiến nhiều bộ nhớ.

                Comment


                • #9
                  VHDL thực ra không phải là ngôn ngữ máy. Có thể bạn nhầm lẫn từ Hardware. Nó là ngôn ngữ mô tả phần cứng !!!


                  Comment


                  • #10
                    Sự thừa ở đây có nghĩa là không tối ưu hóa được thuật toán. Cùng thực hiện một công việc, đáng lẽ bạn chỉ cần chi 5 đồng là có thể làm được nhưng bạn lại rộng dãi chi ra những 10 đồng. Thứ nhất, nếu túi tiền của bạn rủng rỉnh thì việc chi 5 hay 10 đồng ko có vấn đề gì quan trọng. Nhưng nếu trong tay bạn chỉ có 1 số tiền ít ỏi nhất định thì bạn tính sao? Thú hai, một thuật toán tốt, tối ưu hóa đồng nghĩa với việc bạn sẽ có một sản phẩm tốt, giá thành rẻ vì không cần dùng đến những chip có dung lựong lớn.
                    Mỗi loại chip tùy vào mục đích sủ dụng mà có dung lượng lớn nhỏ khác nhau. Có con chỉ có vài trăm gate (PLA), còn những loại lớn hơn như FPGA, CPLD, SoC có thể có đến hàng triệu gate

                    Comment


                    • #11
                      Cám ơn các bác đã góp ý.
                      Còn đây là phần tậo xung cho bộ đếm 4 bit trên. Em tiếp nốt cho nó hoàn chỉnh. Các bác góp ý nhé

                      Code:
                      -------------------------------------------------------
                      -- Tao bo dem 4 bit. 
                      
                      library ieee;
                      Use ieee.std_logic_1164.all;
                      use ieee.numeric_std.all;
                      
                      Entity T_COUNT16 Is
                      End T_COUNT16;
                      
                      use work.all;
                      
                      Architecture stimulus of T_COUNT16 Is
                          Component COUNT16
                              Port (Clk,Rst,Load: in std_ulogic;
                                    Data: in unsigned(3 downto 0);
                                    Count: out unsigned(3 downto 0)
                              );
                          End Component;
                          Signal Clk,Rst,Load: std_ulogic; -- Xung cao
                          Signal Data: unsigned(3 downto 0);
                          Signal Count: unsigned(3 downto 0);
                          Signal Clock_cycle: natural := 0;
                      Begin
                          DUT: COUNT16 Port Map (Clk,Rst,Load,Data,Count);
                      
                          -- The first process sets up a 20Mhz background clock
                          CLOCK: process
                          begin
                              Clock_cycle <= Clock_cycle + 1;
                              Clk <= '1';
                              wait for 25 ns;
                              Clk <= '0';
                              wait for 25 ns;
                          end process;
                      
                          -- Quy trinh mo phong cho Reset va load cua counter...
                          Stimulus1: Process
                          Begin
                      
                              Rst <= '1';
                              wait for 40 ns;
                              Rst <= '0';
                              Load <= '1';
                              Data <= "0100";    -- Dua vao gia tri 0100 cho counter
                              wait for 50 ns;
                              Load <= '0';
                              wait for 500 ns;
                              Load <= '1';
                              Data <= "0000";    -- Dua vao gia tri 0000 cho counter
                              wait for 50 ns;
                              Load <= '0';
                              wait for 11000 ns;
                              wait;
                          End Process;
                      End stimulus;

                      Comment


                      • #12
                        Bộ đếm 4 bit:
                        ----------------------------------------
                        library ieee;
                        use ieee.std_logic_1164.all;
                        use ieee. std_logic_arith.all;
                        use ieee.std_logic_unsigned.all;
                        ----------------------------------------
                        entity counter is
                        port(
                        cnt_enable:in std_logic;
                        clk: in std_logic;
                        reset:in std_logic;
                        cnt: buffer std_logic_vector(3 downto 0)
                        );
                        end counter;
                        ----------------------------------------
                        architecture dataflow of counter is
                        begin
                        process(reset,clk,cnt_enable)
                        begin
                        if reset ='1' then
                        cnt <=(others =>'0');
                        elsif clk ='1' and clk'event then
                        if cnt_enable='1' then
                        cnt<=cnt+1;
                        end if;
                        end if;
                        end process;
                        end dataflow;
                        ----------------------------------------
                        Chúc bạn thành công

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...
                        X