Перейти к содержанию
    

тут правда ещё придётся считывать с лампочек 64-х битный код, это наверное сложнее.

входные данные заранее известные - проверка все таки :)

На выходе схемы поставить компаратор для сравнения полученного результата с заранее рассчитанным результатом на ПК.

Результат сравнения на светодиод

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При таком подходе и задаче ТС есть очень большая вероятность, что полученная схема не влезет в FPGA, а если влезет, то разведется на частоте менее мегагерца :(

Верно, но я расчитывал, что частота ТС-у не важна, а FPGA достаточно жирная, так и вышло:).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Параметризацию никто не отменял. Можно сделать например для 4 или 8 бит проверить работоспособность, а потом поменять цифру в VHDL описании в generick/package 4 или 8 на 64 и всех делов ...

В верилоге аналогично - parameter/define ...

 

Любопытство почему 64 бита, а не 32/16/8 бит?

то-есть если числа 64 бита, то "зачет", а если 32 - то не "зачет"...

Видимо препод еще хочет устроить ловушку с симулятором... Или 64 бита - это более научно будет??? Больше триггеров в железке займет и можно будет отчитаться, что диплом повышенной научности, потому как занял на 50% больше триггеров... Да, видимо так...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Этот алгоритм можно переписать на верилог почти в лоб, но, чтобы получить синтезируемую комбинаторную функцию нужно заменить 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

 

Если ставить маленькое количество повторений циклов - результат есть, но неверный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 kereokerekeke

предлагаю делать через FSM

для Вас это самый простой путь...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал так:

 


....

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

 

Если ставить маленькое количество повторений циклов - результат есть, но неверный.

 

Вот такие куски кода - это плохо..

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..я конечно не специалист, но помоему надо объяснить человеку что в ПЛИС цикл FOR не синтезируется,

точнее синтезируется но не как цикл, а как размножатель чего нибудь.

По этому можно о циклах с такими конструкциями забыть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..я конечно не специалист, но помоему надо объяснить человеку что в ПЛИС цикл 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;

 

Просто используется для "размножения" однотипных схем до необходимого количества...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..я конечно не специалист, но помоему надо объяснить человеку что в ПЛИС цикл FOR не синтезируется,

точнее синтезируется но не как цикл, а как размножатель чего нибудь.

По этому можно о циклах с такими конструкциями забыть.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем здравствуйте!

 

Немного поменялась постановка задачи.

 

Есть такой алгоритм:

 

post-90799-1458900273_thumb.jpg

 

post-90799-1458900297_thumb.jpg

 

И такая схема:

 

post-90799-1458900363_thumb.jpg

 

Нужно сделать реализацию алгоритма на verilog/VHDL. Главная цель - получить диаграммы из симулятора. На рельном железе запускаться не будет. Разрядность тоже можно понизить как минимум до 32 разрядов.

 

Неясно много моментов. В силу своих знаний в сфере ПЛИС, элементы, вроде, сумматора или регистра сдвига реализовать я еще могу, а, например с контроллером возникают проблемы. Я так понимаю, что его нужно реализовывать как state machine.

 

Так же не особо понятно, для чего в схеме используются триггеры u/v и wu и как реализовать тестовую логику в TL.

 

Так же прикладываю статью, которой, собственно, пользуюсь.

 

1_New_Alg_Class_Inv.pdf

 

Спасибо за любую помощь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем здравствуйте!

 

Немного поменялась постановка задачи.

 

Есть такой алгоритм:

 

И такая схема...

 

Нужно сделать реализацию алгоритма на verilog/VHDL. Главная цель - получить диаграммы из симулятора. На рельном железе запускаться не будет. Разрядность тоже можно понизить как минимум до 32 разрядов.

 

Неясно много моментов. В силу своих знаний в сфере ПЛИС, элементы, вроде, сумматора или регистра сдвига реализовать я еще могу, а, например с контроллером возникают проблемы. Я так понимаю, что его нужно реализовывать как state machine.

 

Так же не особо понятно, для чего в схеме используются триггеры u/v и wu и как реализовать тестовую логику в TL.

 

Спасибо за любую помощь.

в чем конкретно проблема в понимании FSM?

Вы смотрели ссылку которую я Вам ранее дал? + CHAPTER 5, 6 "FPGA Prototyping by VHDL Examples - Xilinx Spartan-3 Version"

Показывайте что Вы сделали и задавайте конкретные вопросы по реализации, иначе пишите в раздел "Предлагаю работу".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Возьмите на кафедре отладку с ПЛИС, если ее нет или не дают, то приобретите хоть самую дешевую. Найдите в сети уроки по ПЛИС, прочитайте публикации уважаемого Иосифа Каршенбойма. Почитайте публикации по FPGA на Хабре, изучите соответствующий блог на easyelectronics. В сети очень много статей для начинающих на русском языке.

И в конце концов, подпишитесь на соответствующий раздел нашего форума. Просмотрите темы, найдете массу полезных ссылок, сформируете ощущение предметной области.

 

К сожалению, мне в своей инженерной практики приходилось часто менять направление, приходилось глубоко изучать СВЧ, программирование микроконтроллеров, включая различные RTOS, разводить на профессиональном уровне печатные платы, программировать под Linux. Теперь вот ПЛИС. И каждый раз было безумно трудно признать свою некомпетентность в новом вопросе и заставит себя изучать что-то практически с нуля.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так понимаю, что его нужно реализовывать как state machine.

По автоматам можно вот тут посмотреть, начиная с 17 и далее

https://youtu.be/a5kScSNd3es

На HDL-языках автоматы немного не так создаются, но для общего развития, думаю, полезно будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По автоматам можно вот тут посмотреть, начиная с 17 и далее

https://youtu.be/a5kScSNd3es

На HDL-языках автоматы немного не так создаются, но для общего развития, думаю, полезно будет.

Построение автоматов что на VHDL,что на Verilog подробно рассмотрено в книжках автора Pong Chu.

 

http://academic.csuohio.edu/chu_p/rtl/index.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На HDL-языках автоматы немного не так создаются, но для общего развития, думаю, полезно будет.

Раз уж пошла такая канитель, то смею рекомендовать свою статью по теме: Конечный автомат. Verilog

Как раз для начинающих, как раз на пальцах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...