从模型生成Verilog代码
此示例使用以下演示中的模型<https://engee.com/helpcenter/stable/ru/interactive-scripts/base_simulation/PID_fixed.html >,并且考虑到其中使用了定点数据类型,我们可以负担得起用Verilog语言从中生成代码。 我们将从PID控制器块生成代码。
.png)
现在我们将从这个模型中生成Verilog语言的代码。 为此,我们将在代码生成器的程序控制函数中设置属性 target="verilog".
Verilog是一种硬件描述语言(HDL),用于设计和建模数字系统,如FPGA和ASIC电路。 它允许您在寄存器和逻辑级别描述数字电路的结构和行为,这使其成为硬件工程师的基本工具。 Verilog支持并行过程的仿真,这对于具有大量同时元件的电路至关重要。
Verilog的主要应用如下。
-
FPGA和ASIC设计:Verilog允许您描述复杂的数字系统,然后可以在Fpga或集成电路上合成为物理电路。
-
仿真和验证:Verilog提供仿真功能,允许您在硬件上实现电路之前测试和调试电路。
-
开发自动化:合成器将Verilog代码转换为优化的逻辑电路,从而简化了创建和测试硬件组件的过程。
Verilog用于需要高速数据处理和可靠并行执行的项目。
In [ ]:
engee.generate_code("$(@__DIR__)/pid_fixed.engee", "$(@__DIR__)/verilog"; subsystem_name="SubSystem", target="verilog")
现在让我们分析一下结果。
正如我们所看到的,代码已经成功生成,可以在进一步的开发中应用,代码本身如下所示。
module pid_fixed_SubSystem(
input clock,
reset,
input [15:0] io_setpoint,
io_feedback,
output [15:0] io_command
);
reg [15:0] UnitDelay_state;
wire [15:0] _AddAccum_T = io_setpoint - io_feedback;
wire [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;
wire [15:0] _Add_1Accum_T = {_Gain_2_new_T_1[28:14], 1'h0} + UnitDelay_state;
always @(posedge clock) begin
if (reset)
UnitDelay_state <= 16'h0;
else
UnitDelay_state <= _Add_1Accum_T;
end // always @(posedge)
assign io_command = _Gain_new_T_1[29:14] + {_Add_1Accum_T[15], _Add_1Accum_T[15:1]};
endmodule
结论
在这个例子中,我们研究了在Engee中生成代码的可能性,并向您展示了如何将此工具用于您的项目。