alex1985 0 20 мая, 2018 Опубликовано 20 мая, 2018 · Жалоба Всё, чем Вы восторгались, написано, в том числе после прочтения статей, подобных этой ) Как раз для Вас с того же сайта: https://marsohod.org/11-blog/251-sch-or-txt Спасибо, я уже понял что надо делать все на verilog. У меня в схеме есть такой компонент: Это сгенерированый компонент Single-port RAM megafunction. В RLT это выглядит так: Как мне к нему обратиться? CYCLONEIII_RAM_BLOCK? Задача то в общем простая - сделать компонент для хранения 1 слова, но не на D-триггерах, а на RAM-элементах, чтобы не тратить драгоценные логические элементы ПЛИСа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R6L-025 1 20 мая, 2018 Опубликовано 20 мая, 2018 · Жалоба А почему эту самую корку использовать нельзя? Если хотите без корки реализовать память - посмотрите главу Recommended HDL Coding Styles в quartus handbook. Там есть примеры кода которые реализует память которая будет синтезирована именно на блоках памяти. Еще есть директивы самого Quartus позволяющие указать что вы хотите от него. Попробуйте погуглить по слову "ramstyle". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaratZuev 0 20 мая, 2018 Опубликовано 20 мая, 2018 · Жалоба Как мне к нему обратиться? Вам надо было поставить галку здесь: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R6L-025 1 20 мая, 2018 Опубликовано 20 мая, 2018 · Жалоба А, еще есть quartus templates. В выпадающем меню Edit->Insert Template есть шаблоны кода и директив (чтоб это меню появилось нужно чтоб в квартусе было открыто окно встроенного редактора кода). Там, как раз, есть шаблоны работы с памятью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex1985 0 20 мая, 2018 Опубликовано 20 мая, 2018 (изменено) · Жалоба А, еще есть quartus templates. В выпадающем меню Edit->Insert Template есть шаблоны кода и директив (чтоб это меню появилось нужно чтоб в квартусе было открыто окно встроенного редактора кода). Там, как раз, есть шаблоны работы с памятью. Это первое, с чего я начинал. Вставлял template, но он RAM все равно синтезируется как D-триггер. Попробую сделать как написал Marat Zuev, посмотрим что получится. Вообще мне нужно создать несколько RAM, каждый из которых использовался бы только под хранение одного элемента, но если делать через мегавизард - то минимальная разрядность шины адреса - 2. Приходится создавать RAM под 2 элемента, а шину адреса тупо весить на VCC. Получается не оптимально как то. В идеале ищу такое решение, чтобы можно было создавать RAM для хранения одного элемента (16 бит данных) и чтобы его полностью можно было описать на verilog, а иначе зачем я его изучать начал? )) Изменено 20 мая, 2018 пользователем Sprite Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R6L-025 1 20 мая, 2018 Опубликовано 20 мая, 2018 · Жалоба Ну тогда попробуйте поиграть с директивами. Quartus при синтезе проводит оптимизацию, и может попросту решить что использовать триггеры вместо памяти целесообразней для такого малого объема Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex1985 0 20 мая, 2018 Опубликовано 20 мая, 2018 · Жалоба Спасибо, попробую. Еще один вопрос: как описать этот BDF на verilog? Особенно интересует привязка к конкретным пинам. В качестве top-level использовать нужно verilog-файл? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R6L-025 1 20 мая, 2018 Опубликовано 20 мая, 2018 · Жалоба Да, verilog, vhdl... Берете описание портов pll корки, подключаете выходы корки к портам Вашего модуля. Вообще, лучше не делитель клока использовать, а в корке pll создать второй клок, частоту которого настраиваете как вам нужно. Както так: module my_pll ( input wire in_clk, output wire out_clk0, output wire out_clk1 ); pll pll_inst ( .inclk0 (in_clk ), .c0 (out_clk0), .c1 (out_clk1) ); endmodule // my_pll Потом назначаете номера пинов к портам модуля. Можно вручную в *.qsf скрипте, но проще будет через квартусовский pin-planner. Посмотрите на даташит или иную документацию на плату, там должны быть указаны напряжения банков ввода-вывода. Назначаете согласно этому интерфейс, например, "3.3-V LVCMOS" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex1985 0 20 мая, 2018 Опубликовано 20 мая, 2018 (изменено) · Жалоба Да, verilog, vhdl... Берете описание портов pll корки, подключаете выходы корки к портам Вашего модуля. Вообще, лучше не делитель клока использовать, а в корке pll создать второй клок, частоту которого настраиваете как вам нужно. Както так: module my_pll ( input wire in_clk, output wire out_clk0, output wire out_clk1 ); pll pll_inst ( .inclk0 (in_clk ), .c0 (out_clk0), .c1 (out_clk1) ); endmodule // my_pll Потом назначаете номера пинов к портам модуля. Можно вручную в *.qsf скрипте, но проще будет через квартусовский pin-planner. Посмотрите на даташит или иную документацию на плату, там должны быть указаны напряжения банков ввода-вывода. Назначаете согласно этому интерфейс, например, "3.3-V LVCMOS" Спасибо большое, уже сам разобрался) Сделал так: module main_inst(input clk, output clk_out, output clk_108MHz); pll pll1(.c0(clk_108MHz), .inclk0(clk)); divider divider1(.out(clk_out), .clk(clk_108MHz)); defparam divider1.bitnum = 25; //Задаем параметр модуля divider endmodule Все компилится и работает, еду дальше ) Вообще, лучше не делитель клока использовать, а в корке pll создать второй клок, частоту которого настраиваете как вам нужно. Да, Вы конечно правы! Делитель - это мой первый модуль на verilog, он в проекте просто для наглядности, сигнал с него выводится на светодиод отладочной платы, по нему я понимаю, что плата вообще работает) Изменено 20 мая, 2018 пользователем Sprite Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex1985 0 21 мая, 2018 Опубликовано 21 мая, 2018 (изменено) · Жалоба Всем добра! Перевел проект полностью на verilog, хочу запустить тестбенч. Делаю так: 1. Создаю новый проект; 2. Добавляю все verilog-файлы своего проекта и компилю их; 3. Запускаю Simulate, подсовывая тестбенч, на что modelsim ругается: # Region: /tb/main_inst_tb/mem_block1/ram_blocks1 # Searched libraries: # C:/altera/91sp1/Projects/cyclone III/simulation/work # ** Error: (vsim-3033) C:/altera/91sp1/Projects/cyclone III/helper/ram/ram.v(62): Instantiation of 'altsyncram' failed. The design unit was not found. # # Region: /tb/main_inst_tb/mem_block1/ram_blocks1/ram_08 # Searched libraries: # C:/altera/91sp1/Projects/cyclone III/simulation/work # ** Error: (vsim-3033) C:/altera/91sp1/Projects/cyclone III/helper/ram_blocks/ram_blocks.v(56): Instantiation of 'AND2' failed. The design unit was not found. # Region: /tb/main_inst_tb/mem_block1/ram_blocks1 # Searched libraries: # C:/altera/91sp1/Projects/cyclone III/simulation/work # ** Error: (vsim-3033) C:/altera/91sp1/Projects/cyclone III/helper/ram/ram.v(62): Instantiation of 'altsyncram' failed. The design unit was not found. # # Region: /tb/main_inst_tb/mem_block1/ram_blocks1/ram_08 # Searched libraries: # C:/altera/91sp1/Projects/cyclone III/simulation/work # ** Error: (vsim-3033) C:/altera/91sp1/Projects/cyclone III/helper/ram_blocks/ram_blocks.v(56): Instantiation of 'AND2' failed. The design unit was not found. Если я правильно понимаю - modelsim хочет увидеть компоненты AND2, altsyncram и DFF. Как и куда прописывать пути до библиотек их содержащих? Изменено 21 мая, 2018 пользователем Sprite Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaratZuev 0 21 мая, 2018 Опубликовано 21 мая, 2018 · Жалоба Если я правильно понимаю - modelsim хочет увидеть компоненты AND2, altsyncram и DFF. Как и куда прописывать пути до библиотек их содержащих? Понимаете правильно. Вам надо добавить требуемые библиотеки примерно так: vsim -voptargs=+acc -L "требуемая библиотека" -L Ваша_рабочая_библиотека Ваша_рабочая_библиотека.Ваш_tb у меня, например, это было так: vsim -voptargs=+acc -L maxii_ver -L lpm_ver -L work work.tb Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 21 мая, 2018 Опубликовано 21 мая, 2018 · Жалоба Я бы ещё не применял имена модулей - названия примитивов регистров. Например DFF - имя запрещенное. Очень странно что Quartus не ругался... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex1985 0 21 мая, 2018 Опубликовано 21 мая, 2018 · Жалоба Я бы ещё не применял имена модулей - названия примитивов регистров. Например DFF - имя запрещенное. Очень странно что Quartus не ругался... Не совсем Вас понимаю. В проекте есть такая строчка: AND2 AND2_01(.IN1(addr[0]), .IN2(wr), .OUT(s1)); Что здесь запрещенного? Как по другому создать примитив AND2? Описывать конструкцию в виде assign q = in1 & in2 в отдельном файле? AND2 - примитив библиотеки, я и беру его из библиотеки, только какой пока не знаю, так же как и DFF. Остальные элементы вроде нашел, правда некрасиво как-то - в папку work компилируется все подряд( когда нужны всего пара элементов. Вобщем психанул) Скомпилировал в проект все что было в C:\altera\15.0\modelsim_ase\altera\verilog\src Проект увеличился на 1,2Гб) Но элементы AND2 и DFF так и не найдены. Вывод - либо отсутствует нужная библиотека для cyclone III, либо Flip-fl0p прав и я что-то делаю не так. Среда в которой разрабатывается проект - квартус 9.1, а ModelSim установлен в ModelSim-Altera Starter Edition 15.0.0.145, который не поддерживает cycloneIII. Может быть в этом дело? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 21 мая, 2018 Опубликовано 21 мая, 2018 · Жалоба Поскольку полного кода я не вижу, я предположил, что вы создали свой модуль с именем DFF. А этого делать крайне нежелательно. Я и беру его из библиотеки, только какой пока не знаю, так же как и DFF Это как ? :wacko: Вообще было бы неплохо, чтобы Вы полный текст проекта сюда выложили. Обычно для RTL симуляции библиотек надо минимум. И тип чипа вообще роли играть не должен ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alex1985 0 21 мая, 2018 Опубликовано 21 мая, 2018 (изменено) · Жалоба Поскольку полного кода я не вижу, я предположил, что вы создали свой модуль с именем DFF. А этого делать крайне нежелательно. Это как ? :wacko: Вообще было бы неплохо, чтобы Вы полный текст проекта сюда выложили. Обычно для RTL симуляции библиотек надо минимум. И тип чипа вообще роли играть не должен ! Вот код одного из модулей: module ram_blocks( input clk, input [15:0]addr, input [15:0]data, input wr, output [15:0]data_1, output [15:0]data_2, output [15:0]data_3, output [15:0]data_4, output [15:0]data_5, output [15:0]data_6, output [15:0]data_7, output [15:0]data_8, output [15:0]data_9, output [15:0]data_10, output [15:0]data_11, output [15:0]data_12, output [15:0]data_13, output [15:0]data_14, output [15:0]data_15, output [15:0]data_16); wire s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16; wire w_VCC; assign w_VCC = 1'b1; AND2 AND2_01(.IN1(addr[0]), .IN2(wr), .OUT(s1)); ram ram_01(.data(data), .wren(s1), .address(w_VCC), .clock(clk), .q(data_1)); AND2 AND2_02(.IN1(addr[1]), .IN2(wr), .OUT(s2)); ram ram_02(.data(data), .wren(s2), .address(1'b1), .clock(clk), .q(data_2)); AND2 AND2_03(.IN1(addr[2]), .IN2(wr), .OUT(s3)); ram ram_03(.data(data), .wren(s3), .address(1'b1), .clock(clk), .q(data_3)); AND2 AND2_04(.IN1(addr[3]), .IN2(wr), .OUT(s4)); ram ram_04(.data(data), .wren(s4), .address(1'b1), .clock(clk), .q(data_4)); AND2 AND2_05(.IN1(addr[4]), .IN2(wr), .OUT(s5)); ram ram_05(.data(data), .wren(s5), .address(1'b1), .clock(clk), .q(data_5)); AND2 AND2_06(.IN1(addr[5]), .IN2(wr), .OUT(s6)); ram ram_06(.data(data), .wren(s6), .address(1'b1), .clock(clk), .q(data_6)); AND2 AND2_07(.IN1(addr[6]), .IN2(wr), .OUT(s7)); ram ram_07(.data(data), .wren(s7), .address(1'b1), .clock(clk), .q(data_7)); AND2 AND2_08(.IN1(addr[7]), .IN2(wr), .OUT(s8)); ram ram_08(.data(data), .wren(s8), .address(1'b1), .clock(clk), .q(data_8)); AND2 AND2_09(.IN1(addr[8]), .IN2(wr), .OUT(s9)); ram ram_09(.data(data), .wren(s9), .address(1'b1), .clock(clk), .q(data_9)); AND2 AND2_10(.IN1(addr[9]), .IN2(wr), .OUT(s10)); ram ram_10(.data(data), .wren(s10), .address(1'b1), .clock(clk), .q(data_10)); AND2 AND2_11(.IN1(addr[10]), .IN2(wr), .OUT(s11)); ram ram_11(.data(data), .wren(s11), .address(1'b1), .clock(clk), .q(data_11)); AND2 AND2_12(.IN1(addr[11]), .IN2(wr), .OUT(s12)); ram ram_12(.data(data), .wren(s12), .address(1'b1), .clock(clk), .q(data_12)); AND2 AND2_13(.IN1(addr[12]), .IN2(wr), .OUT(s13)); ram ram_13(.data(data), .wren(s13), .address(1'b1), .clock(clk), .q(data_13)); AND2 AND2_14(.IN1(addr[13]), .IN2(wr), .OUT(s14)); ram ram_14(.data(data), .wren(s14), .address(1'b1), .clock(clk), .q(data_14)); AND2 AND2_15(.IN1(addr[14]), .IN2(wr), .OUT(s15)); ram ram_15(.data(data), .wren(s15), .address(1'b1), .clock(clk), .q(data_15)); AND2 AND2_16(.IN1(addr[15]), .IN2(wr), .OUT(s16)); ram ram_16(.data(data), .wren(s16), .address(1'b1), .clock(clk), .q(data_16)); endmodule В модуле используется элемент AND2, экземпляры которого я создаю. Но элемент AND2 так же как и DFF не могу найти ни в одной из библиотек, подключал уже все файлы из папки C:\altera\15.0\modelsim_ase\altera\verilog\src Я подозреваю, что это из за того, что проект разрабатывался в Quartus 9.1, а ModelSim используется от версии квартуса 15.0 где отсутствует библиотека для cyclone III. Как мне быть? Перейти на Quartus 13.1? Не очень бы хотелось - как показывает практика - чем выше версия квартуса - тем больше тормозов и времени на компиляцию. Warning from admin:Используйте codebox для длинных цитат программного кода! Изменено 21 мая, 2018 пользователем makc Замена code -> codebox Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться