0 / 0 / 0
Регистрация: 11.12.2014
Сообщений: 56
1

Многофункциональный регистр (МФР) на языке VHDL

27.03.2016, 12:58. Показов 511. Ответов 0
Метки нет (Все метки)

Всем привет , при реализации регистра возникли некоторые сложности .
Помогите плз найти ошибку при сдвиге вправо (обр.код), и совсем не понятно как сделать : Загрузка суммы: сумма количества нулей в четных и единиц в нечетных разрядах в канале 1 и количества нулей четных разрядах в канале 2




Код
Состояние входов	Микрооперация
CLR	EN	Y0	Y1	
1	X	X	X	Асинхронная установка в ‘0’

0	1	0	0	Параллельная загрузка по каналу 1

0	1	0	1	Сдвиг влево на один разряд

0	1	1	0	Арифметический сдвиг вправо (обр. код)

0	1	1	1	Загрузка суммы: сумма количества нулей в четных и единиц в нечетных разрядах в канале 1 и количества нулей четных разрядах в канале 2

Код
library IEEE;
use IEEE.std_logic_1164.all;

-- Описание интерфейса проекта;

entity MFR is
    port (
        		x0: in BIT;
        		x1: in BIT;
        		x2: in BIT;
        		x3: in BIT;
        		z0: in BIT;
        		z1: in BIT;
        		z2: in BIT;
        		z3: in BIT;
   		SI: in BIT;
         		Y0: in BIT; 
   		Y1: in BIT;
   		EN: in BIT;
        		CLK: in BIT; 
   		CLR: in BIT;
        		q0: buffer BIT;
        		q1: buffer BIT;
        		q2: buffer BIT;
        		q3: buffer BIT
    	);
end MFR;

-- Описание архитектуры проекта;

		architecture MFR_arch of MFR is

-- Объявление внутренних сигналов для связывания экземпляров компонентов;

	signal s1: integer range 0 to 4;
	signal s2: integer range 0 to 4;
	signal s3: integer range 0 to 8;

-- Объявление компонента POZ, в котором с функциональным преобразованием совмещено преобразование типов;

	COMPONENT POZ
		PORT (
D0: in BIT;
		      		D1: in BIT;
		      		D2: in BIT;
		      		D3: in BIT;
		      		F: out integer range 0 to 4
		      	  );
	end COMPONENT; 

-- Объявление компонента SM;

	COMPONENT SM
		PORT (
A: in integer range 0 to 4;
		      		B: in integer range 0 to 4;
		      		S: out integer range 0 to 8
		           );
	end COMPONENT;

-- Объявление компонента RG;
	
	COMPONENT RG
		PORT (
SI: in BIT;
SMM: in integer range 0 to 8;
				D0: in BIT;
 				D1: in BIT;
 				D2: in BIT;
D3: in BIT;
Y0: in BIT; 
Y1: in BIT; 
EN: in BIT;
 				CLK: in BIT; 
CLR: in BIT;
		      	Q0: buffer BIT;
		      	Q1: buffer BIT;
		      	Q2: buffer BIT;
		      	Q3: buffer BIT
		   );
	end COMPONENT;

-- Объявление экземпляров компонентов и описание их связей;
	
Begin
-- Объявление экземпляров компонента POZ с именами  DD1 и DD2;

			DD1: POZ 
				PORT MAP (
							D0 =>x0,
							D1 =>x1,
							D2 =>x2,
							D3 =>x3,
							F => s1
					          );
			DD2: POZ
				PORT MAP (
							D0 =>z0,
							D1 =>z1,
							D2 =>z2,
							D3 =>z3,
							F => s2
					         );	
					
-- Объявление экземплярa компонента SM;	
			DD3: SM
				PORT MAP (
					       		A => s1,
							B=> s2,
							S => s3
					           );						
-- Объявление экземплярa компонента RG;				
					
			DD4: RG
				PORT MAP (
							SI =>SI,
SMM =>s3,
							D0 => z0,
D1 => z1, 
D2 => z2,
      							D3 => z3,
Y0 => Y0,
Y1 => Y1,
EN => EN,
 							CLK => CLK, 
							CLR => CLR,
							Q0 => q0,
							Q1 => q1,
							Q2 => q2,
							Q3 => q3
						    );			
					
		
	  end MFR_arch;
-- Окончание структурной части описания проекта и начало поведенческого описания компонентов;	  
library IEEE;
use IEEE.std_logic_1164.all;
-- Описание интерфейса entity компонента в точности совпадает с описанием интерфейса при объявлении компонента;
 
entity POZ is
		PORT (
		      D0: in BIT;
		      D1: in BIT;
		      D2: in BIT;
		      D3: in BIT;
		      F: out integer range 0 to 4
		      );
		end POZ;
-- Поведенческое описание архитектуры  компонента POZ;
	architecture RTY_arch of POZ is
begin
	process (D0,D1,D2,D3)
 variable D: BIT_VECTOR (3 downto 0);
 begin
 D:= D3 & D2 & D1 & D0;
 case D is
 		when "0000" => F<= 0;
 		when "0001" => F<= 1;
 		when "0010" => F<= 1;
 		when "0011" => F<= 2;
 		when "0100" => F<= 1;
 		when "0101" => F<= 2;
 		when "0110" => F<= 2;
 		when "0111" => F<= 3;
 		when "1000" => F<= 1;
 		when "1001" => F<= 2;
 		when "1010" => F<= 2;
 		when "1011" => F<= 3;
 		when "1100" => F<= 2;
 		when "1101" => F<= 3;
 		when "1110" => F<= 3;
 		when "1111" => F<= 4;
 end case;
 	end process;
 	end RTY_arch;

-- Описание интерфейса и архитектуры  компонента SM;
	
 		
library IEEE;
use IEEE.std_logic_1164.all;

	entity SM is
		PORT (		
		      		A: in integer range 0 to 4;
		      		B: in integer range 0 to 4;
		      		S: out integer range 0 to 8
		      );	
end SM;

architecture ADD_arch of SM is
	begin 
		S <= A + B;
		end ADD_arch;


-- Описание интерфейса и архитектуры  компонента RG;
	
		
library IEEE;
use IEEE.std_logic_1164.all;

entity RG is
		PORT (
SI: in BIT;
SMM: in integer range 0 to 8;
				D0: in BIT;
D1: in BIT;
D2: in BIT;
D3: in BIT;
Y0: in BIT; 
Y1: in BIT; 
EN: in BIT;
 				CLK: in BIT; 
CLR: in BIT;
		      		Q0: buffer BIT;
		      		Q1: buffer BIT;
		      		Q2: buffer BIT;
		      		Q3: buffer BIT
		           );
end RG;

architecture RG_arch of RG is

 begin
		process (clk, clr, en)
begin
if clr = '1' then
	Q0 <= '0';
   	Q1 <= '0';
 	Q2 <= '0';
 	Q3 <= '0';
elsif EN = '0' then null;
elsif CLK'event and CLK = '1' then
if Y0 = '0' and Y1 = '0' then
   	Q0 <= D0;
   	Q1 <= D1;
 	Q2 <= D2;
 	Q3 <= D3;
elsif Y0 = '0' and Y1 = '1' then
   	Q0 <= SI;
   	Q1 <= Q0;
 	Q2 <= Q1;
 	Q3 <= Q2;
elsif Y0 = '1' and Y1 = '0' then
   	Q0 <= '0';
   	Q1 <= Q0;
 	Q2 <= Q1;
elsif Y0 = '1' and Y1 = '1' then

 case	SMM is
			when 0 => Q0 <= '0';  Q1 <= '0'; Q2 <= '0';  Q3 <= '0'; 
			when 1 => Q0 <= '1';  Q1 <= '0'; Q2 <= '0';  Q3 <= '0'; 
			when 2 => Q0 <= '0';  Q1 <= '1'; Q2 <= '0';  Q3 <= '0'; 
			when 3 => Q0 <= '1';  Q1 <= '1'; Q2 <= '0';  Q3 <= '0'; 
			when 4 => Q0 <= '0';  Q1 <= '0'; Q2 <= '1';  Q3 <= '0'; 
			when 5 => Q0 <= '1';  Q1 <= '0'; Q2 <= '1';  Q3 <= '0'; 
			when 6 => Q0 <= '0';  Q1 <= '1'; Q2 <= '1';  Q3 <= '0'; 
			when 7 => Q0 <= '1';  Q1 <= '1'; Q2 <= '1';  Q3 <= '0'; 
			when 8 => Q0 <= '0';  Q1 <= '0'; Q2 <= '0';  Q3 <= '1'; 
			end case SMM;	
				
  --with SMM select
  --Q0 <= '1' when 1 | 3 | 5 |7, '0'	when others;
  --with SM select 
  --Q1 <= '1' when 2 | 3 | 6 | 7, '0'	when others;
  --with SM select 	
  --Q2 <= '1' when 4 | 5 | 6 | 7, '0'	when others;
  --with SM select		
  --Q3 <= '1' when  8, '0'	when others
  
end if;
end if; 	
end process;
end RG_arch;
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2016, 12:58
Ответы с готовыми решениями:

Делитель, компаратор и умножитель на языке VHDL
Здравствуйте. Пытаюсь реализовать делитель, компаратор и умножитель на языке VHDL, задания...

SPI на VHDL - параллельная загрузка в регистр
Пытаюсь сделать нечто вроде SPI slave на VHDL. Надо, чтобы параллельные данные защелкивались в...

ПЛИС длинный сдвиговый регистр с параллельной загрузкой VHDL
Подтолкните в нужную сторону, никак не могу сообразить. С одной стороны поступают байты по...

Переход в нижний регистр с верхнего в русском языке
Здравствуйте, при переходе строки из верхних регистров в нижний, прога этого не делает, с...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2016, 12:58

Регистр сведений «Списанные материалы из эксплуатации». Почему регистр сведений, а не регистр накопления?
Существует Регистр сведений «Списанные материалы из эксплуатации». Регистр сведений предназначен...

Многофункциональный ли пк?
Пойдет ли данный ПК для небольших игровых серверов, виртуальных систем, сайтов; ну и для различных...

Многофункциональный проект
Интересует такой вопрос, можно ли объявить объект вектора в одном файле и использовать в другом? ...

Многофункциональный чат
Может кто - то уже делали и может поделиться исходниками Такого вот непростого для меня чата.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru