好了VHDL的另一個問題。以下是我的代碼。假設我希望我的輸入存儲在內存中。並可以說我想添加其中兩個。 (不要強調它,稍後它將被替換)。這是我的代碼:vhdl ram模塊和寄存器的使用
library IEEE;
use IEEE.STD_LOGIC_1164.all;
USE ieee.numeric_std.ALL;
use work.my_package.all;
entity landmark_1 is
generic
(data_length :integer := 8;
address_length:integer:=3);
port (clk:in std_logic;
vin:in std_logic;
rst:in std_logic;
flag: in std_logic;
din: in signed(data_length -1 downto 0);
done: out std_logic
);
end landmark_1;
architecture TB_ARCHITECTURE of landmark_1 is
component ram IS
generic
(
ADDRESS_WIDTH : integer := 4;
DATA_WIDTH : integer := 8
);
port
(
clock : IN std_logic;
data : IN signed(DATA_WIDTH - 1 DOWNTO 0);
write_address : IN unsigned(ADDRESS_WIDTH - 1 DOWNTO 0);
read_address : IN unsigned(ADDRESS_WIDTH - 1 DOWNTO 0);
we : IN std_logic;
q : OUT signed(DATA_WIDTH - 1 DOWNTO 0)
);
end component;
signal inp1,inp2: matrix1_t(0 to address_length);
signal out_temp: signed(data_length-1 downto 0);
signal k:unsigned(address_length-1 downto 0);
signal i: integer range 0 to 100:=0;
begin
read1:ram generic map(ADDRESS_WIDTH=>address_length, DATA_WIDTH=>data_length) port map (clk,din,k,k,vin,out_temp);
inp1(i)<=out_temp;
process (clk)
begin
if (clk'event and clk='1') then
if (flag='1') then out_temp<=inp1(0)+inp1(1);
end if;
end if;
end process ;
end TB_ARCHITECTURE;
下面是我的問題:
- 爲什麼要使用RAM,而不是隻是做
inp(i)<=din;
。我認爲這將有助於合成器理解這是一個內存,但還有什麼?此外,我需要inp1
寄存器。如果我打算使用它們,爲什麼要使用ram作爲中間件? - 如果inp1是不必要的,我將如何在我的過程中獲取這兩個元素?我的意思是我需要像
ram(address1)+ram(address2)
這樣的東西,對吧?
下面是我的ram_code:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
ENTITY ram IS
GENERIC
(
ADDRESS_WIDTH : integer := 4;
DATA_WIDTH : integer := 8
);
PORT
(
clock : IN std_logic;
data : IN signed(DATA_WIDTH - 1 DOWNTO 0);
write_address : IN unsigned(ADDRESS_WIDTH - 1 DOWNTO 0);
read_address : IN unsigned(ADDRESS_WIDTH - 1 DOWNTO 0);
we : IN std_logic;
q : OUT signed(DATA_WIDTH - 1 DOWNTO 0)
);
END ram;
ARCHITECTURE rtl OF ram IS
TYPE RAM IS ARRAY(0 TO 2 ** ADDRESS_WIDTH - 1) OF signed(DATA_WIDTH - 1 DOWNTO 0);
SIGNAL ram_block : RAM;
BEGIN
PROCESS (clock)
BEGIN
IF (clock'event AND clock = '1') THEN
IF (we = '1') THEN
ram_block(to_integer(unsigned(write_address))) <= data;
END IF;
q <= ram_block(to_integer(unsigned(read_address)));
END IF;
END PROCESS;
END rtl;
3,可誰能告訴我爲什麼Q(輸出)以後估計一個時鐘?
編輯:總而言之,我被告知我應該使用內存,這是我的實現。問題是當我插入RAM模型時,通過更改我的inp1(i)<=din;
獲得了什麼。那麼我該如何使用它? (在使用公羊之前,我剛剛寫下了例如np1(i)+inp2(i+1)
)。
編輯2:包裝類型。
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.numeric_std.all;
package my_package is
type matrix1_t is array(integer range<>) of signed(7 downto 0);
type big_matrix is array(integer range<>) of signed(23 downto 0);
type matrix2d is array (integer range<>) of big_matrix(0 to 3);
end my_package;
請你可以編輯你的代碼,刪除被註釋掉的位,並正確縮進它。如果您希望我們幫助您,只要您儘可能簡單地閱讀您的問題,就會得到更好的答覆。 – 2012-03-28 09:45:45
好吧,我編輯了我的答案並刪除了評論 – 2012-03-28 09:58:08
我並不是說刪除評論 - 只是註釋掉的*代碼*的位! – 2012-03-28 10:25:52