《开拓者FPGA开发指南》读书笔记——Verilog HDL语法

6.1 Verilog和C的区别

VerilogC
硬件描述语言软件语言
并行执行串行执行
编译下载到FPGA后会生成电路编译下载到单片机/CPU后不会生成硬件电路

6.2 Verilog基础知识

6.2.1 Verilog的逻辑值

逻辑0低电平,电路的GND
逻辑1高电平,电路的VCC
逻辑X未知,可能是高电平也可能是低电平
逻辑Z高阻态,外部没有激励信号是一个悬空状态

6.6.2 Verilog的标识符

标识符用于定义模块名,端口名和信号名等,是字母、数字、$_(下划线)的组合,且第一个字母必须是字母或下划线。另外,标识符区分大小写。不建议大小写混合使用,普通内部信号建议全部小写,参数定义建议大写。

6.2 Verilog概述

6.2.1 Verilog简介

Verilog是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能
数字电路设计者利用Verilog语言,可以从顶层到底层描述自己的设计思想,用一系列分层的模块来表示极其复杂的数字系统,然后利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变成实际电路的模块组合,经过自动综合工具转化到门级电路网表。接下来,再用专用集成电路ASCI或FPGA自动布局布线工具,把网表转换为要实现的具体电路结构

6.2.2 Verilog的数据类型

  1. 寄存器类型(regintegerreal
    表示一个抽象的数据存储单元,只能在alwaysinitial语句中被赋值;
    其值从一个赋值到另一个赋值过程中被保存下来,如果该过程语句描述的是时序逻辑,则该寄存器变量对应为寄存器;如果描述的是组合逻辑,则该寄存器变量对应为硬件连线
    其缺省值为x
    2.线网类型(wiretri
    表示Verilog结构化元件间的物理连线,其值由驱动元件的值决定;
    如果没有驱动元件连接到线网,其缺省值为z
    3.参数类型(parameter
    实际是一个常量,要注意参数的定义是局部的,只在当前模块中有效。

6.2.3 Verilog的运算符

Verilog的乘除比较浪费组合逻辑资源,尤其是除法。一般2的指数次幂的乘除法使用移位运算来完成(左移位运算代替乘法,右移位代替除法),非2的指数次幂的乘除法一般调用现成的IP

6.3 Verilog程序框架

6.4 Verilog高级知识点

6.4.1 阻塞/非阻塞赋值

凡是在组合逻辑(如在assign语句中或always语句的敏感变量不含有时钟,即always(*))赋值的需要使用阻塞赋值;
凡是在时序逻辑(如always语句中)赋值的需要使用非阻塞赋值。

6.4.2 assign和always

assign语句使用时不带时钟;
always语句可带可不带,在不带时钟时,逻辑功能和assign完全一致,都是只产生组合逻辑。不带时钟时,虽然产生的信号还是reg类型,但是该语句还是产生组合逻辑。带时钟时,这个逻辑语句才能产生真正的寄存器;
简单的组合逻辑推荐使用assign语句,复杂推荐always语句。

6.4.3 什么是latch

latch是锁存器,是一种对脉冲电平敏感的存储单元电路。锁存器和寄存器都是基本存储单元,都可以存储数据。区别在于锁存器是组合逻辑产生的,电平触发;寄存器是在时序电路中使用,由时钟触发产生的。
latch的主要危害是会产生毛刺(glitch),这种毛刺对下一级电路是很危险的,在设计中应尽量避免latch的使用。
只有组合逻辑中,不带时钟的always语句if或者case语句不完整才会产生latch。

6.4.4 状态机

状态机,全称是有限状态机(Finite State Machine, 缩写为FSM),是一种在有限个状态之间按一定规律转换的时序电路,可以认为是组合逻辑和时序逻辑的一种组合。
根据状态机的输出是否与输入条件相关,可将状态机分为摩尔(Moore)型状态机和米勒(Mealy)型状态机。

相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页