torik 0 19 июня, 2007 Опубликовано 19 июня, 2007 · Жалоба Привет всем. Вот и возникла таки необходимость в ПЗУ для хранения таблицы символов. Задача собственно такая: в массиве из 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 Ну это еще не страшно, но все же - неправильно записываю числа в файле инициализации? Вот - подскажите пожалуйста, в чем моя ошыбка(и)? Или возможно быть другой способ сделать то что я хотел? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
reddot 0 19 июня, 2007 Опубликовано 19 июня, 2007 · Жалоба стоит использовать $readmemb в этом случае Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 19 июня, 2007 Опубликовано 19 июня, 2007 · Жалоба аха, только читает всеравно нули :( И еще - когда я присваиваю R <= 15, то все в порядке но когда пишу R < c1*2 - ничего не происходит. Как правильно написать в этом случае, через простое равенство тоже не катит Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 19 июня, 2007 Опубликовано 19 июня, 2007 (изменено) · Жалоба Что за синтезатор? 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. Изменено 19 июня, 2007 пользователем Taradov Alexander Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 19 июня, 2007 Опубликовано 19 июня, 2007 · Жалоба аха, только читает всеравно нули :( И еще - когда я присваиваю R <= 15, то все в порядке но когда пишу R < c1*2 - ничего не происходит. Как правильно написать в этом случае, через простое равенство тоже не катит вообще говоря по таким обрывкам кода трудно определить реальное место ошибки, в общем-то вы ничего противозаконного в показанном коде не делаете (даже с учётом неправильной изначальной функции загрузки) - что и подтверждают варнинги а не еррорзы. значит напортачили где-то в другом месте (где-нить в неправильной индексации или прокрутке индекса, ну в общем вариантов море -- киньте лучше исходник - так попроще бу, а то гадать здесь на кофейной гуще неохота) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SunnyAngel 0 20 июня, 2007 Опубликовано 20 июня, 2007 · Жалоба Была аналогичная задача. Решили просто - использовался xilinx spartan-3, у него там куча блочной памяти оставалась неиспользованной. Файл с исходными данными создали наподобие rom_form для picoblaze - он используется при трансляции ассемблерного кода в вхдл и записывается в брам. Потом очень просто и быстро читаются данные прямо оттуда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
torik 0 20 июня, 2007 Опубликовано 20 июня, 2007 · Жалоба Спасибо, действительно, нужно readmemb если я так файл прописал. Не только это было проблемой собсно говоря, но ошибку я исправил. Насчет блоков памяти - верно, использовать сгенеренную мегавизардом альтсюнкрам и к ней .mif файл... Ах да - Altera CII, квартус... пишу ясно на бандерлоге. Вот - все стало читаться из этого моего файла. Но опять вопрос - с какого места там считается первый адрес - такое впечатление, что с конца файла? 80 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 20 июня, 2007 Опубликовано 20 июня, 2007 · Жалоба Вот - все стало читаться из этого моего файла. Но опять вопрос - с какого места там считается первый адрес - такое впечатление, что с конца файла? 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. читайте стандарт и такие впечатления будут отпадать сами собой Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться