Thông báo

Collapse
No announcement yet.

Sự khác nhau giữa biến và tín hiệu trong lập trình VHDL !

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

  • #31
    Lâu rồi không xài VHDL, giờ đi làm mình dùng Verilog, hy vọng còn nhớ chút đỉnh.

    Có lời khuyên bạn hãy quên trường hợp dùng lệnh after đi, vì nếu dùng nó sẽ không thể tổng hợp được! Và trong các dự án thực tế người ta cũng không khuyên dùng kiểu mô phỏng có timing, vì định thời là không thể xác định trước, sao bạn biết chắc nó sẽ delay 1ns, 2ns .... ????

    Việc delay tạo trễ ... đó là nhiệm vụ của backend team, họ sẽ quan tâm đến việc p&r, tree clock ... một công việc của người hoạ sĩ đấy.

    Còn việc dùng variable là việc không nên, nên tránh nó nếu có thể. Mình thấy cũng đâu có quá khó để nhận ra sự khác biệt giữa variale và signal đâu nhỉ? Cứ thử viết một chương trình dùng nhiều variable và một chương trình tương tự dùng signal, rồi synthesis sẽ thấy sự khác biệt về tài nguyên thôi mà.

    Comment


    • #32
      Hai cái chương trình bạn nêu thì Tí có ý kiến như sau:
      1. Câu lệnh wait on có tác dụng là thay thế cho senitive list mà thôi, nó không chỉ ra delay là 0ns.
      2. Chương trình thứ hai thì Tí không có ý kiến.
      Làm cái gì nữa đây?

      Comment


      • #33
        @Theking
        Còn việc dùng variable là việc không nên, nên tránh nó nếu có thể. Mình thấy cũng đâu có quá khó để nhận ra sự khác biệt giữa variale và signal đâu nhỉ? Cứ thử viết một chương trình dùng nhiều variable và một chương trình tương tự dùng signal, rồi synthesis sẽ thấy sự khác biệt về tài nguyên thôi mà.
        Cảm ơn bác theking, đồng ý là mình cứ viết code theo hai cách :dùng biến và tín hiệu, rồi khi tổng hợp sẽ thấy sự khác biệt. Nhưng ý tui là khi mình viết 1 đoạn code mình phải dự đoán được hành vi của đoạn code mà mình viết (tức đoạn code đó khi tổng hợp sẽ tạo ra phần cứng làm chức năng gì) như vậy khi viết code mình đỡ mày mò: thử-sai -sửa. Chẳn hạn như đoạn code đầu tiên của perry là không thể tạo ra được con mux được, dù tổng hợp vẫn được, nếu ta không hiểu kỹ về tính chất của biến và tín hiệu thì dù tổng hợp ra rồi ta cũng khó biết chỗ sai, do vậy nên tui phải rán hiểu chi tiết về các biến, tín hiệu, và chắc còn nhiều cái khác nữa ...

        @titeo:
        1. Câu lệnh wait on có tác dụng là thay thế cho senitive list mà thôi, nó không chỉ ra delay là 0ns.
        tui cũng biết là nó thay cho danh sách nhạy (senitive list ), nhưng ko hiểu vì sao nó đặt ở cuối cùng, mặc dù tác giả đã giải thích.
        @ yesme@: như vậy nếu tui coppy cái đoạn code của perry (có dùng wait for 0ns) và bỏ vào ISE webpack 9.1 thì nó khổng thể tổng hợp được hả bác ?

        Comment


        • #34
          Tui tổng hợp đoạn code sau:

          library IEEE;
          use IEEE.STD_LOGIC_1164.ALL;
          use IEEE.STD_LOGIC_ARITH.ALL;
          use IEEE.STD_LOGIC_UNSIGNED.ALL;

          ---- Uncomment the following library declaration if instantiating
          ---- any Xilinx primitives in this code.
          --library UNISIM;
          --use UNISIM.VComponents.all;

          entity counter is
          Port ( CLOCK : in STD_LOGIC;
          DIRECTION : in STD_LOGIC;
          COUNT_OUT : out STD_LOGIC_VECTOR (3 downto 0));
          end counter;

          architecture Behavioral of counter is
          signal count_int : std_logic_vector(3 downto 0) := "0000";
          begin

          process (CLOCK)
          begin
          if CLOCK='1' and CLOCK'event then
          if DIRECTION='1' then
          count_int <= count_int + 1;
          else
          count_int <= count_int - 1;
          end if;
          end if;
          end process;
          COUNT_OUT <= count_int;
          end Behavioral;
          cái ví dụ này lấy từ templates của ISE
          khi tổng hợp gặp cảnh báo:

          WARNING:Xst - Property "use_dsp48" is not applicable for this technology.
          WARNING:ProjectMgmt - "E:/Work/Xilinx/circuit/counter.ngr" line 0 duplicate design unit: 'Module|counter'
          WARNING:ProjectMgmt - "E:/Work/Xilinx/circuit/counter.vm6" line 0 duplicate design unit: 'Module|counter'
          kiểm tra syntax không hề có lỗi
          khi chạy mô phỏng (simulation) lại bị báo lỗi tiếp :

          ERROR:HDLParsers:3264 - Can't read file "Files/Xilinx": No such file or directory
          mấy bác xử nó giúp tui với, tui dùng ISE Webpack 9.1i, down từ web của xilinx, không biết bản này có hạn chế gì ko ?
          Last edited by thavali; 21-05-2007, 12:49.

          Comment


          • #35
            1. warning đầu tiên thì có lẽ do bạn dùng loại Spartan-3A, loại này có khối dsp48. Trong khi thiết kế của bạn không liên qua gì đến khối này.
            2. warning thứ hai là do bạn đã đặt trùng tên với một thiết kế counter có sẵn trong thư viện.
            3. error là do bạn chưa compile được nên không thể chạy mô phỏng.
            PS: Mình không có ISE9.1 nên không thể kiểm tra các câu trả lời của Tí có chính xác không, bạn thông cảm. Khi làm bạn cũng nên vào trang web của xilinx, hoặc đọc phần help của phần mềm, luôn có lời giải thích cũng như cách khắc phục các vấn đề mà bạn gặp phải.
            Làm cái gì nữa đây?

            Comment


            • #36
              1. Mình không dùng spartan, mình xài CPLD coolrunner 2
              2. Cảnh báo dsp48 là lỗi của phần mềm (trang web của xilinx nó bảo thế, nó bảo nó sẽ sửa ở bản 10.1 nhưng bản này bây giờ chưa ra )
              3. Lỗi ERROR:HDLParsers:3264 mình chưa tìm ra, trang web của xilinx cũng không có nói tới. Bác bảo cần biên dịch (compilie), bác nói cụ thể hơn được không ?
              Khi tui compile nó hiện ra thông báo sau:
              The compilation of HDL simulation libraries for "ISE Simulator (VHDL/verilog)" is not supported. The supported simulator for which the libraries can be compiled are ModelSim_Se VHDL, ModelSim_Se verilog, ModelSim_PE VHDL,...
              4. Bạn có thể down ISE 9.1 free từ xilinx, nhưng cần đăng kí account.
              5. Tui có thể biên soạn vhdl, mô phỏng rồi nạp code vào chip Coolrunner 2 (của xilinx) bằng quartus II (của altera) được không vậy bác ?
              Last edited by thavali; 21-05-2007, 16:36.

              Comment


              • #37
                5. Không làm như vậy được.
                Làm cái gì nữa đây?

                Comment


                • #38
                  ERROR:HDLParsers:3264

                  Take care the following message. I cannot write in Vietnamese so I do not translate it to Vietnamese (just a copied message).
                  TXT

                  The following pop-up error messages may also be displayed.

                  "FDK Error: "Program" item for command line 'tbwTOtimesim_vhw' not specified in FDK file.
                  FDK Error: "Program" item for command line 'timesim_vhwTOisim_par_prj' not specified in FDK file.
                  Error: Sources for both VHDL and Verilog have been detected in this project. The Xilinx Simulator supports single-language simulation only."

                  解决方案 1:

                  The ISE Simulator is a single language simulator. The output simulation netlist, as well as the intermediate test bench file created for a Test Bench Waveform (TBW) file, will match the language specified by the Generated Simulation Language property. Therefore, the Generated Simulation Language selection in the Project Properties should match the project source type (Verilog or VHDL). Additionally, in 7.1i, if the Generated Simulation Language is changed after a simulation has been attempted, Project Navigator fails to reset the Generated Simulation Language to the new value.

                  To work around this, do the following:
                  1. Run Project -> Cleanup Project Files.
                  2. Close and re-open Project Navigator.

                  This problem has been fixed in the latest 7.1i Service Pack available at:
                  http://support.xilinx.com/xlnx/xil_sw_updates_home.jsp
                  The first service pack containing the fix is 7.1i Service Pack 1.


                  Comment


                  • #39
                    Bác TXT là ai mà sao hổng nói được Tiếng việt nhỉ .
                    Tôi sẻ thử xem sao, rõ ràng là tui chỉ viết bằng vhdl thôi nên không thể có cái file verilog nào được tạo ra trong project

                    Comment


                    • #40
                      Nguyên văn bởi thavali Xem bài viết
                      Bác TXT là ai mà sao hổng nói được Tiếng việt nhỉ .
                      Tôi sẻ thử xem sao, rõ ràng là tui chỉ viết bằng vhdl thôi nên không thể có cái file verilog nào được tạo ra trong project
                      Không viết được Tiếng Việt vì cái bàn phím củ chuối của bọn Đức chứ đâu phải không nói được Tiếng Việt.
                      Còn TXT = Yesme@


                      Comment


                      • #41
                        WARNING:Xst - Property "use_dsp48" is not applicable for this technology.
                        WARNING:ProjectMgmt - "E:/Work/Xilinx/circuit/counter.ngr" line 0 duplicate design unit: 'Module|counter'
                        WARNING:ProjectMgmt - "E:/Work/Xilinx/circuit/counter.vm6" line 0 duplicate design unit: 'Module|counter'


                        ERROR:HDLParsers:3264 - Can't read file "Files/Xilinx": No such file or directory

                        Chú ý quan trọng
                        :
                        Một số lỗi mà tui nói ở trên xuất phát từ một nguyên do như sau:
                        Đó là do tên của thư mục cài đặt chương trình và thư mục làm việc (nơi chứa project) có dấu cách khoảng (space). Do đó, bác nào mới xài ISE thì nhớ là đường dẫn (path) của thư mục cài đặt và thư mục làm việc không được chứa dấu cách khoảng. Đúng ra xilinx phải thông báo cho người dùng trong lúc cài đặt ISE, nhưng chắc là mấy bác xilinx quên mất tiêu cái món này .

                        ví dụ: C:\ISEwebpack -> hợp lệ
                        C:\ISE webpack -> không hợp lệ -> báo lỗi

                        Comment


                        • #42
                          Mời bác yesme@ và titeo tiếp tục support cho thread này với nhé.
                          Bác perry có nói về configuration như sau:
                          Configurations are a primary design unit used to bind
                          component instances to entities. For structural models,
                          configurations can be thought of as the parts list for the
                          model.
                          và cho đọc cái ví dụ sau:


                          LIBRARY IEEE;
                          USE IEEE.std_logic_1164.ALL;
                          ENTITY counter IS
                          PORT(load, clear, clk : IN std_logic;
                          data_in : IN INTEGER;
                          data_out : OUT INTEGER);
                          END counter;
                          ARCHITECTURE count_255 OF counter IS
                          BEGIN
                          PROCESS(clk)
                          VARIABLE count : INTEGER := 0;
                          BEGIN
                          IF clear = ‘1’ THEN
                          count := 0;
                          ELSIF load = ‘1’ THEN
                          count := data_in;
                          ELSE
                          IF (clk’EVENT) AND (clk = ‘1’) AND
                          (clk’LAST_VALUE = ‘0’) THEN
                          IF (count = 255) THEN
                          count := 0;
                          ELSE
                          count := count + 1;
                          END IF;
                          END IF;
                          END IF;
                          data_out <= count;
                          END PROCESS;
                          END count_255;
                          ARCHITECTURE count_64k OF counter IS
                          BEGIN
                          PROCESS(clk)
                          VARIABLE count : INTEGER := 0;
                          BEGIN
                          IF clear = ‘1’ THEN
                          count := 0;
                          ELSIF load = ‘1’ THEN
                          count := data_in;
                          ELSE
                          IF (clk’EVENT) AND (clk = ‘1’) AND
                          (clk’LAST_VALUE = ‘0’) THEN
                          IF (count = 65535) THEN
                          count := 0;
                          ELSE
                          count := count + 1;
                          END IF;
                          END IF;
                          END IF;
                          data_out <= count;
                          END PROCESS;
                          END count_64k;
                          CONFIGURATION small_count OF counter IS
                          FOR count_255
                          END FOR;
                          END small_count;
                          CONFIGURATION big_count OF counter IS
                          FOR count_64k
                          END FOR;
                          END big_count;
                          Đây là giải thích của perry nhưng tui chưa hiểu:

                          This example shows how two different architectures for a counter
                          entity can be configured using two default configurations. The entity for the
                          counter does not specify any bit width for the data to be loaded into
                          the counter or data from the counter. The data type for the input and output
                          data is INTEGER.With a data type of integer, multiple types of counters can
                          be supported up to the integer representation limit of the host computer
                          for the VHDL simulator.
                          The two architectures of entity counter specify two different-sized
                          counters that can be used for the entity. The first architecture, count_255,
                          specifies an 8-bit counter. The second architecture, count_64k, specifies a 16-bit counter. The architectures specify a synchronous counter with a
                          synchronous load and clear. All operations for the device occur with respect
                          to the clock.


                          Khi chạy đoạn code trên trong ISE nó không tổng hợp được, nó báo lỗi là :
                          ERROR:Cpld:868 - Cannot fit the design into any of the specified devices with
                          Có phải configuration là chỉ để mô phỏng thôi phải không mấy bác ?
                          Bác có thể giải thích giúp tui vai trò của configuration nói chung và của configuration trong đoạn code này với ?
                          Last edited by thavali; 26-05-2007, 18:12.

                          Comment


                          • #43
                            Đây là đoạn code về dịch trái bit (ảnh), Tui không hiểu từ khóa OTHERS ở dòng 17, bác nào biết có thể giải thích giúp về tác dụng của OTHERS ở dòng này.
                            Câu đầy đủ là:
                            VARIABLE copy: STD_LOGIC_VECTOR(size-1 DOWNTO 0)
                            := (OTHERS => arg1(arg1'RIGHT));

                            code lấy từ: Circuit Design With VHDL - Volnei A. Pedroni - © MIT 2004
                            Attached Files

                            Comment


                            • #44
                              Xin hỏi Tiếp là mấy bác có biết dòng coolrunner-II ( con XC2C256 ) hoạt động ở tần số tối đa là bao nhiêu không ? Trong datasheet nó ghi tới 250 MHz , nhưng tui không tin tưởng lắm. ( ảnh )
                              Code:
                              Features
                              • Optimized for 1.8V systems
                              - As fast as 5.7 ns pin-to-pin delays
                              - As low as 13 μA quiescent current
                              • Industry’s best 0.18 micron CMOS CPLD
                              - Optimized architecture for effective logic synthesis.
                              Refer to the CoolRunner™-II family data sheet for
                              architecture description.
                              - Multi-voltage I/O operation — 1.5V to 3.3V
                              • Available in multiple package options
                              - 100-pin VQFP with 80 user I/O
                              - 144-pin TQFP with 118 user I/O
                              - 132-ball CP (0.5mm) BGA with 106 user I/O
                              - 208-pin PQFP with 173 user I/O
                              - 256-ball FT (1.0mm) BGA with 184 user I/O
                              - Pb-free available for all packages
                              As fast as 5.7 ns pin-to-pin delays : nếu theo As fast as 5.7 ns pin-to-pin delays thì tần số phải khoảng chừng 150 MHz, hổng lẻ cao thể sao nhỉ, vi điều khiển thì chừng vài chục MHz là cùng, mà sao thằng này cao thế làm tui nghi nghi...
                              Attached Files

                              Comment


                              • #45
                                Nguyên văn bởi thavali Xem bài viết
                                VARIABLE copy: STD_LOGIC_VECTOR(size-1 DOWNTO 0)
                                := (OTHERS => arg1(arg1'RIGHT));
                                Nó giống với cái này nè:
                                VARIABLE copy: STD_LOGIC_VECTOR(size-1 DOWNTO 0)
                                := (OTHERS => '0'); <===> copy := "000000000...0" (size số 0)

                                Nghĩa là tất cả các bit của copy đều được gán bằng giá trị của arg1'RIGHT.


                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X