verilog笔记1

  1. 阻塞赋值

阻塞赋值,顾名思义即在一个 always 块中,后面的语句会受到前语句的影响,具体来说就是在同一个always 中,一条阻塞赋值语句如果没有执行结束,那么该语句后面的语句就不能被执行,即被"阻塞"。也就是说 always 块内的语句是一种顺序关系,这里和 C语言很类似。符号"="用于阻塞的赋值(如:b = a;),阻塞赋值"="在 begin 和 end 之间的语句是顺序执行,属于串行语句。

  1. 非阻塞赋值

符号"<="用于非阻塞赋值(如:b <= a;),非阻塞赋值是由时钟节拍决定,在时钟上升到来时,执行赋值语句右边,然后将 begin-end 之间的所有赋值语句同时赋值到赋值语句的左边,注意:是 begin---end之间的所有语句,一起执行,且一个时钟只执行一次,属于并行执行语句。

  1. assign 和 always 区别

assign 语句使用时不能带时钟。

always 语句可以带时钟,也可以不带时钟。在 always 不带时钟时,逻辑功能和 assign 完全一致,都是只产生组合逻辑。

  1. 带时钟和不带时钟的 always

always 语句可以带时钟,也可以不带时钟。在 always 不带时钟时,逻辑功能和 assign 完全一致,虽然产生的信号定义还是 reg 类型,但是该语句产生的还是组合逻辑。

  1. 什么是 latch

latch 是指锁存器,是一种对脉冲电平敏感的存储单元电路。锁存器和寄存器都是基本存储单元,锁存器是电平触发的存储器,寄存器是边沿触发的存储器。两者的基本功能是一样的,都可以存储数据。锁存器是组合逻辑产生的,而寄存器是在时序电路中使用,由时钟触发产生的。

  1. 状态机

Verilog 是硬件描述语言,硬件电路是并行执行的,当需要按照流程或者步骤来完成某个功能时,代码中通常会使用很多个 if 嵌套语句来实现,这样就增加了代码的复杂度,以及降低了代码的可读性,这个时候就可以使用状态机来编写代码。状态机相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状态转换的过程就是实现逻辑功能的过程。

  1. 模块化设计

模块化设计是 FPGA 设计中一个很重要的技巧,它能够使一个大型设计的分工协作、仿真测试更加容易,代码维护或升级更加便利,当更改某个子模块时,不会影响其它模块的实现结果。进行模块化、标准化设计的最终目的就是提高设计的通用性,减少不同项目中同一功能设计和验证引入的工作量。划分模块的基本原则是子模块功能相对独立、模块内部联系尽量紧密、模块间的连接尽量简单

相关推荐
foo1st1 小时前
JDK(Ubuntu 18.04.6 LTS)安装笔记
java·笔记·ubuntu
DKPT1 小时前
常见正则表达式整理与Java使用正则表达式的例子
java·笔记·学习·面试·正则表达式
下雨的Jim1 小时前
前端速成之——Script
前端·笔记
爱码小白1 小时前
wordpress学习笔记
笔记·学习
9527华安2 小时前
国产紫光同创FPGA视频采集转SDI编码输出,基于HSSTHP高速接口,提供2套工程源码和技术支持
fpga开发·音视频·紫光同创·sdi·高速接口·hssthp
我的golang之路果然有问题2 小时前
快速上手GO的net/http包,个人学习笔记
笔记·后端·学习·http·golang·go·net
大溪地C2 小时前
HTML5 详细学习笔记
笔记·学习·html5
帅云毅3 小时前
文件上传--解析漏洞和编辑器
笔记·学习·安全·web安全·编辑器·php
S&Z34633 小时前
[FPGA基础] 原语简介篇
fpga开发
Dlrbw3 小时前
FPGA——DDS信号发生器设计
笔记·fpga开发