verali 0 6 ноября, 2014 Опубликовано 6 ноября, 2014 (изменено) · Жалоба Здравствуйте!Реализую выгрузку 10 периодов сигнала с последующим наблюдением сигнала в modelSim. Если я правильно понимаю, сначала файл с периодом (половиной, четвертью) записать в ROM (написал по шаблону, как в tamplate) в формате intel hex. На линию адреса записать адрес начала сигнала и сделать счетчик, инкриминирующий адрес на единичку. Коэффициенты получил в Matlab'е c помощью функции dec2bin, после полученные данные сохраняю в файл с помощью функции dlmwrite (так же пробовал fwrite и fprintf) , но проблема в том, что числа сохраняются в виде символов, и вместо того, чтобы число 1110 представилось как 1110, оно представляется в виде 31 31 31 30 (в ASC II). В итоге в конвертере WinHEx при переводе из bin->intel hex получается не то, что нужно. В этом же конвертере после удалю перенос строки (в ASC II это 0a). Может быть я все не так делаю? Просветите пожалуйста как это делается по науке:-) Изменено 6 ноября, 2014 пользователем verali Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба Не мучайтесь с hex. Используйте mif. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
verali 0 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба Не мучайтесь с hex. Используйте mif. В .mif данные требуется забивать вручную, а в .hex можно загружать из файла. Поправьте, если ошибаюсь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба dec2bin - переводит строку с записью числа в строку с записью этого числа битами. Отсюда и оно представляется в виде 31 31 31 30 (в ASC II) поглядите в сторону функции save и еще есть косяк аски файлов, перенос строки это 0x0D 0x0A - перенос строки, возврат каректи. И любая попытка записать в АСКИ файл 0x0A приводит к тому что оно дополняется автоматом символом 0x0D. С этими файлами надо быть осторожным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
verali 0 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба Не мучайтесь с hex. Используйте mif. Спасибо, сейчас залез в мануал по mif (да и по hex) и нашел автозаполнение ячеек: http://quartushelp.altera.com/13.1/master....number_word.htm dec2bin - переводит строку с записью числа в строку с записью этого числа битами. Отсюда и поглядите в сторону функции save Спасибо, посмотрю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба В .mif данные требуется забивать вручную, а в .hex можно загружать из файла. Поправьте, если ошибаюсь.Какое вручную? Генерируете текстовый файл в простом формате: DEPTH = 16; WIDTH = 8; ADDRESS_RADIX = HEX; DATA_RADIX = HEX; CONTENT BEGIN 00: 63; 01: 7C; 02: 77; 03: 7B; 04: F2; 05: 6B; 06: 6F; 07: C5; 08: 30; 09: 01; 0A: 67; 0B: 2B; 0C: FE; 0D: D7; 0E: AB; 0F: 76; END; Ну или DEC вместо HEX, если нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
verali 0 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба Какое вручную? Генерируете текстовый файл в простом формате: DEPTH = 16; WIDTH = 8; ADDRESS_RADIX = HEX; DATA_RADIX = HEX; CONTENT BEGIN 00: 63; 01: 7C; 02: 77; 03: 7B; 04: F2; 05: 6B; 06: 6F; 07: C5; 08: 30; 09: 01; 0A: 67; 0B: 2B; 0C: FE; 0D: D7; 0E: AB; 0F: 76; END; Ну или DEC вместо HEX, если нужно. Поясните пожалуйста этот момент. Как я понимаю DEPTH = 16; WIDTH = 8; ADDRESS_RADIX = HEX; DATA_RADIX = HEX; CONTENT BEGIN END это общий вид .mif файла А адреса придется забивать вручную, у меня ведь голый файл с двоичными числами. Я не понял как сгенерировать его( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба А адреса придется забивать вручную, у меня ведь голый файл с двоичными числами. Я не понял как сгенерировать его( Ну вы же файл в матлабе генерируете? Вот и сделайте цикл в матлабовском скрипте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
verali 0 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба Ну вы же файл в матлабе генерируете? Вот и сделайте цикл в матлабовском скрипте. Сделал файл вида: -- Copyright © 1991-2013 Altera Corporation -- Your use of Altera Corporation's design tools, logic functions -- and other software and tools, and its AMPP partner logic -- functions, and any output files from any of the foregoing -- (including device programming or simulation files), and any -- associated documentation or information are expressly subject -- to the terms and conditions of the Altera Program License -- Subscription Agreement, Altera MegaCore Function License -- Agreement, or other applicable license agreement, including, -- without limitation, that your use is for the sole purpose of -- programming logic devices manufactured by Altera and sold by -- Altera or its authorized distributors. Please refer to the -- applicable agreement for further details. -- Quartus II generated Memory Initialization File (.mif) WIDTH=16; DEPTH=110; ADDRESS_RADIX=HEX; DATA_RADIX=BIN; CONTENT BEGIN 00 : 0000000000000000; 01 : 0000100000001001; 02 : 0001000000001010; 03 : 0001011111111011; 04 : 0001111111010100; 05 : 0010011110001101; 06 : 0010111100011101; 07 : 0011011001111111; 08 : 0011110110101001; 09 : 0100010010010100; 0A : 0100101100111011; 0B : 0101000110010101; 0C : 0101011110011101; 0D : 0101110101001101; 0E : 0110001010011110; 0F : 0110011110001100; 10 : 0110110000010001; 11 : 0111000000101001; 12 : 0111001111001111; 13 : 0111011100000001; 14 : 0111100110111010; 15 : 0111101111111000; 16 : 0111110110111001; 17 : 0111111011111011; 18 : 0111111110111101; 19 : 0111111111111110; 1A : 0111111110111101; 1B : 0111111011111011; 1C : 0111110110111001; 1D : 0111101111111000; 1E : 0111100110111010; 1F : 0111011100000001; 20 : 0111001111001111; 21 : 0111000000101001; 22 : 0110110000010001; 23 : 0110011110001100; 24 : 0110001010011110; 25 : 0101110101001101; 26 : 0101011110011101; 27 : 0101000110010101; 28 : 0100101100111011; 29 : 0100010010010100; 2A : 0011110110101001; 2B : 0011011001111111; 2C : 0010111100011101; 2D : 0010011110001101; 2E : 0001111111010100; 2F : 0001011111111011; 30 : 0001000000001010; 31 : 0000100000001001; 32 : 0000000000000000; 33 : 0111011111110110; 34 : 0110111111110101; 35 : 0110100000000100; 36 : 0110000000101011; 37 : 0101100001110010; 38 : 0101000011100010; 39 : 0100100110000000; 3A : 0100001001010110; 3B : 0011101101101011; 3C : 0011010011000100; 3D : 0010111001101010; 3E : 0010100001100010; 3F : 0010001010110010; 40 : 0001110101100001; 41 : 0001100001110011; 42 : 0001001111101110; 43 : 0000111111010110; 44 : 0000110000110000; 45 : 0000100011111110; 46 : 0000011001000101; 47 : 0000010000000111; 48 : 0000001001000110; 49 : 0000000100000100; 4A : 0000000001000010; 4B : 0000000000000010; 4C : 0000000001000010; 4D : 0000000100000100; 4E : 0000001001000110; 4F : 0000010000000111; 50 : 0000011001000101; 51 : 0000100011111110; 52 : 0000110000110000; 53 : 0000111111010110; 54 : 0001001111101110; 55 : 0001100001110011; 56 : 0001110101100001; 57 : 0010001010110010; 58 : 0010100001100010; 59 : 0010111001101010; 5A : 0011010011000100; 5B : 0011101101101011; 5C : 0100001001010110; 5D : 0100100110000000; 5E : 0101000011100010; 5F : 0101100001110010; 60 : 0110000000101011; 61 : 0110100000000100; 62 : 0001111111111111; 63 : 0111011111110110; 64 : 0111111111111111; 65 : 0000000000000000; 66 : 0000100000001001; 67 : 0001000000001010; 68 : 0001011111111011; 69 : 0001111111010100; 6A : 0010011110001101; 6B : 0010111100011101; 6C : 0011011001111111; 6D : 0011110110101001; END; Но при анализе выскакивает ошибка: Error (10170): Verilog HDL syntax error at xxx.mif(1) near text - Error (12153): Can't elaborate top-level user hierarchy Error: Quartus II 64-Bit Analysis & Synthesis was unsuccessful. 2 errors, 0 warnings Error: Peak virtual memory: 495 megabytes Error: Processing ended: Thu Nov 06 12:59:24 2014 Error: Elapsed time: 00:00:02 Error: Total CPU time (on all processors): 00:00:02 Сам код: // circle_rom module circle_rom ( addr, clk, q ); //Parameters parameter DATA_WIDTH_SIGNAL=16; //длина слова сигнала parameter ADDR_WIDTH=110; //длина адреса памяти //Input signals input [ADDR_WIDTH-1:0] addr; input clk; output reg [DATA_WIDTH_SIGNAL-1:0] q ; // Declare the ROM variable reg [DATA_WIDTH_SIGNAL-1:0] rom[110:0]; // регист будет содержать четыре 4-х разрядных чисел //описание внутренних регистров reg [ADDR_WIDTH-1:0] addr_reg ; //регист счетчика //считываем данные из файла и записываем весь массив в регист rom initial begin $readmemb("xxx.mif", rom); end //счетчик адреса always @ (posedge clk) begin addr_reg <= addr_reg + addr + 7'b01; //инкремент адреса q <= rom[addr_reg]; //выходное значение q end endmodule Может быть .mif считывается другой командой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба Коэффициенты получил в Matlab'е c помощью функции dec2bin, после полученные данные сохраняю в файл с помощью функции dlmwrite (так же пробовал fwrite и fprintf) Может быть я все не так делаю? Просветите пожалуйста как это делается по науке:-) Имхо правильнее не иметь дела с *.MIF файлами по той причине, что у разных вендоров (Альтера,Хилые и пр.) эти форматы отличаются. Раз уж вы владеете Матлабом, то проще всего сгенерить верилоговский(или VHDL) исходник прямо из Матлаба. Вот маленький примерчик для верилога: % This script will convert simple 256*256 monochrome BMP file % to Xilinx block RAM (1k * 36 bits) content. % MSB (35:18) - X coordinate, LSB (17:0) - Y coordinate. M = imread('fun_test.bmp','bmp'); M = not(M); imshow(M); n = nnz(M); n = 2 ^ (ceil(log2(n))); rom = zeros(1,n,'int64'); index = 1; size_x = size(M,1); size_y = size(M,2); for row = 1:size_x for col = 1:size_y if(M(row,col) > 0) x = col - size_x/2; y = size_y/2 - row; rom(index) = to_positive(x,18) * 2^18 + to_positive(y,18); index = index + 1; end end end filename = 'rom_text.vh'; fid = fopen(filename,'w'); %place a header: fprintf(fid,'/* This source file is generated by Matlab script,\n do not edit it!*/\n'); fprintf(fid,' localparam logic [35:0] coe_table [0:2047] = ''{\n'); for addr = 1:n fprintf(fid,'36''d%d',rom(addr)); if addr < n fprintf(fid,','); end if mod(addr,8) == 0 fprintf(fid,'\n'); end end fprintf(fid,'};'); fclose(fid); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
verali 0 18 ноября, 2014 Опубликовано 18 ноября, 2014 · Жалоба Не могу понять, почему QuestaSim не понимает знаковые числа, подскажите пожалуйста! Основной код: module single_rom ( addr, clk, q ); //Входные воздействия input [6:0] addr ; //длина адреса(в bin) input clk; output signed [15:0] q; //выходные данные //Внутренние регистры //внутренние соединения //Подключение ip-ядра rom rom_ip rom_ip_component ( .address (addr), .clock (clk), .q (q)); //Основной код //непрерывное присваивание endmodule Код testbench: `timescale 1 ps/ 1 ps module single_rom_tb(); // test vector input registers reg [6:0] addr; reg clk; // wires wire signed [15:0] q; // assign statements (if any) single_rom i1 ( // port map - connection between master ports and signals/registers .addr(addr), .clk(clk), .q(q) ); //clk initial begin clk = 0; forever #10 clk = ~clk; end //beginning address initial addr = 7'h00; //loop always begin @(posedge clk) if (addr >= 7'h64) addr = 7'h0; else addr = addr + 7'h1; end endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 18 ноября, 2014 Опубликовано 18 ноября, 2014 · Жалоба как бы radix знаковый не ставили ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
verali 0 18 ноября, 2014 Опубликовано 18 ноября, 2014 · Жалоба как бы radix знаковый не ставили ? В radix только без знаковый есть: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 18 ноября, 2014 Опубликовано 18 ноября, 2014 · Жалоба 2 verali radix : ... Arguments You can abbreviate the following arguments to any length. For example, -dec is equivalent to -decimal. .. • -decimal (optional) Displays values in decimal format. You can specify -signed as an alias for this argument. .. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
verali 0 18 ноября, 2014 Опубликовано 18 ноября, 2014 · Жалоба 2 verali radix : ... Arguments You can abbreviate the following arguments to any length. For example, -dec is equivalent to -decimal. .. • -decimal (optional) Displays values in decimal format. You can specify -signed as an alias for this argument. .. Если я правильно понял в консоли QuestaSim набрать: radix signed Но ничего не изменилось. Или я неправильно делаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться