С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Народ, вопрос по Кактусу. Можно ли настроить его чтобы он в отчетах показывал как он преобразует исходный текст в логическое представление, т.е. его логический синтез. Вот в Мах Plus в файле с расширением rpt это можно увидеть.
А как бы в Кактусе такое провернуть.
А то заткнулся на одной вещи, понять не могу во что он ее синтезирует.
Спрошу и я: возможно ли у Cyclone II включить On-Chip Termination (встроенный последовательный резистор) для выхода типа Open Drain?
Так, мой вопрос остался без ответа, попробуем по другому.
Я попытался переложить интерфейс SD карты, написанный на vhdl Keeper на AHDL.
Но нифига не работает зараза и не врублюсь почему.
Может кто незамутненным взглядом найдет ошибку.
Вот мой кусок кода
Почему то cчетчик SD_count доходя до 8 не останавливается и продолжает считать.Код:------------------------------------------------------------------------------------ -- Интерфейс SD карты, работает на частоте 14МГц ------------------------------------------------------------------------------------ -- Порт xx57h = 01010111b ------------------------------------------------------------------------------------ CS_57 = CA[7] # !CA[6] # CA[5] # !CA[4] # CSx7 # IO_ENABLE; SD_start_sync.d = !CS_57; SD_start_sync.clk = CLK_14MHZ; ----------------------------------------------------------------------------------- -- Счетчик ------------------------------------------------------------------------------------ SD_count_en = SD_count[0].q # SD_count[1].q # SD_count[2].q # !SD_count[3].q; SD_count[].clk = !CLK_14MHZ; SD_count[0].clrn = !SD_start_sync.q; SD_count[1].prn = !SD_start_sync.q; SD_count[2].prn = !SD_start_sync.q; SD_count[3].prn = !SD_start_sync.q; IF SD_count_en ==1 THEN SD_count[].d = SD_count[].q+1; END IF; ------------------------------------------------------------------------------------ -- Входной сдвигающий регистр ------------------------------------------------------------------------------------ SD_shift_in[].clk = CLK_14MHZ; IF SD_count[3].q ==0 THEN SD_shift_in[].d = (SD_shift_in[7-1..0].q,SD_MISO); END IF; ------------------------------------------------------------------------------------ -- Выходной сдвигающий регистр = xx57h = 01010111b ------------------------------------------------------------------------------------ WR_57 = CS_57 # C_WR; SD_shift_out[].clk = !CLK_14MHZ; IF WR_57 ==0 THEN SD_shift_out[].d = CD[]; ELSIF SD_count[3].q ==0 THEN SD_shift_out[].d = (SD_shift_out[7-1..0].q,VCC); END IF; ----------------------------------------------------------------------------------- -- Вывод данных в SD ------------------------------------------------------------------------------------ SD_MOSI = SD_shift_out[7].q; ------------------------------------------------------------------------------------ -- Выходная частота SD ------------------------------------------------------------------------------------ SD_SCK = CLK_14MHZ & !SD_count[3].q; ------------------------------------------------------------------------------------ -- Процесс записи в порт управления SD карты = xx77h = 01110111b ------------------------------------------------------------------------------------ WR_77 = CA[7] # !CA[6] # !CA[5] # !CA[4] # CSx7 # IO_WR; SD_rule_r.d = CD[1]; SD_rule_r.clk = WR_77; SD_rule_r.prn = C_RESET; SD_CS = SD_rule_r.q;
А вот исходный вариант на vhdl
Код:library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity SPI is port( --INPUTS DI : in std_logic_vector(7 downto 0); CLC : in std_logic; START : in std_logic; MISO : in std_logic; WR_EN : in std_logic; --OUTPUTS DO : out std_logic_vector(7 downto 0); SCK : out std_logic; MOSI : out std_logic ); end; architecture spi_rtl of SPI is signal COUNTER : std_logic_vector(3 downto 0); signal SHIFT_IN : std_logic_vector(7 downto 0); signal SHIFT_OUT : std_logic_vector(7 downto 0); signal COUNTER_EN : std_logic; signal START_SYNC : std_logic; begin SCK <= CLC and not COUNTER(3); DO <= SHIFT_IN; MOSI <= SHIFT_OUT(7); COUNTER_EN <= not COUNTER(3) or COUNTER(2) or COUNTER(1) or COUNTER(0); process(CLC) begin if CLC'event and CLC = '1' then START_SYNC <= START; end if; end process; process(CLC,COUNTER(3)) begin if CLC'event and CLC = '1' then if COUNTER(3) = '0' then SHIFT_IN <= SHIFT_IN(6 downto 0)&MISO; end if; end if; end process; process(CLC,WR_EN,COUNTER(3)) begin if CLC'event and CLC = '0' then if WR_EN = '1' then SHIFT_OUT <= DI; else if COUNTER(3) = '0' then SHIFT_OUT(7 downto 0) <= SHIFT_OUT(6 downto 0)&'1'; end if; end if; end if; end process; process(CLC,START_SYNC,COUNTER_EN) begin if START_SYNC = '1' then COUNTER <= "1110"; else if CLC'event and CLC = '0' then if COUNTER_EN = '1' then COUNTER <= COUNTER+"0001"; end if; end if; end if; end process; end spi_rtl;
А объясни как в твоем языке происходит инкремент счетчика - в VHDL коде там в последней секции он инкрементится
а в твоем куске он только присваивается но никаких движняков именно по изменению, я в коде не вижу. Может конечно в AHDL есть какое то автоинкрементирование - но я в этом сомневаюсь.Код:if CLC'event and CLC = '0' then if COUNTER_EN = '1' then COUNTER <= COUNTER+"0001";
---------- Post added at 09:51 ---------- Previous post was at 09:29 ----------
Ага тормозю - нашел!
твой код :
попробуй переписать как :Код:IF SD_count_en ==1 THEN SD_count[].d = SD_count[].q+1;
Синтаксис я мог нарушить ( не знаю его ) но идея думаю ясна.Код:IF SD_count_en ==1 THEN IF SD_count[].d == 7 THEN SD_count[].d=0; ELSE SD_count[].d = SD_count[].q+1;
Это если должно считать 8 раз от 0 до 7.
И вопросы по .d и .q не понятно - почему разная разрядность до и после присваивания (SD_count[].d = SD_count[].q+1). если я правильно врубаюсь - это дабл и квад ? По идее оно должно быть одинаковым. А приведение сделать потом, типа and 7 если надо только 3 разряда. Но вообще - желательно просто ввести условие дополнительное а операнды делать равными по ширине. для данного случая - 4 бита.
Последний раз редактировалось balu_dark; 17.05.2014 в 09:57.
Amiga 1200+Blizzard 1260 72 Mb+Mtek 68030,Compozit 128, Leningrad 2,
Atari STE 1040,ZX Spectrum +2,Pentagon 48, Speccy2007 - 2 , ATAS 256k.
ZX Evo 4Mb- в строю.
Speccy2010 v1
Специалист (пока готовлюсь к восстановлению).
Это все мое!
Родное!
Все люблю на свете я! Это родина моя!
В смысле разная разрядность.
Счетчик в данном примере основан на D триггерах, у которых
.d - это D-вход,
.q - это выход
[] тоже самое что и [3..0] - тоесть применительно ко всем разрядам
А запись SD_count[].d = SD_count[].q+1 равносильна записи в VHDL как SD_count = SD_count+1
Ух как все интересно .
Я не увидел что это обращение к полям структуры.
Теперь понятно. Но вопросы - остаются.
И все таки попробуйте ввести проверку о которой я написал - если код равен 7 на выходе тригера при необходимости увеличить счетчик - присваивать входу значение 0. А то я так и не понял - было ли это сделано или нет.
Amiga 1200+Blizzard 1260 72 Mb+Mtek 68030,Compozit 128, Leningrad 2,
Atari STE 1040,ZX Spectrum +2,Pentagon 48, Speccy2007 - 2 , ATAS 256k.
ZX Evo 4Mb- в строю.
Speccy2010 v1
Специалист (пока готовлюсь к восстановлению).
Это все мое!
Родное!
Все люблю на свете я! Это родина моя!
Откопал у себя в завалах старенький даташит на CPLD MAX3000A. Там внятно расписан часто возникающий вопрос о совместимости любимых народом EPM3032, 3064, 3128 с пятивольтовым окружением. Раздел Output Configuration.
В упрощенном переводе с ангельского - чипы полностью толерантны к пятивольтовым входным сигналам, танцы с бубном не требуются. Выходные сигналы (при питании ядра 3.3вольт) - вполне укладываются для подключения к пятивольтовой логике. В общем, ничего нового, просто для закрепления информации
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
tiretrak (04.04.2020)
a Mick то куда пропал ? Одолел интересно или нет? Вернее даже добавил сброс счетчика при переходе через 7 или оставил переполняться?
Amiga 1200+Blizzard 1260 72 Mb+Mtek 68030,Compozit 128, Leningrad 2,
Atari STE 1040,ZX Spectrum +2,Pentagon 48, Speccy2007 - 2 , ATAS 256k.
ZX Evo 4Mb- в строю.
Speccy2010 v1
Специалист (пока готовлюсь к восстановлению).
Это все мое!
Родное!
Все люблю на свете я! Это родина моя!
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)