Я не могу присвоить значение своему выводу в VHDL - PullRequest
0 голосов
/ 13 апреля 2020

Я тупой новичок с VHDL, на самом деле я полностью ненавижу этот язык и использую его только потому, что я вынужден из-за проекта, и у меня возникли проблемы с моим случаем, когда заявления. По сути, я делаю 256x8 слов RAM для проекта. Он принимает адрес, основываясь на этом адресе, который присваивает значение ячейке памяти, затем другой процесс, где он ищет адрес, который был вставлен, и присваивает значение моему выводу. Это очень глупо, но мой учитель так хочет. Я посмотрел на свой тестовый стенд и мой код и понятия не имею, почему он портится.

В настоящее время я тестирую его с адресом «00000001», и он должен получить то же самое, но с 32 битами вместо 8, который вы видели в адресе, всего 24 0 в основном впереди. Мой вывод, Случай, который я пытаюсь проверить, Случай, который я проверяю. Я почти забыл, на этих изображениях я изменил его с x "00000001 "до 31 0 и 1, так что эти изображения немного старые. Я сократил свой код, чтобы его было легче читать. Во втором случае это в основном то же самое, за исключением того, что я также ищу, если memRead = '1', если так, тогда он присваивает значение. Любая помощь будет принята с благодарностью.

    ----------------------------------------------------------------------------------
-- Company: 
-- Engineer: 
-- 
-- Create Date:    09:45:26 03/30/2020 
-- Design Name: 
-- Module Name:    module - Behavioral 
-- Project Name: 
-- Target Devices: 
-- Tool versions: 
-- Description: 
--
-- Dependencies: 
--
-- Revision: 
-- Revision 0.01 - File Created
-- Additional Comments: 
--
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
use IEEE.NUMERIC_STD.ALL;

entity RAM is
Port( Address : in std_logic_vector(7 downto 0) := "00000000";
inputData : in std_logic_vector(31 downto 0) := "00000000000000000000000000000000";
Memwrite, Memread, rst, clk : in std_logic;
read_out_data : out std_logic_vector(31 downto 0));
end RAM;

architecture behave of RAM is

signal mem0, mem1, mem2, mem3, mem4, mem5, mem6, mem7, mem8, mem9, mem10, mem11, mem12, mem13, mem14, mem15, mem16, mem17, mem18, mem19, mem20, mem21, mem22, mem23, mem24, mem25,
         mem26, mem27, mem28, mem29, mem30, mem31, mem32, mem33, mem34, mem35, mem36, mem37, mem38, mem39, mem40, mem41, mem42, mem43, mem44, mem45, mem46, mem47, mem48, mem49, mem50, mem51,
         mem52, mem53, mem54, mem55, mem56, mem57, mem58, mem59, mem60, mem61, mem62, mem63, mem64, mem65, mem66, mem67, mem68, mem69, mem70, mem71, mem72, mem73, mem74, mem75, mem76, mem77,
         mem78, mem79, mem80, mem81, mem82, mem83, mem84, mem85, mem86, mem87, mem88, mem89, mem90, mem91, mem92, mem93, mem94, mem95, mem96, mem97, mem98, mem99, mem100, mem101, mem102, mem103,
         mem104, mem105, mem106, mem107, mem108, mem109, mem110, mem111, mem112, mem113, mem114, mem115, mem116, mem117, mem118, mem119, mem120, mem121, mem122, mem123, mem124, mem125, mem126, mem127, mem128, mem129,
         mem130, mem131, mem132, mem133, mem134, mem135, mem136, mem137, mem138, mem139, mem140, mem141, mem142, mem143, mem144, mem145, mem146, mem147, mem148, mem149, mem150, mem151, mem152, mem153, mem154, mem155,
         mem156, mem157, mem158, mem159, mem160, mem161, mem162, mem163, mem164, mem165, mem166, mem167, mem168, mem169, mem170, mem171, mem172, mem173, mem174, mem175, mem176, mem177, mem178, mem179, mem180, mem181,
         mem182, mem183, mem184, mem185, mem186, mem187, mem188, mem189, mem190, mem191, mem192, mem193, mem194, mem195, mem196, mem197, mem198, mem199, mem200, mem201, mem202, mem203, mem204, mem205, mem206, mem207,
         mem208, mem209, mem210, mem211, mem212, mem213, mem214, mem215, mem216, mem217, mem218, mem219, mem220, mem221, mem222, mem223, mem224, mem225, mem226, mem227, mem228, mem229, mem230, mem231, mem232, mem233,
         mem234, mem235, mem236, mem237, mem238, mem239, mem240, mem241, mem242, mem243, mem244, mem245, mem246, mem247, mem248, mem249, mem250, mem251, mem252, mem253, mem254, mem255 : std_logic_vector(31 downto 0);


signal read_data_s : std_logic_vector(31 downto 0);

begin

--Work on the RAM!

process(clk, rst, MemWrite)
begin

    if(rising_edge(clk)) then
        case Address is
        when "00000000" => mem0 <= "00000000000000000000000000000000";
        when "00000001" => mem1 <= "00000000000000000000000000000001";
        when "00000010" => mem2 <= "00000000000000000000000000000010";
        when "00000011" => mem3 <= "00000000000000000000000000000011";
        when "00000100" => mem4 <= "00000000000000000000000000000100";

        when others => read_out_data <= "00000000000000000000000000000001";
    end case;
    end if;
end process;

    process(clk)
    begin
        if(Memread = '1') then
            if(rising_edge(clk)) then
        case Address is
        when "00000000" => read_out_data <= mem0;
        when "00000001" => read_out_data <= mem1;
        when "00000010" => read_out_data <= mem2;
        when "00000011" => read_out_data <= mem3;
        when "00000100" => read_out_data <= mem4;

        when others => read_out_data <= "00000000000000000000000000000000";
    end case;
    end if;
        end if;
        end process;
end behave;

1 Ответ

0 голосов
/ 14 апреля 2020

Мой учитель довольно любезен в преподавании этого материала, и этот язык на самом деле не моя сильная сторона, потому что я привык к языкам высокого уровня и не знаю, как с этим связываться в повседневной жизни. Но проблема решена, потому что ТА вернулась ко мне. Спасибо всем, кто прокомментировал.

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

...