FPGA学习笔记(一)

您所在的位置:网站首页 assign与always的区别 FPGA学习笔记(一)

FPGA学习笔记(一)

#FPGA学习笔记(一)| 来源: 网络整理| 查看: 265

阻塞赋值与非阻塞赋值: 在描述组合逻辑电路的时候,使用阻塞赋值,比如 assign 赋值语句和不带时钟的 always 赋值语句,这种电路结构只与输入电平的变化有关系 在描述时序逻辑的时候,使用非阻塞赋值,综合成时序逻辑的电路结构,比如带时钟的 always 语句;这种电路结构往往与触发沿有关系,只有在触发沿时才可能发生赋值的变化 assign 和 always 区别: assign 语句使用时不能带时钟。 always 语句可以带时钟,也可以不带时钟。在 always 不带时钟时,逻辑功能和 assign 完全一致,都是只产生组合逻辑。 比较简单的组合逻辑推荐使用 assign 语句,比较复杂的组合逻辑推荐使用 always 语句。在always带时钟信号时,这个逻辑语句才能产生真正的寄存器 什么是 latch latch 是指锁存器,是一种对脉冲电平敏感的存储单元电路。锁存器和寄存器都是基本存储单元,锁存器是电平触发的存储器,寄存器是边沿触发的存储器。 两者的基本功能是一样的,都可以存储数据。锁存器是组合逻辑产生的,而寄存器是在时序电路中使用,由时钟触发产生的。 latch的主要危害是会产生毛刺,这种毛刺对下一级电路时很危险的。并且隐蔽性很强,不易查出。因此,在设计中,因避免latch的使用。 代码中出现latch的两个原因时在组合逻辑中,if或者case语句不完整的描述,比如if缺少else分支,case缺少default分支,导致代码在综合过程中出现了latch。解决办法就是if必须带else分支,case必须带default分支。只有不带时钟的 always 语句 if 或者 case 语句不完整才会产生 latch,带时钟的语句 if或者 case 语句不完整描述不会产生 latch。 状态机: Mealy 状态机:组合逻辑的输出不仅取决于当前状态,还取决于输入状态。 Moore 状态机:组合逻辑的输出只取决于当前状态。 三段式状态机(最常用)的基本格式是: 第一个 always 语句实现同步状态跳转; 第二个 always 语句采用组合逻辑判断状态转移条件; 第三个 always 语句描述状态输出(可以用组合电路输出,也可以时序电路输出)。 在开始编写状态机代码前,一般先画出状态机跳转图,这样在编写代码时思考比较清晰。 模块化设计: 在进行模块话设计中,对于复杂的数字系统,我们一般采用自顶向下的设计方法。把系统划分为几个功能模块,每个功能模块再划分成下一层的子模块。一般整个设计的顶层模块只做例化(调用其他模块),不做逻辑。顶层模块对子模块做例化时,只需要知道子模块的端口信号名,而不用关心子模块内部具体是如何实现的。 Verilog 语法中的localparam代表的意思同样是参数定义,用法和 parameter 基本一致,区别在于 parameter 定义的参数可以做例化,而 localparam 定义的参数是指本地参数,上层模块不可以对localparam 定义的参数做例化。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3