双向数据转换器的VHDL程序设计 点击:151 | 回复:0



sinap_zhj

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 1回
  • 年度积分:0
  • 历史总积分:184
  • 注册:2014年7月31日
发表于:2014-11-12 17:14:06
楼主

随着CPLD(Complex Programmable Logic Device)、FPGA(Field Programmable Gate Arrays)等逻辑器件的逐渐兴起,ASIC(专用集成电路)技术的不断完善,EDA(电子设计自动化)技术在现代数字系统和微电子技术应用中显示出了越来越重要的作用,而现代EDA技术的重要特征是采用了硬件描述语言,即VHDL描述。VHDL(Very High Speed Integrated Circuit Hardware Description Language)即超高速集成电路硬件描述语言,是一种数字硬件系统设计和描述的国际标准语言,具有与工艺无关、支持大规模系统设计等特点。VHDL语言主要用于描述数字系统的结构、行为、功能和接口,是电子设计自动化(EDA)的关键技术之一。随着集成电路和计算机技术的飞速发展,目前数字系统的设计可以直接面向用户需求,根据系统的行为和功能要求,自上至下地逐层完成相应的描述、综合、优化、仿真和验证,直到生成器件。本文介绍了使用VHDL语言实现CPLD设计的方法,并以此方法在ALTERA公司的CPLD器件EPM7128SQC100-10上实现8位到32位的双向数据转换器芯片。在数据获取系统中,采用集成度高、读写速度快、支持突发式读写、功耗低、性价比高的同步动态随机存储器SDRAM(Synchronous Dynamic Random Access Memory)。但是,与SRAM相比,SDRAM存储器有复杂的时序要求,需要定时刷新,为此,必须设计一个SDRAM控制器。为了使微控制器的数据总线(8位)与SDRAM控制器的数据总线(32位)相匹配,利用VHDL语言实现8位到32位的双向数据转换,使整个数据获取系统能可靠正常工作。VHDL程序设计library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
entity data_convert is
   generic(
          DSIZE     :integer:=32;
          MSPDATA   :integer:=8
         );
port(
           CLK      :in     std_logic;
           DATAOUT   ut    std_logic_vector(DSIZE-1 downto 0);
           DATAIN  :in     std_logic_vector(DSIZE-1 downto 0);
           DATA     :inout     std_logic_vector(MSPDATA-1 downto 0);
           WR       :in     std_logic
       );
end data_convert;
architecture behavioral of data_convert is
SUBTYPE state_type IS std_logic;
signal temp_datain :std_logic_vector(31 downto 0);
signal state:state_type;
signal counter      :integer RANGE 0 TO 3;
signal cycle        :std_logic;
constant write :state_type:='1';
constant read  :state_type:='0';
begin 
   process(WR,CLK)
     begin
   if CLK'event AND CLK='1' THEN
    if WR = '1' THEN
      state <= write;
    else
      state <= read;
    end if;
        
    case state is
     when write=> 
        if(counter<=3) THEN
              counter <= counter+1;
              cycle<='0';
         case counter is
         when 0 => temp_datain(7 downto 0)   <=DATA(MSPDATA-1 downto 0);
         when 1 => temp_datain(15 downto 8)  <= DATA(MSPDATA-1 downto 0);
         when 2 => temp_datain(23 downto 16)  <= DATA(MSPDATA-1 downto 0);
         when 3 => temp_datain(31 downto 24)  <= DATA(MSPDATA-1 downto 0);
when others =>temp_datain(7 downto 0) <="00000000";
         end case;
           ELSE 
              DATAOUT<=temp_datain;
              counter <=0;
              cycle   <='1';
           end if;
   when read=>
         
          if(counter<=3) THEN
             counter <= counter+1;
             case counter is
            when 0 =>  DATA(MSPDATA-1 downto 0) <=DATAIN (DSIZE-1 downto 24);
            when 1 =>  DATA(MSPDATA-1 downto 0) <=DATAIN (23 downto 16);
            when 2 =>  DATA(MSPDATA-1 downto 0) <=DATAIN (15 downto 8);
            when 3 =>  DATA(MSPDATA-1 downto 0) <=DATAIN (7 downto 0);
            when others =>DATA(MSPDATA-1 downto 0) <="00000000";
                  end case;
           ELSE 
                   counter <=0;
              end if;
       when others=>NULL;
     end case;
   end if; 
end process;
end architecture behavioral;

;随着集成电路技术的发展,用传统的方法进行芯片或系统设计已不能满足要求。CPLD芯片的使用可以有效地缩短系统的开发周期,降低系统成本。VHDL语言描述和抽象能力强,覆盖面广,用它来开发CPLD可以大大减轻设计人员的工作强度,提高设计质量。

 



热门招聘
相关主题

官方公众号

智造工程师