HDL ядро IP DUT и логика Дешифратора адреса в обертке интерфейса AXI4 Slave ядра IP HDL управляется глобальным сигналом сброса. Если вы генерируете ядро IP HDL без каких-либо ведомых интерфейсов AXI4, HDL Coder™ не генерирует ведомую интерфейсную обертку AXI4. Глобальный сигнал сброса становится тем же самым как сигналом сброса ядра IP и управляет ядром IP HDL для DUT. Чтобы изучить, как можно сгенерировать ядро IP без ведомых интерфейсов AXI4, смотрите, Генерируют Независимое от Совета Ядро IP HDL из Модели Simulink.
Когда вы генерируете ведомые интерфейсы AXI4 в ядре IP HDL, глобальный сигнал сброса управляется тремя сигналами сброса: ядро IP внешний сброс, сигнал сброса межсоединения AXI и мягкая перезагрузка для ядра процессора ARM. Глобальный сигнал сброса в этом случае управляет ядром IP HDL для DUT и логики Дешифратора адреса в ведомой обертке AXI4.
IPCore_Clk
и AXILite_ACLK
должен быть соединен с тем же источником часов. IPCore_RESETN
и AXILite_ARESETN
должен быть соединен с тем же источником сброса.
Эти сигналы сброса могут быть или синхронными или асинхронными. Используя асинхронный сброс сигналы могут быть проблематичными и привести к потенциальным проблемам метастабильности в триггерах когда сброс de-asserts в фиксирующемся окне часов. Чтобы избежать генерации возможных метастабильных значений при объединении сигналов сброса, HDL Coder автоматически вставляет логику синхронизации сброса, как обозначено Reset Sync
блок. Логика синхронизации сброса синхронизируется, глобальный сигнал сброса к ядру IP синхронизируют область. Эта логика вставляется, когда вы открываете HDL Workflow Advisor и запускаете задачу Generate RTL Code and IP Core IP Core Generation
рабочий процесс.
Логика синхронизации сброса содержит два компенсационных триггеров, которые синхронны к IPCore_CLK
сигнал. Триггеры убеждаются, что de-утверждение сигнала сброса происходит после двух тактов когда IPCore_CLK
сигнал становится высоким. Это синхронное de-утверждение избегает генерации глобального сигнала сброса, который имеет возможные метастабильные значения.
Логика работает по-другому в зависимости от того, задаете ли вы Reset type как Synchronous
или Asynchronous
на модели. Если вашим Reset type является Asynchronous
, логика синхронизации утверждает сигнал сброса асинхронно и de-asserts сигнал сброса синхронно. Например, этот код иллюстрирует сгенерированный код Verilog® для логики синхронизации сброса, когда вы генерируете ядро IP с асинхронным сбросом.
... ... reg_reset_pipe_process : PROCESS (clk, reset_in) BEGIN IF reset_in = '1' THEN reset_pipe <= '1'; ELSIF clk'EVENT AND clk = '1' THEN IF enb = '1' THEN reset_pipe <= const_0; END IF; END IF; END PROCESS reg_reset_pipe_process; reg_reset_delay_process : PROCESS (clk, reset_in) BEGIN IF reset_in = '1' THEN reset_out <= '1'; ELSIF clk'EVENT AND clk = '1' THEN IF enb = '1' THEN reset_out <= reset_pipe; END IF; END IF; END PROCESS reg_reset_delay_process; END rtl;
Если вашим Reset type является Synchronous
, логика синхронизации утверждает и de-asserts сигнал сброса синхронно. Например, этот код иллюстрирует сгенерированный код Verilog для логики синхронизации сброса, когда вы генерируете ядро IP с синхронным сбросом.
... ... reg_reset_pipe_process : PROCESS (clk) BEGIN IF clk'EVENT AND clk = '1' THEN IF reset_in = '1' THEN reset_pipe <= '1'; ELSIF enb = '1' THEN reset_pipe <= const_0; END IF; END IF; END PROCESS reg_reset_pipe_process; reg_reset_delay_process : PROCESS (clk) BEGIN IF clk'EVENT AND clk = '1' THEN IF reset_in = '1' THEN reset_out <= '1'; ELSIF enb = '1' THEN reset_out <= reset_pipe; END IF; END IF; END PROCESS reg_reset_delay_process; END rtl;