|
|
  |
ModelSim, вопросы новичка |
|
|
|
May 20 2018, 06:38
|

Частый гость
 
Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414

|
Цитата(Marat Zuev @ May 19 2018, 20:52)  Всё, чем Вы восторгались, написано, в том числе после прочтения статей, подобных этой ) Как раз для Вас с того же сайта: https://marsohod.org/11-blog/251-sch-or-txtСпасибо, я уже понял что надо делать все на verilog. У меня в схеме есть такой компонент:  Это сгенерированый компонент Single-port RAM megafunction. В RLT это выглядит так:  Как мне к нему обратиться? CYCLONEIII_RAM_BLOCK? Задача то в общем простая - сделать компонент для хранения 1 слова, но не на D-триггерах, а на RAM-элементах, чтобы не тратить драгоценные логические элементы ПЛИСа.
|
|
|
|
|
May 20 2018, 07:09
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 8-05-18
Пользователь №: 103 834

|
Цитата(Sprite @ May 20 2018, 07:38)  Как мне к нему обратиться? Вам надо было поставить галку здесь:
--------------------
-- С наилучшими пожеланиями, Marat.
|
|
|
|
|
May 20 2018, 08:16
|

Частый гость
 
Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414

|
Цитата(R6L-025 @ May 20 2018, 14:12)  А, еще есть quartus templates. В выпадающем меню Edit->Insert Template есть шаблоны кода и директив (чтоб это меню появилось нужно чтоб в квартусе было открыто окно встроенного редактора кода). Там, как раз, есть шаблоны работы с памятью. Это первое, с чего я начинал. Вставлял template, но он RAM все равно синтезируется как D-триггер. Попробую сделать как написал Marat Zuev, посмотрим что получится. Вообще мне нужно создать несколько RAM, каждый из которых использовался бы только под хранение одного элемента, но если делать через мегавизард - то минимальная разрядность шины адреса - 2. Приходится создавать RAM под 2 элемента, а шину адреса тупо весить на VCC. Получается не оптимально как то. В идеале ищу такое решение, чтобы можно было создавать RAM для хранения одного элемента (16 бит данных) и чтобы его полностью можно было описать на verilog, а иначе зачем я его изучать начал? ))
Сообщение отредактировал Sprite - May 20 2018, 08:23
|
|
|
|
|
May 20 2018, 10:12
|
Частый гость
 
Группа: Свой
Сообщений: 76
Регистрация: 8-04-11
Из: Ростов-на-Дону
Пользователь №: 64 227

|
Да, 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"
|
|
|
|
|
May 20 2018, 10:27
|

Частый гость
 
Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414

|
Цитата(R6L-025 @ May 20 2018, 17:12)  Да, 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, он в проекте просто для наглядности, сигнал с него выводится на светодиод отладочной платы, по нему я понимаю, что плата вообще работает)
Сообщение отредактировал Sprite - May 20 2018, 10:33
|
|
|
|
|
May 21 2018, 11:53
|

Частый гость
 
Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414

|
Всем добра!Перевел проект полностью на 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. Как и куда прописывать пути до библиотек их содержащих?
Сообщение отредактировал Sprite - May 21 2018, 11:53
|
|
|
|
|
May 21 2018, 12:42
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 8-05-18
Пользователь №: 103 834

|
Цитата(Sprite @ May 21 2018, 11:53)  Если я правильно понимаю - modelsim хочет увидеть компоненты AND2, altsyncram и DFF. Как и куда прописывать пути до библиотек их содержащих? Понимаете правильно. Вам надо добавить требуемые библиотеки примерно так: vsim -voptargs=+acc -L "требуемая библиотека" -L Ваша_рабочая_библиотека Ваша_рабочая_библиотека.Ваш_tb у меня, например, это было так: vsim -voptargs=+acc -L maxii_ver -L lpm_ver -L work work.tb
--------------------
-- С наилучшими пожеланиями, Marat.
|
|
|
|
|
May 21 2018, 13:16
|

Частый гость
 
Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414

|
Цитата(Flip-fl0p @ May 21 2018, 19:47)  Я бы ещё не применял имена модулей - названия примитивов регистров. Например 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. Может быть в этом дело?
|
|
|
|
|
May 21 2018, 13:17
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Поскольку полного кода я не вижу, я предположил, что вы создали свой модуль с именем DFF. А этого делать крайне нежелательно. Цитата Я и беру его из библиотеки, только какой пока не знаю, так же как и DFF Это как ?  Вообще было бы неплохо, чтобы Вы полный текст проекта сюда выложили. Обычно для RTL симуляции библиотек надо минимум. И тип чипа вообще роли играть не должен !
|
|
|
|
|
May 21 2018, 13:32
|

Частый гость
 
Группа: Участник
Сообщений: 173
Регистрация: 11-05-08
Пользователь №: 37 414

|
Цитата(Flip-fl0p @ May 21 2018, 20:17)  Поскольку полного кода я не вижу, я предположил, что вы создали свой модуль с именем DFF. А этого делать крайне нежелательно. Это как ?  Вообще было бы неплохо, чтобы Вы полный текст проекта сюда выложили. Обычно для RTL симуляции библиотек надо минимум. И тип чипа вообще роли играть не должен ! Вот код одного из модулей: CODE 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 для длинных цитат программного кода!
Сообщение отредактировал makc - May 21 2018, 14:45
Причина редактирования: Замена code -> codebox
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|