Jump to content

    
Sign in to follow this  

Recommended Posts

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

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

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

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

Share this post


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

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

Share this post


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

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

 

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

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

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

Share this post


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

 

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

Share this post


Link to post
Share on other sites
Сделал так:

 


....

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

 

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

 

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

 

Share this post


Link to post
Share on other sites

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

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

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

Share this post


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

 

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

Share this post


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

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

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

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites
Всем здравствуйте!

 

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

 

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

 

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

 

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

 

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

 

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

 

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

 

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

Share this post


Link to post
Share on other sites
Я так понимаю, что его нужно реализовывать как state machine.

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

https://youtu.be/a5kScSNd3es

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

Share this post


Link to post
Share on other sites
По автоматам можно вот тут посмотреть, начиная с 17 и далее

https://youtu.be/a5kScSNd3es

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

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

 

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

Share this post


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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this