?? adc0809.txt
字號(hào):
♂Denzel≯:基于FPGA的ADC0809采樣 - 新浪BLOG 管理博客 ┆ 搜索 ┆ 幫助
文章背景 雪白 淡藍(lán) 藍(lán)色 淡灰 深灰 暗灰 淡綠 明黃 黑 綠 暗紅 深藍(lán) 鴨綠 靛青
褐色 A 宋體 黑體 楷體 仿宋 隸書(shū) 幼圓 二號(hào) 三號(hào) 四號(hào) 小四 五號(hào) 小五 >
鼠標(biāo)雙擊滾屏 10 09 08 07 06 05 04 03 02 01 (1最快,10最慢) 轉(zhuǎn)為繁體 基于FPGA的ADC0809采樣
作者:♂Denzel≯ 2006-11-12 00:15:33
標(biāo)簽:
當(dāng)時(shí)參加電子設(shè)計(jì)大賽前訓(xùn)練時(shí)做的小東西,發(fā)出來(lái)分享下
由FPGA芯片EP1K30TC144-3和ADC0809及VHDL語(yǔ)言實(shí)現(xiàn)的AD轉(zhuǎn)換:
主體設(shè)計(jì)圖如下:
如上圖本AD轉(zhuǎn)換主要由分頻器和ADC0809模塊實(shí)現(xiàn)
ADC0809模塊程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ADC0809 IS
PORT ( D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
CLK,EOC : IN STD_LOGIC;
LOCK1,ALE,START,OE,A0,A1,A2 : OUT STD_LOGIC;
QOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );
END ADC0809;
ARCHITECTURE behav OF ADC0809 IS
TYPE states IS (st0,st1,st2,st3,st4);
SIGNAL current_state , next_state: states :=st0 ;
SIGNAL REGL : STD_LOGIC_VECTOR(7 DOWNTO 0);
SIGNAL LOCK : STD_LOGIC;
BEGIN
A0 <= '0';A1 <='0';A2<='0'; LOCK1 <=LOCK; QOUT<=REGL;
COM1: PROCESS(current_state,EOC)
BEGIN
CASE current_state IS
WHEN st0 => next_state <= st1;
WHEN st1 => next_state <= st2;
WHEN st2 => IF (EOC='1') THEN next_state <= st3;
ELSE next_state <= st2;
END IF;
WHEN st3 => next_state <= st4;
WHEN st4 => next_state <= st0;
WHEN OTHERS => next_state <= st0;
END CASE ;
END PROCESS COM1 ;
COM2: PROCESS(current_state)
BEGIN
CASE current_state IS
WHEN st0 => ALE<='0';START<='0';OE<='0';LOCK<='0';
WHEN st1 => ALE<='1';START<='1';OE<='0';LOCK<='0';
WHEN st2 => ALE<='0';START<='0';OE<='0';LOCK<='0';
WHEN st3 => ALE<='0';START<='0';OE<='1';LOCK<='0';
WHEN st4 => ALE<='0';START<='0';OE<='1';LOCK<='1';
WHEN OTHERS => ALE<='0';START<='0';LOCK<='0';
END CASE;
END PROCESS COM2;
PROCESS (CLK)
BEGIN
IF (CLK'EVENT AND CLK='1') THEN
current_state <= next_state;
END IF;
END PROCESS;
PROCESS (LOCK)
BEGIN
IF LOCK='1' AND LOCK'EVENT THEN REGL <=D;
END IF;
END PROCESS;
END behav
軟件分頻器模塊程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
?/P>
ENTITY clkdiv8 IS
PORT( clk : IN STD_LOGIC;
clk_div8 : OUT STD_LOGIC);
END clkdiv8;
ARCHITECTURE one OF clkdiv8 IS
SIGNAL count : STD_LOGIC_VECTOR(6 DOWNTO 0);
BEGIN
PROCESS(clk)
BEGIN
IF (clk'event AND clk='1' ) THEN
IF(count= "1111111" ) THEN
count <= (OTHERS =>'0' );
ELSE
count <= count +1;
END IF ;
END IF ;
END PROCESS;
clk_div8 <= count(6);
END one;
仿真圖如下:
以上設(shè)計(jì)我已用硬件實(shí)現(xiàn)過(guò),在秒向分進(jìn)位和分向時(shí)進(jìn)位及23時(shí)置0時(shí)有毛刺,分別會(huì)顯示“60秒”1秒鐘,“60分”1秒鐘,“24時(shí)”1秒鐘。
本文僅為提供更多信息,不代表新浪BLOG同意其觀點(diǎn)或描述。如需轉(zhuǎn)載請(qǐng)注明出處。
關(guān)閉閱讀模式
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -