Engee 文档
Notebook

从模型生成 Verilog 代码

本示例使用了以下演示 https://engee.com/helpcenter/stable/ru/interactive-scripts/base_simulation/PID_fixed.html 中的模型,鉴于其使用了定点数据类型,我们可以用 Verilog 语言从中生成代码。代码将从 PID 调节器模块生成。 image_2.png

现在,让我们根据该模型生成 Verilog 语言代码。为此,请在代码生成器的程序控制功能中设置属性target="verilog"

Verilog 是一种硬件描述语言(HDL),用于设计和模拟 FPGA 和 ASIC 电路等数字系统。它允许在寄存器和逻辑级描述数字电路的结构和行为,是硬件工程师的必备工具。Verilog 支持并行处理建模,这对具有大量同时运行组件的电路至关重要。 Verilog 的主要应用如下。

1.FPGA 和 ASIC 设计:Verilog 允许您描述复杂的数字系统,然后将其合成为 FPGA 或集成电路上的物理电路。

2.仿真和验证:Verilog 提供仿真功能,使您能够在硬件实现之前测试和调试电路。

  1. 开发自动化:合成器将 Verilog 代码转化为优化的逻辑电路,简化了构建和测试硬件组件的过程。

Verilog 适用于需要高速数据处理和可靠并行执行的项目。

In [ ]:
engee.generate_code("$(@__DIR__)/pid_fixed.engee", "$(@__DIR__)/verilog"; subsystem_name="SubSystem", target="verilog")
[ Info: Generated code and artifacts: /user/my_projects/Demo/Work/verilog/verilog

现在让我们来分析一下结果。

image.png

我们可以看到,代码已经成功生成,并可用于进一步开发,代码本身如下所示。

模块 pid_fixed_SubSystem(
  输入时钟
                复位、
  输入 [15:0] io_setpoint
                反馈、
  输出 [15:0] 命令
);

  reg [15:0] UnitDelay_state
  线 [15:0] _AddAccum_T = io_setpoint - io_feedback
  导线 [28:0] _Gain_2_new_T_1 = {{13{_AddAccum_T[15]}}, _AddAccum_T}* 29'hA4
  导线 [29:0] _Gain_new_T_1 = {{14{_AddAccum_T[15]}}, _AddAccum_T} * 30'h6000; * 30'h6000* 30'h6000;
  wire [15:0] _Add_1Accum_T = {_Gain_2_new_T_1[28:14], 1'h0} + UnitDelay_state
  始终 @(假设时钟)开始
    如果(重置)
      UnitDelay_state <= 16'h0
    否则
      UnitDelay_state <= _Add_1Accum_T
  end // always @(posedge)
  赋值 io_command = _Gain_new_T_1[29:14] + {_Add_1Accum_T[15], _Add_1Accum_T[15:1]}
结束模块

输出

在本示例中,我们了解了 Engee 的代码生成功能,并向您展示了如何将此工具应用到您的项目中。

示例中使用的块