⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad.vhd

📁 ad采样VHDL程序
💻 VHD
字号:
------------------------------------------------------------------------------------ Company: -- Engineer: -- -- Create Date:    20:04:36 11/11/2007 -- Design Name: -- Module Name:    ad - Behavioral -- Project Name: -- Target Devices: -- Tool versions: -- Description: ---- Dependencies: ---- Revision: -- Revision 0.01 - File Created-- Additional Comments: ------------------------------------------------------------------------------------library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ad is port(d:in std_logic_vector(7 downto 0);      rst,clk,eoc:in std_logic;      ale,start,oe,adda:out std_logic;      dout:out std_logic_vector(11 downto 0)); end; architecture one of ad is type state is(t0,t1,t2,t3,t4,t5,t6); signal current_state,next_state:state; signal regl:std_logic_vector(7 downto 0); signal lock0,lock1:std_logic; signal value:std_logic_vector(11 downto 0); signal cen:std_logic; signal ale0:std_logic; signal start0:std_logic; signal oe0:std_logic; begin system:block is begin adda<='1'; process(current_state,eoc) begin case current_state is     when t0=>ale0<='0';start0<='0';oe0<='0';          lock0<='0';next_state<=t1;cen<='0';     when t1=>ale0<='1';start0<='0';oe0<='0';          lock0<='0';next_state<=t2;cen<='0';     when t2=>ale0<='0';start0<='1';oe0<='0';          lock0<='0';next_state<=t3;cen<='0';     when t3=>ale0<='0';start0<='0';oe0<='0';          lock0<='0';          if eoc='1' then            next_state<=t3;          else            next_state<=t4;          end if;     when t4=>ale0<='0';start0<='0';oe0<='0';          lock0<='0';cen<='0';          if eoc='1' then            next_state<=t4;          else            next_state<=t5;          end if;                 when t5=>ale0<='0';start0<='0';oe0<='1';          lock0<='0';next_state<=t6;cen<='1';     when t6=>ale0<='0';start0<='0';oe0<='0';          lock0<='1';next_state<=t0;cen<='0'; end case; end process;  process(rst,clk) begin if rst='1' then    current_state<=t0; elsif rising_edge(clk) then      current_state<=next_state; end if; end process; process(clk) begin if rising_edge(clk) then   ale<=ale0;start<=start0;oe<=oe0;lock1<=lock0; end if; end process; process(lock1) begin if rising_edge(lock1) then   regl<=d; end if; end process; end block system; convention:block is signal v:std_logic_vector(7 downto 0); signal hb,lb:std_logic_vector(11 downto 0); signal c30,c74,c118:std_logic; signal tempa,tempb,tempc:std_logic_vector(3 downto 0); begin process(regl) begin v<=regl; case v(7 downto 4) is     when"1111"=>hb<="010010000000";     when"1110"=>hb<="010001001000";     when"1101"=>hb<="010000010110";     when"1100"=>hb<="001110000100";     when"1011"=>hb<="010010000000";     when"1010"=>hb<="001101010010";     when"1001"=>hb<="001010001000";     when"1000"=>hb<="001001010110";     when"0111"=>hb<="001000100100";     when"0110"=>hb<="000110010010";     when"0101"=>hb<="000101100000";     when"0100"=>hb<="000100101000";     when"0011"=>hb<="000010010110";     when"0010"=>hb<="000001100100";     when"0001"=>hb<="000001100010";     when others=>hb<="000000000000"; end case; case v(3 downto 0) is     when"1111"=>lb<="000000110000";     when"1110"=>lb<="000000101000";     when"1101"=>lb<="000000100110";     when"1100"=>lb<="000000100100";     when"1011"=>lb<="000000100010";     when"1010"=>lb<="000000100000";     when"1001"=>lb<="000000011000";     when"1000"=>lb<="000000010110";     when"0111"=>lb<="000000010100";     when"0110"=>lb<="000000010010";     when"0101"=>lb<="000000010000";     when"0100"=>lb<="000000001000";     when"0011"=>lb<="000000000110";     when"0010"=>lb<="000000000100";     when"0001"=>lb<="000000000010";     when others=>lb<="000000000000"; end case; end process; process(hb,lb,cen) variable temp1,temp2,temp3:std_logic_vector(3 downto 0); begin if rising_edge(cen) then    temp1:=hb(3 downto 0)+lb(3 downto 0); if temp1>"1001" then     temp1:=temp1+"0110";    temp2:=hb(7 downto 4)+lb(7 downto 4); if temp2>"1001" then     temp2:=temp2+"0110";    temp3:=hb(11 downto 8)+lb(11 downto 0); if temp3>"1001" then     temp3:=temp3+"0110"; end if;     else     temp3:=hb(11 downto 8)+lb(11 downto 0);      if temp3>"1001" then     temp3:=temp3+"0110";     end if; end if; else   temp2:=hb(7 downto 4)+lb(7 downto 4); if temp2>"1001" then     temp2:=temp2+"0110";     temp3:=hb(11 downto 8)+lb(11 downto 0);      if temp3>"1001" then     temp3:=temp3+"0110";     end if; else   temp3:=hb(11 downto 8)+lb(11 downto 0);      if temp3>"1001" then     temp3:=temp3 +"0110";     end if; end if; end if; end if; value<=temp3&temp2&temp1; end process; dout<=value; end block convention; end one; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -