Форум РадиоКот https://radiokot.ru/forum/ |
|
Сигнал выхода не определен (Undefined) https://radiokot.ru/forum/viewtopic.php?f=60&t=168104 |
Страница 1 из 1 |
Автор: | wztch [ Пт янв 10, 2020 18:17:08 ] | |||
Заголовок сообщения: | Сигнал выхода не определен (Undefined) | |||
Привет всем! У меня есть задание, реализовать на VHDL универсальный 4-х битный регистр. Нашел в интернете схемку через мультиплексоры и D-тригеры. Сделал на VHDL, всё по отдельности работает (mux, d-тригер). Но когда я кобинирую их, они не работают вместе, а точнее. не проходит сигнал на выход, может я не так использую INOUT, но если выходы сделать OUT, то выдает ошибку что я использую выходной сигнал для входного, по этому решил взять INOUT. Приклепляю код Мультиплексора и Д-тригера, а так же сгенерированый код Active-HDL через Block Diagram, а так же скриншоты симуляции и самой схемы. Буду благодарен за ответы, Спасибо! mux.vhd Код: library IEEE; use IEEE.STD_LOGIC_1164.all; entity mux is port( D3 : in STD_LOGIC; D2 : in STD_LOGIC; D1 : in STD_LOGIC; D0 : in STD_LOGIC; CS1 : in STD_LOGIC; CS2 : in STD_LOGIC; A : out STD_LOGIC; Clk : in STD_LOGIC ); end mux; architecture mux of mux is begin A <= 'Z'; process (Clk) begin if (Clk'event and Clk = '1') then if (CS1 = '0' and CS2 = '0') then --keep A <= D0; elsif (CS1 = '0' and CS2 = '1') then --right shift A <= D1; elsif (CS1 = '1' and CS2 = '0') then --left shift A <= D2; elsif (CS1 = '1' and CS2 = '1') then --write A <= D3; end if; end if; end process; end mux; d_trig.vhd Код: Library IEEE; USE IEEE.Std_logic_1164.all; entity RisingEdge_DFlipFlop is port( Q : out std_logic; Clk :in std_logic; D :in std_logic ); end RisingEdge_DFlipFlop; architecture Behavioral of RisingEdge_DFlipFlop is begin process(Clk, D) begin Q <= 'Z'; if(rising_edge(Clk)) then Q <= D; end if; end process; end Behavioral; register.vhd Код: library IEEE;
use IEEE.std_logic_1164.all; entity \register\ is port( B0 : in STD_LOGIC; B1 : in STD_LOGIC; B2 : in STD_LOGIC; B3 : in STD_LOGIC; C : in STD_LOGIC; CS1 : in STD_LOGIC; CS2 : in STD_LOGIC; DSL : in STD_LOGIC; DSR : in STD_LOGIC; Q0 : inout STD_LOGIC; Q1 : inout STD_LOGIC; Q2 : inout STD_LOGIC; Q3 : inout STD_LOGIC ); end \register\; architecture \register\ of \register\ is ---- Component declarations ----- component mux port ( CS1 : in STD_LOGIC; CS2 : in STD_LOGIC; Clk : in STD_LOGIC; D0 : in STD_LOGIC; D1 : in STD_LOGIC; D2 : in STD_LOGIC; D3 : in STD_LOGIC; A : out STD_LOGIC ); end component; component RisingEdge_DFlipFlop port ( Clk : in STD_LOGIC; D : in STD_LOGIC; Q : out STD_LOGIC ); end component; ---- Signal declarations used on the diagram ---- signal NET215 : STD_LOGIC; signal NET226 : STD_LOGIC; signal NET237 : STD_LOGIC; signal NET248 : STD_LOGIC; begin ---- Component instantiations ---- U10 : mux port map( A => NET226, CS1 => CS1, CS2 => CS2, Clk => C, D0 => Q1, D1 => Q0, D2 => Q2, D3 => B1 ); U11 : mux port map( A => NET237, CS1 => CS1, CS2 => CS2, Clk => C, D0 => Q2, D1 => Q1, D2 => Q3, D3 => B2 ); U12 : mux port map( A => NET248, CS1 => CS1, CS2 => CS2, Clk => C, D0 => Q3, D1 => Q2, D2 => DSL, D3 => B3 ); U5 : RisingEdge_DFlipFlop port map( Clk => C, D => NET215, Q => Q0 ); U6 : RisingEdge_DFlipFlop port map( Clk => C, D => NET226, Q => Q1 ); U7 : RisingEdge_DFlipFlop port map( Clk => C, D => NET237, Q => Q2 ); U8 : RisingEdge_DFlipFlop port map( Clk => C, D => NET248, Q => Q3 ); U9 : mux port map( A => NET215, CS1 => CS1, CS2 => CS2, Clk => C, D0 => Q0, D1 => DSR, D2 => Q1, D3 => B0 ); end \register\;
|
Автор: | KT315B [ Ср мар 04, 2020 18:38:18 ] |
Заголовок сообщения: | Re: Сигнал выхода не определен (Undefined) |
Конкретное исходное задание озвучить можно? Делать принципиально схемотехникой/HDL? Могу на верилоге помочь. |
Автор: | Gudd-Head [ Вс мар 29, 2020 17:49:10 ] |
Заголовок сообщения: | Re: Сигнал выхода не определен (Undefined) |
реализовать на VHDL универсальный 4-х битный регистр Неужели в Квартусе в templates такого нет?) |
Автор: | uldemir [ Ср апр 08, 2020 13:03:30 ] |
Заголовок сообщения: | Re: Сигнал выхода не определен (Undefined) |
Уже за поздно... четверть года прошла, но в первом файле (mux.vhd) было почти всё что нужно. остальное ненужно совершенно. Достаточно было объявить сдвигаемые регистры как signal std_logic_vector registr(3 downto 0) и в теле process(clk) в каждом if-е, где селектируются CS, сделать необходимое, например, сдвиг вправо: registr(3 downto 0) <= DSR & registr(3 downto 1); влево: registr(3 downto 0) < registr(2 downto 0) & DSL; а загрузка.. если входные пины объявить в entity как вектор, то вообще просто registr <= D, ну а в этом случае: registr(3 downto 0) <= D3 & D2 & D1 & D0. disclaimer: некоторые синтаксические конструкции в тексте опущены... |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |