小學期要求做數字邏輯實驗,其中乙個要求做乙個電子鐘,我為了做出電子鐘報時的時候有不同的聲音看了許多別人的報告,但都一知半解,於是自己想了乙個很土的辦法把七個音階分出來了。這裡寫出來搞笑一下,隨便希望有大佬肯教一下真正標準的方法。
試驗台提供的有1hz、10hz、1khz、10khz、100khz的脈衝訊號。然而中音1是523hz、中音2是587hz、中音3是659hz、中音4是698hz,中音5是784hz,中音6是880hz,中音7是987hz。
於是我就想10khz是0.0001秒來乙個脈衝,523hz是1/523hz來乙個脈衝,也就大約0.0019秒來乙個脈衝,我只要對10khz來的脈衝進行計數,計數到19再歸零,也就是每19個脈衝就輸出乙個脈衝,不就是523hz,於是我就寫了如下的**:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity fenpin is
port(clk:in
std_logic;--10khz
clk1,clk2,clk3,clk4,clk5,clk6,clk7:out
std_logic);
end fenpin;
architecture artfp of fenpin is
signal count1,count2:std_logic_vector(4
downto
0);signal count3,count4,count5,count6,count7:std_logic_vector(3
downto
0);begin
process(clk)
begin
if(clk='1')then
if(count1="10011")then
count1<="00000";
clk1<='1';
else
count1<=count1+1;
clk1<='0';
endif; if(count2="10001")then
count2<="00000";
clk2<='1';
else
count2<=count2+1;
clk2<='0';
endif; if(count3="1111")then
count3<="0000";
clk3<='1';
else
count3<=count3+1;
clk3<='0';
endif; if(count4="1110")then
count4<="0000";
clk4<='1';
else
count4<=count4+1;
clk4<='0';
endif; if(count5="1100")then
count5<="0000";
clk5<='1';
else
count5<=count5+1;
clk5<='0';
endif; if(count6="1011")then
count6<="0000";
clk6<='1';
else
count6<=count6+1;
clk6<='0';
endif; if(count7="1010")then
count7<="0000";
clk7<='1';
else
count7<=count7+1;
clk7<='0';
endif;end
if;end
process;
end artfp;
自我感覺還不錯,如果有哪位大佬發現了錯誤,還請大佬幫忙指出,我也好早日修改。 vhdl 論壇 VHDL檔案格式
檔案組織形式 verilog 所有的設計都是模組化,層次化,整個設計只有乙個頂層。vhdl 所有的設計包含庫,包,實體,結構體,層次化,整個設計只有乙個頂層。庫 是vhdl存放設計檔案以及預先設定的提供給設計者一些函式或者資料型別的存放的資料夾。該資料夾是vhdl語言預先設定的,設計者不可以修改,對...
VHDL經驗點滴
一些學到的或自己總結的vhdl經驗點滴,紀錄下來,以免以後忘記了。因為有些是自己總結的,肯定有錯誤或不周之處,歡迎高手指正!內容逐步補充中。1。如何判斷乙個process綜合結果是組合邏輯還是時序邏輯?a 乙個比較簡單的辦法是看敏感訊號和條件語句的條件,如果是電平觸發的,很可能是時序邏輯 如果是邊緣...
VHDL語法回顧
打算設計乙個簡單的微程式控制cpu模型,下面是vhdl語法回顧。vhdl是由模組組成,嵌在module endmodule之間,其他語句均由 結束 module add a,b,c,sum,count 模組埠定義 input 2 0 a,b input cin output 2 0 sum outp...