Search the Community
Showing results for tags 'max10'.
-
Всем привет, ковыряюсь с ПЛИС Max10 от Интела. Копаю корку Altera On-Chip Flash, которая позволяет в менять файл конфигурации находу, не используя JTAG. Грубо говоря самостоятельно себя перешивать. Структурная схема доступа к корке - на картинке. Если читать или записывать 32-х битное слово на шине writedata[31:0] блока Data и сравнивать данные с RPD-файлом, то оказывается что если брать данные по 4 байта из RPD-файла и записывать их на writedata[31:0] блока Data, то это 32-х битное слово нужно переворачивать - младший бит нужно записывать самым старшим в writedata и т д... Причем если читать и записывать writedata[31:0] блока Control - то там все впорядке. И вот вопрос: - это особенности шины данных Avalon или это такой хитрый формат RPD-данных, что врядли...
-
Доработка прошивки MAX10 (Москва)
Conv posted a topic in Предлагаю работу
Имеется выполненный проект на MAX10 (трансивер), в котором требуется заменить полосовые фильтры на фильтры меньшего порядка. Всего 2 таких фильтра. Исходники и прочая необходимая информация предоставляются. Подробности - через личку. -
Доброго времени! Прошу совета у сообщества. "Сам я в верилог недавно". Пытаюсь таким образом: `timescale 1 ps / 1 ps module sram_adapter #(parameter gp_SRAM_D_WIDTH = 8, parameter gp_SRAM_A_WIDTH = 12, parameter gp_SRAM_WORD_SIZE = 1<<gp_SRAM_A_WIDTH) ( input [(gp_SRAM_D_WIDTH-1):0] i_d0, input [(gp_SRAM_D_WIDTH-1):0] i_d1, input [(gp_SRAM_A_WIDTH-1):0] i_add0, input[(gp_SRAM_A_WIDTH-1):0] i_add1, input[(gp_SRAM_A_WIDTH-1):0] i_add2, input i_clock, input i_add0bus_sel, input i_add1bus_sel, input i_add2bus_sel, input i_rden0, input i_rden1, input i_wren0, input i_wren1, input i_noe_uc, input i_nwe_uc, input i_ncs_uc, input [(gp_SRAM_A_WIDTH-1):0] i_add_uc, output wire[(gp_SRAM_D_WIDTH-1):0] o_d0, output wire [(gp_SRAM_A_WIDTH-1):0] o_add, inout [(gp_SRAM_D_WIDTH-1):0] io_d_uc, output dbg0, output dbg1, output dbg2 ); reg [(gp_SRAM_A_WIDTH-1):0] r_a; reg[(gp_SRAM_D_WIDTH-1):0] r_d; reg[(gp_SRAM_D_WIDTH-1):0] r_q; assign o_add = r_a; assign o_d0 = r_q; reg [3:0]r_bus_mux_sel, r_we, r_oe; assign dbg0 = (r_oe); assign dbg1 = (r_we); assign dbg2 = |r_bus_mux_sel; reg [gp_SRAM_D_WIDTH:0] sram[(gp_SRAM_WORD_SIZE-1):0]; initial begin r_a = 0; r_q = 0; r_oe = 0; r_we = 0; end // Tri-State Buffer control assign io_d_uc = (r_bus_mux_sel[3] && !i_noe_uc && i_nwe_uc) ? r_q: 8'bz; always @(negedge i_clock) begin r_bus_mux_sel[3] <= !i_ncs_uc; r_bus_mux_sel[0] <= i_add0bus_sel; r_bus_mux_sel[1] <= i_add1bus_sel; r_bus_mux_sel[2] <= i_add2bus_sel; end always @(posedge i_clock) begin if(r_we) sram[r_a] <= r_d; if(r_oe) r_q <= sram[r_a]; end localparam lp_TX1BUF_ADD_OFFSET = 12'd16, lp_RX1BUF_ADD_OFFSET = 12'd96; always @(i_add_uc or i_add0 or i_add1 or i_add2 or r_bus_mux_sel) begin casex (r_bus_mux_sel) 4'd1: r_a = i_add0; 4'd2: r_a = i_add1 + lp_TX1BUF_ADD_OFFSET; 4'd4: r_a = i_add2 + lp_RX1BUF_ADD_OFFSET; 4'b1xxx: r_a = i_add_uc; default: r_a = 12'd4095; endcase end always @(i_d0 or i_d1 or r_bus_mux_sel) begin casex (r_bus_mux_sel) 4'd1: r_d = i_d0; 4'd4: r_d = i_d1; 4'b1xxx: r_d = io_d_uc; default: r_d = 0; endcase end always @(i_wren0 or i_wren1 or i_nwe_uc or r_bus_mux_sel) begin casex (r_bus_mux_sel) 4'd1: r_we = i_wren0; 4'd4: r_we = i_wren1; 4'b1xxx: r_we = !i_nwe_uc; default: r_we = 0; endcase end always @(i_rden0 or i_rden1 or i_noe_uc or r_bus_mux_sel) begin casex (r_bus_mux_sel) 4'd1: r_oe = i_rden0; 4'd2: r_oe = i_rden1; 4'b1xxx: r_oe = (!i_noe_uc && i_nwe_uc); default: r_oe = 0; endcase end endmodule К памяти подключен внешний МК: i_noe_uc, input i_nwe_uc, input i_ncs_uc, i_add_uc, io_d_uc и внутренние "читатели/писатели"(1 писатель/читатель, 1 читатель, 1 писатель). Результат использования такой: - синтезируется ОЗУ, запрошенного объема 4096 байт; - тесты записи/чтения по всему объему со стороны МК проходят успешно; - внутренние "читатели/писатели" читают и пишут успешно; НО, как-будто это две разные ОЗУ. Т.е. если записать МК какие-либо данные в определенный адрес (диапазон адресов), то внутренний читатель вычитывает с этого адреса (адресов) исключительно, то, что туда записывает внутренний писатель. Равно как и МК вычитывает, только то, что сам записал.
-
Здравствуйте, пишу свой первый проект на ПЛИС (verilog, max10), проект создаю в учебных целях. Создал систему в Qsys: nios, память(sdram), Jtag, и самописный компонент. Внутри самописного компонента, с просторов интернета контроллер памяти sdram(отдельно от памяти nios), счетчик и DCFIFO для передачи из счетчика на sdram. Nios запускает счетчик, тот в считает до оперделенного числа, и записывает в FIFO, оттуда контроллер sdram забирает данные и пишет в память. Nios и счетчик работают на 100Мгц, sdram и память на 125Мгц, FIFO двухклоковое на запись 100 Мгц на чтение 125 Мгц. На симуляции все работает отлично но в железе появляются проблемы констрейнов. В assigment поставил sdram выводам fast IO, клоки сделал Global Clock. Sdram для Nios работет timequest не ругается, а в моем компоненте постоянно ошибки памяти и я не могу понять почему такие большие слаки. Память микрон MT48LC16M16A2. На nios память микрон MT48LC4M32B2. Констрейны nios sdram Констрейны контроллера Общая картина: Клок Nios sdram Sdram внутри компонента. Не могу понять причину почему sdram внутри моего компонента так отличается от sdram используемого nios. Уже 2 недели бьюсь, может кто-то подскажет? Исходник компонента прилагаю. src.sv
-
Здравствуйте, система на MAX10 с использованием Nios, на Nios рабтает FreeRTOS. Использую TCP/IP стек FreeRTOS. Nios на 50 MHz входной частоты давал скорость пеердачи по TCP 10 Мбит, с оптимизациями O2 (без них ~5-6). Увеличил частоту Nios до 100 MHz, скорость выросла до 12 Мбит(с оптимизациями). TSE и SGDMA работают на частоте Nios. Памяти много, 16MB sdram, 100MHz. Видел пример альтеры по ускорению Ethernet, система у них работает на 100 MHz, и без оптимизаций выдает скорость ~22 Мбита, а с оптимизациями от 50 до 80 МБит. Не могу понять где узкое место и почему увеличивая тактовую частоту в 2 раза такой маленький прирост. Может кто-то сталкивался или посоветует куда копать?