-- FRAME#, REQ64#
process(reset, clk) begin
if reset='1' then
framex <= 'Z';
req64x <= 'Z';
elsif clk'event and clk='1' then
case mcs is
when idle =>
if request='1' and gntx_1d='0' and framex_1d/='0' and irdyx_1d/='0' then -- requestされて、GNT#がアサートされて、バスがアイドルの時にスタート
framex <= '0';
req64x <= '0';
end if;
when addr_cmd_assert =>
framex <= '0';
req64x <= '0';
when attribute_phase =>
framex <= '0';
req64x <= '0';
when wait_transaction =>
framex <= '0';
req64x <= '0';
when m_trans_data =>
if (trans_complete='1') or (latency_timer_disconnect='1') then -- トランザクションが終了したか、もしくは、レイテンシ・タイマーがタイムアウトして、GNT#がアサートされていない状態でADBの境界のときは終了
framex <= '1'; -- 正常な状態
req64x <= '1';
elsif devsel_timeout='1' then -- DEVSEL#のデコードタイミングがタイムアウト
framex <= '1';
req64x <= '1';
elsif devselx_1d='1' and stopx_1d='0' then -- Target Abort(TRDY#='1'), Single Data Phase Disconnect(TRDY#='0')
framex <= '1';
req64x <= '1';
end if;
when turn_around => -- 正常終了
if request='1' and gntx_1d='0' then -- 正常終了後にリクエストが来ているので、もう1度
framex <= '0';
req64x <= '0';
else
framex <= 'Z';
req64x <= 'Z';
end if;
when stop_target => -- 異常終了
framex <= 'Z';
req64x <= 'Z';
when drive_bus => -- バス・パーキング
framex <= 'Z';
req64x <= 'Z';
end case;
end if;
end process;
framex_out <= framex;
req64x_out <= req64x;
* COMP "pcix_req64_b" OFFSET = OUT 3.8 ns A | MAXDELAY| -1.014ns| 4.814ns| 1| 1014
FTER COMP "pcix_clk" | | | | |
------------------------------------------------------------------------------------------------------
* COMP "pcix_frame_b" OFFSET = OUT 3.8 ns A | MAXDELAY| -0.825ns| 4.625ns| 1| 825
FTER COMP "pcix_clk" | | | |
XSTではIOB制約だそうだ。
attribute iob: string;
attribute iob of {component_name|entity_name|label_name}:{component|entity|label} is "(true|false|auto)";
attribute syn_useioff : boolean;
attribute syn_useioff of framex : signal is true;
attribute syn_useioff of req64x : signal is true;
attribute syn_useioff of framex_enable : signal is true;
attribute syn_useioff of req64x_enable : signal is true;
......
-- FRAME#, REQ64#
process(reset, clk) begin
if reset='1' then
framex <= '-';
req64x <= '-';
elsif clk'event and clk='1' then
case mcs is
when idle =>
if request='1' and gntx_1d='0' and framex_1d/='0' and irdyx_1d/='0' then -- requestされて、GNT#がアサートされて、バスがアイドルの時にスタート
framex <= '0';
req64x <= '0';
end if;
when addr_cmd_assert =>
framex <= '0';
req64x <= '0';
when attribute_phase =>
framex <= '0';
req64x <= '0';
when wait_transaction =>
framex <= '0';
req64x <= '0';
when m_trans_data =>
if (trans_complete='1') or (latency_timer_disconnect='1') then -- トランザクションが終了したか、もしくは、レイテンシ・タイマーがタイムアウトして、GNT#がアサートされていない状態でADBの境界のときは終了
framex <= '1'; -- 正常な状態
req64x <= '1';
elsif devsel_timeout='1' then -- DEVSEL#のデコードタイミングがタイムアウト
framex <= '1';
req64x <= '1';
elsif devselx_1d='1' and stopx_1d='0' then -- Target Abort(TRDY#='1'), Single Data Phase Disconnect(TRDY#='0')
framex <= '1';
req64x <= '1';
end if;
when turn_around => -- 正常終了
if request='1' and gntx_1d='0' then -- 正常終了後にリクエストが来ているので、もう1度
framex <= '0';
req64x <= '0';
else
framex <= '-';
req64x <= '-';
end if;
when stop_target => -- 異常終了
framex <= '-';
req64x <= '-';
when drive_bus => -- バス・パーキング
framex <= '-';
req64x <= '-';
end case;
end if;
end process;
process(reset, clk) begin
if reset='1' then
framex_enable <= '0';
req64x_enable <= '0';
elsif clk'event and clk='1' then
case mcs is
when idle =>
if request='1' and gntx_1d='0' and framex_1d/='0' and irdyx_1d/='0' then -- requestされて、GNT#がアサートされて、バスがアイドルの時にスタート
framex_enable <= '1';
req64x_enable <= '1';
end if;
when addr_cmd_assert =>
framex_enable <= '1';
req64x_enable <= '1';
when attribute_phase =>
framex_enable <= '1';
req64x_enable <= '1';
when wait_transaction =>
framex_enable <= '1';
req64x_enable <= '1';
when m_trans_data =>
if (trans_complete='1') or (latency_timer_disconnect='1') then -- トランザクションが終了したか、もしくは、レイテンシ・タイマーがタイムアウトして、GNT#がアサートされていない状態でADBの境界のときは終了
framex_enable <= '1'; -- 正常な状態
req64x_enable <= '1';
elsif devsel_timeout='1' then -- DEVSEL#のデコードタイミングがタイムアウト
framex_enable <= '1';
req64x_enable <= '1';
elsif devselx_1d='1' and stopx_1d='0' then -- Target Abort(TRDY#='1'), Single Data Phase Disconnect(TRDY#='0')
framex_enable <= '1';
req64x_enable <= '1';
end if;
when turn_around => -- 正常終了
if request='1' and gntx_1d='0' then -- 正常終了後にリクエストが来ているので、もう1度
framex_enable <= '1';
req64x_enable <= '1';
else
framex_enable <= '0';
req64x_enable <= '0';
end if;
when stop_target => -- 異常終了
framex_enable <= '0';
req64x_enable <= '0';
when drive_bus => -- バス・パーキング
framex_enable <= '0';
req64x_enable <= '0';
end case;
end if;
end process;
framex_out <= framex when framex_enable='1' else 'Z';
req64x_out <= req64x when req64x_enable='1' else 'Z';
COMP "pcix_frame_b" OFFSET = OUT 3.8 ns A | MAXDELAY| 0.725ns| 3.075ns| 0| 0
FTER COMP "pcix_clk" | | | | |
------------------------------------------------------------------------------------------------------
COMP "pcix_req64_b" OFFSET = OUT 3.8 ns A | MAXDELAY| 0.752ns| 3.048ns| 0| 0
FTER COMP "pcix_clk" | | | | |
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 | - |