VHDL: OR-ing các bit của một vectơ với nhau


11

Tôi muốn HOẶC các bit của một vectơ với nhau. Vì vậy, nói rằng tôi có một vectơ được gọi example(23 downto 0)và tôi muốn HOẶC tất cả các bit vào một vectơ khác, có cách nào để làm điều này không liên quan đến việc đi example(0) or example(1) or ...example(23)không?


Thay vào đó, bạn có thể so sánh với số không? Điều đó sẽ có tác dụng tương tự.
David

Để mở rộng nhận xét của David (sử dụng vectơ 32 bit): or_result <= '0' when input=X"00000000" else '1';Thay đổi số không để phù hợp với độ dài của vectơ trong câu hỏi.

Giảm logic có sẵn trong vhdl 2008, xem stackoverflow.com/questions/20296276/NH
Moberg

Ngoài ra, bạn có thể sử dụng cách tổng quát hơn:result <= '0' when (example=(example'range=>'0')) else '1';
Miguel Risco

Câu trả lời:


12

or_reducelà những gì bạn muốn, và nó có sẵn trong std_logic_misc. Được hỗ trợ bởi cả A và X cho các GPU.


and_reducelà một trong những hữu ích khác.
Aaron D. Marasco

5

Verilog có một "toán tử |example[23:0]rút gọn " tiện lợi, thực hiện chính xác những gì bạn đang yêu cầu: đưa ra kết quả HOẶC tất cả các bit của examplevectơ.

Thật không may, VHDL không có toán tử này. Theo Câu hỏi thường gặp comp.lang.vhdl , mặc dù

Không có toán tử VHDL được xác định trước để thực hiện thao tác khử trên tất cả các bit của vectơ (ví dụ: "hoặc" tất cả các bit của vectơ). Tuy nhiên, các toán tử giảm có thể được thực hiện dễ dàng:

[bỏ qua một ví dụ không xử lý các giá trị 'X' và 'Z']

    function or_reduce( V: std_logic_vector )
                return std_ulogic is
      variable result: std_ulogic;
    begin
      for i in V'range loop
        if i = V'left then
          result := V(i);
        else
          result := result OR V(i);
        end if;
        exit when result = '1';
      end loop;
      return result;
    end or_reduce;
    ...
    b <= or_reduce( b_vec ); 

Ai xuống cấp, quan tâm giải thích tại sao?
Photon

Đây có phải là tổng hợp?
Julian Schaub - litb

@ JohannesSchaub-litb, tất nhiên, nó có thể được tổng hợp thành một cổng OR thực sự lớn (hoặc một cây của những cái nhỏ hơn). Có thể phiên bản trong thư viện tiêu chuẩn (theo câu trả lời của Aaron D. Marasco) sẽ được tối ưu hóa tốt hơn so với thứ được tạo ra khi đang bay.
Photon

VHDL-2008 không có toán tử giảm đơn nguyên. Câu hỏi thường gặp đã lỗi thời. Hơn nữa, chức năng được trình bày có khả năng tổng hợp đáng ngờ vì thoát sớm mà một số công cụ có thể bị nghẹt và không cần thiết ngoài việc tối ưu hóa vi mô cho mô phỏng.
KevinThibedeau
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.