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提供仿真功能,允许您在硬件上实现电路之前测试和调试电路。

  3. 开发自动化:合成器将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

正如我们所看到的,代码已经成功生成,可以在进一步的开发中应用,代码本身如下所示。
``'verilog
模块pid_fixed_SubSystem(
输入时钟,
重置,
输入[15:0]io_setpoint,
io_反馈,
输出[15:0]io_command
);

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;
wire[29:0]_Gain_new_T_1={{14{_AddAccum_T[15]}},_AddAccum_T}*30'h6000;
线[15:0]_Add_1Accum_T={_Gain_2_new_T_1[28:14],1'0}+UnitDelay_state;
总是@(posedge时钟)开始
如果(重置)
UnitDelay_state<=16'0;
其他
UnitDelay_state<=_Add_1Accum_T;
结束//总是@(posedge)
分配io_command=_Gain_new_T_1[29:14]+{_Add_1Accum_T[15],_Add_1Accum_T[15:1]};
端模,端模


结论

在这个例子中,我们研究了在Engee中生成代码的可能性,并向您展示了如何将此工具用于您的项目。