您当前的位置:五五电子网电子知识单元电路接口电路使用VHDL语言开发计算机中的接口芯片 正文
使用VHDL语言开发计算机中的接口芯片

使用VHDL语言开发计算机中的接口芯片

点击数:7163 次   录入时间:03-04 11:35:11   整理:http://www.55dianzi.com   接口电路

摘  要:讨论了 VHDL语言在 EDA中的诸多优点,结合定时/计数接口芯片的开发实例,讨论了ISP技术在电子设计自动化中的应用。同时给出了实例的具体例程和时序仿真波形。
关键词:在系统可编程;电子设计自动化;定时/计数接口芯片

1.引言
    在计算机控制系统中,经常用到可编程接口芯片完成控制系统I/O接口。这类芯片基本都是完成单一功能接口,如果控制系统比较复杂,系统设计的硬件开销较大。另外给系统的开发过程无形之中带来较大的工作量。随着在系统可编程技术 (in system programmable,ISP)及其isPLD芯片的发展,使得电子产品的实现手段发生了根本性的变化,代表了电子设计领域的发展方向:在设计方法上,从“电路设计—硬件搭试—焊接”的传统方式到“功能设计—软件模拟—下载”的电子设计自动化(EDA)模式,大大缩短了开发周期和人力物力,在器件使用上,也由分立元件、中小规模标准芯片过渡到可编程逻辑器件。采用先进的ISP技术可以快速方便地在一片PLD上开发实现某种功能的专用集成电路(ASIC),使系统达到最简,同时具有体小量轻、功耗小、速度高(逻辑硬件执行一个操作只需若干级的器件延迟)等特点,并且由于PLD芯片可重复编程使用(高达上千次),使得设计风险几乎为零。本文采用VHDL语言开发计算机中的接口芯片,由于占用PLD资源很少,完全可以嵌入到PLD中与其它系统资源共用同一个PLD。由于篇幅有限,本文只介绍8253其中的三种工作方式的实现方法。

2.开发实例
2.1 8253方式0——计完最后一个数时中断

    这种工作方式的特点是:计数器只计一遍,当计数到0时,并不恢复计数值,不开始重新计数,且输出保持为高。只有在写入另一个计数值时,OUT变低开始新的计数。在技术过程中,可由门控信号GATE控制暂停,当GATE=0时,计数暂停,当GATE变高后就接着计数。另外,在计数过程中可改变计数值,在写入新的计数值后,计数器将按新的计数值开始计数。用VHDL语言实现的仿真如图1所示。
 
 
 
VHDL语言编程实现如下:
 PROCESS (clk)
 BEGIN
  IF (clk'EVENT AND clk = '0') THEN
   IF (wr = '0') THEN
    count <= d;
   ELSIF (count = 0) THEN
    NULL;
   ELSIF (gate = '1') THEN
    count <= count - 1;
   END IF;
  END IF;

 END PROCESS;
 
 PROCESS (count)
 BEGIN
  IF (count = 0) THEN
   out0 <= '1';
  ELSE
   out0 <= '0';
  END IF;
 END PROCESS;
    其中,clk为时钟输入信号,wr与CPU的wr信号相接,d为8位的数据输入,gate为门控信号,out0位计数器的输出。以下五种工作方式的端口定义与上同,不再另行说明。
    第一个PROCESS语句的敏感信号是clk,clk下降沿有效。用以实现计数值的读入、减法计数、门控信号的实现、及当计数到零时停止计数。
    第二个PROCESS语句的敏感信号是第一个PROCESS语句中的计数值count,用count的值控制输出out0。

2.2 8253方式2——速率发生器
    这种方式中,在CPU写入计数值后,计数器将立即自动对输入时钟clk计数。在计数过程中输出out0始终保持为高,直到计数器减到1时,输出将变低,经过一个clk周期,输出恢复为高,且计数器开始重新计数。计数过程可由门控脉冲控制,当gate变低时,就暂停计数,直到gate变高时,恢复计数。在计数过程中,可以改变计数值。仿真波形如图2所示。
 
 
 
VHDL语言编程实现如下:
 PROCESS (wr)
 BEGIN
  IF (wr'EVENT AND wr = '0') THEN
   reg <= d;
  END IF;
 END PROCESS;

 PROCESS (clk)
 BEGIN
  IF (clk'EVENT AND clk = '0') THEN
   IF (wr = '0') THEN
    count <= reg;
   ELSIF (count = 1) THEN
    count <= reg;
   ELSIF (gate = '1') THEN
    count <= count - 1;
   END IF;
  END IF;
 END PROCESS;
 
 PROCESS (count)
 BEGIN
  IF (count = 1) THEN
   out0 <= '0';
  ELSE
   out0 <= '1';
  END IF;
 END PROCESS;

.2..3.  方式3——方波速率发生器
    在这种方式中,CPU写完计数值后就自动开始计数,输出保持为高;当计数到一半时,输出变为低,直到计数到0,输出又变为高,重新开始计数。仿真如图3所示。
 
 
图 3 8253方式3仿真波形
 
VHDL语言编程实现如下:
 PROCESS (wr)
 BEGIN
  IF (wr'EVENT AND wr = '0') THEN
   reg <= d(7 DOWNTO 1) & '0';
  END IF;
 END PROCESS;

 PROCESS (clk)
 BEGIN
  IF (clk'EVENT AND clk = '0') THEN
   IF (wr = '0') THEN
    count <= reg;
   ELSIF (count = 2) THEN
    count <= reg;
   ELSIF (gate = '1') THEN
    count <= count - 2;
   END IF;
  END IF;
 END PROCESS;

 PROCESS (count)
 BEGIN
  IF (count = 2) THEN
   out_tmp <= '1';
  ELSE
   out_tmp <= '0';
  END IF;
 END PROCESS;

 PROCESS (out_tmp)
 BEGIN
  if (out_tmp'EVENT AND out_tmp = '0') THEN
   out0 <= NOT out0;
  END IF;
 END PROCESS;
    在8253中,若计数值为偶数,则输出为方波;若计数值为奇数,输出的波形就不是方波。在这个程序中,我对其作了少许改动:对写入的数据不论是否偶数,都将其转化为偶数。如果写入的数据是偶数则将这个数据本身传给计数器,如果写入的数据是奇数则将其减1然后再传给计数器。这样,不论写入的计数值是奇数还是偶数,都可以保证输出波形是方波。





本文关键字:接口  开发  计算机  接口电路单元电路 - 接口电路

《使用VHDL语言开发计算机中的接口芯片》相关文章>>>