数字低通:名称虽然不同 却仍是一种滤波器
[Dave坐在实验室中,凝视着充满Verilog代码的屏幕……]
T:你好Dave,现在你在做什么?!
D:噢,你好T博士,这是一个新的芯片的印刷电路板(PCB)原型,它是一个混合信号芯片。我们正在构建一个FPGA的数字部分。FPGA的Verilog代码看起来是这样的。(Dave手指着屏幕。)

图1:一个8位计数器的Verilog代码片段
T:它看起来很像一个程序,像C代码。是谁写的所有这些代码?
D:我们的一位首席工程师Warren Craddock,把这个放在一起,你是对的——虽然我不是专家,但我可以利用我以往在C语言方面经验修改别人的代码。一个很大的不同在于,软件C代码是由一个处理器执行的,而Verilog语言被编译成了硬件逻辑。他们说,Verilog是“并发的”(每个语句都是同时执行,因为每个语句都有其自己的专用逻辑),而C代码是“顺序的”(语句是顺序执行的,这是因为只有一个处理器)。
T:很有意思,但你仍然只是工作在这些位(bit)上。你不可能真正地处理这些信号,对吧?
D:这是模拟设计师一种常见的误解。的确,在大多数情况下,一个位并不能很好地代表一个模拟信号,即使你收集了进入一条总线一大堆位,它只代表一个数字。数字的数量随着位的数量急剧增加,这样8位就给了我256个选择,而12位可以给我4000个选择。
T:所以一条总线可以代表一个模拟信号,同样,A-D转换器代表了其输出端的模拟输入。时间和幅度都被量化了。
D:没错。一个8位转换器可将0至2V输入分成256个数字,并在每个时钟周期生成一个数字。现在信号是一个数字流。
T:听起来非常昂贵。你总得需要A-D和D-A转换器。
D:不一定。我们可以从模拟信号开始——但我们不是必须那样。我们可以在逻辑中内部生成信号,代表斜率、三角波、正弦波信号,等等。这些信号不一定能到达模拟世界,但我们可以用滤波器、调制器和峰值检测器将这些信号处理得像模拟信号一样。
T:时间就是一个例子。我能想到的最简单的滤波器是一个RC低通滤波器(LPF)。让我来画出电路和它的波特图。

图2:模拟RC的波特图和脉冲响应
(图字:连续时间(模拟)单极RC低通滤波器;原理图;脉冲响应(时域);波特图振幅响应(频域))
评论