Перейти к содержанию

    

память RAM и ROM

Нужно написать программу (на Verilog)или нарисовать схему (в Quartus), которая записывает значение в память RAM, а затем переносит это значение в память ROM и выводит его. Очень нужна ваша помощь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
а затем переносит это значение в память ROM и выводит его.

 

Где должна находиться "программа", где RAM и где ROM?

А что такое по Вашему ROM и как туда "перенести"? Да, и кто кого "выводит"?

 

PS И вот это - "нужно"... Кому? Не мне точно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Где должна находиться "программа", где RAM и где ROM?

А что такое по Вашему ROM и как туда "перенести"? Да, и кто кого "выводит"?

 

PS И вот это - "нужно"... Кому? Не мне точно...

Программа пишется в среде Quartus 2 на языке Verilog. ROM - это память, нужно сделать так, чтобы мы подавали значение в память RAM и это значение через блоки памяти переносилось в ROM. Мы в файле Verilog WafeForm выводит нашу полученную симуляцию. Вот и возник вопрос, как туда перенести?

 

Где должна находиться "программа", где RAM и где ROM?

А что такое по Вашему ROM и как туда "перенести"? Да, и кто кого "выводит"?

 

PS И вот это - "нужно"... Кому? Не мне точно...

Один из вариантов, но здесь суммирование...

post-99699-1507662324_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Программа пишется в среде Quartus 2 на языке Verilog. ROM - это память, нужно сделать так, чтобы мы подавали значение в память RAM и это значение через блоки памяти переносилось в ROM. Мы в файле Verilog WafeForm выводит нашу полученную симуляцию. Вот и возник вопрос, как туда перенести?

 

 

Один из вариантов, но здесь суммирование...

Внимательно читайте буквы!

Как расшифровывается термин ROM? Как туда можно "перенести"?

"Программа пишется в среде.." И куда она потом девается?

Откуда берутся " мы подавали значение"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Внимательно читайте буквы!

Как расшифровывается термин ROM? Как туда можно "перенести"?

"Программа пишется в среде.." И куда она потом девается?

Откуда берутся " мы подавали значение"?

ROM - Read only memory. Просто пишем код или составляем схему и проводим ее симуляцию Эта программа - моя лабораторная работа. Значение подаем через файл verilog waveform.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ROM - Read only memory. Просто пишем код или составляем схему и проводим ее симуляцию Эта программа - моя лабораторная работа. Значение подаем через файл verilog waveform.

Так я и хочу услышать, как Вы в "Read only memory" на этапе симуляции что-то хотите "туда перенести"?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Так я и хочу услышать, как Вы в "Read only memory" на этапе симуляции что-то хотите "туда перенести"?

Может неправильно что-то понял, но задание звучало так: из RAM в ROM перенести одно значение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Может неправильно что-то понял, но задание звучало так: из RAM в ROM перенести одно значение.

Тогда надо сделать два шага.

1. Подойти к преподавателю и потребовать объяснений еще раз. А лучше письменно.

2. Любая лабораторная может быть выполнена только на том уровне знаний, которые уже получил студент. А потому в задании четко должно быть прописано, что "задано" и какими средствами это надо выполнить. Так что составьте для себя "задание", в котором четко обозначьте что и как "задано". А пока Ваша задача выглядит так: "жарьте ребята, масло подвезут..." После этого нарисуйте блок-схему того устройства, которое Вы хотите реализовать и обсудите это с преподавателем. И вот только после этого имеет смысл браться за верилог и квартус...

 

А что касается нас, то может так оказаться, что наша помощь не будет Вам полезна. Я бы сделал FSM и чтение-запись данных из файла, но возможно что Вы и не знаете что это такое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чтобы не плодить темы, попрошу помощи здесь:

имею Cyclon5, в нём генеренную двухпортовую ОЗУ на одном модуле m10k.

один порт для записи:

тактовая частота 60 МГц, пишется константа (докатился при урезании проекта), адрес по счетчику, записи единичные.

т.е. идея такая: клоки тикают стационарно, изредка приходит сигнал WR (по переднему фронту клока взводится на один такт), заставляет записать константу в ОЗУ, и тот-же WR перщелкивает счетчик адреса (для следующей записи).

второй порт для чтения, тактовая частота 44,25 МГц, читается по счетчику в цикле всё время (вот совсем всегда).

суть проблемы - примерно 20% записей не проходит, счетчик перещелкивает, а запись не проходит, суть не в соревновании счетчик-запись, входной адрес я формировал отдельно, да и бывает по несколько пропущенных записей подряд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стоит поделиться кодом, чтобы можно было вам помочь. Так трудно сказать с уверенностью.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какой режим 2 портовой памяти, как решается конфликт одновременного чтения-записи в один адрес?

Как проверяете, симулятор или железо?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А какой режим 2 портовой памяти, как решается конфликт одновременного чтения-записи в один адрес?

Для памяти должно использовать атрибуты, чтобы компилятор знал, что делать при одновременном обращении в одну и ту же ячейку:

Читать вперед

Писать вперед

Безразлично

 

Правильно ли выполнено CDC между двумя сторонами памяти. И Память д.б. двухклоковая...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Для памяти должно использовать атрибуты, чтобы компилятор знал, что делать при одновременном обращении в одну и ту же ячейку:

Читать вперед

Писать вперед

Безразлично

Правильно ли выполнено CDC между двумя сторонами памяти. И Память д.б. двухклоковая...

 

Если память двухклоковая, то обращение из разных портов к одному адресу приводит к неопределенному результату. Вроде как запись гарантируется, а чтение - нет.

Поделиться сообщением


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

library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

entity mem_buf_kadr is
    port 
        (
        -- in side
        DIN             : in     std_logic_vector (15 downto 0);
        WR             : in     std_logic;
        clk_in        : in std_logic;
        adr_str_in     : std_logic_vector (8 downto 0);
        --- out side
        clk_out        : in std_logic;
        DOUT             : out std_logic_vector (15 downto 0);
        adr_str_out    : in std_logic_vector (8 downto 0);
        adr_col_out    : in std_logic_vector (8 downto 0);
        -- debug
        deb_dat    : out std_logic_vector (7 downto 0)
        );
end mem_buf_kadr;

architecture mem_buf_kadr_a of mem_buf_kadr is 
    -- signal
    
    signal ct_pix: std_logic_vector(8 downto 0):=(others=>'0');
    signal adr_col_in: std_logic_vector(8 downto 0):=(others=>'0');
    signal wrz,wr0,wr1,wr2: std_logic;
    signal DOUT0,DOUT1,DOUT2: std_logic_vector(15 downto 0):=(others=>'0');
    
    component block_ozu IS
    PORT
    (
        data            : IN STD_LOGIC_VECTOR (15 DOWNTO 0);
        rdaddress    : IN STD_LOGIC_VECTOR (8 DOWNTO 0);
        rdclock        : IN STD_LOGIC;
        wraddress    : IN STD_LOGIC_VECTOR (8 DOWNTO 0);
        wrclock        : IN STD_LOGIC  := '1';
        wren            : IN STD_LOGIC  := '0';
        q                : OUT STD_LOGIC_VECTOR (15 DOWNTO 0)
    );
END component;

begin
    
u0:block_ozu
port map (
        
        rdaddress (8 downto 0)    =>adr_col_out,
        rdclock                        =>clk_out,
        q                                =>DOUT0,
        
        data                            => "0010000000000000",--DIN,
        wraddress(8 downto 0)    =>adr_col_in,
        wrclock                        =>clk_out,
        wren                            =>WR
        
        );
        
--u1:ram_kadr
--port map (
--        data            =>DIN,
--        rdaddress (8 downto 0)=>adr_col_out,
--        rdaddress (15 downto 9)=>adr_str_out(6 downto 0),
--        rdclock    =>clk_out,
--        
--        wraddress    (8 downto 0)=>adr_col_in,
--        wraddress    (15 downto 9)=>adr_str_in(6 downto 0),
--        wrclock        =>clk_out,
--        wren            =>WR1,
--        q                =>DOUT1
--        );

--u2:ram_kadr
--port map (
--        data            =>DIN,
--        rdaddress (8 downto 0)=>adr_col_out,
--        rdaddress (15 downto 9)=>adr_str_out(6 downto 0),
--        rdclock    =>clk_out,
--    
--        wraddress    (8 downto 0)=>adr_col_in,
--        wraddress    (15 downto 9)=>adr_str_in(6 downto 0),
--        wrclock        =>clk_out,
--        wren            =>WR2,
--        q                =>DOUT2
--        );


    process (clk_in)
    begin
        if (clk_in'event and clk_in='1') then 
            if wr='1' then
                if ct_pix="101111111" then
                    ct_pix<=(others=>'0');
                else -- ct_pix="101111111"
                    ct_pix<=ct_pix+1;
                end if; -- ct_pix="101111111"
            end if; --wr=1
            --wrz<=wr;
        end if; --(clk'event and clk='1')
    end process;
    adr_col_in<=ct_pix;    

--wr0<=wr and (not adr_str_in(8)) and (not adr_str_in(7));
--wr1<=wr and (not adr_str_in(8)) and (adr_str_in(7));
--wr2<=wr and (adr_str_in(8)) and (not adr_str_in(7));

process (clk_out)
begin
  if (clk_out'event and clk_out='1') then
    if (adr_str_out(8 downto 7)="00") then
     DOUT<=DOUT0;
     elsif (adr_str_out(8 downto 7)="01") then
     DOUT<="0000000000000000";--DOUT1;
     else
     DOUT<="0000000000000000";--DOUT2;
     end if; -- adr_str_out
     end if; --clk
end process;
    
    deb_dat<=adr_col_in(8 downto 1);
            
end mem_buf_kadr_a;

проверяю в железе, в симуляторе всё красиво.

память двухклоковая, если верить датащиту Read first и write first вообще не существует, может быть параметр на тему что читать old data или Don’t Care, да и то такую настройку у генератора я не нашел...

P.S. первый раз с квартусом развлекаюсь, у меня 15.1

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

перегенерил макрос с rden, вообще отключаю чтение на время прогрузки - не полегчало...

 

updt: я тормоз

вот это меня подвело и сутки в напряжении держало:

wrclock =>clk_out,

 

Изменено пользователем predator

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация