用VHDL實現分頻,VHDL編寫分頻器

時間 2021-09-05 23:16:22

1樓:

模n計數器的實現

一般設計中用到計數器時,我們可以呼叫lpm庫中的計數器模組,也可以採用vhdl語言自己設計一個模n計數器。本設計採用vhdl語言設計一個最大模值為16的計數器。輸入埠為:

使能訊號en,復位訊號clr和時鐘訊號clk;輸出埠為:qa、qb、qc、qd。其vhdl語言描述略。

帶使能控制的異或門的實現

輸入端為:xor_en:異或使能,a和b:

異或輸入;輸出端為:c:異或輸出。

當xor_en為高電平時,c輸出a和b的異或值。當xor_en為低電平時,c輸出訊號b。其vhdl語言略。

2分頻(觸發器)的實現

輸入端為:時鐘訊號clk,輸入訊號d;輸出端為:q:輸出訊號a,q1:輸出訊號a反。其vhdl語言略。

4.分頻器的實現

本設計採用層次化的設計方法,首先設計實現分頻器電路中各組成電路元件,然後通過元件例化的方法,呼叫各元件,實現整個分頻器。其vhdl語言略。

2樓:匿名使用者

最近好多人問分頻的問題啊。50mhz到1khz,做一個25000的計數器,計數清零的時候讓輸出反向,這樣就使頻率除以50000.語句為:

process(cp)

begin

if cp'event and cp='1' then

if q="*********xx「 --25000的二進位制形式

q<="00000000" --確保q的位數相等

cp_out<=not cp_out; --cp_out就是輸出。

else

q<=q+1;

end if

end if;

把上面的******xx分別設為25000、25、4、10做成50000、50、8、20分頻的分頻器,50mhz50000分頻為1khz,1khz25分頻成20hz,20hz分別進行8、20分頻成2.5hz和1hz。

拋磚引玉,具體程式你自己就可以寫了。注意檔案開頭要寫:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

否則可能要報錯哦。

希望能採納。

vhdl編寫分頻器

3樓:匿名使用者

library ieee;

use ieee.std_logic_1164.all;

entity onemhz is

port( clkin:in std_logic; --時鐘訊號輸入

clkout:out std_logic); --時鐘訊號輸出end onemhz;

architecture aronemhz of onemhz issignal data:integer range 0 to 10;

signal q:std_logic;

begin

process(clkin)

begin

if rising_edge(clkin) thenif(data=0) then --此句為你想要的分頻比,data=0,1,2,3,4.......9的分頻比為1,2,3,,,10

data<=0;

q<=not q;

else

data<=data+1;

end if;

end if;

clkout<=q;

end process;

end onemhz;

4樓:

我試了樓上的vhdl,結果是這樣的,

data=0, 二分頻

data=1,四分頻

data=2,六分頻

data=3,八分頻

data=4,十分頻

data=5,十二分頻~~~

vhdl語言。。如何實現50mhz分頻為1hz?

5樓:墨汁諾

直接採用50分頻即可。

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity clk_div is

port(

clk : in std_logic;

clk1:out std_logic

end clk_div;

architecture mix of clk_div issignal count :integer range 0 to 49999999;

嚴格來說是從0-49999999,剛好50000000個計數值,正好將50m的時鐘分為1hz的時鐘

6樓:rs小

直接採用50分頻即可!50進位制你會寫吧,這個不用交了。。然後用50進製得到的signal與初始50mhz的訊號 and 。即可得到。。簡單實在。。

7樓:匿名使用者

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity clk_div is

port(

clk : in std_logic;

clk1:out std_logic

);end clk_div;

architecture mix of clk_div issignal count :integer range 0 to 49999999;

----嚴格來說是從0-49999999,剛好50000000個計數值,正好將50m的時鐘分為1hz的時鐘

begin

clk_div_proc:process(clk)begin

if rising_edge(clk) thenif count=49999999 thencount<=0;

else

count<=count+1;

end if;

if count>24999999 then---佔空比50%clk1<='1';

else clk1<='0';

end if;

end if;

end process clk_div_proc;

end mix;

**驗證正確。

8樓:匿名使用者

就是加一個由50mhz時鐘1控制的process 並在這個process裡申明一個累加器

然後時鐘2在這個process裡面累加器到了50m的時候改變狀態然後輸出為時鐘2

就可以了

額 算了 給你寫個程式吧 這年頭 得點分不容易啊library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_signed.all;

entity div_frequence isport(

clk_in,reset : in std_logic;

clk_out : out std_logic);end div_frequence;

architecture rtl of div_frequence is

signal local_s : std_logic;

begin

process(reset,clk_in)variable tmp : integer;

begin

if (reset = '0') thentmp := 0 ;

local_s <= '0';

elsif rising_edge(clk_in) thenif (tmp < 50000000) thentmp := tmp + 1;

else

if (local_s = '0') thenlocal_s <= '1';

else

local_s <= '0';

end if;

tmp := 0;

end if;

end if;

clk_out <= local_s;

end process;

end rtl;

用vhdl編寫一個分頻器,實現輸出1mhz-1hz之間的任意頻率

9樓:匿名使用者

clk 輸入一個相對較大的頻率,

頻率要多少就用n_diviseur除!

library ieee;

use ieee.std_logic_1164.all;

entity div is

generic( n_diviseur : integer := 2 );

port ( clk : in std_logic;

clock : out std_logic);

end entity;

architecture beha of div isbegin

process (clk)

variable compteur : integer range 0 to n_diviseur;

begin

if (clk'event and clk = '1') thenif (compteur >= n_diviseur-1) thencompteur := 0;

clock <= '1';

else

compteur := compteur + 1;

clock <= '0';

end if;

end if;

end process;

end architecture;

10樓:匿名使用者

控制分頻比可以實現你的設計,達到

步進=1hz,

clkin=32mhz;

jitter=1/16ui.

簡單原理就是你用分頻器分出m分頻和n分頻的不同比重來實現步進1hz.

VHDL編寫分頻器,用VHDL編寫分頻器程式

library ieee use ieee.std logic 1164.all entity onemhz is port clkin in std logic 時鐘訊號輸入 clkout out std logic 時鐘訊號輸出end onemhz architecture aronemhz o...

用VHDL語言編寫七段顯示譯碼器,輸入埠D輸入0 9二進位制

共陰極數碼管 library ieee use ieee.std logic 1164.all entity seven seg is port d in std logic vector 3 downto 0 4 bits latch input x out std logic vector 6 ...

用VHDL實現十進位制到二進位制的轉換

library ieee 此程式是個人所編,還未經驗證 use ieee.std logic 1164.all use ieee.std logic unsigned use ieee.std logic arith entity ss is port st in std logic shuru i...