我不太瞭解VHDL,我真的不明白爲什麼我的代碼不工作。我需要一個NCO,找到一個工作程序並重新編譯以適應我的需求,但是隻注意到一個 - 但每個完整週期都有一個空白週期(http://i.imgur.com/gmYXHig.jpg)。程序採用參數(在下一個採樣之間跳轉)和時鐘作爲觸發。VHDL - 循環失敗/'空'循環問題
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL; --try to use this library as much as possible.
entity sinwave_new_01 is
port (clk :in std_logic;
step :in integer range 0 to 1000;
dataout : out integer range 0 to 1024
);
end sinwave_new_01;
architecture Behavioral of sinwave_new_01 is
signal i : integer range 0 to 1999:=0;
type memory_type is array (0 to 999) of integer range 0 to 1024;
--ROM for storing the sine values generated by MATLAB.
signal sine : memory_type :=(long and boring array of 1000 samples here);
begin
process(clk)
begin
--to check the rising edge of the clock signal
if(rising_edge(clk)) then
dataout <= sine(i);
i <= i+ step;
if(i > 999) then
i <= i-1000;
end if;
end if;
end process;
end Behavioral;
我該如何擺脫那個零?它出現在每個完整週期 - 每個(1000 /步)脈衝。它不應該在那裏,它弄亂了我的PWM ... 從我所瞭解的整個塊(數據輸出變化,我增加,如果我> 999然後我< = 1000)執行時,有積極時鐘的邊緣應用在入口處......但看起來它需要一個額外的邊緣,idk,重新加載我?代碼是否按順序執行,或者在時鐘到達時是否全部測試條件? 我是不是在桌子外面,這就是爲什麼我在那個特定的脈搏中得到零?根據我的理解,如果聲明或VHDL是VHDL並且再次執行它的奇怪的sh.t,程序/應該/做到這一點。
我該如何解決這個錯誤?猜測我可以增加一個額外的時鐘滴答,每1k /步脈衝,但這是一個解決辦法,而不是真正的解決方案...感謝提前尋求幫助。
謝謝,只是測試它,現在它的工作正常:3 一直與C和UC一起工作了很長時間,我很難注意到像這樣的東西......成爲VHDL的noob也沒有幫助。 但現在它工作正常,我終於可以睡覺了:D 再次感謝 – Benji
具有諷刺意味的是,如果'i'是一個變量,這將按預期工作。 「問題」出現是因爲「我」不是一個變量... –
而它的...不是一個變量?畢竟,在FPGA上實現這兩種(變量和信號)都是某種物理信號,對吧?我認爲他們的工作原理是一樣的...有時VHDL只是在我頭上 – Benji