Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: NIOS для начинающих
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
lostbegan
Если моделировать этот код в одиночку, то нет ничего кроме резета и клока. А с файлами проекта при симуляции ошибки
AVR
Цитата(lostbegan @ Feb 5 2017, 14:44) *
Если моделировать этот код в одиночку, то нет ничего кроме резета и клока. А с файлами проекта при симуляции ошибки
К сожалению, на этом этапе подсказать не смогу. Для меня это точно такая же неведомая область, с подводными камнями и граблями.

Мне приходилось конечно симулировать сложные корки в ModelSim, там я создавал TCL-скрипт, который добавлял в проект кучу файлов (чтобы каждый раз не вбивать эти файлы вручную). Думаю можно попробовать добавить сначала сам тестбенч и самый верхний модуль Nios2 который вставлен в тестбенч. Так, запуская раз за разом и видя что не найден такой-то модуль - добавлять его в файл скрипта. И так, за много итераций можно найти все нужные модули. Это немного не поэтично, зато рабочий способ добавить все нужные файлы.

Какие ошибки?
lostbegan
Цитата(AVR @ Feb 5 2017, 13:08) *
Какие ошибки?


Я пытаюсь компиллировать тот тестбенч и файл, который создался квартусом с кодом
CODE
// app_NiosII.v

// Generated using ACDS version 16.1 196

`timescale 1 ps / 1 ps
module app_NiosII (
input wire clk_clk, // clk.clk
input wire [7:0] pio_in_external_connection_export, // pio_in_external_connection.export
output wire [7:0] pio_out_external_connection_export, // pio_out_external_connection.export
input wire reset_reset_n // reset.reset_n
);

wire [31:0] nios2_qsys_data_master_readdata; // mm_interconnect_0:nios2_qsys_data_master_readdata -> nios2_qsys:d_readdata
wire nios2_qsys_data_master_waitrequest; // mm_interconnect_0:nios2_qsys_data_master_waitrequest -> nios2_qsys:d_waitrequest
wire nios2_qsys_data_master_debugaccess; // nios2_qsys:jtag_debug_module_debugaccess_to_roms -> mm_interconnect_0:nios2_qsys_data_master_debugaccess
wire [18:0] nios2_qsys_data_master_address; // nios2_qsys:d_address -> mm_interconnect_0:nios2_qsys_data_master_address
wire [3:0] nios2_qsys_data_master_byteenable; // nios2_qsys:d_byteenable -> mm_interconnect_0:nios2_qsys_data_master_byteenable
wire nios2_qsys_data_master_read; // nios2_qsys:d_read -> mm_interconnect_0:nios2_qsys_data_master_read
wire nios2_qsys_data_master_write; // nios2_qsys:d_write -> mm_interconnect_0:nios2_qsys_data_master_write
wire [31:0] nios2_qsys_data_master_writedata; // nios2_qsys:d_writedata -> mm_interconnect_0:nios2_qsys_data_master_writedata
wire [31:0] nios2_qsys_instruction_master_readdata; // mm_interconnect_0:nios2_qsys_instruction_master_readdata -> nios2_qsys:i_readdata
wire nios2_qsys_instruction_master_waitrequest; // mm_interconnect_0:nios2_qsys_instruction_master_waitrequest -> nios2_qsys:i_waitrequest
wire [18:0] nios2_qsys_instruction_master_address; // nios2_qsys:i_address -> mm_interconnect_0:nios2_qsys_instruction_master_address
wire nios2_qsys_instruction_master_read; // nios2_qsys:i_read -> mm_interconnect_0:nios2_qsys_instruction_master_read
wire [31:0] mm_interconnect_0_nios2_qsys_jtag_debug_module_readdata; // nios2_qsys:jtag_debug_module_readdata -> mm_interconnect_0:nios2_qsys_jtag_debug_module_readdata
wire mm_interconnect_0_nios2_qsys_jtag_debug_module_waitrequest; // nios2_qsys:jtag_debug_module_waitrequest -> mm_interconnect_0:nios2_qsys_jtag_debug_module_waitrequest
wire mm_interconnect_0_nios2_qsys_jtag_debug_module_debugaccess; // mm_interconnect_0:nios2_qsys_jtag_debug_module_debugaccess -> nios2_qsys:jtag_debug_module_debugaccess
wire [8:0] mm_interconnect_0_nios2_qsys_jtag_debug_module_address; // mm_interconnect_0:nios2_qsys_jtag_debug_module_address -> nios2_qsys:jtag_debug_module_address
wire mm_interconnect_0_nios2_qsys_jtag_debug_module_read; // mm_interconnect_0:nios2_qsys_jtag_debug_module_read -> nios2_qsys:jtag_debug_module_read
wire [3:0] mm_interconnect_0_nios2_qsys_jtag_debug_module_byteenable; // mm_interconnect_0:nios2_qsys_jtag_debug_module_byteenable -> nios2_qsys:jtag_debug_module_byteenable
wire mm_interconnect_0_nios2_qsys_jtag_debug_module_write; // mm_interconnect_0:nios2_qsys_jtag_debug_module_write -> nios2_qsys:jtag_debug_module_write
wire [31:0] mm_interconnect_0_nios2_qsys_jtag_debug_module_writedata; // mm_interconnect_0:nios2_qsys_jtag_debug_module_writedata -> nios2_qsys:jtag_debug_module_writedata
wire mm_interconnect_0_onchip_memory_s1_chipselect; // mm_interconnect_0:onchip_memory_s1_chipselect -> onchip_memory:chipselect
wire [31:0] mm_interconnect_0_onchip_memory_s1_readdata; // onchip_memory:readdata -> mm_interconnect_0:onchip_memory_s1_readdata
wire [14:0] mm_interconnect_0_onchip_memory_s1_address; // mm_interconnect_0:onchip_memory_s1_address -> onchip_memory:address
wire [3:0] mm_interconnect_0_onchip_memory_s1_byteenable; // mm_interconnect_0:onchip_memory_s1_byteenable -> onchip_memory:byteenable
wire mm_interconnect_0_onchip_memory_s1_write; // mm_interconnect_0:onchip_memory_s1_write -> onchip_memory:write
wire [31:0] mm_interconnect_0_onchip_memory_s1_writedata; // mm_interconnect_0:onchip_memory_s1_writedata -> onchip_memory:writedata
wire mm_interconnect_0_onchip_memory_s1_clken; // mm_interconnect_0:onchip_memory_s1_clken -> onchip_memory:clken
wire mm_interconnect_0_pio_out_s1_chipselect; // mm_interconnect_0:pio_out_s1_chipselect -> pio_out:chipselect
wire [31:0] mm_interconnect_0_pio_out_s1_readdata; // pio_out:readdata -> mm_interconnect_0:pio_out_s1_readdata
wire [1:0] mm_interconnect_0_pio_out_s1_address; // mm_interconnect_0:pio_out_s1_address -> pio_out:address
wire mm_interconnect_0_pio_out_s1_write; // mm_interconnect_0:pio_out_s1_write -> pio_out:write_n
wire [31:0] mm_interconnect_0_pio_out_s1_writedata; // mm_interconnect_0:pio_out_s1_writedata -> pio_out:writedata
wire [31:0] mm_interconnect_0_pio_in_s1_readdata; // pio_in:readdata -> mm_interconnect_0:pio_in_s1_readdata
wire [1:0] mm_interconnect_0_pio_in_s1_address; // mm_interconnect_0:pio_in_s1_address -> pio_in:address
wire [31:0] nios2_qsys_d_irq_irq; // irq_mapper:sender_irq -> nios2_qsys:d_irq
wire rst_controller_reset_out_reset; // rst_controller:reset_out -> [irq_mapper:reset, mm_interconnect_0:nios2_qsys_reset_n_reset_bridge_in_reset_reset, nios2_qsys:reset_n, onchip_memory:reset, pio_in:reset_n, pio_out:reset_n, rst_translator:in_reset]
wire rst_controller_reset_out_reset_req; // rst_controller:reset_req -> [nios2_qsys:reset_req, onchip_memory:reset_req, rst_translator:reset_req_in]
wire nios2_qsys_jtag_debug_module_reset_reset; // nios2_qsys:jtag_debug_module_resetrequest -> rst_controller:reset_in1

app_NiosII_nios2_qsys nios2_qsys (
.clk (clk_clk), // clk.clk
.reset_n (~rst_controller_reset_out_reset), // reset_n.reset_n
.reset_req (rst_controller_reset_out_reset_req), // .reset_req
.d_address (nios2_qsys_data_master_address), // data_master.address
.d_byteenable (nios2_qsys_data_master_byteenable), // .byteenable
.d_read (nios2_qsys_data_master_read), // .read
.d_readdata (nios2_qsys_data_master_readdata), // .readdata
.d_waitrequest (nios2_qsys_data_master_waitrequest), // .waitrequest
.d_write (nios2_qsys_data_master_write), // .write
.d_writedata (nios2_qsys_data_master_writedata), // .writedata
.jtag_debug_module_debugaccess_to_roms (nios2_qsys_data_master_debugaccess), // .debugaccess
.i_address (nios2_qsys_instruction_master_address), // instruction_master.address
.i_read (nios2_qsys_instruction_master_read), // .read
.i_readdata (nios2_qsys_instruction_master_readdata), // .readdata
.i_waitrequest (nios2_qsys_instruction_master_waitrequest), // .waitrequest
.d_irq (nios2_qsys_d_irq_irq), // d_irq.irq
.jtag_debug_module_resetrequest (nios2_qsys_jtag_debug_module_reset_reset), // jtag_debug_module_reset.reset
.jtag_debug_module_address (mm_interconnect_0_nios2_qsys_jtag_debug_module_address), // jtag_debug_module.address
.jtag_debug_module_byteenable (mm_interconnect_0_nios2_qsys_jtag_debug_module_byteenable), // .byteenable
.jtag_debug_module_debugaccess (mm_interconnect_0_nios2_qsys_jtag_debug_module_debugaccess), // .debugaccess
.jtag_debug_module_read (mm_interconnect_0_nios2_qsys_jtag_debug_module_read), // .read
.jtag_debug_module_readdata (mm_interconnect_0_nios2_qsys_jtag_debug_module_readdata), // .readdata
.jtag_debug_module_waitrequest (mm_interconnect_0_nios2_qsys_jtag_debug_module_waitrequest), // .waitrequest
.jtag_debug_module_write (mm_interconnect_0_nios2_qsys_jtag_debug_module_write), // .write
.jtag_debug_module_writedata (mm_interconnect_0_nios2_qsys_jtag_debug_module_writedata), // .writedata
.no_ci_readra () // custom_instruction_master.readra
);

app_NiosII_onchip_memory onchip_memory (
.clk (clk_clk), // clk1.clk
.address (mm_interconnect_0_onchip_memory_s1_address), // s1.address
.clken (mm_interconnect_0_onchip_memory_s1_clken), // .clken
.chipselect (mm_interconnect_0_onchip_memory_s1_chipselect), // .chipselect
.write (mm_interconnect_0_onchip_memory_s1_write), // .write
.readdata (mm_interconnect_0_onchip_memory_s1_readdata), // .readdata
.writedata (mm_interconnect_0_onchip_memory_s1_writedata), // .writedata
.byteenable (mm_interconnect_0_onchip_memory_s1_byteenable), // .byteenable
.reset (rst_controller_reset_out_reset), // reset1.reset
.reset_req (rst_controller_reset_out_reset_req), // .reset_req
.freeze (1'b0) // (terminated)
);

app_NiosII_pio_in pio_in (
.clk (clk_clk), // clk.clk
.reset_n (~rst_controller_reset_out_reset), // reset.reset_n
.address (mm_interconnect_0_pio_in_s1_address), // s1.address
.readdata (mm_interconnect_0_pio_in_s1_readdata), // .readdata
.in_port (pio_in_external_connection_export) // external_connection.export
);

app_NiosII_pio_out pio_out (
.clk (clk_clk), // clk.clk
.reset_n (~rst_controller_reset_out_reset), // reset.reset_n
.address (mm_interconnect_0_pio_out_s1_address), // s1.address
.write_n (~mm_interconnect_0_pio_out_s1_write), // .write_n
.writedata (mm_interconnect_0_pio_out_s1_writedata), // .writedata
.chipselect (mm_interconnect_0_pio_out_s1_chipselect), // .chipselect
.readdata (mm_interconnect_0_pio_out_s1_readdata), // .readdata
.out_port (pio_out_external_connection_export) // external_connection.export
);

app_NiosII_mm_interconnect_0 mm_interconnect_0 (
.clk_clk_clk (clk_clk), // clk_clk.clk
.nios2_qsys_reset_n_reset_bridge_in_reset_reset (rst_controller_reset_out_reset), // nios2_qsys_reset_n_reset_bridge_in_reset.reset
.nios2_qsys_data_master_address (nios2_qsys_data_master_address), // nios2_qsys_data_master.address
.nios2_qsys_data_master_waitrequest (nios2_qsys_data_master_waitrequest), // .waitrequest
.nios2_qsys_data_master_byteenable (nios2_qsys_data_master_byteenable), // .byteenable
.nios2_qsys_data_master_read (nios2_qsys_data_master_read), // .read
.nios2_qsys_data_master_readdata (nios2_qsys_data_master_readdata), // .readdata
.nios2_qsys_data_master_write (nios2_qsys_data_master_write), // .write
.nios2_qsys_data_master_writedata (nios2_qsys_data_master_writedata), // .writedata
.nios2_qsys_data_master_debugaccess (nios2_qsys_data_master_debugaccess), // .debugaccess
.nios2_qsys_instruction_master_address (nios2_qsys_instruction_master_address), // nios2_qsys_instruction_master.address
.nios2_qsys_instruction_master_waitrequest (nios2_qsys_instruction_master_waitrequest), // .waitrequest
.nios2_qsys_instruction_master_read (nios2_qsys_instruction_master_read), // .read
.nios2_qsys_instruction_master_readdata (nios2_qsys_instruction_master_readdata), // .readdata
.nios2_qsys_jtag_debug_module_address (mm_interconnect_0_nios2_qsys_jtag_debug_module_address), // nios2_qsys_jtag_debug_module.address
.nios2_qsys_jtag_debug_module_write (mm_interconnect_0_nios2_qsys_jtag_debug_module_write), // .write
.nios2_qsys_jtag_debug_module_read (mm_interconnect_0_nios2_qsys_jtag_debug_module_read), // .read
.nios2_qsys_jtag_debug_module_readdata (mm_interconnect_0_nios2_qsys_jtag_debug_module_readdata), // .readdata
.nios2_qsys_jtag_debug_module_writedata (mm_interconnect_0_nios2_qsys_jtag_debug_module_writedata), // .writedata
.nios2_qsys_jtag_debug_module_byteenable (mm_interconnect_0_nios2_qsys_jtag_debug_module_byteenable), // .byteenable
.nios2_qsys_jtag_debug_module_waitrequest (mm_interconnect_0_nios2_qsys_jtag_debug_module_waitrequest), // .waitrequest
.nios2_qsys_jtag_debug_module_debugaccess (mm_interconnect_0_nios2_qsys_jtag_debug_module_debugaccess), // .debugaccess
.onchip_memory_s1_address (mm_interconnect_0_onchip_memory_s1_address), // onchip_memory_s1.address
.onchip_memory_s1_write (mm_interconnect_0_onchip_memory_s1_write), // .write
.onchip_memory_s1_readdata (mm_interconnect_0_onchip_memory_s1_readdata), // .readdata
.onchip_memory_s1_writedata (mm_interconnect_0_onchip_memory_s1_writedata), // .writedata
.onchip_memory_s1_byteenable (mm_interconnect_0_onchip_memory_s1_byteenable), // .byteenable
.onchip_memory_s1_chipselect (mm_interconnect_0_onchip_memory_s1_chipselect), // .chipselect
.onchip_memory_s1_clken (mm_interconnect_0_onchip_memory_s1_clken), // .clken
.pio_in_s1_address (mm_interconnect_0_pio_in_s1_address), // pio_in_s1.address
.pio_in_s1_readdata (mm_interconnect_0_pio_in_s1_readdata), // .readdata
.pio_out_s1_address (mm_interconnect_0_pio_out_s1_address), // pio_out_s1.address
.pio_out_s1_write (mm_interconnect_0_pio_out_s1_write), // .write
.pio_out_s1_readdata (mm_interconnect_0_pio_out_s1_readdata), // .readdata
.pio_out_s1_writedata (mm_interconnect_0_pio_out_s1_writedata), // .writedata
.pio_out_s1_chipselect (mm_interconnect_0_pio_out_s1_chipselect) // .chipselect
);

app_NiosII_irq_mapper irq_mapper (
.clk (clk_clk), // clk.clk
.reset (rst_controller_reset_out_reset), // clk_reset.reset
.sender_irq (nios2_qsys_d_irq_irq) // sender.irq
);

altera_reset_controller #(
.NUM_RESET_INPUTS (2),
.OUTPUT_RESET_SYNC_EDGES ("deassert"),
.SYNC_DEPTH (2),
.RESET_REQUEST_PRESENT (1),
.RESET_REQ_WAIT_TIME (1),
.MIN_RST_ASSERTION_TIME (3),
.RESET_REQ_EARLY_DSRT_TIME (1),
.USE_RESET_REQUEST_IN0 (0),
.USE_RESET_REQUEST_IN1 (0),
.USE_RESET_REQUEST_IN2 (0),
.USE_RESET_REQUEST_IN3 (0),
.USE_RESET_REQUEST_IN4 (0),
.USE_RESET_REQUEST_IN5 (0),
.USE_RESET_REQUEST_IN6 (0),
.USE_RESET_REQUEST_IN7 (0),
.USE_RESET_REQUEST_IN8 (0),
.USE_RESET_REQUEST_IN9 (0),
.USE_RESET_REQUEST_IN10 (0),
.USE_RESET_REQUEST_IN11 (0),
.USE_RESET_REQUEST_IN12 (0),
.USE_RESET_REQUEST_IN13 (0),
.USE_RESET_REQUEST_IN14 (0),
.USE_RESET_REQUEST_IN15 (0),
.ADAPT_RESET_REQUEST (0)
) rst_controller (
.reset_in0 (~reset_reset_n), // reset_in0.reset
.reset_in1 (nios2_qsys_jtag_debug_module_reset_reset), // reset_in1.reset
.clk (clk_clk), // clk.clk
.reset_out (rst_controller_reset_out_reset), // reset_out.reset
.reset_req (rst_controller_reset_out_reset_req), // .reset_req
.reset_req_in0 (1'b0), // (terminated)
.reset_req_in1 (1'b0), // (terminated)
.reset_in2 (1'b0), // (terminated)
.reset_req_in2 (1'b0), // (terminated)
.reset_in3 (1'b0), // (terminated)
.reset_req_in3 (1'b0), // (terminated)
.reset_in4 (1'b0), // (terminated)
.reset_req_in4 (1'b0), // (terminated)
.reset_in5 (1'b0), // (terminated)
.reset_req_in5 (1'b0), // (terminated)
.reset_in6 (1'b0), // (terminated)
.reset_req_in6 (1'b0), // (terminated)
.reset_in7 (1'b0), // (terminated)
.reset_req_in7 (1'b0), // (terminated)
.reset_in8 (1'b0), // (terminated)
.reset_req_in8 (1'b0), // (terminated)
.reset_in9 (1'b0), // (terminated)
.reset_req_in9 (1'b0), // (terminated)
.reset_in10 (1'b0), // (terminated)
.reset_req_in10 (1'b0), // (terminated)
.reset_in11 (1'b0), // (terminated)
.reset_req_in11 (1'b0), // (terminated)
.reset_in12 (1'b0), // (terminated)
.reset_req_in12 (1'b0), // (terminated)
.reset_in13 (1'b0), // (terminated)
.reset_req_in13 (1'b0), // (terminated)
.reset_in14 (1'b0), // (terminated)
.reset_req_in14 (1'b0), // (terminated)
.reset_in15 (1'b0), // (terminated)
.reset_req_in15 (1'b0) // (terminated)
);

endmodule


Получаю (скрин)

AVR
Первая строка с Error говорит какой модуль не добавлен в проект. Надо его добавить в симуляцию. И таких может будет десять и даже 50 - всё надо добавить по-очереди. Шаг за шагом выясняя чего не хватает.
lostbegan
Понял, попробую насобирать. спасибо большое!
lostbegan
Так и не выходит придти к ясной картинке. Опять столкнулся с тем, что слишком много вариантов. Тестбенч может формировать qsys, так же его может формировать сам квартус, а еще его может сформировать встроенная система моделирования, которая создает .vwf - это файл временных диаграмм, еще вручную можно написать. А так же моделировать можно либо запустив квартус, и пытаясь создать этот самый .vwf, а так же прямиком из эклипса - прошивочного софта можно запустить модел сим. Кстати он нормально формирует сам резет и клок, но ин/аут нулевые, как ни крути. Упростил код до того, чтобы через пио_аут вывести единицу, но нигде не могу добиться того, чтобы диаграмма хоть как то поменялась. Напомню что проект в квартусе скомпилирован в составе bdf, qip и hex. Всякие тестовые vhdl/verilog проектики, найденные в инете работают, то есть софт рабочий. Но такое чувство, что моя эклипсовская прошивка будто отрезана от всего проекта. Может кто нибудь сталкивался, или хотя бы поможет исключить какие либо варианты.

ПС: Попытка подсунуть в модел сим недостающие файлы тоже не увенчалась успехом. Количество ошибок с каждым файлом только увеличивается, да и один файлик я вообще не нашел. В общем то этот вариант вообще не думаю что практичный

Буду благодарен за любую, даже непроверенную идею
lostbegan
и возвращаясь к истокам, точно ли возможно увидеть работу сишной прошивки на ниосе без платы и бластера?
tvcam
Цитата(lostbegan @ Feb 13 2017, 22:53) *
и возвращаясь к истокам, точно ли возможно увидеть работу сишной прошивки на ниосе без платы и бластера?

В квартусе 8.1 точно можно увидеть, через встроенный симулятор.
AVR
Цитата(lostbegan @ Feb 13 2017, 22:53) *
и возвращаясь к истокам, точно ли возможно увидеть работу сишной прошивки на ниосе без платы и бластера?

Симулировать можно и более сложные вещи чем просто Nios2, я сам никогда такого не делал, но у меня есть уверенность что да.
Жаль я лишь на железе работал, не могу подсказать как (я только Xilinx Microblaze так симулировал).

Может создать отдельную тему, и там четко и подробно сообщить информацию о том что в симуляции получилось, а что нет, логи ошибок и тому подобное?
Найдется кто уже работал с симуляцией Nios2 и подскажет надеюсь.
Грендайзер
Цитата
Может создать отдельную тему, и там четко и подробно сообщить информацию о том что в симуляции получилось, а что нет, логи ошибок и тому подобное?

Да под это дело можно и отдельную тему создать. Так как lostbegan написал мне в личку вопрос по теме моделирования NiosII в моделсиме, то влезу со своими тремя копейками. Сразу скажу, что я работал в SOPC builder и с Qsys работать не умею, и ещё было это давно и не правда sm.gif . В теме много написано, всё читать не стал, выхватил лишь суть, так что если открою Америку прошу не серчать. Перво наперво, RTL симуляцию я запускаю прям из квартуса (собственно GL запускается от туда же). В файлике, который я прикрепил это описано. Далее при генерации системы в SOPC builder необходимо указать путь к моделсиму и, сказать что бы та так же сгенерила файлики тестбенча. После этого достаточно найти головной файлик тестбенча (помоиму он находится в папке simmulation) и вписать туда формы входных воздействий. При этом такие сигналы как reset_n и clock в этом файле уже описаны. Так что останется лишь написать сишный код и запустить симмуляцию. Ещё 2 момента. 1) Если так простой файлик тестбенча найти не выходи, то его можно будет найти в уже запущеном моделсиме. 2) Босяцкий ниос (который бесплатный) вообще говоря очень медленный, и что бы инициализироваться ему нужна куча тактов, так что если клоки пошли и ресет = 1, а изменений выходных сигналов не наблюдается, продолжайте жмакать кнопочку run. Да по поводу генерации тестовых файлов в SOPC, поищите не то альтеровский апноут где то в нете валялся, не то какие то лабораторные какого то ни то массачусецкого не то ещё какого то бужуинского ВУЗА.
P.S. Поменял место работы и сейчас альтерой не занимаюсь. Ну и соответственно ни квартуса ни проектов на работе нет. Если дома что то осталось, то постараюсь выложить более подробную информацию. Надеюсь, что хоть немного смог помочь.
RLC
ВОПРОС про usleep(1000);
Эта функция-задержка на 1мс(1000 мкс). Вопрос: во время этой задержки процессор будет обрабатывать настроенные ранее прерывания?
В докуменнтации описано что не поддерживает ISR.
Kuzmi4
Цитата(RLC @ Apr 26 2017, 15:51) *
..usleep..
Вопрос: во время этой задержки процессор будет обрабатывать настроенные ранее прерывания?

Эта ф-ция в bare-metal ниосе будет выглядеть как alt_busy_sleep:
..\nios2eds\components\altera_nios2\HAL\src\alt_busy_sleep.c
там вы увидите примерно такое: __asm__ volatile (..)
Из чего вытекает, что там ниос просто крутится в цикле рассчитанное кол-во раз. Если у вас разрешены прерывания то никаких проблемы с переходом из цикла у ниоса в этом случае не будет.
Александр77
Коллеги, добрый день.
Сздал в кусисе 16.1 квартуса ниос с периферией, сгенерировал bsp, подгрузил в основной файл system.h, в котором описаны все адреса периферии.
Однако при обращении к некоторым объявленным в дефайне именам получаю сообщение "Symbol XXX could not be resolved".
Пробовал задавать явные адреса вместо имени, либо копировать дефайны из system.h - работает. Новая генерация bsp не помогает.
Подскажите, с чем может быть связана подобная работа?
_Anatoliy
Цитата(Александр77 @ Dec 15 2017, 07:49) *

А флажок "Index source and header files opened in editor " установлен?
doom13
Цитата(Александр77 @ Dec 15 2017, 07:49) *
Коллеги, добрый день.
Сздал в кусисе 16.1 квартуса ниос с периферией, сгенерировал bsp, подгрузил в основной файл system.h, в котором описаны все адреса периферии.
Однако при обращении к некоторым объявленным в дефайне именам получаю сообщение "Symbol XXX could not be resolved".
Пробовал задавать явные адреса вместо имени, либо копировать дефайны из system.h - работает. Новая генерация bsp не помогает.
Подскажите, с чем может быть связана подобная работа?

Ругается Eclipse или компилятор? Если Eclipse - просто убирайте галку в настройках Preferences->C/C++->Code Analysis
_Anatoliy
Цитата(doom13 @ Dec 15 2017, 17:15) *
Ругается Eclipse или компилятор? Если Eclipse - просто убирайте галку в настройках Preferences->C/C++->Code Analysis

Если установить флажок то и Code Analysis будет работать и ругаться никто не будет.
Александр77
Цитата(_Anatoliy @ Dec 15 2017, 16:27) *
А флажок "Index source and header files opened in editor " установлен?

Установил, но роль не поменялась. Заметил что часть периферии (похоже та которая в начале system.h, требуется дополнительно подтвердить это наблюдение) воспринимается адекватно, а дальше - компилятор выводит своего красного жука и сообщает об ошибке.
UDP Сейчас еще раз прогнал проект- галка почему-то не сохранилась.
Стоило ее вновь установить и проект собрался без ошибок!
_Anatoliy
Цитата(Александр77 @ Dec 15 2017, 22:08) *

Чтобы не было таких сюрпризов пользуйтесь в контекстном меню пунктом Index.
Александр77
_Anatoliy, спасибо Вам за помощь.
_Anatoliy
Цитата(Александр77 @ Dec 16 2017, 12:32) *
_Anatoliy, спасибо Вам за помощь.

Да не за что. Сам когда осваивал матерился.
justontime
Цитата(radionun @ May 23 2014, 16:05) *
Добавил в QSYS jtag_uart, так и назвал его - "jtag_uart". Сгенерил BSP, в BSP editor убедился, что stdout перенаправлен на jtag_uart. Запускаю приложение - пишет, что что не совпадают имена stdout (и еще чего-то).
Действительно, вижу, что USB Blaster подключен к "jtaguart_0".

Перепробовал все, что пришло в голову, заново сгенерил вообще все - ничего не получается. В конечном итоге, в QSYS переименовал UART в "jtaguart_0", и все заработало.

Но ведь должен быть правильный способ, чтобы использовать то название, которое хочу ???

Столкнулся с идентичной проблемой - вроде мелочь, но раздражает, что нельзя использовать свое имя... Неужели так и нет решения ?
justontime
И еще вопрос - правильно ли я понимаю, что при аппаратном сбросе NIOS все переменные в программе, написанной на C, либо инициализируются значением, указанным при декларировании (если указано), либо не определены ? Существует ли какой-то правильный способ передать данные (совсем немного, несколько байт) из состояния "до сброса" в состояние "после сброса" ?
Swup
Цитата(justontime @ May 21 2018, 12:13) *
И еще вопрос - правильно ли я понимаю, что при аппаратном сбросе NIOS все переменные в программе, написанной на C, либо инициализируются значением, указанным при декларировании (если указано), либо не определены ? Существует ли какой-то правильный способ передать данные (совсем немного, несколько байт) из состояния "до сброса" в состояние "после сброса" ?

Поставить память рядом и не сбрасывать её, когда сбрасывается процессор.
Но не понятно зачем это вообще нужно.
justontime
Блин, ну как же не люблю бороться не только с проектом, но еще и средой... Очевидно, я совсем тупой, но как удобно смотреть в Eclipse, какой машинный код отвечает тому или иному куску кода на C ??? Понятно, что можно посмотреть в .objdump, но там все подряд, а хотелось бы ткнуть мышкой в строку исходника, и увидеть, что получилось из этого на asm. Причем это еще хочется без необходимости запускать приложение на реальном железе (отладка не нужна, просто смотреть соответствие кода)...
doom13
Окно Window->Show View->Debug->Disassembly
_Anatoliy
Цитата(justontime @ Jun 5 2018, 12:57) *
Ниосовским симулятором не пробовали смотреть?
justontime
Цитата(doom13 @ Jun 5 2018, 13:50) *
Окно Window->Show View->Debug->Disassembly

Блин, у меня там нет Disassembly...
Нажмите для просмотра прикрепленного файла

Quartus 17.1

Цитата(_Anatoliy @ Jun 5 2018, 13:56) *
Ниосовским симулятором не пробовали смотреть?

Если честно, я с ним вообще не знаком... Обязательно посмотрю, но сейчас даже особо и не нужен - было бы вполне достаточно нормально смотреть код...
_Anatoliy
Цитата(justontime @ Jun 5 2018, 14:36) *
Блин, у меня там нет Disassembly...

-> other...
justontime
Цитата(_Anatoliy @ Jun 5 2018, 14:47) *
-> other...

Как раз сам начал туда смотреть sm.gif
Вкладка Disassembly появилась, но пустая, и как там что-то получить, непонятно... Случайно не нужно запускать на реальном железе ?
При попытке Run -> Debug выдает "Launching .elf has encountered a problem. Error with command gdb --version"

Или нужно что-то еще для отладчика gdb настраивать ?

P.S. Извините за глупые вопросы - только начинаю со всем этим разбираться...
doom13
Цитата(justontime @ Jun 5 2018, 15:29) *
Как раз сам начал туда смотреть sm.gif
Вкладка Disassembly появилась, но пустая, и как там что-то получить, непонятно... Случайно не нужно запускать на реальном железе ?
При попытке Run -> Debug выдает "Launching .elf has encountered a problem. Error with command gdb --version"

Или нужно что-то еще для отладчика gdb настраивать ?

P.S. Извините за глупые вопросы - только начинаю со всем этим разбираться...

Нужно. Debug Configurations->Nios II Hardware->New
justontime
Цитата(doom13 @ Jun 5 2018, 16:15) *
Нужно.

Нужно запускать на реальном железе, или нужно настраивать ? Просто при попытке настроить все упирается в Target Connection - без железа не получается, а нужно, как изначально говорил, именно просто посмотреть код после компиляции без необходимости запускать...
justontime
Блин, все еще продолжаю бороться... Если запустить проект на реальном железе, то все в порядке - в disassembly имеется как раз то, что нужно. Но как получить аналогичное без запуска проекта - не понимаю sad.gif
valerony
Ребята, кто знает как правильно делать установку/очистку отдельного бита в регистре. Например в ядре JTAG UART регистр control содержит биты AC, WE, RE, и нужно установить WE, RE не "трогая" AC.
У AVR это можно было сделать накладывая маску, в NIOS обращение к регистрам идет с помощью макросов IORD(...), IOWR(...), т.е. способ в "лоб" это:
1-завести переменную в 32 бита (temp)
2-провести IORD(...) регистра control в переменную temp
3-провести IOWR(...) переменной temp с маской в регистр control
Есть ли более быстрый способ устанавливать биты отдельно? Я уже листал юзер гайды и мануалы, но почему-то примеров на C так и не нашел sad.gif
doom13
BSP посмотрите (bsp/drivers/inc), для каждого ядра есть соответствующие макросы, типа IOWR_ALTERA_AVALON_PIO_SET/CLEAR_BITS()
_Anatoliy
Цитата(doom13 @ Jun 18 2018, 08:31) *
BSP посмотрите (bsp/drivers/inc), для каждого ядра есть соответствующие макросы, типа IOWR_ALTERA_AVALON_PIO_SET/CLEAR_BITS()

В догонку - при создании PIO нужно разрешить побитовое управление.
valerony
Цитата(doom13 @ Jun 18 2018, 08:31) *
BSP посмотрите (bsp/drivers/inc), для каждого ядра есть соответствующие макросы, типа IOWR_ALTERA_AVALON_PIO_SET/CLEAR_BITS()


Спасибо большое, определенно по ядру JTAG UART регистров установки/очистки я не нашел, зато в altera_avalon_pio_regs.h есть макросы установки/очистки бит, я так понял это универсальные макросы:
IOWR_ALTERA_AVALON_PIO_SET_BITS(base, data)
тогда чтобы установить младший бит в регистре control
IOWR_ALTERA_AVALON_PIO_SET_BITS(адрес control, 0x00000001)
Будет время попробую


Цитата(_Anatoliy @ Jun 18 2018, 08:49) *
В догонку - при создании PIO нужно разрешить побитовое управление.

Да, по поводы портов ввода/вывода знаю, меня больше интересуют регистры например JTAG UART, там как таковых отдельных регистров установки бит нет, и нет галочек по их включению в модуль
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.