Калькулятор з VHDL - проблеми моделювання

T

true_niea

Guest
привіт може хто-небудь може мені допомогти з цим кодування ...я роблю мій проект міні ..але проблема полягає після написати VHDL код для кодування калькулятор не проявляють ймовірно, але коли я намагаюся моделювати не виявляють вихідний

Тут я докласти кодування

бібліотека IEEE;
IEEE.STD_LOGIC_1164.ALL використання;
IEEE.STD_LOGIC_ARITH.ALL використання;
IEEE.STD_LOGIC_UNSIGNED.ALL використання;особи калькулятор
порт (A, B: в ціле число від 0 до 7;
CLK: в біт;
Сель: у std_logic_vector (1 downto 0);
Q: з bit_vector (6 downto 0);
: З bit_vector (3 downto 0));

кінець калькулятор;

Поведінкова архітектура в калькулятор
Сигнал до півдня: ціле число від 0 до 7;
сумарний сигнал: ціле число від 0 до 14;
Div сигнал: ціле число від 0 до 7;
Мул сигнал: ціле число від 0 до 49;

сигнал Qsub, Qsum1, Qsum2, Qmul, Qmul2, Qdiv: bit_vector (6 downto 0);
сигналу мінус: bit_vector (6 downto 0);

сигнал divRemainder: bit_vector (6 downto 0);
сигналу B1: bit_vector (6 downto 0);

сигнал clk1: небагато;починати

clkDiv: процес
змінної оцінок: ціле число від 0 до 50000000;
починати
чекати, поки clk'event і CLK = '1 ';
Count: = к-ть 1;
якщо (кол-во = 50 мільйонів), то
Count: = 0;
ELSIF (кол-во <25000000), то
clk1 <= '0 ';
ELSIF (кол-> 25000000), то
clk1 <= '1 ';
кінець, якщо;
Процес clkDiv кінця;sub_opration: процес (A, B)
починатиякщо (A> B), то
підпункт <= AB;
мінус <= "1111111";
випадку сабвуфера
при 0 => Qsub <= "1000000";
при 1 => Qsub <= "1111001";
при 2 => Qsub <= "0100100";
при 3 => Qsub <= "0110000";
при 4 => Qsub <= "0011001";
при 5 => Qsub <= "0010010";
при 6 => Qsub <= "0000010";
при 7 => Qsub <= "1011000";
коли інші => NULL;
кінець справі;

ще
підпункт <= BA;
мінус <= "0111111";
випадку сабвуфера
при 0 => Qsub <= "1000000";
при 1 => Qsub <= "1111001";
при 2 => Qsub <= "0100100";
при 3 => Qsub <= "0110000";
при 4 => Qsub <= "0011001";
при 5 => Qsub <= "0010010";
при 6 => Qsub <= "0000010";
при 7 => Qsub <= "1011000";
коли інші => NULL;
кінець справі;
кінець, якщо;Процес sub_opration кінця;

sum_opration: процес (A, B)
починати

Сума <= A B;

випадку сума

при 0 => Qsum1 <= "1000000";
Qsum2 <= "1111111";
при 1 => Qsum1 <= "1111001";
Qsum2 <= "1111111";
при 2 => Qsum1 <= "0100100";
Qsum2 <= "1111111";
при 3 => Qsum1 <= "0110000";
Qsum2 <= "1111111";
при 4 => Qsum1 <= "0011001";
Qsum2 <= "1111111";
при 5 => Qsum1 <= "0010010";
Qsum2 <= "1111111";
при 6 => Qsum1 <= "0000010";
Qsum2 <= "1111111";
при 7 => Qsum1 <= "1011000";
Qsum2 <= "1111111";
при 8 => Qsum1 <= "0000000";
Qsum2 <= "1111111";
при 9 => Qsum1 <= "0010000";
Qsum2 <= "1111111";
, Коли 10 => Qsum1 <= "1000000";
Qsum2 <= "1111001";
, Коли 11 => Qsum1 <= "1111001";
Qsum2 <= "1111001";
, Коли 12 => Qsum1 <= "0100100";
Qsum2 <= "1111001";
, Коли 13 => Qsum1 <= "0110000";
Qsum2 <= "1111001";
, Коли 14 => Qsum1 <= "0011001";
Qsum2 <= "1111001";
коли інші => NULL;
кінець справі;Процес sum_opration кінця;

Mul_operation: процес (A, B)
змінної Remm10: ціле число від 0 до 9;
змінної C1: ціле діапазоні від 1 до 7: = 7;
починати
Мул <= A * B;

якщо (Мул <10), то
Мул випадку є
при 0 => Qmul <= "1000000";
Qmul2 <= "1111111";
при 1 => Qmul <= "1111001";
Qmul2 <= "1111111";
при 2 => Qmul <= "0100100";
Qmul2 <= "1111111";
при 3 => Qmul <= "0110000";
Qmul2 <= "1111111";
при 4 => Qmul <= "0011001";
Qmul2 <= "1111111";
при 5 => Qmul <= "0010010";
Qmul2 <= "1111111";
при 6 => Qmul <= "0000010";
Qmul2 <= "1111111";
при 7 => Qmul <= "1011000";
Qmul2 <= "1111111";
при 8 => Qmul <= "0000000";
Qmul2 <= "1111001";
при 9 => Qmul <= "0010000";
Qmul2 <= "1111111";
коли інші => NULL;
кінець справі;

ще
в / в 7 downto 1 цикл

якщо (10 * C1 <Мул або 10 * C1 = Мул), то
Мул <= 10 * C1;
Remm10: = 10 * C1-Мул;
кінець, якщо;
C1: = C1-1;

Кінець циклу;

Мул випадку є
при 0 => Qmul2 <= "1000000";
при 1 => Qmul2 <= "1111001";
при 2 => Qmul2 <= "0100100";
при 3 => Qmul2 <= "0110000";
при 4 => Qmul2 <= "0011001";
при 5 => Qmul2 <= "0010010";
при 6 => Qmul2 <= "0000010";
при 7 => Qmul2 <= "1011000";
при 8 => Qmul2 <= "0000000";
при 9 => Qmul2 <= "0010000";
коли інші => NULL;
кінець справі;

Remm10 випадку є
при 0 => Qmul <= "1000000";
при 1 => Qmul <= "1111001";
при 2 => Qmul <= "0100100";
при 3 => Qmul <= "0110000";
при 4 => Qmul <= "0011001";
при 5 => Qmul <= "0010010";
при 6 => Qmul <= "0000010";
при 7 => Qmul <= "1011000";
при 8 => Qmul <= "0000000";
при 9 => Qmul <= "0010000";
коли інші => NULL;
кінець справі;

кінець, якщо;

кінці процесу Mul_operation;

div_operation: процес (A, B)
змінну C: ціле діапазоні від 1 до 7: = 7;
змінної Remm: ціле число від 0 до 9;
починати

тому що я в 7 downto 1 цикл

якщо (A = B), то
Div <= 1;
Remm: = 0;

ELSIF (B>), то
Div <= 0;

ELSIF (A> B), то
якщо (B * C <), то
Div <= B * C;
Remm: = B * CA; - результат буде відображатися як: DIV _ | _ Залишок | B
кінець, якщо;
C: = C-1;
кінець, якщо;

Кінець циклу;

випадку Див
при 0 => Qdiv <= "1000000";
при 1 => Qdiv <= "1111001";
при 2 => Qdiv <= "0100100";
при 3 => Qdiv <= "0110000";
при 4 => Qdiv <= "0011001";
при 5 => Qdiv <= "0010010";
при 6 => Qdiv <= "0000010";
при 7 => Qdiv <= "1011000";
коли інші => NULL;
кінець справі;

Remm випадку є
при 0 => divRemainder <= "1000000";
при 1 => divRemainder <= "1111001";
при 2 => divRemainder <= "0100100";
при 3 => divRemainder <= "0110000";
при 4 => divRemainder <= "0011001";
при 5 => divRemainder <= "0010010";
при 6 => divRemainder <= "0000010";
при 7 => divRemainder <= "1011000";
коли інші => NULL;
кінець справі;

B випадку є
при 0 => B1 <= "1000000";
при 1 => B1 <= "1111001";
при 2 => B1 <= "0100100";
при 3 => B1 <= "0110000";
при 4 => B1 <= "0011001";
при 5 => B1 <= "0010010";
при 6 => B1 <= "0000010";
при 7 => B1 <= "1011000";
коли інші => NULL;
кінець справі;

Процес div_operation кінця;вибір: процес (clk1, SEL)
змінної т: ціле діапазоні від 0 до 3: = 0;
починати
якщо (clk1'event і clk1 = '1 '), то

випадку т
при 0 =>
якщо (SEL = "00"), то
Q <= Qsub;
ELSIF (SEL = "01"), то
Q <= Qsum1;
ELSIF (SEL = "10"), то
Q <= Qmul;
ELSIF (SEL = "11"), то
Q <= B1;
кінець, якщо;
<= "1110";

при 1 =>
якщо (SEL = "00"), то
Q <= мінус;
ELSIF (SEL = "01"), то
Q <= Qsum2;
ELSIF (SEL = "10"), то
Q <= Qmul2;
ELSIF (SEL = "11"), то
Q <= "1110011"; - дисплей _ |
кінець, якщо;
<= "1101";

при 2 =>
якщо (SEL = "11"), то
Q <= divRemainder;
кінець, якщо;
<= "1011";

при 3 =>
якщо (SEL = "11"), то
Q <= Qdiv;
кінець, якщо;
<= "0111";

кінець справі;
м = т 1;
кінець, якщо;
Процес вибору мети;
Поведінкові кінця;<img src="http://images.elektroda.net/27_1255832658_thumb.jpg" border="0" alt="Calculator with VHDL - simulation problem" title="Калькулятор з VHDL - проблеми моделювання"/>
 
Ви не "пацієнт" достатньо.

Ви, схоже, використовують Clk1 поновлення Q і.Це Clk1 походить від "головного" годинник CLK, яка в основному розділити на 25000000.У твоїй моделювання у вас є тільки один Clk циклу ...Зачекайте 25000000 циклів і більше, і ви побачите, якийсь результат з'являється в Q і.
Або змінити clkDiv процесу, з тим Clk1 біжить: "Швидше,'....

 

Welcome to EDABoard.com

Sponsor

Back
Top