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

 
 
> Помогите c VHDL !, Нужна помощь в создании простого процессора.
korny99
сообщение Apr 11 2010, 04:17
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 11-04-10
Пользователь №: 56 558



Помогите пожалуйста с лабораторной работой! Может кто-то ее уже делал... Буду очень благодарен.
ftp://ftp.altera.com/up/pub/Laboratory_Ex...L/lab9_VHDL.pdf - здесь задание.
Я что-то сварганил, компилируется но нет нужного результата. Спасибо!!!

Ниже мой код.

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_signed.all;
USE ieee.std_logic_arith.all;

ENTITY tp4 IS
PORT ( DIN : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
Resetn, Clock, Run : IN STD_LOGIC;
Done : BUFFER STD_LOGIC;
BusWires : BUFFER STD_LOGIC_VECTOR(15 DOWNTO 0));
END tp4;

ARCHITECTURE Behavior OF tp4 IS

-- . . . declare components

COMPONENT upcount
PORT ( Clear, Clock : IN STD_LOGIC;
Q : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END COMPONENT;

COMPONENT dec3to8
PORT ( W : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
En : IN STD_LOGIC;
Y : OUT STD_LOGIC_VECTOR(0 TO 7));
END COMPONENT;

COMPONENT regn
GENERIC ( n : INTEGER := 16);
PORT ( R : IN STD_LOGIC_VECTOR(n-1 DOWNTO 0);
Rin, Clock : IN STD_LOGIC;
Q : BUFFER STD_LOGIC_VECTOR(n-1 DOWNTO 0));
END COMPONENT;

-- . . . declare signals
SIGNAL Xreg, Yreg, Rin, Rout : STD_LOGIC_VECTOR(0 TO 7) ;
SIGNAL Clear, High, AddSub : STD_LOGIC ;
SIGNAL DINout, Ain, Gin, Gout, IRin : STD_LOGIC ;
SIGNAL Tstep_Q , T : STD_LOGIC_VECTOR(1 DOWNTO 0) ;
SIGNAL I : STD_LOGIC_VECTOR(2 DOWNTO 0) ;
SIGNAL R0, R1, R2, R3, R4, R5, R6, R7 : STD_LOGIC_VECTOR(15 DOWNTO 0) ;
SIGNAL A, Sum, G : STD_LOGIC_VECTOR(15 DOWNTO 0) ;
SIGNAL IR , IRR : STD_LOGIC_VECTOR(1 TO 9) ;
SIGNAL Sel : STD_LOGIC_VECTOR(0 TO 9) ;


BEGIN
High <= '1';

Clear <= Resetn OR Done OR (NOT Run AND NOT T(1) AND NOT T(0)) ;

Tstep : upcount PORT MAP (Clear, Clock, Tstep_Q );
T <= Tstep_Q ;

reg_IR : regn GENERIC MAP ( n => 9 )
PORT MAP ( DIN (8 DOWNTO 0), IRin, Clock, IR ) ;

I <= IR(1 TO 3);
decX : dec3to8 PORT MAP (IR(4 TO 6), High, Xreg);
decY : dec3to8 PORT MAP (IR(7 TO 9), High, Yreg);

controlsignals : PROCESS (Tstep_Q, I, Xreg, Yreg)
BEGIN
-- . . . specify initial values
DINout <= '0' ; Done <= '0' ; Ain <= '0' ; Gin <= '0' ;
Gout <= '0' ; AddSub <= '0' ; Rin <= "00000000" ; Rout <= "00000000" ;
IRin <= '0' ;

CASE Tstep_Q IS
WHEN "00" => -- store DIN in IR as long as Tstep_Q = 0
IRin <= '1' ;
WHEN "01" => -- define signals in time step T1
CASE I IS
-- . . .
WHEN "000" => -- Mv
Rout <= Yreg ; Rin <= Xreg ; Done <= '1' ;
WHEN "001" => -- Mvi
DINout <= '1' ; Rin <= Xreg ; Done <= '1' ;
WHEN "010" => -- Add, Sub
Rout <= Xreg ; Ain <= '1' ;
WHEN OTHERS => -- ...
END CASE;
WHEN "10" => -- define signals in time step T2
CASE I IS
--. . .
WHEN "010" => -- Add
Rout <= Yreg ; Gin <= '1' ;
WHEN "011" => -- Sub
Rout <= Yreg ; Gin <= '1' ; AddSub <= '1' ;
WHEN OTHERS => -- Mv, Mvi, ...
END CASE;
WHEN "11" => -- define signals in time step T3
CASE I IS
--. . .
WHEN "010" => -- Add
Gout <= '1' ; Rin <= Xreg ; Done <= '1' ;
WHEN "011" => -- Sub
Gout <= '1' ; Rin <= Xreg ; Done <= '1' ;
WHEN OTHERS => -- Mv, Mvi, ...
END CASE;
END CASE;
END PROCESS;

--. . . instantiate other registers and the adder/subtracter unit
reg_0 : regn PORT MAP (BusWires, Rin(0), Clock, R0);
reg_1 : regn PORT MAP (BusWires, Rin(1), Clock, R1);
reg_2 : regn PORT MAP (BusWires, Rin(2), Clock, R2);
reg_3 : regn PORT MAP (BusWires, Rin(3), Clock, R3);
reg_4 : regn PORT MAP (BusWires, Rin(4), Clock, R4);
reg_5 : regn PORT MAP (BusWires, Rin(5), Clock, R5);
reg_6 : regn PORT MAP (BusWires, Rin(6), Clock, R6);
reg_7 : regn PORT MAP (BusWires, Rin(7), Clock, R7);

reg_A : regn PORT MAP (BusWires, Ain, Clock, A);

Add_Sub : WITH AddSub SELECT
Sum <= A + BusWires WHEN '0',
A - BusWires WHEN OTHERS;

reg_G : regn PORT MAP ( Sum, Gin, Clock, G );

--. . . define the bus
Sel <= Rout & Gout & DINout;
WITH Sel SELECT
BusWires <= R0 WHEN "1000000000",
R1 WHEN "0100000000",
R2 WHEN "0010000000",
R3 WHEN "0001000000",
R4 WHEN "0000100000",
R5 WHEN "0000010000",
R6 WHEN "0000001000",
R7 WHEN "0000000100",
G WHEN "0000000010",
DIN WHEN OTHERS ;
END Behavior;

-----------------------------------------------------------

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_signed.all;

ENTITY upcount IS
PORT ( Clear, Clock : IN STD_LOGIC;
Q : OUT STD_LOGIC_VECTOR(1 DOWNTO 0));
END upcount;

ARCHITECTURE Behavior OF upcount IS
SIGNAL Count : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
PROCESS (Clock)
BEGIN
IF (Clock'EVENT AND Clock = '1') THEN
IF Clear = '1' THEN
Count <= "00";
ELSE
Count <= Count + 1;
END IF;
END IF;
END PROCESS;
Q <= Count;
END Behavior;

-----------------------------------------------------------

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY dec3to8 IS
PORT ( W : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
En : IN STD_LOGIC;
Y : OUT STD_LOGIC_VECTOR(0 TO 7));
END dec3to8;

ARCHITECTURE Behavior OF dec3to8 IS
BEGIN
PROCESS (W, En)
BEGIN
IF En = '1' THEN
CASE W IS
WHEN "000" => Y <= "10000000";
WHEN "001" => Y <= "01000000";
WHEN "010" => Y <= "00100000";
WHEN "011" => Y <= "00010000";
WHEN "100" => Y <= "00001000";
WHEN "101" => Y <= "00000100";
WHEN "110" => Y <= "00000010";
WHEN "111" => Y <= "00000001";
END CASE;
ELSE
Y <= "00000000";
END IF;
END PROCESS;
END Behavior;

-----------------------------------------------------------

LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY regn IS
GENERIC ( n : INTEGER := 16);
PORT ( R : IN STD_LOGIC_VECTOR(n-1 DOWNTO 0);
Rin, Clock : IN STD_LOGIC;
Q : BUFFER STD_LOGIC_VECTOR(n-1 DOWNTO 0));
END regn;

ARCHITECTURE Behavior OF regn IS
BEGIN
PROCESS (Clock)
BEGIN
IF Clock'EVENT AND Clock = '1' THEN
IF Rin = '1' THEN
Q <= R;
END IF;
END IF;
END PROCESS;
END Behavior;
Прикрепленные файлы
Прикрепленный файл  tp4.vhd ( 6.08 килобайт ) Кол-во скачиваний: 460
 
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:21
Рейтинг@Mail.ru


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