FPGA概念

AI summary
FPGA概念包括生产厂商(如Xilinx和Altera)、学习方法(如使用FPGA板卡和开发工具)、内部结构(可编程逻辑单元、I/O资源和互连线)、设计规范(命名和文件放置规范)、Verilog基本语法(I/O格式、数据类型、运算符等),以及建模方法(数据流建模、行为建模和结构化建模)。FPGA设计涉及组合逻辑和时序逻辑电路的实现,强调模块化设计和仿真测试。
Last edited time
Dec 16, 2024 03:45 PM
Last edited by
Tags
Fpga Basics
Digital Circuit Design
Verilog Syntax

FPGA概念

一:生产厂商

(1):Xilinx
开发工具:ISE14.7/Vivado 测试工具:Modelsim-SE/Questasim…
(2):Altera
开发工具:Quartus II 测试工具:Modelsim-SE/ASE/Questasim…

二:如何学习

  1. FPGA板卡(Altera EP4CE10F17C8)(EPCS16)
  1. 开发工具
  1. 开发语言
  1. 开发书籍:先修课程
      • 最基础FPGA学习书籍:数字电路
        • 信号,数制和码值,电路符号/真值表/逻辑表达式,组合/时序逻辑电路(组合:门电路/选择器/比较器/编码器/译码器/加法器/三态门… 时序:D触发器/计数器/分频器/存储器…),同步/异步电路,亚稳态/毛刺/竞争冒险…状态机/FPGA/Verilog语言…
      • 通信原理
      • 信号与系统
      • DSP
      • 图像算法

三:FPGA内部结构

典型FPGA内部一般有3个部分:可编程逻辑单元、可编程I/O资源、可编程互连线资源。
notion image
可以详见Cyclone IV.datasheet手册。
除此之外:基本还会有时钟管理单元、片内存储器资源,乘除法器资源…
notion image
EP4CE10F17C8N有2个PLL,1个PLL可以最多输出5个不同时钟,那么2个PLL可以最多输出10个不同时钟。
EP4CE10F17C8N有50多K存储器大小,一般一块存储大小M9K,可以分为几块。

四:FPGA设计规范

  1. 命名规范:采用合法字符
    1. 合法字符:字母/数字/下划线 xxxxxx_123
      非法字符:中文/中文字符… 测试文件/《》
      FPGA设计当中,文件命名和模块命名/路径名必须使用合法字符,文件夹命名时也使用合法字符同时尽可能以设计功能去命名。
  1. 文件放置规范
    1. Altera软件为准:工程文件/设计文档/功能代码/测试代码/IP核/图像处理文件…
      notion image
  1. 代码规范
    1. 以上课代码为准,以后面为标准。
      notion image
      notion image

五:Verilog基本语法

  1. I/O格式说明
    1. 输入端口:input 数据类型 [位宽-1:0] 端口1;
      输出端口:output 数据类型 [位宽-1:0] 端口2;
  1. 数据类型
    1. wire型 reg型
      wire型:当信号不指名数据类型时,默认为wire型。
      reg型:视情况而定。
      mem型:寄存器型
  1. 数据位宽
    1. 默认不写时,是1位。
      例:4位位宽 [3:0]
      一般使用的二进制编码采用8421码;4’b1111=4’d15=4’hf;
      计算位宽:计数器计数16个数。
      计数器计数范围0~15 0000~1111
      采用4位位宽即可。2^N=16 N为宽度
      例:计数12345678,所需位宽为N,N=?
      2^N=12345678 N=24
  1. 数字表示形式
      • <位宽><进制><数字> //全面表示形式
        • 4’b1111=4’d15=4’hf;
      • <进制><数字> //位宽由机器系统决定的
        • ‘b1111
      • <数字>
        • 12 //表示10进制数,不再是二进制数
  1. 整数书写规范
      • 较长的数值之间可以采用下划线进行区分
        • 16’b0011_1101_1110_0101 //在VHDL不允许的
      • 十进制数不说明位宽时,默认是32位
        • cnt=456
      • X(不定态)/Z(高阻态)
        • 确定态:0/1
          在二进制中表示1位X/Z,在16进制中表示4位X/Z。
      • 定义位宽较大时,往往高位补0
  1. 运算符
      • 条件运算符(三目运算符)
        • ? :
      • 算术运算符
        • + - * / %(求余) **(幂次方)…
      • 位运算
        • & | ~
      • 逻辑运算符
        • && || !
      • 关系运算符
        • < > >= <=…
      • 拼接符
        • {}
          1:拼接功能
          2:移位功能(循环移位)
      • 移位运算符
        • <<(左移) >>(右移)
      • 等式运算符
        • ==/!=
      • 缩减运算符
    测试:Quartus II自带仿真器(.VWF文件)
    说明:该测试只适用于简单设计。
    使用简单,不需要写测试代码(只做了解)。
    notion image
    任务安排:
    1. PPT(PLD/EDA…)
    1. 数字电路
    1. 安装开发软件(Quartus II 13.0/1)
    1. 熟悉Quartus II软件

    六:FPGA建模(建模:写代码方式)

    建模方式:数据流建模/行为建模/结构化建模

    数据流建模

    描述电路功能时以“assign”为关键字出现,只能够描述组合逻辑电路。
    组合逻辑电路:选择器/门电路/编码器/译码器/比较器/加法器/三态门…
    组合逻辑电路特性:任意时刻的输出仅仅只取决于当前时刻的输入,与电路原来的状态无关(输入发生变化,输出立刻发生变化)。
    Verilog语言语法规定:所有的组合逻辑电路赋值方式都采用阻塞赋值(=)。
    在assign描述时,赋值号左侧信号定义为wire型。
    赋值方式:阻塞赋值(=) 非阻塞赋值(<=)
    数据类型:线型(wire) 寄存器型(reg)
    举例1:组合逻辑电路(门电路:与/或/非/同或/异或门…)
    notion image
    notion image
    notion image
    notion image
    仿真测试1:VWF文件
    notion image
    仿真测试2:Modelsim测试
    1. 书写测试代码(模拟输入情况)
    1. 做设置(让软件知道咱们写的属于测试代码)
    1. 打开Modelsim软件之前,需要分析综合一次(CTRL+K)
    1. 提示(需要提前设置好Modelsim路径)
    1. RTL SIM(运行仿真工具)
    1. Modelsim界面(
        • 点击停止(STOP)
        • 去除信号路径
        • 如果是一个模块,不需要分组,如果是多个模块需要分组
        • 对所有信号进行先清除(restart),再刷新(run -all)
        • 对波形全局缩小(Zoom Full)
        • 可以设置信号进制和时间标线(方便观测)
        notion image
    举例2:组合逻辑电路(比较器/半加器/1位全加器/三态门)
    1. 比较器
      1. notion image
        a
        b
        s
        说明
        0
        0
        0
        a>b
        1
        0
        1
        0
        1
        0
        1
        1
        0
    1. 半加器
      1. notion image
    1. 三态门
      1. notion image
        en
        sda_buff
        sda
        1
        0/1
        0/1
        0
        0/1
        z
    练习:
    1. 完成上课内容(门电路:测试代码书写/Modelsim操作 比较器/半加器/三态门)。
    1. 完成编码器/译码器部分(数据流建模实现)
    练习分享:完成3-8译码器建模
    notion image

    行为建模

    以“always”为关键字,不仅可以描述组合逻辑电路,也可以描述时序逻辑电路。
    时序逻辑电路:D触发器/计数器/分频器/存储器…
    时序逻辑电路特性:任意时刻的输出不仅取决于当前时刻的输入,而且还取决于电路原来的状态(输入发生变化,输出不一定发生变化)。
    如果描述的是组合逻辑电路,括号内部为电平信号;
    Verilog规定:组合逻辑电路赋值方式为阻塞赋值(=);
    在always块中位于赋值号左侧的信号(被赋值的信号)必须定义为reg型。
    if-else和case语句:条件语句
    可以参考Verilog-HDL的基本`语法.PDF。
    如果描述的是时序逻辑电路,括号内部为时钟沿触发信号;
    Verilog规定:时序逻辑电路赋值方式为非阻塞赋值(<=);
    在always块中位于赋值号左侧的信号(被赋值的信号)必须定义为reg型。
    时钟信号:如图示
    notion image
    时钟极性:CPOL
    CPOL=0时,时钟初始值为低电平;CPOL=1时,时钟初始值为高电平。
    notion image
    时钟相位:CPHA
    CPHA=0,表示时钟第一个沿;CPHA=1,表示时钟第二个沿。
    notion image
    SPI四线制协议中:CPOL=0 CPHA=0(0模式) CPOL=1 CPHA=1(3模式)。
    时序逻辑电路举例1:D触发器(时序逻辑电路中最小单元)
    notion image
    notion image
    notion image
    F=50MHZ T=1/F=1/50MHZ=10^9/50_000_000ns=20ns(高低电平持续时间各10ns)。
    时序逻辑电路举例2:模10计数器(简单计数器逻辑功能)
    notion image
    notion image
    💡
    总结:时序逻辑电路=组合逻辑电路+D触发器(最小单元)。
    notion image
    notion image
    时序逻辑电路举例2:计数器拓展
    要求:两个计数器进行计数,第一个计数器先进行计数,时钟上升沿来时,进行加1;当第一个计数器计数10个数时,第二个计数器开始计数(第一个计数器每次计数10个时),时钟上升沿来时,进行加1,直到第二个计数器计数10个。
    notion image
    notion image
    练习:
    1. 完成3-8译码器实现(数据流建模/行为建模:3种方式)
    1. 时序逻辑电路(D触发器/计数器实现)
    1. 总结两种建模特点(都是完成电路功能的)

    结构化建模

    结构化建模也可以称为层次化设计,一般不用描述电路功能,完成各个模块间的连线。
    一般来说,有顶层模块(TOP),有子模块。
    notion image
    • 画图(.BDF/BSF文件:了解)
    • 写代码(掌握)
    举例1:3输入与门电路
    notion image
    • 画图(.BDF/BSF文件:了解)
        1. 库中存在文件(直接调用图形)
        1. 库中不存在文件(自己完成端口,生成图形,再加载在图形文件中)
    • 写代码(掌握)
      • 实现步骤:
        1. 完成顶层模块端口描述(top)
        1. 完成各个子模块端口描述(and_gate)
        1. 在顶层模块中对各个子模块进行连线(在RTL视图中看到和框图一致)
        1. 完成子模块功能描述
    举例2:16位加法器实现
    16位加法器(4个4位加法器)----->1个4位加法器(4个1位加法器)---->1位加法器(2个半加器组成的)。
    notion image
    1位全加器由两个半加器构成,结构如下图:
    notion image
    notion image
    notion image
    notion image
    仿真结果:
    notion image

    七:练习

    1. 完成上课内容(16位串行进位加法器:层次化设计)
    1. 完成下述架构
      1. notion image
    定义参数:三种方式
    练习2技巧:
    强制传参:
    1. 在调用模块中对参数进行更改
      1. notion image
    1. 在测试模块中查找参数路径对其更改
      1. notion image
    仿真结果:
    notion image
    Loading...