《玩转IP core》之十六:来个批发价,多路数字中频系统设计
 
- UID
- 863084
|

《玩转IP core》之十六:来个批发价,多路数字中频系统设计
来一个简单的题目:在数字逻辑设计中,一路系统要花2百元,那么四路系统要花多少钱呢?小学数序嘛,4 × 2 = 8百元了。很好,您的确不是一个好的系统工程师,还是回去做编码吧。为什么怎样说呢,你去菜场买菜,买的多也要还还价吧?怎么设计系统就这么大方了?花的不是自己的钱,不心疼是吧?为什么总是能见到败家的孩子呢?
只要是多路设计,多多少少是有复用的余地的,相应的价格也不是一个简单的乘法的关系。
有不服气的是不是?来来来,今天不掌嘴。且听讲座后面的内容,老衲今天叫你心服口服。希望客官也别“煮熟的鸭子----嘴硬”才好。
数字中频主要分两种类型:数字上变频(DUC)和数字下变频(DDC),它们的主要功能是相反,但原理和实现的方法是十分相似。由于FIR滤波器里面讲的是下采样的例子,这里也就以数字下变频作为例子,这样匹配。
数字中频系统的结构如图所示。这个药方里面,包括乘法器、防混叠FIR滤波器和降采样模块各2枚(因为是I、Q两路信号。啥叫I、Q呢?通讯里面的术语,就是一个虚数的虚实两个部分。再具体就要讲《通讯原理》里面的知识了,不再多序。要不然,有些人越说越糊涂。),以及NCO(Numerical Controlled Oscillator,用于产生可控的正弦波和/或余弦波 :y = sin (x) 或者 y = cos (x))一颗。配方简单,价格便宜,功效奇特,据说有“精度可控(信号频率的精度可控、正余弦函数输出精度可控)、数字可调(LO频率可调节)、底噪可控(乘法器输出比特可控)无模拟器件的非线性(无I/Q不平衡、无IIP3、……)”诸多有点。实际上,讲这个东东的最大动力是:“这个是数字电路实现的,符合这个讲义的内容”。要是模拟实现的,就成了“RF讲座”了。

至于,数字中频系统里面的原理和数学推导,本着贫僧一贯的风格,就是不讲。就是有人说老衲水平不够,俺也不讲,急死了账。给张图,懂得的人自然明白,不懂得也不影响实现。

大伙儿来看看,我们在《单元篇》里面积攒的食材。乘法器在“小学二年级”里面讲解过;NCO在“独孤九剑”里面总结过;滤波器在“层层叠”里面介绍过。大家可以玩拼积木的游戏,实现数字中频系统。“教会徒弟饿死师傅”,老衲可以退休了。
且慢,这样的水平就想出师?以后别告诉别人,你是和贫僧学的,好不?老衲脸皮薄,丢不起那个人。南无,那个阿弥陀佛。
伟大领袖毛主席教导我们:“要集中兵力,各个歼灭敌人”、“与其伤其十指,不如断其一指”。所以,我们先重点研究一下NCO这个玩意。
NCO的主要结构如下图所示。控制模块进行控制时序、接收配置信息、输出转化的配置;累加器用来记录当前角度、控制角度增加以及正余弦函数发生器:根据输入角度输出对应正余弦值。

先看正余弦函数发生器如何做。(等等,不是有“独孤九剑”的CORDIC吗?唉,您听了这么久我的书了,还不领会核心思想啊。天下没有普遍适用的药方,要依据系统要求,自己选择合适的结构。)
一起来,首先需要好好总结这个系统里面的正余弦信号的特点:时钟频率高,但是建立时间无要求;中频频率一旦配置,则步长固定;函数需要精度可控,精度要求较高。
再想想非线性函数的求值方法:折线法(见图)、查找表法(见图),当然还有CORDIC。下表是这几种方法的一个性能上的比较。


方法
| 建立时间
| 优点
| 缺点
| 折线法
| 快
| 实现简单
速度快
面积小
| 结果精度低
很难提高精度
| 查找表法
| 慢(RAM读时间)
| 实现简单
面积小
精度可控
| 速度低
需片内大量RAM
| DORDIC
| 慢(旋转次数)
| 精度可控
面积小
| 速度低
需片内小量RAM
实现较复杂
|
考虑系统对于信号的要求,可以有这个结论:采用查找表发或者流水线的CORDIC实现正余弦函数发生器模块。实际上,无论是查找表还是CORDIC,都还是有点小技巧在里面的。和本讲内容关系不大,就不多说了。
对于其他部分,倒是没有什么花招,也略去不讲,没人反对吧?单路的数字中频系统基本成型了,这是万里长征的第一步。
现在,大伙来看看如何把这个系统搞出个“批发价”来。连菜市场大妈都会的东西,我们不搞说不过去的。不会搞批发的采购,不是好系统架构师。
先来以8路共用系统为例,瞅瞅乘法器和NCO的复用可能。设计中,各个部分是否复用见下表。实际上,累加器也可以有办法复用的。但是,由于累加器本身就很简单,即使复用也节约不了多少面积。而复用化本身会带来设计的难度,并且会增加出错的可能性。因此,对于累加器的复用可能是得不偿失的。果断放弃累加器的复用企图。再重复贫僧的名言:“工程设计不是用来炫耀技巧的”。
可复用
| 不适合复用
| 正余弦函数产生器
乘法器
| 累加器
|
8路复用的整体系统的结构如下图。8个累加器分别记录8个通道的相位;时序控制与选择器1确定当前时刻处理哪个通道的数据;时序控制与选择器2确定数据输出给哪个通道。按照时钟0-7的顺序,两个选择器分别选择处理通道0-7的数据。系统里面只存在一套“正余弦函数产生器”和“乘法器”,而不是简单并行的的八套。如此,节约了大量的面积。
当然,实际系统中还有涉及到时延的很多处理,使得通道的对应不至于错位。这些是细节,这里不详细描述。

下来,我们来拆迁改建滤波器和降采样部分。旧房改造,利国利民。在《单元篇》里面的“层层叠”里面,老衲已经介绍了单路的FIR滤波器与降采样模块的混合设计了。估计会有看了那个的“高手”会问:为什么没有说多采样滤波器组,据说这个性能很好,而且价格便宜的。现在正式答复一下:人无远虑,必有近忧。那是留后手,为这这一讲准备呢。
再多啰嗦依据:多采样滤波器组的适用场合是数据流速特别快的场景,按照数据速率以及无法完成滤波了,所以采用多流,分别采样降低速率。不多说,又有怨言了,抱怨我不懂是棒槌。但是,不在这里讲《多采样率信号处理》。
同样考察可复用和不适合复用的部分,如下表。延时链是用于存储输入数据的,自然是不好复用。降采样单元结构简单,复用划算。
可复用
| 不适合复用
| 加法器
乘法器
| 延时链
降采样单元
|
8路4倍降采样的滤波器与降采样部分如下图,基本就是运算单元倍8路复用了,增加的选择器组和选择器用来控制运算部分的输出与输出数据来自那一路的选择。

通过上面两个部分的复用,我们用来大约双倍的代价处理了八通道的事情,平均每一路的价格被降低了不少。但是,有利必有弊,这样的设计难度会增加很多,需要更多的经验和更加的细心。到底用不用,您老是设计师,您说了算。
一般而言,各种运算部分比较适合被复用,而其他逻辑部分则不是非常适合。这一方面和这两种单元的面积有关。面积太小的单元可能复用消耗的逻辑,比多次复制的逻辑还多的。另一方面呢,运算单元一般是流水线的结构,一个结果只依赖于一个/组数据,时序相对容易控制。
这正是:“系统并非搭积木,高屋建瓴心有数。运算单元巧复用,数据选择成多路。算法单元别拘束,架构本为高远瞩。敲碎糅合寻常事,成本难度要做主。”
这个讲座快结束了,还真的有点舍不得大家啊。下一讲,也就是讲座正式内容的最后一讲了,贫僧给大家介绍同样一个计算,由于系统需求不同而采用完全不同结构的例子。预告一下下,大家下周最后赞助老衲一个人场。
--------
《玩转IP core》之一:我们的目标是ASIC
摘要:具体到一个产品里面,到底是采用FPGA还是ASIC,这个问题是多方面确定的。简单说,如果产品出货量小、时间紧、生命周期短,那么FPGA比较适合;反之就建议ASIC。但是,也不是完全绝对的,就像很难说少林和武当那个更牛一样。
《玩转IP core》之二:所见非所得
摘要:Verilog语言是由Gateway设计自动化公司的工程师于1983年末创立的;VHDL语言诞生于1983年,1987年被美国国防部和IEEE确定为标准的硬件描述语言。这个古人也“古”不到哪里去。上板砖!
《玩转IP core》之三::统一行动听指挥
摘 要:现在我们正沿着PCB数据大道,走向芯片大厦----就是大家眼前的巨大的、银色的大厦。我是本次旅行的导游,敝姓十,大叫可以叫我十导。路途之中, 为了大家不感到无聊,本人先给大家略略介绍一下,什么是数字电路的时钟。数字电路中,时钟是整个电路最重要、最特殊的信号。
《玩转IP core》之四:踏雪寻熊---面积与速度的协调
摘 要:具体到我们的FPGA/ASIC设计,这个“鱼”就是面积,而“熊掌”时钟频率(速度)。能不能很好的协调面积与速度的关系,是衡量一个数字逻辑设计 工程师能力的一个重要标准。在本讲座的第二篇里面,会说明各种单元模块的不同面积和速度的基本解构;在第三篇中,则会通过例子,介绍如何在系统中很好综合 考虑两者的关系,选择比较合适的实现解构。
《玩转IP core》之五:测试向量生成
摘要:在不考虑电源输入的前提下,在我们系统/板子上,能够不依靠其他外界输入而产生输出信号的器件有木有呢?当然有,而且必须有,那就是大名鼎鼎的晶振了,用来产生我们说过的、对以系统极端重要的系统时钟信号。
《玩转IP core》之六:程咬金的三板斧--系统基本结构
摘要:今天我们开始进入本讲座的第二部分:单元篇。大家将会发现,我们在基本单元设计里面,也就是三板斧:查找表、时分复用和流水线。但是,我们比程大将军稍稍高一点,我们会把这三招糅合,能产生变招。
《玩转IP core》之七:一个计数器引起的思考
摘 要:设问句:在进行一个计数器单元设计之前,我们需要什么前提条件呢?首先,需要功能描述(一个计数器嘛,不就是在不是复位“RST”的状态,每来一个时 钟内部/输出加一吗?还描述什么啊?磨洋工吧?----“非也,非也”,这个还是要描述一下。至少我们需要知道一下计数器的内部位数吧?也就是,计数器加 到多大回到0。)另外,就象我们在前面“菜谱”那一讲里面说过的,需要了解系统需要的时钟频率。
《玩转IP core》之八:小学一年级水平,加法器的结构
摘要:工程设计里面有一个原则:从简单做起。这里面还有一个小故事,今天就不讲了。现在,我们先瞧瞧最简单的一个比特位宽的加法器:半/全加器。全加器的输入为三个一比特的信号a0、a1,还有低位的进位c0;输出也是两个一比特的信号:结果s和进位位c1。
《玩转IP core》之九:小学二年级水平,乘法器的结构
摘 要:大伙儿已经通过两次讲座,了解了计数器和加法器大体结构。大家不难发 现,同样的一种功能,可能由于需要、工作频率和代价的不同要求,存在若干种不同的结 构。这些结构如何选择,实际上是一个艰难的选择。这些选择,很多时候都是靠一个工程师的经验(我们老年人也就靠这个混口饭吃了。要不就被“长江后浪推前 浪,前浪死在沙滩上”了)。
《玩转IP core》之十:除法器的结构
摘 要:如果各位在加法器和乘法器里面可以欣赏到了变化多端的话,那么在下不得不很遗憾的通知诸位:除法器里面大家只能看到“自古华山一条路”。不是 我保守,是除法这个东西的本性。用《数学分析》里的说法,加法和乘法都是线性运算满足交换律的,除法是非线性运算不满足交换律的。这是数学上的根子,可以 用来唬人。
《玩转IP core》之十一:非线性求值的孤独九剑,CORDIC方法
摘要:现在来个“师夷长技以制夷”,给大家画画CORDIC的流水线(因为是小数运算,假设实数“1”为十六进制的全1,实数值就可以折算了。这是普遍的技巧,不详述。)。还有一个小技巧就是由于每步的放大作用,公式里预先收缩了一把。
《玩转IP core》之十二:电路串串香,D触发器链
摘 要:今个儿寡人给大家讲点有“理论”的:CRC校验(循环冗余校验 码,Cyclic Redundancy Check)和编码器。CRC校验的目的就是看接收的一串比特和原来发射的是不是一致,有没有接收误码。CRC在编码界的春典,就是“gCRC16(D) = [D16 + D12 + D5 + 1]”和“1 0001 0000 0001 0001”。给大家一个口诀:“延时触发串一串,遇到一字砍一段。输入牵来异或算,输出导出入口看。”
《玩转IP core》之十三:简直的层层叠,FIR滤波器的串联实现
摘要:今天我们继续信号处理的行程,给大家介绍FIR滤波的串行实现。却说“请介绍FIR滤波器和IIR滤波器的差别”,这可是一道非常典型的面试题。这道题目类似于《哈利ˑ波特》里面那个“分院帽”的作用,当然这个题目里面没有宝剑。
《玩转IP core》之十四:我的地盘我做主,锁相与分频
摘要:在 做设计的时候,谁都希望片子的输入时钟是稳定的、可靠 的,并且和我们系统的采样频率是一致的。这是最理想状态。可惜啊,希望是丰满的,现实是骨感的。很 多时候,情况并没有这么理想。这种时候,就需要我们自己调节系统时钟,达到系统工作的目的了。不是大伙儿“无知者无畏”,是不得不为啊。实际上,在很多通 讯系统中,对于系统时钟的调节都是不可避免的。
《玩转IP core》之十五:国球与其它,输入输出介绍
摘 要:我们现在正式为《第三篇:系统篇》剪彩(哗哗哗,掌声响起来,我心更明白…)。在这一部分里面,会在更高的层次上,分析设计问题。大伙儿不仅 仅能看到《单元篇》里面的各个部件的应用,而且会发现系统绝对不是单元的简单的搭积木。在整个讲座里面,“变化”是永远的主题。
《玩转IP core》之十七:看客做饭,CDMA接收机的同步
摘要:这一讲里面会介绍CDMA系统的同步部分,这不是重点。关键是,大伙儿会看到同样的算法,在终端和基站侧由于系统用户数目不同,会有不同实现。这是给大家的一个启示:不能因循守旧,要与时俱进。
《玩转IP core》之十八:磨刀不误砍柴工,程序的风格(2月19号上线)
摘要:“代 码风格和规则”这个问题,很多人看来不是十分重要。但是,我问问大伙儿几个现象,看看是否遇到过?过了三个 月,读不懂自己的程序的,有木有?看别人代 码,赶脚不如自己重写的,有木有?做C代码的,竟然能看懂你的程序的,有木有?调试的时候,感觉是老虎吃天----无从下口,有木有?如果有,以老衲的经 验,多多少少和“代码风格和规则”有些瓜葛。
------------------
如果你从事FPGA研发,或者你对IP core设计感兴趣,欢迎关注《玩转IP core》系列技术讲座,每周三加菲博士与你不见不散,如果针对本讲座有任何技术问题欢迎与加菲进行技术互动可以加入QQ群(FPGA交流圈:23294742),或者去交流区提问:《玩转IP core》交流区
|
|
|
|
|
|