从模型生成 Verilog 代码¶
本示例使用了以下演示 https://engee.com/helpcenter/stable/ru/interactive-scripts/base_simulation/PID_fixed.html 中的模型,鉴于其使用了定点数据类型,我们可以用 Verilog 语言从中生成代码。代码将从 PID 调节器模块生成。
现在,让我们根据该模型生成 Verilog 语言代码。为此,请在代码生成器的程序控制功能中设置属性target="verilog"
。
Verilog 是一种硬件描述语言(HDL),用于设计和模拟 FPGA 和 ASIC 电路等数字系统。它允许在寄存器和逻辑级描述数字电路的结构和行为,是硬件工程师的必备工具。Verilog 支持并行处理建模,这对具有大量同时运行组件的电路至关重要。 Verilog 的主要应用如下。
1.FPGA 和 ASIC 设计:Verilog 允许您描述复杂的数字系统,然后将其合成为 FPGA 或集成电路上的物理电路。
2.仿真和验证:Verilog 提供仿真功能,使您能够在硬件实现之前测试和调试电路。
- 开发自动化:合成器将 Verilog 代码转化为优化的逻辑电路,简化了构建和测试硬件组件的过程。
Verilog 适用于需要高速数据处理和可靠并行执行的项目。
In [ ]:
engee.generate_code("$(@__DIR__)/pid_fixed.engee", "$(@__DIR__)/verilog"; subsystem_name="SubSystem", target="verilog")
现在让我们来分析一下结果。
我们可以看到,代码已经成功生成,并可用于进一步开发,代码本身如下所示。
模块 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 的代码生成功能,并向您展示了如何将此工具应用到您的项目中。