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

снова вернемся к памяти

Привет всем. Вот и возникла таки необходимость в ПЗУ для хранения таблицы символов.

 

Задача собственно такая: в массиве из 16-и 8-и разрядных чисел (для начала) необходимо хранить таблицу, она представляет собой изображение символов в двоичном коде, но это не суть.

для этого я:

reg        [7:0]    mem_16_8 [15:0];        //собсно память

initial begin                    
    $readmemh("mem_16_8.list", mem_16_8);//инициализация из файла
end

В файле соответственно вот чего:

00001000
00011000
00001000
00001000
00001000
00001000
00001000
00011100
00111100
01000010
01000010
01000010
01000010
01000010
01000010
00111100

 

далее надыть забрать данные из этой памяти:

....
always @(posedge clock) begin            //
...
    if ((vcnt > 32) && (vcnt < 41)) begin
        if ((mem_16_8[vcnt-33][с1]) == 1) begin
            R <= 15; G <= 15; B <= 15;
        end else begin
            R <= 0; G <= 13; B <= 0;
        end
    end
end
...
где vcnt и c1 - integer, с1 от 0 до 7

иными словами я беру из памяти бит "с1" числа "vcnt-33", вернее хочу взять.

 

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

Warning (10858): Verilog HDL warning at VGA_CONTROLLER.v(32): object mem_16_8 used but never assigned

это что, в @always нельзя чтоли обращаться к этой памяти?

 

Warning (10850): Verilog HDL warning at VGA_CONTROLLER.v(35): number of words (15) in memory file does not match the number of elements in the address range [15:0]

Почему тут проблемы с инициализацией памяти? :(

 

Warning (10230): Verilog HDL assignment warning at mem_16_8.list(1): truncated value with size 32 to match size of target (8)
...
Warning (10030): Net "mem_16_8[15][4]" at VGA_CONTROLLER.v(32) has no driver or initial value, using a default initial value 0

Ну это еще не страшно, но все же - неправильно записываю числа в файле инициализации?

 

Вот - подскажите пожалуйста, в чем моя ошыбка(и)? Или возможно быть другой способ сделать то что я хотел?

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


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

аха, только читает всеравно нули :(

 

И еще - когда я присваиваю R <= 15, то все в порядке

но когда пишу R < c1*2 - ничего не происходит. Как правильно написать в этом случае, через простое равенство тоже не катит

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


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

Что за синтезатор? Xilinx-овский xst такой вот код синтезирует нормлаьно:

 

`timescale 1ns / 1ps

module asd(a, di, do, clk, we);
input [3:0] a;
input [7:0] di;
output [7:0] do;
input clk;
input we;

reg [7:0] R [15:0];
reg [7:0] q;
  
initial
$readmemh("tst.txt", R, 0, 15);

always @(posedge clk) begin
    if (we)
        R[a] <= di;
    q <= R[a];
end

assign do = q;

endmodule

 

Файл соответственно такой:

12
34
56
78
90
ab
cd
ef
12
34
56
78
90
ab
cd
ef

 

Хотя да, если убрать запись, то появляется этот warning. Хотя моделится все правильно на post plase&route.

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

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


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

аха, только читает всеравно нули :(

 

И еще - когда я присваиваю R <= 15, то все в порядке

но когда пишу R < c1*2 - ничего не происходит. Как правильно написать в этом случае, через простое равенство тоже не катит

вообще говоря по таким обрывкам кода трудно определить реальное место ошибки, в общем-то вы ничего противозаконного в показанном коде не делаете (даже с учётом неправильной изначальной функции загрузки) - что и подтверждают варнинги а не еррорзы. значит напортачили где-то в другом месте (где-нить в неправильной индексации или прокрутке индекса, ну в общем вариантов море -- киньте лучше исходник - так попроще бу, а то гадать здесь на кофейной гуще неохота)

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


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

Была аналогичная задача. Решили просто - использовался xilinx spartan-3, у него там куча блочной памяти оставалась неиспользованной. Файл с исходными данными создали наподобие rom_form для picoblaze - он используется при трансляции ассемблерного кода в вхдл и записывается в брам. Потом очень просто и быстро читаются данные прямо оттуда.

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


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

Спасибо, действительно, нужно readmemb если я так файл прописал. Не только это было проблемой собсно говоря, но ошибку я исправил.

 

Насчет блоков памяти - верно, использовать сгенеренную мегавизардом альтсюнкрам и к ней .mif файл...

Ах да - Altera CII, квартус... пишу ясно на бандерлоге.

 

Вот - все стало читаться из этого моего файла. Но опять вопрос - с какого места там считается первый адрес - такое впечатление, что с конца файла? 80

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


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

Вот - все стало читаться из этого моего файла. Но опять вопрос - с какого места там считается первый адрес - такое впечатление, что с конца файла? 80

 

Example:

reg [7:0] mem[1:256];

Given this declaration, each of the following statements load data into mem in a different manner:

initial $readmemh("mem.data", mem);

initial $readmemh("mem.data", mem, 16);

initial $readmemh("mem.data", mem, 128, 1);

The first statement loads up the memory at simulation time 0 starting at the memory address 1. The second

statement begins loading at address 16 and continue on towards address 256. For the third and final statement,

loading begins at address 128 and continue down towards address 1.

In the third case, when loading is complete, a final check is performed to ensure that exactly 128 numbers

are contained in the file. If the check fails, a warning message is issued.

читайте стандарт и такие впечатления будут отпадать сами собой

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...