Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Unsorted (http://zx-pk.ru/forumdisplay.php?f=13)
-   -   ПЛИС и всё что с ними связано (http://zx-pk.ru/showthread.php?t=9342)

AlexBel 23rd September 2009 07:14

Quote:

Originally Posted by heroy (Post 220966)
Если дословно перевести VHDL то будет так
Code:

always @ (RESET or posedege CLK)..............

Да, согласен, спасибо. Попробую этот вариант вечерком :)

---------- Post added at 06:10 ---------- Previous post was at 06:07 ----------

Quote:

Originally Posted by tnt23 (Post 220967)
А симулятором квартусовским ты не пользуешься? Клевая штука.

Да вот, все руки не доходят разобраться... :(

---------- Post added at 06:13 ---------- Previous post was at 06:10 ----------

Quote:

Originally Posted by heroy (Post 220968)
на не синхронной логике это в этом контексте коряво, а при синхронной (в always posedge CLOCK) не корректно, так как CLOCK может быть как 0 так и 1

Так у меня сперва стоит always @(nRESET or CLOCK) - т.е. чувствительность к любым перепадам клока, а потом в условии else if(CLOCK), т.е. когда клок находится в единице. Что же не так?

---------- Post added at 06:14 ---------- Previous post was at 06:13 ----------

Quote:

Originally Posted by tnt23 (Post 220972)
А кстати да, куда делся ROMSEL? в VHDL он есть, в Verilog'овском коде его уже нет.

Да он когда и есть, то намертво в единице - это 4 бит порта 7FFD. Но так как у меня используется сейчас только ПЗУ 48к, то этот бит несущественен.

ZEK 23rd September 2009 09:49

Quote:

Originally Posted by AlexBel (Post 220990)
if(CLOCK), т.е. когда клок находится в единице. Что же не так?

если ты в always пишеш posedge CLOCK, блок always в момент изменения сигнала CLOCK из 0 в 1, так что я бы не завязывался что CLOCK будет именно 1

AlexBel 23rd September 2009 16:48

Quote:

Originally Posted by heroy (Post 220997)
если ты в always пишеш posedge CLOCK, блок always в момент изменения сигнала CLOCK из 0 в 1, так что я бы не завязывался что CLOCK будет именно 1

Это не то, о чем я здесь писал?
http://zx.pk.ru/showpost.php?p=220962&postcount=306

ZEK 23rd September 2009 20:51

Quote:

Originally Posted by AlexBel (Post 221063)
Это не то, о чем я здесь писал?

Возможно что при событии сигнал всегда в 0, но опять же не завязывался бы, вроде как это нигде не описано а значит в любой момент может измениться

AlexBel 26th September 2009 12:00

В Верилоге можно пометить как комментарий кусок текста:
/*
................
*/

Есть ли аналогичное в VHDL или только построчно через "--"?

---------- Post added at 11:00 ---------- Previous post was at 10:36 ----------

Как сделать RAM_ADRESS <= ADDR_COUNTER, если
signal ADDR_COUNTER : unsigned (18 downto 0);
RAM_ADRESS : out std_logic_vector (18 downto 0);
ADDR_COUNTER - счетчик (ADDR_COUNTER <= ADDR_COUNTER + 1)

Tim0xA 27th September 2009 02:24

Quote:

Originally Posted by AlexBel (Post 221630)
Есть ли аналогичное в VHDL или только построчно через "--"?

Насколько я знаю, в VHDL этого нет, но зато в квартусе есть возможность выделить блок и в контекстном меню выбрать "Comment Selection" или "Uncomment Selection".

svofski 27th September 2009 03:25

2 Attachment(s)
Только сейчас заметил разговор. Список чувствительности always без posedge/negedge по большому счету пишется для самоуспокоения, на синтез он не влияет и можно просто писать always @*.

Quote:

Так у меня сперва стоит always @(nRESET or CLOCK) - т.е. чувствительность к любым перепадам клока, а потом в условии else if(CLOCK), т.е. когда клок находится в единице. Что же не так?
В продолжение мысли — такой always не имеет никаких чувствительностей. Все чуствительности в выражениях, а то, что в скобочках always — это то, что может повлиять на состояние схемы внутри и по крайней мере квартусу это не более чем повод выдать предупреждение (странно, что он на переводы строк их не выдает). Но непосредственного влияния список чувствительности always не определяет.

Code:

process(nRESET,CLOCK)
begin
if( nRESET = '0' ) then DOS <= '0';
elsif (CLOCK'event and CLOCK = '1') and nM1 = '0' and nRD = '0' and nMREQ = '0' and (ADRESS(15 downto 8) = "00111101") and ROMSEL = '1' then DOS <= '1';
elsif (CLOCK'event and CLOCK = '1') and nM1 = '0' and nRD = '0' and nMREQ = '0' and (ADRESS(14) = '1' or ADRESS(15) = '1') then DOS <= '0';
end if;
end process;

в верилоге должен превратиться в такое:
Code:

always @(negedge nRESET or posedge CLOCK) begin: lolprocess
    if (~nRESET)
        DOS <= 1'b0;
    else begin
        if (~nM1 && ~nRD && ~nMREQ && ROMSEL && ADRESS[15:8] == 8'b00111101) DOS <= 1'b1;
        if (~nM1 && ~nRD && ~nMREQ && |ADRESS[15:14]) DOS <= 1'b0;
    end
end

В доказательство привожу две очень по-моему похожие друг на друга картинки. Мейкает сенс? Код на VHDL по большому счету изначально некорректно написан и, кстати, Квартус не очень-то рад такой записи.

AlexBel 27th September 2009 19:50

Век живи - век учись... :)

Black_Cat 4th October 2009 06:54

Господа, существует стандартная (т.е. проверенная и рекомендованная) схема генерации сигнала сброса внутри самой ПЛИС после подачи на неё питания, чтоб не заводить внешний RESET?

svofski 4th October 2009 08:21

Если есть возможность задавать начальное состояние регистров, можно сделать счетчик, что-нибудь типа:
Code:

module resetgen(input clk, input resetkey, output nRESET);

reg [7:0] resetctr = 0;
assign nRESET = &resetctr;
always @(posedge clk) begin
    if (resetkey)
        resetctr <= 0;
    else if (~nRESET)
        resetctr <= resetctr + 1'b1;
end
endmodule

Во FLEX-ах задавать начальное значение было нельзя, хотя может быть начальное нулевое состояние было гарантировано, не уверен. Во всех Циклонах уже можно.


All times are GMT +4. The time now is 06:40.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.