Обычные есть - но я тут разрывался перед выбором - поставить 32...64k SRAM, либо 8k, но при этом с часами, и добавить остальную память потом... :)
Просто сейчас переделывать макет поздно - чтобы вынуть оттуда SRAM придется разбирать полмакетки :)
Вид для печати
Обычные есть - но я тут разрывался перед выбором - поставить 32...64k SRAM, либо 8k, но при этом с часами, и добавить остальную память потом... :)
Просто сейчас переделывать макет поздно - чтобы вынуть оттуда SRAM придется разбирать полмакетки :)
Как в VHDL описать Open Drain выход? Ниже два варианта кода который я пробовал, оба раза Квартус 7.2 ставит TRIstate :confused: Auto Open-Drain Pins = On
Код:...
port(
MOSI : out std_logic;
...
signal MOSI_INT : std_logic; --Для варианта 2
...
--Вариант 1
MOSI <= '0' when SHIFT_REG(7) = '0' and SPI_OUT_EN_SYNC = '1' else 'Z';
--Вариант 2
MOSI_INT <= '0' when SHIFT_REG(7) = '0' and SPI_OUT_EN_SYNC = '1' else '1';
MOSI <= '0' when MOSI_INT = '0' else 'Z';
...
http://quartushelp.altera.com/9.1/me...ile_opndrn.htmКод:LIBRARY altera;
USE altera.altera_primitives_components.all;
Я как бы не в этой теме ссылку давал уже
http://www.altera.com/support/kdb/so...s=Open%20Drain
Есть еще 3 метод, через спецательные комментарии, но где и как оно работает в VHDL это надо искать
Cчастие :)
LIBRARY altera;
USE altera.altera_primitives_components.all;
...
ul: OPNDRN PORT MAP ( a_in => MOSI_INT, a_out => MOSI);
...
Может, и мне кто подскажет :) как правильней на Verilog HDL описать двунаправленную шину так, чтобы на выход она работала тоже как open drain?
Это VHDL, но смысл думаю будет понятен...
Код:library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
LIBRARY altera;
USE altera.altera_primitives_components.all;
entity top is
port(
--BIDIR
D : inout std_logic_vector(7 downto 0) := "ZZZZZZZZ"; --Data Bus
--INPUTS
nRD : in std_logic; --CPU signals
nWR : in std_logic
);
end;
architecture rtl of top is
signal DATA_REG: std_logic_vector(7 downto 0) := "00000000";
signal DB: std_logic_vector(7 downto 0);
begin
process(nWR)
begin
if nWR'event and nWR = '0' then
DATA_REG <= D;
end if;
end process;
DB <= DATA_REG when nRD = '0' else "11111111";
ul1: OPNDRN PORT MAP ( a_in => DB(0), a_out => D(0));
ul2: OPNDRN PORT MAP ( a_in => DB(1), a_out => D(1));
ul3: OPNDRN PORT MAP ( a_in => DB(2), a_out => D(2));
ul4: OPNDRN PORT MAP ( a_in => DB(3), a_out => D(3));
ul5: OPNDRN PORT MAP ( a_in => DB(4), a_out => D(4));
ul6: OPNDRN PORT MAP ( a_in => DB(5), a_out => D(5));
ul7: OPNDRN PORT MAP ( a_in => DB(6), a_out => D(6));
ul8: OPNDRN PORT MAP ( a_in => DB(7), a_out => D(7));
end rtl;
Тож в циклоне проверил, банальное
делает все правильноЦитата:
module TEST(
input wire DI,
output wire DQ,
inout wire DB,
input wire DIR
);
OPNDRN u1(DIR ? DI : 1'b1, DB);
assign DQ = DB;
endmodule