Maverick_ 15 11 марта, 2016 Опубликовано 11 марта, 2016 · Жалоба тут правда ещё придётся считывать с лампочек 64-х битный код, это наверное сложнее. входные данные заранее известные - проверка все таки :) На выходе схемы поставить компаратор для сравнения полученного результата с заранее рассчитанным результатом на ПК. Результат сравнения на светодиод Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 11 марта, 2016 Опубликовано 11 марта, 2016 · Жалоба При таком подходе и задаче ТС есть очень большая вероятность, что полученная схема не влезет в FPGA, а если влезет, то разведется на частоте менее мегагерца :( Верно, но я расчитывал, что частота ТС-у не важна, а FPGA достаточно жирная, так и вышло:). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 11 марта, 2016 Опубликовано 11 марта, 2016 · Жалоба Параметризацию никто не отменял. Можно сделать например для 4 или 8 бит проверить работоспособность, а потом поменять цифру в VHDL описании в generick/package 4 или 8 на 64 и всех делов ... В верилоге аналогично - parameter/define ... Любопытство почему 64 бита, а не 32/16/8 бит? то-есть если числа 64 бита, то "зачет", а если 32 - то не "зачет"... Видимо препод еще хочет устроить ловушку с симулятором... Или 64 бита - это более научно будет??? Больше триггеров в железке займет и можно будет отчитаться, что диплом повышенной научности, потому как занял на 50% больше триггеров... Да, видимо так... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kereokerekeke 0 11 марта, 2016 Опубликовано 11 марта, 2016 · Жалоба Этот алгоритм можно переписать на верилог почти в лоб, но, чтобы получить синтезируемую комбинаторную функцию нужно заменить while с неопределённым числом итераций на for с фиксированным числом итераций(так что синтезатор сможет развернуть цикл) и флагом прекращения цикла(синтезатор добавит пути обхода старших ступеней тела цикла по этому флагу). То есть вместо while(<loop_condition>){<loop body>} следует писать loop_enabled = 1'b1; for(i=0; i<n_max_iterations; i=i+1)begin if(!<loop_condition>)loop_enabled = 1'b0; if(loop_enabled) begin <loop body> end end И придётся математически доказать значение константы с максимально возможным числом итераций. Сам я никогда не пробовал так, может синтез и не пройдёт, хотя теоретически должен. UPD: А если loop_condition не зависит от счётчика цикла, то loop_enabled тут не нужен, поскольку loop_condition не будет меняться при пропуске циклов. Сделал так: module inversea (input wire [5:0]a, input wire clk, input wire [5:0]p, output reg [5:0]res); reg [5:0]u; reg [5:0]v; reg [5:0]r; reg [5:0]s; reg [5:0]x; reg [8:0]k; reg [3:0]i; initial begin r = 0; s = 1; k = 0; i = 0; end initial @(a or p) begin u <= p; v <= a; end always @(posedge clk) begin for(i=0; i<10; i=i+1)begin if(!(v>0)); if ((u >> 1) == 0) if ((r >> 1) == 0) begin u = u >> 1; r = r >> 1; k = k + 1; end else begin u = u >> 1; r = (r+p) >> 1; k = k + 1; end else if ((v >> 1) == 0) if ((s >> 1) == 0) begin k = k >> 1; s = s >> 1; k = k + 1; end else begin v = v >> 1; s = (s+p) >> 1; k = k + 1; end else begin x = u-v; end if (x > 0) begin u = x; r = r - s; if (r < 0) r = r + p; else begin v = -x; s = s - r; if (s < 0) s = s + r; end end if (r > p) r = r - p; if (r < 0) r = r + p; res = r; end end endmodule Если ставить маленькое количество повторений циклов - результат есть, но неверный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 11 марта, 2016 Опубликовано 11 марта, 2016 · Жалоба 2 kereokerekeke предлагаю делать через FSM для Вас это самый простой путь... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 11 марта, 2016 Опубликовано 11 марта, 2016 · Жалоба Сделал так: .... initial @(a or p) begin u <= p; v <= a; end always @(posedge clk) begin for(i=0; i<10; i=i+1)begin if(!(v>0)); if ((u >> 1) == 0) if ((r >> 1) == 0) begin u = u >> 1; r = r >> 1; k = k + 1; end else begin ...... endmodule Если ставить маленькое количество повторений циклов - результат есть, но неверный. Вот такие куски кода - это плохо.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 11 марта, 2016 Опубликовано 11 марта, 2016 · Жалоба ..я конечно не специалист, но помоему надо объяснить человеку что в ПЛИС цикл FOR не синтезируется, точнее синтезируется но не как цикл, а как размножатель чего нибудь. По этому можно о циклах с такими конструкциями забыть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 11 марта, 2016 Опубликовано 11 марта, 2016 · Жалоба ..я конечно не специалист, но помоему надо объяснить человеку что в ПЛИС цикл FOR не синтезируется, по этому можно о циклах с такими конструкциями забыть. синтезируется.... Пример описания 11 однотипных компараторов: library ieee; use ieee.std_logic_1164.all; library work; package Const_type is type my_array is array (0 to 10) of std_logic_vector (7 downto 0); end package; library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use work.Const_type.all; entity proverka is Port ( CLK : in std_logic; rst : in std_logic; x : my_array; y : my_array; s : out std_logic_vector (10 downto 0) ); end proverka; architecture behavioral of proverka is begin process (clk,rst) begin if (rst = '1') then for i in 0 to 10 loop s(i) <= '0'; end loop; elsif (CLK'event and CLK ='1') then for i in 0 to 10 loop if ( x(i) < y(i) ) then s(i) <= '1'; else s(i) <= '0'; end if; end loop; end if; end process; end behavioral; Просто используется для "размножения" однотипных схем до необходимого количества... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 11 марта, 2016 Опубликовано 11 марта, 2016 · Жалоба ..я конечно не специалист, но помоему надо объяснить человеку что в ПЛИС цикл FOR не синтезируется, точнее синтезируется но не как цикл, а как размножатель чего нибудь. По этому можно о циклах с такими конструкциями забыть. Дело не в цикле как в таковом, а в блокирующих назначениях, в отсутствии комментариев, в "подходе" в конце концов... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kereokerekeke 0 25 марта, 2016 Опубликовано 25 марта, 2016 · Жалоба Всем здравствуйте! Немного поменялась постановка задачи. Есть такой алгоритм: И такая схема: Нужно сделать реализацию алгоритма на verilog/VHDL. Главная цель - получить диаграммы из симулятора. На рельном железе запускаться не будет. Разрядность тоже можно понизить как минимум до 32 разрядов. Неясно много моментов. В силу своих знаний в сфере ПЛИС, элементы, вроде, сумматора или регистра сдвига реализовать я еще могу, а, например с контроллером возникают проблемы. Я так понимаю, что его нужно реализовывать как state machine. Так же не особо понятно, для чего в схеме используются триггеры u/v и wu и как реализовать тестовую логику в TL. Так же прикладываю статью, которой, собственно, пользуюсь. 1_New_Alg_Class_Inv.pdf Спасибо за любую помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 25 марта, 2016 Опубликовано 25 марта, 2016 · Жалоба Всем здравствуйте! Немного поменялась постановка задачи. Есть такой алгоритм: И такая схема... Нужно сделать реализацию алгоритма на verilog/VHDL. Главная цель - получить диаграммы из симулятора. На рельном железе запускаться не будет. Разрядность тоже можно понизить как минимум до 32 разрядов. Неясно много моментов. В силу своих знаний в сфере ПЛИС, элементы, вроде, сумматора или регистра сдвига реализовать я еще могу, а, например с контроллером возникают проблемы. Я так понимаю, что его нужно реализовывать как state machine. Так же не особо понятно, для чего в схеме используются триггеры u/v и wu и как реализовать тестовую логику в TL. Спасибо за любую помощь. в чем конкретно проблема в понимании FSM? Вы смотрели ссылку которую я Вам ранее дал? + CHAPTER 5, 6 "FPGA Prototyping by VHDL Examples - Xilinx Spartan-3 Version" Показывайте что Вы сделали и задавайте конкретные вопросы по реализации, иначе пишите в раздел "Предлагаю работу". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shamrel 0 25 марта, 2016 Опубликовано 25 марта, 2016 · Жалоба kereokerekeke, я бы вам посоветовал захотеть разобраться с темой. Нужно заставить себя интересоваться, а потом все пойдет как по маслу. Возьмите на кафедре отладку с ПЛИС, если ее нет или не дают, то приобретите хоть самую дешевую. Найдите в сети уроки по ПЛИС, прочитайте публикации уважаемого Иосифа Каршенбойма. Почитайте публикации по FPGA на Хабре, изучите соответствующий блог на easyelectronics. В сети очень много статей для начинающих на русском языке. И в конце концов, подпишитесь на соответствующий раздел нашего форума. Просмотрите темы, найдете массу полезных ссылок, сформируете ощущение предметной области. К сожалению, мне в своей инженерной практики приходилось часто менять направление, приходилось глубоко изучать СВЧ, программирование микроконтроллеров, включая различные RTOS, разводить на профессиональном уровне печатные платы, программировать под Linux. Теперь вот ПЛИС. И каждый раз было безумно трудно признать свою некомпетентность в новом вопросе и заставит себя изучать что-то практически с нуля. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 25 марта, 2016 Опубликовано 25 марта, 2016 · Жалоба Я так понимаю, что его нужно реализовывать как state machine. По автоматам можно вот тут посмотреть, начиная с 17 и далее https://youtu.be/a5kScSNd3es На HDL-языках автоматы немного не так создаются, но для общего развития, думаю, полезно будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dak 0 25 марта, 2016 Опубликовано 25 марта, 2016 · Жалоба По автоматам можно вот тут посмотреть, начиная с 17 и далее https://youtu.be/a5kScSNd3es На HDL-языках автоматы немного не так создаются, но для общего развития, думаю, полезно будет. Построение автоматов что на VHDL,что на Verilog подробно рассмотрено в книжках автора Pong Chu. http://academic.csuohio.edu/chu_p/rtl/index.html Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shamrel 0 25 марта, 2016 Опубликовано 25 марта, 2016 · Жалоба На HDL-языках автоматы немного не так создаются, но для общего развития, думаю, полезно будет. Раз уж пошла такая канитель, то смею рекомендовать свою статью по теме: Конечный автомат. Verilog Как раз для начинающих, как раз на пальцах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться