我想在VHDL中製作磚塊。 一切都很順利,但我有一個奇怪的問題。 在我看到的一段代碼中,當球到達磚的邊緣時,我在數組中的索引(y,x)處將值更改爲'0'。問題是我的數組中的所有值都變爲0,即使球沒有移動(程序啓動時球沒有移動)。所有的值在數組中改變使用vhdl
process(Ball_x1,Ball_x2,Ball_y1,Ball_y2) begin
x1 <= 280 + (x * 55); --edges of my brick
x2 <= 280 + ((x + 1) * 55);
y1 <= 108 + (y * 13);
y2 <= 108 + ((y + 1) * 13);
waardeArray := level1(y,x);
if (vcnt >= y1) and (vcnt <= y2) then
if (Ball_x1 >= x1) and (Ball_x1 <= x2) then -- edges of my ball
if waardeArray = '1' then
level1(y,x) := '0';
end if;
end if;
end if;
end process;
我的陣列的聲明是
type levels is array (0 to 3, 0 to 5) of bit;
shared variable level1 : levels := (
('1','0','0','0','0','1'),
('0','1','0','0','1','0'),
('0','0','1','1','0','0'),
('0','0','1','1','0','0')
);
接着變量用於陣列的值存儲在位置(Y,X)
shared variable waardeArray: bit;
這是使用意圖Ball_x2等,但我只是試着用我的球的一個邊緣來測試代碼。
更新
process(Ball_x1,Ball_x2,Ball_y1,Ball_y2) begin
x1 <= 280 + (x * 55); -- edges of my brick
x2 <= 280 + ((x + 1) * 55);
y1 <= 108 + (y * 13);
y2 <= 108 + ((y + 1) * 13);
if (vcnt >= y1) and (vcnt <= y2) then --vcnt is from another component where I send my data to my screen
if (Ball_x1 >= x1) and (Ball_x1 <= x2) then -- left edge of my ball
if level1(y)(x) = '1' then
level1(y)(x) <= '1'; --I do this to test if the elements with value 1 stay 1 and the 0 stay 0 ata initialization, but every element in my array change to 1.
else
level1(y)(x) <= level1(y)(x);
end if;
end if;
end if;
end process;
聲明
signal x: integer range 0 to 6 := 0; --Six is used for something else.
signal y: integer range 0 to 3 := 0;
signal x1: integer range 279 to 616;
signal x2: integer range 279 to 616;
signal y1: integer range 107 to 228;
signal y2: integer range 107 to 228;
signal color: std_logic_vector (7 downto 0) := "00000111";
type levels is array (0 to 3) of std_logic_vector (5 downto 0);
signal level1 : levels := ("101101",
"010010",
"001100",
"001100");
這是我的本意
什麼陣列正在改變;它是'waardeArray'還是'level1'?很難 挖掘更多這沒有至少聲明,所以你可能會考慮 發佈所有相關的代碼。此外,在該過程中僅使用靈敏度列表 中的第一個參數,因此最後三個以 'Ball_x2'開頭的參數可以被刪除。您可能會在回答中找到一些有用的信息 http://stackoverflow.com/a/20492018/2352082和 http://stackoverflow.com/a/20526229/2352082。 –
有了一個共享變量,它可能會在另一個進程中更新,所以也許你必須在其他地方尋找更改的地方。 –
在其他進程中,我只使用我的數組的值,我沒有改變任何東西。只有在這個過程中。 – GCallie