реклама на сайте
подробности

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> ModelSim, вопросы новичка
Sprite
сообщение May 20 2018, 06:38
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 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-элементах, чтобы не тратить драгоценные логические элементы ПЛИСа.

Go to the top of the page
 
+Quote Post
R6L-025
сообщение May 20 2018, 07:09
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 8-04-11
Из: Ростов-на-Дону
Пользователь №: 64 227



А почему эту самую корку использовать нельзя? Если хотите без корки реализовать память - посмотрите главу Recommended HDL Coding Styles в quartus handbook. Там есть примеры кода которые реализует память которая будет синтезирована именно на блоках памяти. Еще есть директивы самого Quartus позволяющие указать что вы хотите от него. Попробуйте погуглить по слову "ramstyle".
Go to the top of the page
 
+Quote Post
Marat Zuev
сообщение May 20 2018, 07:09
Сообщение #18


Участник
*

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



Цитата(Sprite @ May 20 2018, 07:38) *
Как мне к нему обратиться?
Вам надо было поставить галку здесь:



--------------------
--
С наилучшими пожеланиями, Marat.
Go to the top of the page
 
+Quote Post
R6L-025
сообщение May 20 2018, 07:12
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 8-04-11
Из: Ростов-на-Дону
Пользователь №: 64 227



А, еще есть quartus templates. В выпадающем меню Edit->Insert Template есть шаблоны кода и директив (чтоб это меню появилось нужно чтоб в квартусе было открыто окно встроенного редактора кода). Там, как раз, есть шаблоны работы с памятью.
Go to the top of the page
 
+Quote Post
Sprite
сообщение May 20 2018, 08:16
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
R6L-025
сообщение May 20 2018, 09:18
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 76
Регистрация: 8-04-11
Из: Ростов-на-Дону
Пользователь №: 64 227



Ну тогда попробуйте поиграть с директивами. Quartus при синтезе проводит оптимизацию, и может попросту решить что использовать триггеры вместо памяти целесообразней для такого малого объема
Go to the top of the page
 
+Quote Post
Sprite
сообщение May 20 2018, 09:29
Сообщение #22


Частый гость
**

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



Спасибо, попробую. Еще один вопрос: как описать этот BDF на verilog?



Особенно интересует привязка к конкретным пинам. В качестве top-level использовать нужно verilog-файл?
Go to the top of the page
 
+Quote Post
R6L-025
сообщение May 20 2018, 10:12
Сообщение #23


Частый гость
**

Группа: Свой
Сообщений: 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"
Go to the top of the page
 
+Quote Post
Sprite
сообщение May 20 2018, 10:27
Сообщение #24


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Sprite
сообщение May 21 2018, 11:53
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Marat Zuev
сообщение May 21 2018, 12:42
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 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.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение May 21 2018, 12:47
Сообщение #27


В поисках себя...
****

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



Я бы ещё не применял имена модулей - названия примитивов регистров. Например DFF - имя запрещенное. Очень странно что Quartus не ругался...
Go to the top of the page
 
+Quote Post
Sprite
сообщение May 21 2018, 13:16
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 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. Может быть в этом дело?
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение May 21 2018, 13:17
Сообщение #29


В поисках себя...
****

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



Поскольку полного кода я не вижу, я предположил, что вы создали свой модуль с именем DFF. А этого делать крайне нежелательно.

Цитата
Я и беру его из библиотеки, только какой пока не знаю, так же как и DFF

Это как ? wacko.gif
Вообще было бы неплохо, чтобы Вы полный текст проекта сюда выложили. Обычно для RTL симуляции библиотек надо минимум. И тип чипа вообще роли играть не должен !
Go to the top of the page
 
+Quote Post
Sprite
сообщение May 21 2018, 13:32
Сообщение #30


Частый гость
**

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



Цитата(Flip-fl0p @ May 21 2018, 20:17) *
Поскольку полного кода я не вижу, я предположил, что вы создали свой модуль с именем DFF. А этого делать крайне нежелательно.
Это как ? wacko.gif
Вообще было бы неплохо, чтобы Вы полный текст проекта сюда выложили. Обычно для 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
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 8th July 2025 - 05:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01521 секунд с 7
ELECTRONIX ©2004-2016