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

  • yesme@
    replied
    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.

    Leave a comment:


  • thavali
    replied
    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

    Leave a comment:


  • thavali
    replied
    Đâ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

    Leave a comment:


  • thavali
    replied
    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.

    Leave a comment:


  • thavali
    replied
    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

    Leave a comment:


  • yesme@
    replied
    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@

    Leave a comment:


  • thavali
    replied
    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

    Leave a comment:


  • yesme@
    replied
    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.

    Leave a comment:


  • titeo
    replied
    5. Không làm như vậy được.

    Leave a comment:


  • thavali
    replied
    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.

    Leave a comment:


  • titeo
    replied
    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.

    Leave a comment:


  • thavali
    replied
    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.

    Leave a comment:


  • thavali
    replied
    @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 ?

    Leave a comment:


  • titeo
    replied
    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.

    Leave a comment:


  • TheKing
    replied
    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à.

    Leave a 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