原创 【转】双向数据转换器的VHDL程序设计

2010-11-26 12:47 1701 6 6 分类: FPGA/CPLD

摘 要:VHDL(超高速集成电路硬件描述语言)目前在电子设计领域得到了广泛应用。本文介绍了使用VHDL语言实现CPLD设计的方法,并以此方法在ALTERA公司的CPLD器件 EPM7128SQC100-10上实现8位到32位的双向数据转换器芯片。
关键词:VHDL,  CPLD,  数据转换器,  设计

引言

        随着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位的双向数据转换器。


1. 系统介绍


       在国家“九五”重大科学工程HIRFL-CSR(兰州重离子加速器冷却储存环)的控制系统中,存储器是嵌入式系统的重要组成部分之一。高速数据获取常用到存储器作数据缓冲存储器,其原因是微控制器及常规总线难以及时地处理现场高速输出的数据流。数据缓存器既能防止数据流中数据的丢失,又能便于采集部分与微控制器的接口。
      在HIRFL-CSR数据获取系统中,采用集成度高、读写速度快、支持突发式读写、功耗低、性价比高的同步动态随机存储器SDRAM(Synchronous Dynamic Random Access Memory)。但是,与SRAM相比,SDRAM存储器有复杂的时序要求,需要定时刷新,为此,必须设计一个SDRAM控制器。为了使微控制器的数据总线(8位)与SDRAM控制器的数据总线(32位)相匹配,利用VHDL语言实现8位到32位的双向数据转换,使整个数据获取系统能可靠正常工作。


2. 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;
           DATAIN   :out    std_logic_vector(DSIZE-1 downto 0);
           DATAOUT  :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
signal temp_datain :std_logic_vector(31 downto 0);
signal cnt2b1 :integer RANGE 0 TO 3;
signal cnt2b2 :integer RANGE 0 TO 3;


begin
p1: process(WR,CLK)
      begin
     if CLK'event AND CLK='1'  THEN
       if WR = '1' THEN
        cnt2b1<=cnt2b1+1;
       end if;
     end if;
end process;


p2:process(cnt2b1)
    begin
   if WR = '1' THEN
       case cnt2b1 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)<="11111111";
     end case;
    DATAIN(31 downto 0)<=temp_datain(31 downto 0)   ;
     end if;
 end process;


p11: process(WR,CLK)
      begin
     if CLK'event AND CLK='1'  THEN
       if WR = '0' THEN
        cnt2b2<=cnt2b2+1;
       end if;
     end if;
end process;


p12:process(cnt2b2)
    begin
   if WR = '0' THEN
       case cnt2b2 is


       when 0 => DATA(MSPDATA-1 downto 0)<=DATAOUT(DSIZE-1 downto 24);
       when 1 => DATA(MSPDATA-1 downto 0)<=DATAOUT(23 downto 16);
       when 2 => DATA(MSPDATA-1 downto 0)<=DATAOUT(15 downto 8);
       when 3 => DATA(MSPDATA-1 downto 0)<=DATAOUT(7 downto 0);
       when others => DATA(MSPDATA-1 downto 0)<="11111111";
     end case;
     end if;
 end process;


end architecture behavioral;


3. 结语
       随着集成电路技术的发展,用传统的电子设计技术方法进行芯片或系统设计已不能满足要求。CPLD芯片的使用可以有效地缩短系统的开发周期,降低系统成本。VHDL作为IEEE标准的硬件描述语言和EDA的重要组成部分,经过多年的发展、应用和完善,以其强大的系统描述能力、规范的程序设计结构、灵活的语句表达风格和多层次的仿真测试手段,受到业界的普遍认同和广泛的接受。用VHDL来开发CPLD可以大大减轻设计人员的工作强度,提高设计质量。

参考文献


[1] 范秋华.VHDL描述硬件的方法和特点[J].青岛建筑工程学院.2002,23(3):67~70.
[2]吴超英.基于CPLD/FPGA技术的数字系统设计[J].安徽工业大学. 2003,20(1):69~73.
[3]林 敏,方颖立. VHDL数字系统设计与高层次综合[M].北京:电子工业出版社,2002.
[4]朱海君,敬岚,陆军. 基于MSC1210单片机的串口通讯设计[J].微计算机信息,2004,(4):48~36.


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条