Goto page Previous 1, 2, 3
Gregor
Guest
Tue Jan 30, 2007 7:53 pm
"T.M.F." napisal:
Quote:
if rst = '0' and clk='1' and clk'event then
a_tmp <= (a_tmp'range => '0');
elsif
clk='1' and clk'event then a_tmp <= a+1;
pewnie mu się nie podoba że w dwóch odgałęzieniach odpytujesz clk'event
(niby powinien to skrócić ale...) - najprościej przegrupować to wszystko tak
aby zbocze było badane tylko raz:
if clk='1' and clk'EVENT then
if rst='0' then
a_tmp <= (others=>'0');
elsif
a_tmp<=a+1;
Jeśli korzystasz z ISE Xilinxa (i choć odrobinę znasz angielski) poszukaj
przykładów - są pogrupowane wg. funkcji - gotowe liczniki, rejestry przesuwne,
przykłady deklaracji funkcji - co tylko dusza zapragnie. Wystarczy skopiować
Gdzie dokładnie są schowane - niestety nie mogę podpowiedzieć bo na kompie
z którego pisze nie mam zainstalowanego ISE - coś mi się tylko plącze po pamięci
że za każdym razem kiedy ich potrzebuje muszę się naszukać bo z przyzwyczajenia
zaczynam od przekopywanie helpa a one mają własny dział (templates czy jakoś tak)
GRG
T.M.F.
Guest
Tue Jan 30, 2007 8:10 pm
Gregor napisał(a):
Quote:
"T.M.F." napisal:
if rst = '0' and clk='1' and clk'event then
a_tmp <= (a_tmp'range => '0');
elsif
clk='1' and clk'event then a_tmp <= a+1;
pewnie mu się nie podoba że w dwóch odgałęzieniach odpytujesz clk'event
(niby powinien to skrócić ale...) - najprościej przegrupować to wszystko tak
aby zbocze było badane tylko raz:
Nie, zdecydowanie nie podoba mu sie dodawanie:
+ can not have such operands in this context.
Jestem prawie pewien, ze na typie bit_vector nie moge przeprowadzac
takiej operacji. Problem w tym, ze nie wiem co zaladowac, zeby miec typ
std_logic_vector, laduje juz wszystkie moduly i nic.
--
Inteligentny dom -
http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.
Marcin Urbanowicz
Guest
Tue Jan 30, 2007 9:03 pm
T.M.F. napisał(a):
Quote:
A wiec proponuje zrobic uklad minimalny, sprawdzic w jakiej kostce
sie miescisz i potem jak Ci zostanie sporo miejsca to mozesz dodac
odczyt czy inne "wodotryski", bo wtedy niewiele to kosztuje...
Pewnie masz racje, tyle, ze jako zupelnie poczatkujacy z VHDLu
napisze takie babole, ze po jakims czasie lapiac sie za glowe latwiej
bedzie mi to napisac od nowa:)
Wez sie tak nie doluj bez potrzeby bo przeciez nie swieci garnki lepia
:-)
Ok, to prosze o pomoc, mam taki oto kod (to ma byc 20-bitowy licznik,
zerowany synchronicznie):
entity counter20 is
port(a : out bit_vector (19 downto 0);
clk : in bit;
rst : in bit);
end counter20;
architecture behv of counter20 is
signal a_tmp: bit_vector(19 downto 0);
begin
process(clk, rst)
begin
if rst = '0' and clk='1' and clk'event then
a_tmp <= (a_tmp'range => '0');
elsif
clk='1' and clk'event then a_tmp <= a+1;
end if;
end process;
a <= a_tmp;
end behv;
Problem w tym, ze na linii:
clk='1' and clk'event then a_tmp <= a+1;
wywala mi blad:
ERROR:HDLParsers:808 - Line ... + can not have such operands in this
context.
Hm, z mojej pobieżnej znajomości VHDL wynika że:
a) wektor a jest wektorem wyjściowym co oznacza, że nie może być
argumentem dodawania, bo nie można go "odczytać". Trzeba zmienić, o ile
dobrze pamiętam, na inout.
b) propnowałbym użycie wewnątrz procesu zmiennej typu unsigned i
liczenie na niej, a potem konwersję do typu bit_vector juz na zewnątrz
procesu
Marcin
Gregor
Guest
Tue Jan 30, 2007 9:33 pm
"T.M.F." napisal:
Quote:
Nie, zdecydowanie nie podoba mu sie dodawanie:
+ can not have such operands in this context.
Oczywiście masz racje - zasugerowałem się własnym błędem i nie przeczytałem
dokładnie komunikatu
Pod adresem :
http://members.chello.at/grzegorz12/tools.vhd znajdziesz parę
rożnych liczników - powinny być syntezowalne - zrobiłem na nich oscyloskop
Przy ich konstrukcji nie zastosowałem operatora "+" - krócej trwało zmajstrowanie
odpowiedniej funkcji logicznej niż szukanie "dlaczego ten $%^#$% nie
potrafi dodawać"
GRG
--
Tutaj sygnatura Grzegorza Domagały - jeśli chcesz wysłać do niego wiadomość
pisz pod adres grg1@chello.at i nie zapomnij dodać
"kielbaska dla cerbera" w treści albo Cerber zeżre twój list...
T.M.F.
Guest
Tue Jan 30, 2007 11:44 pm
Gregor napisał(a):
Quote:
"T.M.F." napisal:
Nie, zdecydowanie nie podoba mu sie dodawanie:
+ can not have such operands in this context.
Oczywiście masz racje - zasugerowałem się własnym błędem i nie przeczytałem
dokładnie komunikatu
Pod adresem :
http://members.chello.at/grzegorz12/tools.vhd znajdziesz parę
rożnych liczników - powinny być syntezowalne - zrobiłem na nich oscyloskop
Przy ich konstrukcji nie zastosowałem operatora "+" - krócej trwało zmajstrowanie
odpowiedniej funkcji logicznej niż szukanie "dlaczego ten $%^#$% nie
potrafi dodawać"
Dzieki. Co prawda z przykladami z twojej strony mialem pewien klopot,
ale nieoczekiwanie zadzialalo:
library ieee;
use ieee.std_logic_1164.all, ieee.numeric_std.all;
w efekcie mam juz typ std_logic_vector. Okazuje sie, ze na nim operacja
dodawania jest juz poprawna i moj projekt sie syntetyzuje
BTW. Wczesniej mialem linie:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
i o dziwo typ std_logic_vector byl nieznany. Czyzby ISE rozroznialo duze
i male litery? Jak dla mnie magia:)
No nic, biore sie za symulacje.
--
Inteligentny dom -
http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.
Goto page Previous 1, 2, 3