реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Как можно оптимизировать код?
keeka
сообщение Oct 13 2011, 19:45
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 15-12-10
Из: Москва
Пользователь №: 61 640



Добрый день, народ.

Закончил свою первую работу - модулятор ЧМ2.
Код написан на VHDL.
Подскажите, пожалуйста, что можно было сделать лучше, оптимальней, чтобы лучше работало. Чувствую, что сделал все очень корявоsm.gif
на вход clk подается clock, на вход reset - информационные биты. Все в формате boolean. Ну и выход в формате integer.

Прикрепленный файл  fsk_modulator.vhd ( 1.21 килобайт ) Кол-во скачиваний: 237
Go to the top of the page
 
+Quote Post
eugen_pcad_ru
сообщение Oct 14 2011, 04:44
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 642
Регистрация: 15-11-07
Пользователь №: 32 353



Код не видел пока. Вопрос: фаза формируемого сигнала непрерывная? Если нет, то имеет смысл переделать. Если непрерывная, то может пуcть работает?wink.gif


--------------------
Правильно сформулированый вопрос содержит в себе половину ответа.
P.S.: Некоторые модераторы в качестве ответа так навязчиво предлагают посетить свой сайт, что иначе как саморекламу такие действия интерпретировать сложно.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Oct 14 2011, 04:51
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Что это такое?
Код
process(clk)
begin
   --to check the rising edge of the clock signal
if (reset='0') then --(reset='1' and rising_edge(clk)) then    
        c_clk <= 0;
        c_clk <= c_clk + 1;
Go to the top of the page
 
+Quote Post
keeka
сообщение Oct 14 2011, 08:06
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 15-12-10
Из: Москва
Пользователь №: 61 640



Цитата
Код не видел пока. Вопрос: фаза формируемого сигнала непрерывная? Если нет, то имеет смысл переделать. Если непрерывная, то может пуcть работает?wink.gif


фаза непрерывная.

Цитата
process(clk)
begin
--to check the rising edge of the clock signal
if (reset='0') then --(reset='1' and rising_edge(clk)) then
c_clk <= 0;
c_clk <= c_clk + 1;


Забыл из кода комменты убрать лишние. Идея тут в том, что я накапливаю переменную c_clk определенное количество тактов clk при reset=0 и другое количество тактов, если reset=1. так и формирую разные частоты - с разной скоростью беру отсчеты из массива значений синуса.


Посмотрел еще раз код повнимательнее. Лишний раз обнуляю c_clk. Исправил. теперь вот так:

Цитата
process(clk)
begin

if (reset='0') then
c_clk <= c_clk + 1;
if c_clk = 4 then
dataout <= sine(i);
i <= i + 1;
c_clk <= 0;
elsif (i = 29) then
i <= 0;
end if;
elsif (reset='1') then
c_clk <= c_clk + 1;
if c_clk = 1 then
dataout <= sine(i);
i <= i + 1;
c_clk <= 0;
elsif (i = 29) then
i <= 0;
end if;
end if;
end process;


Сообщение отредактировал keeka - Oct 14 2011, 08:01
Go to the top of the page
 
+Quote Post
DuHast
сообщение Oct 14 2011, 08:14
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797



а "rising_edge(clk)" где у Вас? В моделсиме Ваш процесс будет запускаться по кождомфронту сигнала clk, а вот синтезатор выдаст ошибку при компиляции.
Go to the top of the page
 
+Quote Post
keeka
сообщение Oct 14 2011, 08:44
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 15-12-10
Из: Москва
Пользователь №: 61 640



Там по rising_edge ранее запускалась команда считывании отсчета из таблицы, а теперь я это делаю по сигналу c_clk, накапливая его.
Приложил тестбенч, заодно и модуль. В Isim работает.

Прикрепленный файл  fsk_modulator.vhd ( 1.02 килобайт ) Кол-во скачиваний: 158


Прикрепленный файл  tb_fsk_modulator.vhd ( 1.05 килобайт ) Кол-во скачиваний: 128
Go to the top of the page
 
+Quote Post
DuHast
сообщение Oct 16 2011, 10:04
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797



У Вас сигнал clk стоит в списке чуствительности процесса, а в самом процессе этот сигнал ни как не используется, это обязательно приведет к тому, что результаты симуляции будут не верные.
Go to the top of the page
 
+Quote Post
Koluchiy
сообщение Oct 16 2011, 16:06
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 972
Регистрация: 12-04-09
Из: Москва
Пользователь №: 47 543



Цитата
на вход clk подается clock, на вход reset - информационные биты

Чтобы враги не догадались? sm.gif
Go to the top of the page
 
+Quote Post
keeka
сообщение Oct 16 2011, 19:34
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 15-12-10
Из: Москва
Пользователь №: 61 640



Цитата(DuHast @ Oct 16 2011, 14:04) *
У Вас сигнал clk стоит в списке чуствительности процесса, а в самом процессе этот сигнал ни как не используется, это обязательно приведет к тому, что результаты симуляции будут не верные.


Поясните или дайте ссылку, пожалуйста, где почитать об этом случае.

Цитата
Чтобы враги не догадались?


Раскусил
Go to the top of the page
 
+Quote Post
VladimirB
сообщение Oct 16 2011, 20:21
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219



Цитата(keeka @ Oct 16 2011, 23:34) *
Поясните или дайте ссылку, пожалуйста, где почитать об этом случае.
Раскусил

Самое главное, надо определится c назначением этой первой работы:
1) если надо нарисовать в ISIM временную диаграмму - то вы цели достигли.
2) если надо в качестве отчёта о прослушанных лекциях по VHDL написать и сдать преподу код - то
на "два с плюсом" или м.б. на "три с двумя минусами" вы чего-то понаписали в соответствии со стандартом.
3) и самый плохой вариант если надо реализовать это в ПЛИС и получить работающую прошивку - ISE там вас сразу пошлёт нахрен, потому что, то что у вас написано при синтезе в железо даст совершенно не то, что вы хотели. Если вы хотите работать с железом - то вам очень нужно читать книжки по цифровой смехотехнике (триггеры, логика, синхронные счётчики, регистры, мультиплексоры, дешифраторы и т.д.) и книжки (даташиты) про внутреннее устройство ПЛИС, а уже потом снова брать в руки HDL. Ошибка не в коде, который у вас успешно симулируется - ошибка у вас в голове и её в двух словах без базовых знаний не опишешь.
Go to the top of the page
 
+Quote Post
keeka
сообщение Oct 17 2011, 04:49
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 15-12-10
Из: Москва
Пользователь №: 61 640



Цитата(VladimirB @ Oct 17 2011, 00:21) *
Самое главное, надо определится c назначением этой первой работы:
1) если надо нарисовать в ISIM временную диаграмму - то вы цели достигли.
2) если надо в качестве отчёта о прослушанных лекциях по VHDL написать и сдать преподу код - то
на "два с плюсом" или м.б. на "три с двумя минусами" вы чего-то понаписали в соответствии со стандартом.
3) и самый плохой вариант если надо реализовать это в ПЛИС и получить работающую прошивку - ISE там вас сразу пошлёт нахрен, потому что, то что у вас написано при синтезе в железо даст совершенно не то, что вы хотели. Если вы хотите работать с железом - то вам очень нужно читать книжки по цифровой смехотехнике (триггеры, логика, синхронные счётчики, регистры, мультиплексоры, дешифраторы и т.д.) и книжки (даташиты) про внутреннее устройство ПЛИС, а уже потом снова брать в руки HDL. Ошибка не в коде, который у вас успешно симулируется - ошибка у вас в голове и её в двух словах без базовых знаний не опишешь.


Ну, идею я понял, спасибо за комментарий.
Хотя было бы больше конкретики, мне было бы проще в тоннах литературы найти то, что нужно.

Назначение работы:начинающий самоучка разработчик алгоритмов пытается что-то делать sm.gif

Сообщение отредактировал keeka - Oct 17 2011, 04:51
Go to the top of the page
 
+Quote Post
DuHast
сообщение Oct 17 2011, 11:18
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 314
Регистрация: 13-07-06
Из: Москва
Пользователь №: 18 797



Цитата(keeka @ Oct 17 2011, 08:49) *
Хотя было бы больше конкретики, мне было бы проще в тоннах литературы найти то, что нужно.

Если Вы не знаете что такое тригер, счетчик, сдвиговый регистр и т.д., то сночало ситайте любой учебник "Цифровая схемотехника". Если уже знаете, но откройте любой учебник по VHDL и найдите как эти элементы описываются при помощи этого языка.
На форуме ссылок на литературу полно. Удачи.
Go to the top of the page
 
+Quote Post
yes
сообщение Oct 17 2011, 15:23
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



Цитата(keeka @ Oct 17 2011, 08:49) *
Хотя было бы больше конкретики, мне было бы проще в тоннах литературы найти то, что нужно.

Назначение работы:начинающий самоучка разработчик алгоритмов пытается что-то делать sm.gif


опасаюсь гнева сообщества Жsm.gif, но позволю все-таки высказать крамольную мысль - разработчику алгоритмов не обязательно читать даташиты на ПЛИС и о триггере можно иметь самое общее представление.
по крайней мере я знаю таких профессионалов, которые пишут годный код для сложных алгоритмов

из документации нужно посмотреть RTL или synthesis coding style
это можно либо считать как набор шаблонов и наполнять их смыслом, либо разобраться с тем, что же эти шаблоны представляют на физическом уровне

можно (и по-моему нужно) взять тулы (synplify или precision) для синтеза и скормить им код - по отчетам разбираться и смотреть доки/хелпы
Go to the top of the page
 
+Quote Post
VladimirB
сообщение Oct 17 2011, 18:30
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 614
Регистрация: 12-06-09
Из: рядом с Москвой
Пользователь №: 50 219



Цитата(yes @ Oct 17 2011, 19:23) *
опасаюсь гнева сообщества Жsm.gif, но позволю все-таки высказать крамольную мысль - разработчику алгоритмов не обязательно читать даташиты на ПЛИС и о триггере можно иметь самое общее представление...

Ну собственно человек прочитал ваши мысли + книжку про VHDL, и разработал "алгоритм", который успешно симулируется.

А я, например, не читал не одной книжки про VHDL и даже не знаю толком его синтаксис (пользуюсь CTRL+С CTRL+V и готовыми шаблонами конструкций из ISE). В симулятор заглядываю крайне редко, в основном чтобы потестить сторонние модули. Однако, прошивки на VHDL пишу регулярно - и всё работает в железе. Плюс могу ещё бонусом к прошивке принципиальную схему и печатную плату разработать с каким-нибудь Virtex6 и АЦП на 1GSPS.
Go to the top of the page
 
+Quote Post
keeka
сообщение Oct 18 2011, 12:23
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 15-12-10
Из: Москва
Пользователь №: 61 640



Мне на самом деле очень интересна тема автоматической генерации HDL-кода.
Скажем, разработчик алгоритмов создал модель, к примеру в матлабе, отладил ее, а дальше HDL-Coder матлабовский генерит код, а разработчик уже отлаживает его вручную.
Там же по сути можно код генерить для конкретной ПЛИС, в составе конкретной отладочной платы. Я давно занимаюсь этим вопросом, но пока не вдавался глубоко именно в реализацию в ПЛИС, больше разбирался, каким образом можно генерить код.

Как считаете, такой метод разработки заслуживает жизни? Или прошивки, полученные таким путем на порядок медленнее и объемнее написанных вручную?

По сути ведь если идеализировать такую ситуацию, разработчику вообще не обязательно уметь программировать.

Сообщение отредактировал keeka - Oct 18 2011, 12:23
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01486 секунд с 7
ELECTRONIX ©2004-2016