【数字逻辑 | 组合电路基础】Verilog语法

341 阅读4分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

  👉引言💎

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。 热爱写作,愿意让自己成为更好的人...... ......

铭记于心
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉

一、FPGA的一般设计流程

1.电路设计

根据需求指定电路设计方案

  • 比如设计一个时序电路,需要明确系统功能,决定采用同步还是异步,数据通路和控制电路如何设计,需要几个触发器,电路状态如何转换...

  • 通常,电路设计细化到寄存器传输级(RTL)即可,无需精确到门级

2.代码编写

  • HDL电路描述语言,可层次化,通用性强

3.功能仿真

4.综合实现

  • 完成HDL代码(较高层次电路描述)到真实芯片电路的转换过程,类似于编译器将高级语言转换为目标机器的二进制代码的过程。
  • 综合阶段:

    • 网表生成:检查代码语法,给出错误报告。将代码编译为由基本逻辑单元连接而成的逻辑网表。

    • 门级优化:将用户的设计自动转换成一个等价或更优电路;

    • 工艺映射:决定网表中的每一个元件如何在FPGA的可用资源中实现

    • 实现阶段:将综合出的网表映射为FPGA芯片内部固有的硬件逻辑模块上(称为布局),然后基于布局的拓扑,利用内部的连线资源,将逻辑模块连接起来(称为布线)。

    • 时序分析:计算所有模块和走线延迟,产生一系列表格以量化电路性能。并用来确定生成电路是否满足时序要求。若无异常,将生成一个bitstream比特流文件,该文件即为最终电路。

5.上板调试

  • 将综合实现生成的比特流文件下载到FPGA芯片中,运行电路,观察其工作是否正常,若有问题,要调试定位出错的原因

二、Verilog基本语法

  • 基本语法

    • 门电路

      在这里插入图片描述

    • assign

    • always

      各个always块并行执行,always块可以产生各种逻辑,电平触发的always块常用来描述组合逻辑行为;沿触发的always块常用于时序逻辑的功能描述。通过综合工具自动将其转换为相应的逻辑结构

      在这里插入图片描述

    • Wire与reg数据类型的区别

    • 模块调用方法

      • 位置关联法

      • 名称关联法 在这里插入图片描述 在这里插入图片描述

三、注意事项及设计流程

  • 实验板使用注意事项

    • 插拔USB数据线前,最好电源开关处于off状态。

    • Micro USB避免插反,应该是带勾的平头朝上,如果发现很难插拔,需要检查是否插反。(损坏概率最高)

    • 尽量避免湿手、带静电的手接触电路板及外设接口部分。

    • 用外设的时候注意电平,应该是3.3V兼容5V输入,避免高电压接入。

    • 注意安装Vivado和工程目录不要出现中文,也不要使得工程所在目录太深。

    • 电脑的用户名不要设置为中文,会出现各种诡异的问题。

  • 主要设计流程以及注意事项

    • 设计流程

      • .V输入(add Sources)->综合(Run synthesis)->添加约束文件->添加仿真文件->功能仿真->运行实现过程(Run implementation)->生成bit流(Generate Bitstream)->Auto connect target ->Program Divice

      • 区分仿真和综合:功能仿真不是必须,但却非常必要;一定要学会通过看仿真时序来验证电路功能的正确性。 习惯查看综合后的设计,如RTL Schematic,熟悉“什么样的代码会综合成什么样的电路”,有助于编程技能提升。

      • 生成bit流后,再接入电路板

    • 关于Testbench代码(测试文件代码):

      结构

      module testbench;// 通常testbench没有输入与输出端口
          信号或变量定义声明;
          使用initial或always语句来产生激励波形;
          例化设计模块;
          监控和比较输出响应;
      endmodule
      

🌹写在最后💖: 路漫漫其修远兮,吾将上下而求索!伙伴们,再见!🌹🌹🌹在这里插入图片描述