Отговори на тема  [ 16 мнения ]  Отиди на страница 1, 2  Следваща
Въпрос за Verilog: 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Чет Мар 15, 2007 6:59 pm
Мнения: 47
Местоположение: sf
Мнение Въпрос за Verilog:
Въпрос за хора занимаващи се с verilog (начинаещ съм):
Имам

output reg A;
как мога да кажа че искам А да си запази предишната стойност?????
A <= A; - не работи при синтез (може и да работи но дава нежелани warnings)
А <= 1'bx; - do not care също не работи

F1!! Че вече се побърквам... Изглежда баси кретенизма, а незнам как се прави.


Вто Ное 27, 2007 6:35 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пон Юли 04, 2005 11:51 pm
Мнения: 651
Местоположение: София
Мнение 
Как така искаш да запазиш предишната стойност ? Ако няма някакво условие то смисъла се губи :) т.е ако A<=A винаги, се едно имаш wire (не случаино ти дава warning)

Когато е зададено в уеловие ще работи .. примерно :

always@(posedge clk)
if(EN) A<=A;
else A<=B;

_________________
От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?


Вто Ное 27, 2007 7:32 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение 
Да се запази предишната стойност ... кога? То без твоя намеса не се променя и без друго. :D


Вто Ное 27, 2007 9:08 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
@Telekinesis, надявам се знаеш що е туй логика с памет и има ли почва у нас ;-)

Те такива животни е добре да се описват в процес и като за начало добре е едно животно да го рисуваш само в един процес. Ако ги пипаш извън процес или в повече от един процес - хапят ;-)


Вто Ное 27, 2007 9:27 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Чет Мар 15, 2007 6:59 pm
Мнения: 47
Местоположение: sf
Мнение 
Явно съм го обяснил много съкратено.

Въпроса е следния:
Имам 50 wires между два FPGA. Искам единия да е мастър другия слейв. Мастъра трябва да първо да подава команда към слейва (за да го установи в даден режим) след което да подаде бягаща 0. След което става алабала. За целта мога да използвам единствено 50те жици (и клок).
Долния always описва част от крайния автомат който трябва да прави нещото - в PHY_CMD стейта в зависимост от cnt_phy се подава командата към слайва. След това в стейт Z1 o_phy се установява в 50'b1111...1110. PHY_INC_DRV шифтва с едно o_phy. Машината цикли между PHY_INC_DRV и друг стейт и зилиза след като се извъртят.
Незнам колко стана ясно, но проблема е че за синтез ми пищи че в показания always няма default стойност. Аз незнам каква трябва да е след като o_phy искам да не се нулира (ако default:o_phy <= 50'h0;) защото го ползвам в други стейтове.

always @ (current_state or cnt_phy or o_phy)
case (current_state)
PHY_CMD:
case (cnt_phy)
3'b000: o_phy <= 50'h0;
3'b001: o_phy <= 50'hE7E7E7_E7E7E7;
3'b010: o_phy <= 50'hA5A5A5_A5A5A5;
3'b011: o_phy <= 50'hC3C3C3_C3C3C3;
default: o_phy <= 50'h0;
endcase

Z1: o_phy <= ~1;

PHY_INC_DRV: o_phy <= {o_phy[48:0],1'b1};
default: o_phy <= 50'b0;
endcase


Сря Ное 28, 2007 11:01 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пон Юли 04, 2005 11:51 pm
Мнения: 651
Местоположение: София
Мнение 
Ми ако ти дава само warning може да го игнорираш ... кой софт ползваш ?

_________________
От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?


Сря Ное 28, 2007 11:49 am
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
Telekinesis написа:

always @ (current_state or cnt_phy or o_phy)


от къв зор o_phy e в сенсивити листа?


Сря Ное 28, 2007 12:28 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пон Юли 04, 2005 11:51 pm
Мнения: 651
Местоположение: София
Мнение 
И принципно е хубави да стробираш по някъв клок а не по промяна на сигнала .. защото ако имаш бърз FPGA жална ти маика :) и най-малкия шум по линията ще го ошашка ..

_________________
От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?


Сря Ное 28, 2007 1:16 pm
Профил ICQ WWW
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Чет Мар 15, 2007 6:59 pm
Мнения: 47
Местоположение: sf
Мнение 
@ BrainStorm: Бате, тука не става дума за софта (quartus)... Дава ми варнинги че синтезира latch-ове, а не искам.
Писал ли си fsm? С тоя always се опитвам да правя комбинационна логика, затова не ползвам клок. А ако ползвам резултата на изходите се забавя с още един клок, което също не го искам.
И какво означава бърз FPGA? :) Колко са бързи зависи от теб (PLL-а).

@ miro_atc:

от
o_phy <= {o_phy[48:0],1'b1};

o_phy се чете (дясната страна на равенството е) => в листа.


Сря Ное 28, 2007 2:22 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пон Юли 04, 2005 11:51 pm
Мнения: 651
Местоположение: София
Мнение 
Немога да схвана какво точно искаш да направиш :) но така както си го написал се получава някво суперр зацикляне .. примерно ако current_state = PHY_INC_DRV на o_phy ще почнат да се джуркат 1'ци с няква невероятна скорост :) ... това за PLL-а не го схванах? Ти на FPGA'то неможеш да зададеш работна честота .. логиката в него се клати на максимума които може (обикновенно при синетз софта ти изчислява тази честота)

Latch-овете няма как да ги избегнеш ... o_phy е регистър. Ако искаш целия този механизам да се синтезира като чиста логика (без регистри) то няма да се получи с always ...

Но от друга страна няма как да направиш бягащата 1'ца на o_phy без state machine :) ... а за нея трябва регистър

_________________
От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?


Сря Ное 28, 2007 2:46 pm
Профил ICQ WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 6:52 pm
Мнения: 11266
Местоположение: Добрич
Мнение 
Telekinesis написа:
от
o_phy <= {o_phy[48:0],1'b1};

o_phy се чете (дясната страна на равенството е) => в листа.


Виж сега, аз не го чувам много тоя verilog, ама на vhdl в листа на процес се слагат сигнали чиято променя стартира процеса.

Доколкото си спомням quartusa имаше help, вземи и прочети внимателно как се пишат процеси и какво се слага в листа им...
Така не става и трудно някой ще ти помогне... Все едно да търсиш грешка в С-код а да не си наясно как работи if/then/else.


Сря Ное 28, 2007 3:06 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Чет Мар 15, 2007 6:59 pm
Мнения: 47
Местоположение: sf
Мнение 
SOLVED

Не съм обяснил точно какво искам. А и това което съм сложил не е достатъчно да се разбере проблема. Сори за което :P
Исках да се запазва стойността на регистър, а не можеше да стане защото при комбинационната логика за синтез ми иска default от което се прее*ава сичко. Абе съвсем оплетох обяснението :? :D :D


BrainStorm написа:
Немога да схвана какво точно искаш да направиш :) но така както си го написал се получава някво суперр зацикляне .. примерно ако current_state = PHY_INC_DRV на o_phy ще почнат да се джуркат 1'ци с няква невероятна скорост :) ... това за PLL-а не го схванах? Ти на FPGA'то неможеш да зададеш работна честота .. логиката в него се клати на максимума които може (обикновенно при синетз софта ти изчислява тази честота)

Latch-овете няма как да ги избегнеш ... o_phy е регистър. Ако искаш целия този механизам да се синтезира като чиста логика (без регистри) то няма да се получи с always ...

Но от друга страна няма как да направиш бягащата 1'ца на o_phy без state machine :) ... а за нея трябва регистър


Човече, говориш ми като на кретен :) :) :) Ненам защо така.
Зацикляне има естествено. Как да направя бягаща 0 в стейт машина иначе? Цикли между два стейта (инкрементира -> изпраща) докато стигне условие след което излиза.
За PLL-а: естествено че можеш да му зададеш работна честотта :) Има си умножители и щуротии. Нали тва му е смисъла на ПЛЛ-а. Ако примерно му подаваш клок 100Хз вътрешно можеш да работиш на 1ГХз примерно (съответно да вадиш навънка денни с 1ГХз). В quartus на altera има mega function wizard alabala с който можеш да го правиш тва.

Айде :) Със здраве :)


Сря Ное 28, 2007 6:13 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение 
Telekinesis написа:
Ако примерно му подаваш клок 100Хз вътрешно можеш да работиш на 1ГХз примерно (съответно да вадиш навънка денни с 1ГХз)


Малко си прекалил с дименсиите, и в двете посоки.


Сря Ное 28, 2007 6:21 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Съб Окт 22, 2005 1:18 am
Мнения: 54
Мнение 
Може да пробваш по следния начин:

always @ (current_state or cnt_phy)
casex({current_state,cnt_phy})
5'b00_000: o_phy = 50'h0;
5'b00_001: o_phy = 50'hE7E7E7_E7E7E7;
5'b00_010: o_phy = 50'hA5A5A5_A5A5A5;
5'b00_011: o_phy = 50'hC3C3C3_C3C3C3;
5'b01_xxx: o_phy = ~1;
5'b11_xxx: o_phy = {o_phy[48:0],1'b1};
default: o_phy = 50'b0;
endcase

като трябва да си оправиш съответсвието за current state: 00 = PHY_cmd;
01 = Z1; 11 = PHY_INC_DRV или както ти харесва


И един съвет: използвай non blocking assignments само при edge driven логика


Сря Ное 28, 2007 6:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
Доколкото хващам синтаксиса на verilog, този код би трябва да изглежда по следния начин на VHDL:

Код:
process (current_state, cnt_phy, o_phy)
begin
case curent_state is
  when PHY_CMD =>
   case cnt_phy is
    when "001" => o_phy <= "00" & x"e7e7e7_e7e7e7";
    when "010" => o_phy <= "00" & x"a5a5a5_a5a5a5";
    when "011" => o_phy <= "00" & x"c3c3c3_c3c3c3";
    when OTHERS => null;
   end case;
  when Z1 => o_phy <= x"ffff_ffff" & "10";
  when PHY_INC_DRV => o_phy <= o_phy(48 downto 0) & '1';
  when OTHERS => null;
end case;
end process;


Код:
when PHY_INC_DRV => o_phy <= o_phy(48 downto 0) & '1';

На това място се предполага че искаш обратна врьзка.

Код:
when OTHERS => null;

а тук се изисква запазване на предишно сьстояние.

Както се сещаш няма да минеш само с комбинаторика :)
И докато вьв втория случай FF-а ще се синтезира, в пьрвия, не е точно така.
Но си напьлно прав, че това което си сложил не е достатъчно за да се разбере проблема.
Не сме гадатели, ако искаш помощ поствай достатьчно код.


Чет Ное 29, 2007 12:43 pm
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 16 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни