VooDoo
|
 |
« : 19 Март 2006, 20:09:38 » |
|
есть приимерно такая конструкция:
entity schema is generic ([highlight]N[/highlight][/b]:integer) portmap (a:mytype) end schema;
а mytype должен быть такого типа: type mytype is array(1 to [highlight]N[/highlight][/b]) of bit_vector(1 to 9);
так как мне определить тип, если его размерность передается через generic
|
|
« Последнее редактирование: 19 Март 2006, 20:10:27 от VooDoo »
|
Записан
|
Are you human? - My body is. Do you feel pain? - My body does. ..- --- --- -.. --- ---
|
|
|
Amon
Новенький
Репутация: +1/-0
Offline
Пол: 
Сообщений: 0
|
что-то мне подсказывает что никак  ибо VHDL - это не язык программирования. это язык описания схем. а любую схему можно представить в виде транзисторов, резисторов и прочего. ну и как ты предлагаешь спаять на транзисторах регистр переменной длины?  я уже представляю резиновую микросхему памяти- надул- стало 10 гиг. сплюснул - опа, уже 512 мег
|
|
|
Записан
|
|
|
|
VooDoo
|
А ты понимаешь что бывает синтезируемое описание и НЕсинтезируемое.
|
|
|
Записан
|
Are you human? - My body is. Do you feel pain? - My body does. ..- --- --- -.. --- ---
|
|
|
Amon
Новенький
Репутация: +1/-0
Offline
Пол: 
Сообщений: 0
|
да, я в курсе. однако меня не интересует то, что нельзя потрогать паяльником  а вообще если тебе надо чисто теоритически, то попробуй поизголятся с "range <>"
|
|
|
Записан
|
|
|
|
Terros
Новенький
Репутация: +1/-0
Offline
Сообщений: 1
Я люблю Гродненский форум!
|
:)Ребята,кто разбирается в Vhdl?? помогите решит следующую задачу: 1. Написать на языке Vhdl "Автомат элекрического замка, с кнопками: 10 цыфрових, “вибор” та “запись кода”. 2. Написать на языке Vhdl Счетчик двоичный 4х-разрядный с возможностью параллельной записи состояния счетчика... За ранее благодарен.... в помощи... 
|
|
|
Записан
|
|
|
|
VooDoo
|
 хех чувак. Сколько денег? а если серьёзно, то надо знать до какой степени тебе это описывать. Можно просто написать функцию opendoor() и всё а можно описать все девайсы, допустим на элементах или-не. То же самое со счётчиком. P.S. конкретизируй P.P.S насчёт предыдущих постов: как оказалось такое реализовать нельзя! ибо нельзя описывать подобие динамических массивов на vhdl
|
|
|
Записан
|
Are you human? - My body is. Do you feel pain? - My body does. ..- --- --- -.. --- ---
|
|
|
Amon
Новенький
Репутация: +1/-0
Offline
Пол: 
Сообщений: 0
|
ну так а я про что говорил ? что-то мне подсказывает что никак Подмигивание
|
|
|
Записан
|
|
|
|
VooDoo
|
ну так а я про что говорил ?
Ты просто говорил, что нельзя это реализовать на транзисторах. Ты же не могёшь использовать в описани integer ибо синтезироваться не будет. Но ведь он же есть и им пользоваться можно.
|
|
|
Записан
|
Are you human? - My body is. Do you feel pain? - My body does. ..- --- --- -.. --- ---
|
|
|
Amon
Новенький
Репутация: +1/-0
Offline
Пол: 
Сообщений: 0
|
я говорил что это сделать нельзя. и чтоб было понятней почему - объяснил на пальцах (на транзисторах). ибо перед этим я долго вкуривал google на предмет VHDL-а (сам я больше увлекаюсь Verilog-ом). и согласись, получить мой ответ гораздо приятнее, чем что-нибудь в таком стиле: так как мне определить тип, если его размерность передается через generic никак. кури google аффтар хотя как я начинаю замечать, подавляющее большинство понимает только второй вариант.
|
|
« Последнее редактирование: 30 Май 2006, 20:06:37 от Amon »
|
Записан
|
|
|
|
Abraziv
Новенький
Репутация: +0/-0
Offline
Сообщений: 2
|
 |
« Ответ #9 : 16 Декабрь 2012, 04:43:42 » |
|
Всем привет описываю проект на VHDL , в проект входит описание автомата. На временных диаграммах состояние автомата обозначается как наинициализированное , если убрать память ( закоментировать) , то времянки начинают показывать первоначальное значение, пожалуйста подскажите что я делаю не так  ? TRIG1_AVT : LATCH port map( CLK => CLK,D => exсit_fun_line(0),Q => state_line(0)); TRIG2_AVT : LATCH port map( CLK => CLK,D => exсit_fun_line(1),Q => state_line(1));
START : process begin
-- функции возбуждения памяти (триггеров)
exсit_fun_line(0) <= ( (state_line(0) and not CS ) or ( state_line(0) and not WR_RD and not SH ) or ( state_line(1) and state_line(0) and not SH ) or ( state_line(1) and not WR_RD and not SH and CS ) ) ; exсit_fun_line(1) <= (state_line(1) and not CS ) or ( not state_line(1)and not WR_RD and not SH and CS ) or (state_line(0) and not WR_RD and not SH and CS) or (not state_line(1) and not state_line(0) and WR_RD and CS) ;
stat <= state_line; --функции возбуждения выходов
line_avtomat_control(9) <= ( not CS or ( not WR_RD and not SH ) or ( WR_RD and SH ) or ( not state_line(1) and not state_line(0) and WR_RD ) or ( state_line(1) and state_line(0) and WR_RD ) ); line_avtomat_control( <= ( not CS or ( state_line(1) and WR_RD ) or ( WR_RD and SH ) or ( state_line(1) and state_line(0) and not SH ) or ( not state_line(1) and not state_line(0) and not WR_RD and not SH) or ( state_line(1) and WR_RD ) ) ; line_avtomat_control(7) <= ( not CS or ( WR_RD and SH ) or ( state_line(1) and state_line(0) and WR_RD ) or ( state_line(0) and not WR_RD and not SH ) );
line_avtomat_control (6) <= ( not CS or ( WR_RD and not SH ) or ( state_line(0) and not SH ) or ( state_line(1) and not SH) );
line_avtomat_control(5) <= ( not CS or ( WR_RD and not SH ) or ( state_line(0) and not SH ) or (not state_line(1) and not SH));
line_avtomat_control(4) <= ( not CS or ( WR_RD and not SH ) or ( not state_line(0) and not state_line(1) and not SH ) or ( state_line(1) and not SH ) ); line_avtomat_control(3) <= ( ( not state_line(0) and not WR_RD and not SH and CS ) or ( not state_line(1) and WR_RD and SH and CS ) or ( state_line(0) and WR_RD and SH and CS ) or ( not state_line(1) and state_line(0) and not SH and CS ) );
line_avtomat_control(2) <= ( ( not state_line(1) and not WR_RD and not SH and CS) or ( not state_line(1) and WR_RD and SH and CS ) or ( not state_line(1) and not state_line(0) and WR_RD and CS ) or ( state_line(0) and WR_RD and SH and CS ) or (state_line(1) and not state_line(0) and not WR_RD and not SH and CS ) );
line_avtomat_control(1) <= ( (state_line(1) and not state_line(0) and not SH and CS ) or ( not state_line(1) and not WR_RD and not SH and CS) or ( not state_line(1) and WR_RD and SH and CS ) or ( state_line(0) and WR_RD and SH and CS) ); line_avtomat_control(0) <= ( WR_RD or (not CS ) or ( state_line(1) and state_line(0) and not SH ))after 10 ns;
out_TR <= line_avtomat_control;
--PARITET <= ( line_trigger(0) xor line_trigger(1) xor line_trigger(2) );
--OUT_TR <= line_avtomat_control;
wait for 5 ns;
end process;
если закомментировать: TRIG1_AVT : LATCH port map( CLK => CLK,D => exсit_fun_line(0),Q => state_line(0)); TRIG2_AVT : LATCH port map( CLK => CLK,D => exсit_fun_line(1),Q => state_line(1)); , то времянки начинают, что то показывать, где я ошибся???
|
|
|
Записан
|
|
|
|
egor22013
Новенький
Репутация: +0/-0
Offline
Сообщений: 1
|
Ребят, есть вопрос, помогите. Мне нужно написать код на VHDL фазовой автоподстройки частоты. Вроде написал, но проверяя его в программе modelsim вижу, что сигналу outbuf не присваивается значение, а, соответственно, и код неверный. Подскажите, где ошибка?
Код: ______________
Library IEEE; use IEEE.std_logic_1164.all; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity diplom is port (vhod: in std_logic; rst: in std_logic; IDCLK: in std_logic; KCLK: in std_logic; vyhod: out std_logic); end diplom;
architecture behaviour of diplom is signal carry, borrow, direction, idout: std_logic; signal outbuf: std_logic; begin process(rst,vhod,outbuf) begin if rst='1' then outbuf<='0'; end if; end process; direction<= vhod xor outbuf; process(kclk,rst) variable k:integer range 0 to 15; begin if rst='1' then k:=0; elsif kclk='1' and kclk'event then if carry='1' then carry<= '0'; end if; if borrow='1' then borrow<='0'; end if; if direction='1' then if k=15 then k:=0; carry<='1'; else k:=k+1; end if; else if k=0 then k:=15; borrow<='1'; else k:=k-1; end if; end if; end if; end process; process(idclk) variable m: std_logic; begin if idclk='1' and idclk'event then if carry='1' then idout <= '1'; elsif borrow='1' then idout <= '0'; elsif m='0' then idout <= '1'; m :='1'; else idout <= '0'; m := '0'; end if; end if; end process; process(idout,rst) variable k:integer range 0 to 127; begin if rst='1' then k:=0; elsif idout='1' and idout'event then if k=127 then k:=0; outbuf<= not outbuf; else k:=k+1; end if; end if; end process; vyhod<= outbuf; end behaviour;
|
|
|
Записан
|
|
|
|
Abraziv
Новенький
Репутация: +0/-0
Offline
Сообщений: 2
|
Потому что сигналу outbuf не было присвоено начальное значение. Моделсим считает, что перво начальное значение U (Uninitialized), поэтому так получается. При объявление сигнала outbuf проинициализируйте его: signal outbuf: std_logic := '0';
|
|
|
Записан
|
|
|
|
|