亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> VHDL

教程 - 编写组合和顺序代码

使用 VHDL 进程或 Verilog Always Blocks

本教程展示了如何编写包含在 Process 中的 VHDL 或 Verilog 块 或始终阻止 分别。流程(VHDL)和Always Blocks(Verilog)是基础,需要很好地理解。它们的行为方式完全相同,因此在这里为您介绍两者,如果您现在只学习一种语言,请注意针对该特定语言的示例。进程或 Always Blocks 主要用于两个场景:

  1. 定义一个组合的块 逻辑
  2. 定义一个顺序的块 逻辑

第一种情况是教科书中向新生介绍流程或始终块时常见的情况。它在这里为您呈现,让您意识到它的存在。但实际上,用于定义组合逻辑块的 Process/Always 块在“真实世界”代码中的出现频率远低于用于定义顺序逻辑的 Process/Always 块。

您可能会问自己的第一个问题是组合逻辑和顺序逻辑之间的区别是什么?组合(或组合)逻辑是不需要时钟来操作的逻辑。前面的与门的例子是一个组合例子。顺序逻辑是需要时钟来操作的逻辑。时序逻辑最基本的构建块是 D 触发器(如下图所示)。

D触发器!

如果您不了解 D 触发器的工作原理,请立即停止阅读!在继续阅读之前,您需要了解触发器是如何在 FPGA 中使用的。可以了,好了?不错。

VHDL中的组合过程:

process (input_1, input_2)
begin
    and_gate <= input_1 and input_2;
end process;

Verilog 中的组合总是阻塞:

always @ (input_1 or input_2)
  begin
    and_gate = input_1 & input_2;
  end

在上面的 VHDL 和 Verilog 代码中,input_1 和 input_2 位于所谓的敏感列表中 .敏感度列表是所有将导致进程/始终阻止执行的信号的列表。在上面的示例中,对 input_1 或 input_2 的更改将导致 Process/Always 块执行。这个 process/always 块接受两个输入,对它们执行“与”操作,并将结果存储在信号 and_gate 中。这与这段代码的功能完全相同:

-- VHDL:
and_gate <= input_1 and input_2;
// Verilog:
assign and_gate = input_1 & input_2;

这两个代码示例的目的相同:分配信号和门。不同之处在于一个在组合过程/始终阻止中,而另一个不在。因此,由于不使用组合的 Process/Always Block 也可以实现相同的结果,因此我不建议初学者以这种方式使用这些语句。

可以使用 Process 或 Always Block 的第二种方式(以及更有趣的示例)是定义一个顺序逻辑块。同样,时序逻辑是有时钟的逻辑。


VHDL

  1. 教程 - 编写组合和顺序代码
  2. 基础设施即代码的优缺点
  3. 组合逻辑函数简介
  4. 什么是编码:工作、语言及其挑战
  5. 使用集成逻辑分析器 (ILA) 和虚拟输入/输出 (VIO)
  6. Java 堆栈和堆:Java 内存分配教程
  7. 如何在 Python 中读取 CSV 文件CSV文件读写
  8. 带分配的组合逻辑
  9. 组合逻辑与永远
  10. 梯形逻辑 102:优点和缺点
  11. 编写程序:数字化简单高效
  12. G码和M码的区别