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 - проблеми моделювання"/>
Тут я докласти кодування
бібліотека 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 - проблеми моделювання"/>