|
помогите с оператором case и делением частоты, не работает( |
|
|
|
Mar 17 2014, 15:25
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 23-02-14
Пользователь №: 80 654

|
Всем доброго времени суток! Помогите разобраться с оператором case и делителем частоты. Решил сделать делитель частоты,но такой,чтобы можно было изменять частоту при изменении некоторого 5 разрядного числа, назовем его fm1. Может быть кому-то покажется странным, но вот мое творение для создания меандра: нужно сделать так, чтобы при разных значениях fm1 выбирались разные значения переменной f15_1. Потом исходя из этого через выбранное количество отсчетов фронтов f50k формируются пички, и по ним в следующем процессе делается меандр. Код frequency1Hz: process (f50k, fm1) variable f15: integer range 0 to 641:=0; variable f15_1: integer range 0 to 641:=0; begin if Clr = '1' then f15_1:=0; f15:=0; freq15<='0'; ELSIF true THEN if rising_edge(f50k) THEN if f15_1 = 0 then case fm1 is -- выбор значений f15_1 при разных значениях fm1 when "00000" => f15_1 := 16; when "00010" => f15_1 := 119; when "00011" => f15_1 := 104; when "00100" => f15_1 := 92; when "00101" => f15_1 := 83; when "00110" => f15_1 := 75; when "10110" => f15_1 := 64; when "00111" => f15_1 := 641; when others => null; end case; end if;
if f15=0 then f15 := f15_1; --присваиваем переменной выбранное значение freq15<='1'; else f15:=f15-1; -- отсчитываем назад до нуля и когда f15 снова станет 0, на длительность такта f50k появляется 1. freq15<='0'; end if; end if; end if; END PROCESS; freq15Hz: process (f50k) --делаем меандр begin if clr='1' then f15<='0';
elsif true then if rising_edge (f50k) then if freq15='1' then if f15='0' then f15<='1';
elsif true then f15<='0'; end if; end if; end if; end if;
end process; Но все это к сожалению не работает. Пытаюсь все это реализовать на АPA300 в Libero. После синтеза и просмотра результата в ModelSim получается вот такая картина(. Подскажите,пожалуйста,где ошибка,что не так, почему не работает! Заранее благодарен)!
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
Mar 18 2014, 01:43
|

Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 12-05-09
Из: Нижний Новгород
Пользователь №: 48 978

|
с читабельным форматированием это значит примерно вот так: CODE LIBRARY IEEE; USE IEEE.std_logic_1164.all; LIBRARY IEEE; USE IEEE.std_logic_unsigned.all; use IEEE.STD_LOGIC_ARITH.ALL;
ENTITY SinTR IS GENERIC( koef : INTEGER := 2 --:= 3 --:= 1 );
PORT ( TAKT : in std_logic; strob : in std_logic; sdvig : in std_logic; data_serial : in std_logic; Clr : in std_logic;
fout : out std_logic; Dfm : out std_logic; fmod_out : out std_logic_vector (4 downto 0) );
END SinTR;
ARCHITECTURE beh OF SinTR IS
signal fm1 : std_logic_vector (4 downto 0) := ( others => '0' ); signal ff256 : std_logic_vector (3 downto 0); signal freq2_5_1, f2_5, freq15, f15, f50k, freq50k, fm256, fm :std_logic := '0'; signal rs_s1, rs_s : std_logic_vector (41 downto 0):= (others => '0');
BEGIN -- -- << TAKT >> == 15 MHz --сначала делаем меандр до частоты 2,5 MHz, из него формируем уже частоту f50k (50 kHz) frequency2_5MHz: process (TAKT) variable f1: integer range 0 to koef :=0; begin if Clr = '1' then f1 := 0; freq2_5_1<='0'; ELSIF true THEN IF rising_edge(TAKT) THEN IF f1 = 0 THEN f1:=koef; freq2_5_1<='1'; ELSIF true THEN f1:=f1-1; freq2_5_1<='0'; END IF; END IF; END IF; END PROCESS;
freq2_5MHz: process (TAKT) begin if clr='1' then f2_5<='0';
elsif true then if rising_edge (TAKT) then if freq2_5_1='1' then if f2_5='0' then f2_5<='1';
elsif true then f2_5<='0'; end if; end if; end if; end if;
end process; -- делаем частоту f50k frequency50kHz: process (f2_5) variable f50k: integer range 0 to 25:=0; begin if Clr = '1' then f50k := 0;
freq50k<='0'; ELSIF true THEN IF rising_edge(f2_5) THEN IF f50k = 0 THEN f50k:=25; freq50k<='1'; ELSIF true THEN f50k:=f50k-1; freq50k<='0'; END IF; END IF; END IF; END PROCESS;
freq50kHz: process (f2_5) begin if clr='1' then f50k<='0';
elsif true then if rising_edge (f2_5) then if freq50k='1' then if f50k='0' then f50k<='1';
elsif true then f50k<='0'; end if; end if; end if; end if;
end process;
Fout <= f50k;-- сигнал подаем на выходной порт
frequency1Hz: process (f50k, fm1) -- формируем частоту по тому же принципу, что и f50k, но добавляем case видимо как-то неправильно(( variable f15: integer range 0 to 641:=0; variable f15_1: integer range 0 to 641:=0; begin if Clr = '1' then f15_1:=0; f15:=0; freq15<='0'; ELSIF true THEN if rising_edge(f50k) THEN if f15_1 = 0 then case fm1 is when "00000" => f15_1 := 16; when "00010" => f15_1 := 119; when "00011" => f15_1 := 104; when "00100" => f15_1 := 92; when "00101" => f15_1 := 83; when "00110" => f15_1 := 75; when "10110" => f15_1 := 64; when "00111" => f15_1 := 641; when others => null; end case; end if; if f15=0 then f15 := f15_1; freq15<='1'; else f15:=f15-1; freq15<='0'; end if; end if; end if; END PROCESS;
freq15Hz: process (f50k) --меандр begin if clr='1' then f15<='0'; elsif true then if rising_edge (f50k) then if freq15='1' then if f15='0' then f15<='1'; elsif true then f15<='0'; end if; end if; end if; end if; end process;
fm <= f15; --перезаписываем сигнал Dfm <= fm; --на выходной порт -----------дальше для загрузки fm1 mr1_1 : PROCESS ( strob ) BEGIN IF rising_edge(strob) THEN fm1<=rs_s1( 4 downto 0 ); END IF; END PROCESS;
fmod_out<=fm1;
msdvig : PROCESS ( sdvig ) BEGIN IF rising_edge(sdvig) THEN rs_s(41 downto 1)<=rs_s(40 downto 0); rs_s(0)<=data_serial; end if; end process;
process (takt,clr,rs_s1) begin if clr = '1' then rs_s1 <=( others => '0' ); elsif (takt'event and takt = '1') then rs_s1(41 downto 0) <= rs_s(41 downto 0); end if; end process; END beh; не ленитесь делать код читаемым. Что касается самой проблемы, то возможно её решение в процессе mr1_1 Код BEGIN IF rising_edge(strob) THEN fm1<=rs_s1( 4 downto 0 ); END IF; END PROCESS; fm1 загружается не синхронно относительно тактовой частоты f50k. Попробуйте так: Код mr1_1 : PROCESS (f50k) BEGIN IF rising_edge(f50k) THEN if strob = '1' then fm1<=rs_s1( 4 downto 0 ); end if; END IF; END PROCESS; при этом сигнал strob импульсный длительностью в 1 такт клока f50k
Сообщение отредактировал des00 - Mar 19 2014, 03:35
|
|
|
|
Сообщений в этой теме
gethan помогите с оператором case и делением частоты Mar 17 2014, 15:25 cerg19 Если честно не совсем понял где сигнал fm управляе... Mar 17 2014, 15:47 gethan Цитата(cerg19 @ Mar 17 2014, 19:47) Если ... Mar 17 2014, 16:05 gethan Цитата(cerg19 @ Mar 17 2014, 19:47) Если ... Mar 17 2014, 17:19 tdocs.su Цитата(gethan @ Mar 17 2014, 19:25) Всем ... Mar 17 2014, 15:48 gethan Цитата(cerg19 @ Mar 18 2014, 05:43) с чит... Mar 18 2014, 02:14 Zerg1 Вот так не проще?
CODE
library IEEE;
use IEEE.STD... Mar 19 2014, 09:01  gethan Цитата(Zerg1 @ Mar 19 2014, 13:01) Вот та... Mar 19 2014, 15:21   Zerg1 У меня вот что рисует: Mar 19 2014, 17:51    gethan Цитата(Zerg1 @ Mar 19 2014, 21:51) У меня... Mar 19 2014, 18:44 Dmitriyspb Цитата(gethan @ Mar 17 2014, 19:25) Всем ... Mar 18 2014, 02:37 gethan Цитата(Dmitriyspb @ Mar 18 2014, 06:37) П... Mar 18 2014, 04:24  Dmitriyspb Цитата(gethan @ Mar 18 2014, 08:24) Спаси... Mar 18 2014, 04:47   gethan Цитата(Dmitriyspb @ Mar 18 2014, 08:47) А... Mar 18 2014, 05:42    Dmitriyspb Цитата(gethan @ Mar 18 2014, 09:33) Я так... Mar 18 2014, 05:44     gethan Цитата(Dmitriyspb @ Mar 18 2014, 09:44) Т... Mar 18 2014, 07:00      iosifk Цитата(gethan @ Mar 18 2014, 11:00) Подел... Mar 18 2014, 10:14       Dmitriyspb Цитата(iosifk @ Mar 18 2014, 14:14) На са... Mar 19 2014, 02:31    sazh Цитата(gethan @ Mar 18 2014, 08:42) Пытаю... Mar 18 2014, 06:09 Zerg1 Тогда вот так
CODE
library IEEE;
use IEEE.STD_LOGI... Mar 20 2014, 04:15 gethan Цитата(gethan @ Mar 17 2014, 19:25) Всем ... Mar 20 2014, 17:22 Dmitriyspb Цитата(gethan @ Mar 20 2014, 21:22) Может... Mar 21 2014, 02:45 gethan Написал вот такой код: там два процесса. Сначала д... Mar 23 2014, 13:09 sazh Цитата(gethan @ Mar 23 2014, 16:09) Напис... Mar 24 2014, 03:31  Maverick Цитата(sazh @ Mar 24 2014, 05:31) Ох уж э... Mar 24 2014, 04:07   sazh Цитата(Maverick @ Mar 24 2014, 07:07) Ста... Mar 24 2014, 04:29    Maverick Цитата(sazh @ Mar 24 2014, 06:29) Это не ... Mar 24 2014, 04:34 andrew_b Цитата(gethan @ Mar 23 2014, 17:09) Напис... Mar 24 2014, 06:06
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|