Nhân trong VHDL


7

Tôi đang cố gắng tạo một MACC đơn giản để hoạt động, nhưng nó làm được những điều không ngờ tới. Phép nhân không hoạt động. 00001 * 00001 xuất 00000

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

entity macc is
    Port ( clk : in  STD_LOGIC;
           rst : in  STD_LOGIC;
           en : in  STD_LOGIC;
           A : in  STD_LOGIC_VECTOR (4 downto 0);
           B : in  STD_LOGIC_VECTOR (4 downto 0);
           P : out  STD_LOGIC_VECTOR (8 downto 0));
end macc;

architecture Behavioral of macc is
    signal product : STD_LOGIC_VECTOR (8 downto 0);
    signal acc_in : STD_LOGIC_VECTOR (8 downto 0);
    signal acc_out : STD_LOGIC_VECTOR (8 downto 0);
begin

    product <= A*B;
    acc_in <= acc_out + product;

        acc: process is
        begin
        wait until rising_edge(clk);
            if (rst = '1') then
                    acc_out <= (others => '0');     
            elsif (en = '1') then
                    acc_out <=  acc_in;
            end if;
        end process acc;

    P <= acc_out;

end Behavioral;

Sai số nhân


Dạng sóng được thêm vào.
Arturs Wrapsans

Tôi không nhớ nhiều về VHDL, nhưng productnên được cập nhật không đồng bộ phải không? Trong trường hợp đó, vấn đề không phải là acc, mà là sự nhân lên thực sự ...
clabacchio

1
Vâng, đó là những gì bài viết này là về.
Arturs Wrapsans

Đúng, xin lỗi, tôi đã bối rối bởi bối cảnh ...
clabacchio

Câu trả lời:


11

Nếu bạn nhân 2 số 5 bit ( ABcả hai std_logic_vector(4 downto 0)), bạn không cần 10 bit (không phải 9) để lưu trữ ( Pnên là std_logic_vector(9 downto 0)vậy? (31 * 31 = 961: cần 10 bit)

Nhưng cũng - không sử dụng std_logic_arith/_unsigned . Sử dụng ieee.numeric_stdvà sau đó sử dụng unsignedkiểu dữ liệu.


Tôi không được phép thay đổi gói. Hơn nữa, tôi phải đáp ứng các quy ước được cung cấp để đáp ứng mã tổng hợp. Về vấn đề, độ dài vectơ đầu ra là vấn đề. Cảm ơn bạn.
Arturs Wrapsans

1
Tại sao bạn không được phép thay đổi gói? Bạn có thể ít nhất thoát khỏi std_logic_arith (giả sử bạn đang làm toán không dấu)?
Martin Thompson

1
Nếu bạn thực sự đang tổng hợp, thì bạn có thể muốn xem xét một lõi đơn giản dành riêng cho nhà cung cấp thay thế.
Aaron D. Marasco

4
@ AaronD.Maraco: hoặc chỉ cần gắn một *vài thanh ghi đường ống sau đó và để công cụ synth tìm ra nơi để đặt chúng - di động hơn nhiều.
Martin Thompson
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.