懒猫爱飞

VHDL周学习总结(四)---DAC0832控制

0
阅读(2442)
弄过了ADC0809当然要弄一下DAC0832了,嘻嘻,这个芯片俺印象很深,当年俺参加学习的电子大赛培训时就是用它做的一个函数发生器,呵呵,当时功能比较简单,今天俺用FPGA来控制它,嘻嘻……
        --------------------------------------------------------------------------------------------
--                         每天进步一点点,开心一大点^_^
--函数名称:DAC0832.VHD
--函数功能:用FPGA实现对DAC的简单控制,产生频率为762.9Hz的锯齿波。
--作       者:萤火虫II号
--创建日期:2010.03.24
--------------------------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity DAC0832 is
 port (clk: in std_logic;  --系统时钟,这里说一下std_logic和BIT数据类型的曲别
                                  --std_logic定义为:type std_logic is ('u','x','0','1','z','w','l','h','-');
                                  --bit的定义为:type bit is ('0','1');
    rst: in std_logic;  --复位信号
    ile: out std_logic; --数据锁存允许
    cont: out std_logic; --控制信号(WR1,WR2,CS,Xfer)
    data_out: out std_logic_vector(7 downto 0)  --波形数据输出
       );
end DAC0832;
architecture behav of DAC0832 is
 
signal q: integer range 0 to 63;          --计数值
signal data: std_logic_vector(7 downto 0); --波形数据
begin
 process(clk)
 begin
  if rst='1' then q<=0;        --高电平复位,计数值清零
  elsif clk'event and clk='1' then
   if q="63" then q<=0;      --这句是产生64分频,原理很简单,只有时钟振荡64次data才变一次
    if data="11111111" then data<="00000000";  --产生锯齿波形
    else data<=data+1;
    end if;
   else q<=q+1;
   end if;
  end if;
 end process;
 ile<='1';cont<='0';data_out<=data;     --ile锁存、cont赋值;波形数据输出;
end behav;
 
     写代码时发与自己对std_logic定义  --bit的定义为不是太了解,又临时翻了一下课本,呵呵,现在终于记住了……
哦,把俺查的DAC0832的资料也弄上来:

    还是那句口号:
    每天进步一点点,开心多一点^_^