【基础知识】~ 硬核/软核/固核、PWM/SPWM、斐波那契数列、大端模式存储、傅里叶变换、奈奎斯特采样定律、芯片选型、基尔霍夫定律、FIR/IIR 滤波器

1. 硬核/软核/固核

硬核 (Hard IP Core) :硬核在 EDA 设计领域指经过验证的设计版图;具体在 FPGA 设计中指布局和工艺固定、经过前端和后端验证的设计,设计人员不能对其修改。不能修改的原因有两个:首先是系统设计对各个模块的时序要求很严格,不允许打乱已有的物理版图;其次是保护知识产权的要求,不允许设计人员对其有任何改动。IP 硬核的不许修改特点使其复用有一定的困难,因此只能用于某些特定应用,使用范围较窄。

软核(Soft IP Core) : 软核在 EDA 设计领域指的是综合之前的寄存器传输级(RTL) 模型;具体在 FPGA 设计中指的是对电路的硬件语言描述,包括逻辑描述、网表和帮助文档等。软核只经过功能仿真,需要经过综合以及布局布线才能使用。其优点是灵活性高、可移植性强,允许用户自配置;缺点是对模块的预测性较低,在后续设计中存在发生错误的可能性,有一定的设计风险。软核是 IP 核应用最广泛的形式。

固核(Firm IP Core) :固核在 EDA 设计领域指的是带有平面规划信息的网表;具体在 FPGA 设计中可以看做带有布局规划的软核,通常以 RTL 代码和对应具体工艺网表的混合形式提供。将 RTL 描述结合具体标准单元库进行综合优化设计,形成门级网表,再通过布局布线工具即可使用。和软核相比,固核的设计灵活性稍差,但在可靠性上有较大提高。 目前,固核也是 IP 核的主流形式之一。

2. PWM/SPWM

PWM,英文名 Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是 50%.

SPWM,英文名 Sinusoidal PWM,脉冲宽度按正弦规律变化而和正弦波等效的 PWM 波形。

3. 大端模式存储

3.1 概述

大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;

所谓小端模式(Little-endian), 是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内在的低地址中,这种存储模式将地址的高低和数据位 权有效结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致;

3.2 为什么有大小端之分?

因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在 C 语言中除了 8bit 的 char 之外,还有 16bit 的 short 型,32bit 的 long 型(要看具体的编译器),另外,对于位数大于 8 位的处理器,例如 16 位或者 32 位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。我们常用的 X86 结构是小端模式,而 KEIL C51 则为大端模式。很多的 ARM,DSP 都为小端模式。有些 ARM 处理器还可以由硬件来选择是大端模式还是小端模式。

3.3 代码实现(C语言)

3.3.1 方法一:char类型指针实现

实现思路:(这里我们一个32位的数据为例)

使用char指针,读取一段内存中的当前字节(8比特)数据,和下一个字节数据,由于读取内存时,都是从低地址往高地址读取数据。所以读取到的第一个字节数据是低地址的,第二个数据是高地址的。

通过比较这两个数据,就能判断是大端小端。

代码实现:

#include<stdio.h>
#include <stdbool.h>

int main(void)
{
    // printf("%d\n",sizeof(1==1));
    short i = 0x1122;
    char* a = (char *)(&i);
    printf("%p\n",a);//低地址
    printf("%x\n",*a);//22,低位
 
    printf("%p\n",(a+1));//高地址
    printf("%x\n",*(a+1));//11,高位
    //说明是小端
  
    return 0;
}

3.3.2 方法二:联合体实现

可以参考这篇文章,传送门

实现思路:

类比于方法一。

代码实现:

#include<stdio.h>
#include <stdbool.h>
union Utest
{
    short num;
    char c;
};
int main(void)
{
    union Utest u;
    u.num = 0x5566;
    printf("%x\n",u.c);//66,66是低位,读取内存时,是从低地址到高地址,低地址中存储的是低位,因此是小端
    return 0;
}

4. 斐波那契数列

斐波那契数列指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
这个数列从第 3 项开始,每一项都等于前两项之和。

5. 傅里叶变换

傅立叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。在不同的研究领域,傅立叶变换具有多种不同的变体形式,如连续傅立叶变换和离散傅立叶变换。

6. 奈奎斯特采样定律

奈奎斯特抽样定理指若频带宽度有限的,要从抽样信号中无失真地恢复原信号,抽样频率应大于 2 倍信号最高频率。

抽样频率小于 2 倍频谱最高频率时,信号的频谱有混叠。
抽样频率大于 2 倍频谱最高频率时,信号的频谱无混叠。

7. 基尔霍夫定律

基尔霍夫定律包括电流定律和电压定律:

电流定律:在集总电路中,在任一瞬时,流向某一结点的电流之和恒等于由该结点流出的电流之和。

电压定律:在集总电路中,在任一瞬间,沿电路中的任一回路绕行一周,在该回路上电动势之和恒等于各电阻上的电压降之和。

8. 芯片选型

首先当然是基本功能。功能得满足你的需求。
其次需要考虑性能,例如信噪比、带宽、传输速度、存储容量、工作电压、静态电流损耗等等,取决于你芯片的功能。当然在考虑性能的同时还需要兼顾成本。
此外,还需要考虑到芯片的封装形式、工作温度范围、ESD 防护等级、是否无铅等等因素。
接下来从生产工艺的角度问一问“这种芯片好焊吗?”例如在工艺水平较低的加工厂是无法焊接/检验 BGA 系封装元件的。
接下来从供应链管理的角度问一问“这种芯片好买吗?有稳定可靠的来源渠道吗?”如果千辛万苦选定了一款芯片、却发现走遍世界都买不到货,那就白搭了。

9. FIR/IIR 滤波器

9.1 概述

FIR(有限冲激响应)滤波器:非递归(没有反馈通道),具有线性相位。
IIR(无限冲激响应)滤波器:递归结构(含反馈通道),非线性相位。

9.2 二者区别

相同阶数 FIR 和 IIR 滤波器,IIR 滤波器滤波效果较好,但会产生相位失真。FIR滤波器则性能稳定,但同样幅度指标所需阶数比 IIR 要高 5~10 倍,成本很高。在 DSP 设计中,FIR 比 IIR 需要更多的参数,也就是说需要增加更多的计算量,资源消耗更多的同时也需要更多计算时间,对 DSP 的实时性会有一定的影响。

9.3 FIR 滤波器

对 N 个采样数据进行加权和平均(卷积)处理。

其处理过程用下列式表示:
在这里插入图片描述
结构图:(图中的三角符号就是延迟的意思)
在这里插入图片描述

9.4 IIR 滤波器

包含递归部分也包含非递归部分。一个 IIR 滤波器可以看做由两个 FIR 滤波器构成。其中一个滤波器位于反馈回路中,设计 IIR 滤波器的关键就是确保递归部分的稳定。

其处理过程用下列式表示:(具有 N 个前馈系数和 M-1 个反馈系数)
在这里插入图片描述
结构图:
在这里插入图片描述
FIR 滤波器,可能是我在基于 FPGA 的数字信号处理系统需要滤波时,第一时间会想到的东西。因为它非常的方便。关于滤波器的使用,xilinx 官方提供了 FIR Compiler IP 核进行调用。传统的设计方法为,使用 matlab 的 FDATool 工具来设计滤波器,并导出抽头文件,也就是上图中的 W(0)—W(N-1)这些权值,并在 vivado 中调用 FIR IP,配置导入抽头文件。如果是使用 system generator 来设计则会更方便,在 Sysgen 中我们可以直接把 FDATool 和 FIR Compiler 进行一个关联,不需要再手动进行抽头的导出导入就可以完成 FIR 滤波器的设计。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值