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

摘  要:讨论了 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然后再传给计数器。这样,不论写入的计数值是奇数还是偶数,都可以保证输出波形是方波。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值