Когда у вас есть блоки с состоянием, и вы имеете включать или сбрасывать порты внутри подсистемы, используйте Synchronous
режим блока State Control для:
Обеспечьте эффективное включение и сброс поведения симуляции на оборудовании.
Сгенерируйте более чистый HDL-код и используйте меньше ресурсов на оборудовании.
Можно добавить блок State Control в Simulink® модель на любом уровне иерархии модели. Как вы устанавливаете State Control блок, влияет на поведение симуляции других блоков внутри подсистемы, которые имеют состояние.
Для поведения симуляции синхронного оборудования установите State control равным Synchronous
.
Для поведения симуляции Simulink по умолчанию задайте State control Classic
.
Функциональность | Синхронный режим | Классический режим |
---|---|---|
State Control блока | Настройка блоков по умолчанию при добавлении блока из библиотеки блоков HDL-подсистем. | Поведение симуляции аналогично поведению подсистемы, которая не использует блок State Control. |
Поведение симуляции Simulink
| Метод обновления обновляет только состояния. Метод выхода вычисляет выходные значения на каждом временном шаге. Для примера, когда вы активировали подсистемы, значение выхода изменяется, когда сигнал включения низок, когда он обрабатывает новые значения входа. Значение выхода соответствует выходу от | Метод обновления обновляет состояния и вычисляет выходные значения. Для примера, когда вы активировали подсистемы, значение выхода остается стабильным, когда сигнал включения низок и изменяется только, когда сигнал включения становится высоким. |
Поведение HDL- симуляции | Более эффективный на оборудовании. | Менее эффективный на оборудовании. |
Поведение генерации HDL-кода | Сгенерированный HDL-код является более чистым и использует меньше ресурсов на оборудовании. Например, когда вы включили подсистемы, HDL- Coder™ не генерирует реестры обхода для каждого обновления состояния и использует меньше аппаратных ресурсов. | Сгенерированный HDL-код не настолько чистый и использует больше аппаратных ресурсов. Например, когда вы включили подсистемы, HDL Coder генерирует реестры обхода для каждого обновления состояния и использует больше ресурсов. |
Дополнительные сведения о том, когда можно использовать блок State Control, см. в разделе Управление состояниями.
Чтобы увидеть, использует ли подсистема в вашей модели Simulink синхронную семантику:
Символ S отображается в подсистеме, чтобы указать синхронное поведение.
Если дважды кликнуть подсистему SynchronousStateControl, в редакторе Simulink появится значок S, указывающий, что блоки внутри подсистемы используют синхронную аппаратную семантику.
Подсистемы SynchronousStateControl и ClassicStateControl используют блок Delay с внешним сбросом и портом включения в Synchronous
и Classic
режимы соответственно.
В следующей таблице показано сравнение HDL-кода, сгенерированного из блока Delay для Classic
и Synchronous
режимы блока State Control.
Функциональность | Синхронный режим | Классический режим |
---|---|---|
Генерация HDL-кода. Примененные настройки:
| `timescale 1 ns / 1 ns module SynchronousStateControl ( clk, reset, enb, DataIn, EnableIn, ResetIn, DataOut ); input clk; input reset; input enb; input signed [7:0] DataIn; // int8 input EnableIn; input ResetIn; output signed [7:0] DataOut; // int8 reg signed [7:0] Delay_Synchronous_reg [0:1]; // sfix8 [2] wire signed [7:0] Delay_Synchronous_reg_next [0:1]; // sfix8 [2] wire signed [7:0] Delay_Synchronous_out1; // int8 always @(posedge clk) begin : Delay_Synchronous_process if (reset == 1'b1 || ResetIn == 1'b1) begin Delay_Synchronous_reg[0] <= 8'sb00000000; Delay_Synchronous_reg[1] <= 8'sb00000000; end else begin if (enb && EnableIn) begin Delay_Synchronous_reg[0] <= Delay_Synchronous_reg_next[0]; Delay_Synchronous_reg[1] <= Delay_Synchronous_reg_next[1]; end end end assign Delay_Synchronous_out1 = Delay_Synchronous_reg[1]; assign Delay_Synchronous_reg_next[0] = DataIn; assign Delay_Synchronous_reg_next[1] = Delay_Synchronous_reg[0]; assign DataOut = Delay_Synchronous_out1; endmodule // SynchronousStateControl
| `timescale 1 ns / 1 ns module ClassicStateControl ( clk, reset, enb, DataIn, EnableIn, ResetIn, DataOut ); input clk; input reset; input enb; input signed [7:0] DataIn; // int8 input EnableIn; input ResetIn; output signed [7:0] DataOut; // int8 reg signed [7:0] Delay_Synchronous_bypass; // sfix8 reg signed [7:0] Delay_Synchronous_reg [0:1]; // sfix8 [2] wire signed [7:0] Delay_Synchronous_bypass_next; // sfix8 wire signed [7:0] Delay_Synchronous_reg_next [0:1]; // sfix8 [2] wire signed [7:0] Delay_Synchronous_delay_out; // sfix8 wire signed [7:0] Delay_Synchronous_out1; // int8 always @(posedge clk) begin : Delay_Synchronous_process if (reset == 1'b1 || ResetIn == 1'b1) begin Delay_Synchronous_bypass <= 8'sb00000000; Delay_Synchronous_reg[0] <= 8'sb00000000; Delay_Synchronous_reg[1] <= 8'sb00000000; end else begin if (enb && EnableIn) begin Delay_Synchronous_bypass <= Delay_Synchronous_bypass_next; Delay_Synchronous_reg[0] <= Delay_Synchronous_reg_next[0]; Delay_Synchronous_reg[1] <= Delay_Synchronous_reg_next[1]; end end end assign Delay_Synchronous_delay_out = (ResetIn == 1'b1 ? 8'sb00000000 : Delay_Synchronous_reg[1]); assign Delay_Synchronous_out1 = (EnableIn == 1'b1 ? Delay_Synchronous_delay_out : Delay_Synchronous_bypass); assign Delay_Synchronous_bypass_next = Delay_Synchronous_delay_out; assign Delay_Synchronous_reg_next[0] = DataIn; assign Delay_Synchronous_reg_next[1] = Delay_Synchronous_reg[0]; assign DataOut = Delay_Synchronous_out1; endmodule // ClassicStateControl
|
Обратитесь к вышеприведенной модели Simulink, которая показывает блок Delay, который использует Classic
и Synchronous
режимы блока State Control. Следующая схема показывает ModelSim® симуляция для блока Delay.
Когда ResetIn сигнал высок, сигналы DataClassic и DataSynchronous выдают один и тот же выход.
Когда и ResetIn, и EnableIn сигналы низки, DataSynchronous сигнал удерживает свое значение и изменяется только, когда EnableIn сигнал становится высоким на следующем активном ребре синхроимпульса. DataClassic значений сигналов измениться, когда сигнал EnableIn низок, когда он обрабатывает новые значения входа. DataClassic значений сигналов совпадать с DataSynchronous значений сигналов, когда EnableIn становится высоким.
Для получения информации о том, как сгенерировать HDL-код и симулировать ваш проект в ModelSim, смотрите Генерация HDL-кода из модели Simulink.