Сигналы пучка синхросигналов состоят из сигналов синхронизации, сброса и включения синхросигналов. Во время генерации кода HDL Coder™ создает сигналы синхросигналов на основе последовательных элементов, таких как постоянные переменные или блоки задержки, которые используются в проекте. По умолчанию один главный синхросигнал и один главный сброс управляют всеми последовательными элементами в конструкции.
При использовании постоянных переменных в MATLAB ® кодер HDL генерирует сигналы синхросигналов. Постоянная переменная - это локальная переменная в функции MATLAB, которая сохраняет свое значение в памяти между вызовами функции. Для создания кода функции должны инициализировать постоянную переменную, если она пуста. Дополнительные сведения см. в разделеpersistent.
Рассмотрим этот код MATLAB, использующий постоянную переменную n.
function y = persist_fcn(u) persistent n if isempty(n) n = 1; end y = n; n = n + u; end
При создании кода кодер HDL создает сигналы синхронизации, сброса и включения синхронизации. Эти сигналы называются clk, reset, и clk_enable в коде HDL. Сведения о том, как генерировать код HDL, см. в разделах Создание базового кода HDL и Синтез FPGA от MATLAB.
Этот код показывает созданный код Verilog для модели. Для соответствия поведению постоянной переменной MATLAB код HDL использует блок always. На положительном фронте синхросигнала, когда сброс низкий и сигнал разрешения высокий, значение tmp присваивается переменной n после задержки 1 ns.
`timescale 1 ns / 1 ns
module persist_fcn_fixpt
(clk, reset, clk_enable,
u, ce_out, y);
input clk, reset, clk_enable;
input u; // ufix1
output ce_out;
output y; // ufix1
..
assign enb = clk_enable;
assign p4tmp_1 = {1'b0, u};
assign tmp = n + p4tmp_1;
always @(posedge clk or posedge reset)
begin : n_reg_process
if (reset == 1'b1) begin
n <= 2'b01;
end
else begin
if (enb) begin
n <= tmp;
end
end
end
assign y = n[0];
assign ce_out = clk_enable;
endmodule // persist_fcn_fixpt
См. также Постоянные переменные и Постоянные переменные массива.
Для моделирования последовательных элементов в Simulink ® и генерации сигналов пакета синхросигналов можно использовать различные типы блоков задержки, диаграмм Stateflow ® или постоянных переменных в функциональных блоках MATLAB или системных блоках MATLAB. Генератор кода сопоставляет время выборки, указанное в модели, с циклами синхронизации в конструкции HDL. По умолчанию модель является одинарной, что означает, что одна единица времени выборки в Simulink соответствует одному такту в коде HDL.
Например, рассмотрим эту модель, которая выводит унарный минус входного сигнала после двух единиц времени выборки. Вход имеет int32 в качестве типа выходных данных.

При создании кода кодер HDL создает сигналы синхронизации, сброса и включения синхронизации. Эти сигналы называются clk, reset, и clk_enable в коде HDL. Сведения о создании кода см. в разделе Создание кода HDL из модели Simulink.
Этот код показывает созданный код Verilog для модели. Для соответствия поведению блока задержки Simulink код HDL использует блок всегда для каждого блока задержки. На положительном фронте тактового сигнала, когда сброс является низким, а разрешающий сигнал является высоким, вход передается на выход после единичной задержки. Один блок всегда задерживает ввод на 1 ns перед вычислением унарного минуса. Другой блок всегда вычисляет унарный минус после 1 ns.
`timescale 1 ns / 1 ns
module unary_minus
(clk, reset, clk_enable,
In1, ce_out, Out1);
input clk, reset, clk_enable;
input signed [31:0] In1; // int32
output ce_out;
output signed [31:0] Out1; // int32
...
assign enb = clk_enable;
always @(posedge clk or posedge reset)
begin : Delay_process
if (reset == 1'b1) begin
Delay_out1 <= 32'sb0;
end
else begin
if (enb) begin
Delay_out1 <= In1;
end
end
end
...
always @(posedge clk or posedge reset)
begin : Delay2_process
if (reset == 1'b1) begin
Delay2_out1 <= 32'sb0;
end
else begin
if (enb) begin
Delay2_out1 <= Unary_Minus_out1;
end
end
end
...
endmodule // unary_minus
Если в модели используется разное время выборки или включена оптимизация скорости и площади, модель становится многоскоростной. Сведения о генерации пакетов тактовых сигналов из многоскоростных моделей см. в разделе Генерация кода из многоскоростных моделей.