|
Кто -нибудь знаком с openmsp430, Это синтезабельное подобие MSP430 |
|
|
|
Nov 8 2009, 17:13
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
openMSP430 - интересная штучка на мой взгляд. есть даже GCC и порт FreeRtos. Опен соурс проект. Напрягает только это: Цитата // ROM Size // 9 -> 1kB // 10 -> 2kB // 11 -> 4kB // 12 -> 8kB // 13 -> 16kB `define ROM_AWIDTH 10 // RAM Size // 6 -> 128 B // 7 -> 256 B // 8 -> 512 B // 9 -> 1 kB // 10 -> 2 kB `define RAM_AWIDTH 6 Я тут только начал читат про эту штуку - особых проблемм с поднятием не вижу (игрался раньше с picoblaze), но это - огорчает... или всё таки нет в ядре ограничения на размер кода\данных (не игрался ещё с исходниками...). p.s. не спрашивайте зачем - хочу... умная периферия всегда нужна...
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 41)
|
Nov 8 2009, 20:58
|
Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 18-10-06
Пользователь №: 21 418

|
Цитата(Yra @ Nov 8 2009, 23:23)  периферия своя. Если чего нет- додумаем. главное чтоб ядро было не кривое. Я давненько искал нечто подобное. Наконец-то появилось ). На какой тактовой работать может? 50 МГц? Ну как и любое не оптимированное под ФПГА ядро, да ещё и цыск (что бы там не писали в ТИ), оно жрёт много, а работает медленно. Чуть-чуть до 40мгц не дотягивало, но это был ква 6.1 (для циклона 2). PS: Я автору кинул фикс под ДЕ1, он обещал выложить как только, так сразу (у него ребятёнок родился).
Сообщение отредактировал LordVader - Nov 8 2009, 20:59
|
|
|
|
|
Nov 14 2009, 20:11
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
что -то cтранности какието наблюдаю в работе: вот фрагмент кода на С: Код int main(void) { volatile short *pA = 0x0206; volatile short B; *pA = 0xABCD; pA = 0; B = *(volatile short *)(0x206);
*(volatile short *)(0x80) = B; *(volatile short *)(0x84) = B; *(volatile short *)(0x86) = B; *(volatile short *)(0x88) = B; for(;;); вот то что компильнул mspgcc: Код int main(void) { f036: 31 40 fe 02 mov #766, r1;#0x02fe
volatile short *pA = 0x0206; volatile short B; *pA = 0xABCD; f03a: b2 40 cd ab mov #-21555,&0x0206;#0xabcd f03e: 06 02
pA = 0;
B = *(volatile short *)(0x206); f040: 91 42 06 02 mov &0x0206,0(r1);0x0000(r1) f044: 00 00
*(volatile short *)(0x80) = B; f046: a2 41 80 00 mov @r1, &0x0080 *(volatile short *)(0x84) = B; f04a: a2 41 84 00 mov @r1, &0x0084 *(volatile short *)(0x86) = B; f04e: a2 41 86 00 mov @r1, &0x0086 *(volatile short *)(0x88) = B; f052: a2 41 88 00 mov @r1, &0x0088
for(;;); f056: ff 3f jmp $+0;abs 0xf056
} В область периферии копируется по адресу 0x0080 чиселка 0xABCD - это всё нормально. В область периферии копируется по адресу 0x0084 чиселка 0x0300 - это НЕ ПРАВИЛЬНО !!!. В область периферии копируется по адресу 0x0086 чиселка 0xABCD - это всё нормально. В область периферии копируется по адресу 0x0088 чиселка 0x0300 - это НЕ ПРАВИЛЬНО !!!. Ничего не понятно (: баг в ядре чтоль? Симулятор M*o*d S*E*6*1 Для чистоты эксперимента периферию заменил регистром Код always @(posedge CLK) if(per_en && per_wen) PER_REG <= #1 per_din; Огорчает в ядре то, что хотя оно и 16-тиразрядное - Програм Коунтер (PC) ТОЖЕ ШЕСТНАДЦАТИРАЗРЯДНЫЙ. т.е. без изврата со страницами памяти можно адресовать 64 КСлов. Архитектура ФонНеймана - тоесть из 64К надо вычесть размер памяти данных и размер страницы периферии (. В общем получается памяти меньше чем у AVR
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 15 2009, 13:10
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Цитата(Yra @ Nov 14 2009, 23:11)  что -то cтранности какието наблюдаю в работе: А Вы правильно подключили ROM и RAM? По описанию ram_cen, rom_cen, ram_wen активны нулем. Может быть дело в этом? Но может и не только в этом. Николай. PS. Подключил как надо ROM и RAM - все заработало.
Сообщение отредактировал Ynicky - Nov 15 2009, 13:40
|
|
|
|
|
Nov 15 2009, 13:47
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата А Вы правильно подключили ROM и RAM? По описанию ram_cen, rom_cen, ram_wen активны нулем. Может быть дело в этом? Но может и не только в этом. Код программы в "leds.mem" не соответствует вашему. Это у меня учтено. Программа работает и доходит до того места без проблемм. Как видно из кода - сначала осуществляется разного рода адресация в RAM с целью записать и считать ячейку. Считанную ячейку я пытаюсь поместить в область периферии несколько раз подряд - помещается через раз почемуто. Файл leds.mem один и тотже (я перепроверил содержимое архивов на всякий случай.) Сам этот файл копировал из одной папочки в другую. Пристёгиваю к проекту мою временную диаграмму и чуть подкорректированные два проектных файла (чтобы получить эту диаграмму). Диаграмм вместе с gtkwave в архиве ....не получается загрузить архив в 5 МБайт ( ....залил на местный фтп в /upload/FPGA/GTKwave/winXP/
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 15 2009, 14:46
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
В top_level.v подключите ram следующим образом:
.WE_I(~nWE_MSP_RAM), .STB_I(~nSTB_MSP_RAM)//,
Николай.
|
|
|
|
|
Nov 15 2009, 15:03
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Цитата(zltigo @ Nov 15 2009, 17:54)  И тем не менее....А смысл? MSP430 практически ценен уникальным сочетанием периферии и ядра дружно заточенных под энергосбережение. Само по себе нечто исполняющее код MSP430 достаточно бессмысленно к применению. +1
|
|
|
|
|
Nov 15 2009, 16:51
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата И тем не менее....А смысл? MSP430 практически ценен уникальным сочетанием периферии и ядра дружно заточенных под энергосбережение. Само по себе нечто исполняющее код MSP430 достаточно бессмысленно к применению. Мне нужно разгрузить основную систему от рутины. Основная система - Linux - её нельзя дёргать по каждой ерунде. Время латентности высокое. Умонй периферии в данном случае недостаточно (типа ком-порт, заточенный под приёмы/передачу пакетов). Выход - или создавать стэйты или ставить ещё процессор для обработки рутины или освоить синтезированное ядро. Каждый из 3-х методов имеет достоинства и недостатки. Третий метод мне никак не даётся - я уже несколько раз поднимал этот вопрос на форумах: искал относительно небольшое ядро с открытым исходным кодом на RTL-уровне с с-компилятором. picobase(и клон типа pacoblase) - слишком убогое, microblase в чистом виде - не RTL (его клоны на опенкорках - сырые) и много ресурса плис скушает. MSP430 - как вариант устраивает. Появилось там относительно недавно. Захотел попробовать. Есть ещё вариант обратиться в сторону 51w от ментора, но оно больше ресурса вроде скушает чем это.
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 15 2009, 17:07
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(Yra @ Nov 15 2009, 19:51)  51... 51? Больше? Тут я, конечно, не специалист, но 51 вроде чистая и простая классика при оптимальной функциональности. Куча реализаций за прошедшие десятиления. А как дела Cortex-M0 на Xilinx? http://www.arm.com/products/CPUs/ARM-Cortex-M0.html Сейчас это сейчас, полагаю, для IP ядер самый писк моды.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 15 2009, 17:25
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата(zltigo @ Nov 15 2009, 20:07)  51? Больше? Тут я, конечно, не специалист, но 51 вроде чистая и простая классика при оптимальной функциональности. Куча реализаций за прошедшие десятиления. А как дела Cortex-M0 на Xilinx? http://www.arm.com/products/CPUs/ARM-Cortex-M0.html Сейчас это сейчас, полагаю, для IP ядер самый писк моды.  посмотрите на это: /pub/FPGA/_IPcores_/Mentor.Decrypted/m*8*0*5*1*e*w*.tar.gz по моему совсем не проще (минимум 12 тактов на инструкцию не устраивает) Cortex-M0 - не смотрел ещё. Xilinx славится тем, что корки его выглядят вот так: Цитата LUT4 mux3_lut (.I0(bit_select[0]), .I1(data_in[4]), .I2(data_in[5]), .I3(Tx_run), .O(data_45) )/* synthesis xc_props = "INIT=E4FF"*/; // synthesis translate_off defparam mux3_lut.INIT = 16'hE4FF; // synthesis translate_on
LUT4 mux4_lut (.I0(bit_select[0]), .I1(data_in[6]), .I2(data_in[7]), .I3(Tx_run), .O(data_67) )/* synthesis xc_props = "INIT=E4FF"*/; // synthesis translate_off defparam mux4_lut.INIT = 16'hE4FF; // synthesis translate_on
MUXF5 mux5_muxf5 ( .I1(data_23), .I0(data_01), .S(bit_select[1]), .O(data_0123) ); - не RTL (уровень вентилей)
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 15 2009, 20:27
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата А конкретнее(идеального быть не может в принципе)? без багов, полностью синхронное. кстати, запахало. Не доглядел между строк: регистр инструкций в модуле uut/openMSP430_1/frontend_0/ir на самом деле никакой не регистр, а Код // Instruction register wire [15:0] ir = mdb_in; где mdb_in - выведено на внешнюю шину. Таким образом, надо ожидать от ПЗУ поведения: Код always @(posedge CLK_I) if(STB_I) DAT_O <= #1 ram[ADR_I]; - типа синхронное ПЗУ с буферизацией, чтобы содержимое регистра инструкций не менялось во время выполнения инструкции. это вроде работает...
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 16 2009, 16:24
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата если вам без разницы ядро почему бы не взять xsoc16 http://www.fpgacpu.org/ проект давно вылизан, есть си компилятор. При этом проц затачивался под фпга Это вот чтоли? : If you accept the license terms, you may download xsoc-beta-093.zip. (3.3 MB) Последняя новость на сайте датирована 2003 годом. Сделан в Xilinx 1.5. Есть Verilog - версия. В нете запрос на тему xsoc16 практически ничего не дал. В общем создаётся впечатление умершего проекта. Почему его нет на опенкорках? Вы пробовали работать с ним? Как впечатления? Какие достоинства и недостатки (архитектуру не нашел ещё, как компилятор? ANSI - c со структурами ?) А так интересный проект. попробую поковыряться на днях
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 16 2009, 20:44
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 26-05-05
Пользователь №: 5 422

|
Цитата(Yra @ Nov 16 2009, 19:24)  Это вот чтоли? : If you accept the license terms, you may download xsoc-beta-093.zip. (3.3 MB) Последняя новость на сайте датирована 2003 годом. Сделан в Xilinx 1.5. Есть Verilog - версия. В нете запрос на тему xsoc16 практически ничего не дал. В общем создаётся впечатление умершего проекта. Почему его нет на опенкорках? Вы пробовали работать с ним? Как впечатления? Какие достоинства и недостатки (архитектуру не нашел ещё, как компилятор? ANSI - c со структурами ?) А так интересный проект. попробую поковыряться на днях Вставлю свои пару строк. С этого процессора начинал обучаться разработке своих процессоров. Очень оказался полезен в плане изучения архитектуры и системы команд. Из всех изученных мною 16ти разрядных процессоров - этот оказался самым лучшим. У него очень простая и в то же время объемная система команд. И даже остался резерв (можно дополнить своими командами). С компилятор - LCC. Легко настраивается на нужную архитектуру и систему команд посредством .md(machine description) файла. Добавить новые команды не составляет большого труда. Ассемблер правда простенький, без компоновщика, но для большинства приложений этого достаточно. Есть исходники. Добавить свои команды тоже не трудно. Единственный, на мой взгляд, недостаток - это нет средств внутрисхемной отладки. Но это можно сделать самому. Николай.
|
|
|
|
|
Nov 17 2009, 08:14
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(zltigo @ Nov 15 2009, 20:07)  51? Больше? Да, реально больше, несмотря на 8-битность. У 51 декодер инструкций такой, что ужос. Плюс умножитель, который практически во всех реализациях параллельный. Плюс всякие там da a, xchd которые создают лишние мультиплексоры и функциональные узлы. В отличие от MSP, который голимый RISC вплоть аж до того, что счетчик команд и указатель стека в РОНах, вследствие чего декодера инструкций, можно сказать, почти нет, все сигналы идут проводами прямо на исполнительные блоки, да и самих команд (классов команд по формату опкода) раз, два и обчелся. Автору - а чем LatticeMico8 не устраивает? И под фпга заточен, и компилер есть, и исходники...
|
|
|
|
|
Nov 17 2009, 16:57
|
Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 18-10-06
Пользователь №: 21 418

|
Цитата(SM @ Nov 17 2009, 11:14)  MSP, который голимый RISC вплоть аж до того, что счетчик команд и указатель стека в РОНах, вследствие чего декодера инструкций, можно сказать, почти нет, все сигналы идут проводами прямо на исполнительные блоки, да и самих команд (классов команд по формату опкода) раз, два и обчелся. Я конечно извиняюсь, но какой же мсп430 риск? Он вообще без регистров работать может (ну кроме пц, сп, константных), держа все переменные в памяти. И в пределах 1 команды делать 2 раза чтения и 1 раз запись в память модифицированного значения. Что-то как-то других рисков ТАКИХ я не видел
|
|
|
|
|
Nov 17 2009, 17:56
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(LordVader @ Nov 17 2009, 19:57)  Я конечно извиняюсь, но какой же мсп430 риск? Он вообще без регистров работать может Я конечно, извиняюсь, но каким образом выражение "Reduced Instruction Set" относится к количеству регистров и/или методов адресации? Это показатель количества инструкций, которых у MSP430 всего лишь 27 штук. Для сравнения - даже у Microchip PIC12 их 33, что больше, чем у MSP (кстати он, pic, тоже "вообще без регистров" работать может, только W и счетчик команд). Не говоря про пресловутый ARM. Но собственно, основной показатель "risc-овости" - сложность декодера инструкций - у MSP "risc-ее", чем у многих-многих других risc-ов. ЗЫ. А вообще - это дежавю. Уже обобсуждались в оффтопике на эту тему.
|
|
|
|
|
Nov 17 2009, 20:00
|
Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 18-10-06
Пользователь №: 21 418

|
Ну можно конечно посчитать кол-во команд, и сказать что риск (ага, меньше чем у пика). А можно подумать вот как: каждлая команда в 430 имеет длину от 1 до 3 слов. При этом она может инициировать от 0 до 3 аксессов в память, выполняя вычисления с выбранными и записываемыми данными. А теперь сравним с настоящими рисками: mips, sparc, power, arm: длина команды фиксированная, операции или внутри регистров, или запись-чтение регистров из памяти без операций над данными.
Сообщение отредактировал LordVader - Nov 17 2009, 20:02
|
|
|
|
|
Nov 17 2009, 20:06
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(LordVader @ Nov 17 2009, 23:00)  При этом она может инициировать от 0 до 3 аксессов в память, выполняя вычисления с выбранными и записываемыми данными. Какой же это, пардон, риск? Еще раз вопрос. Где в аббревиатуре "Reduced Instruction Set" говорится о количестве доступов в память, о том, сколько действий выполняет инструкция, и т.п. параметрах системы команд? Исключительно о количестве инструкций. Reduced по отношению к CISC. И ничего более. Решит производитель, что вот это у него CISC, а это - RISC. И так и будет. И не путайте LOAD-STORE архитектуру и RISC - это две не пересекающиеся вещи. RISC не обязан быть LOAD-STORE, и наоборот, LOAD-STORE не обязан быть RISC. Что касается переменной длины инструкций у MSP - это кажущаяся с первого поверхностного взгляда вещь. Обман зрения. На самом деле длина инструкции у него всегда 16 бит, а все эти якобы удлинения - это автоинкрементная адресация с регистром R7 - просто выборка операнда из памяти. PS. Я продолжать этот бессмысленный спор не буду. Что же касается реальных архитектурных решений и примененных технологий - тут прав лишь разработчик/производитель. Только он один знает, что и зачем применил, и как построил декодер инструкций, как у RISC, из кучи проводов, или как у CISC, из кучи логики и дешифраторов. И только он вправе корректно определять архитектуру своего детища, если ее не открывает в виде схем и/или исходных текстов.
|
|
|
|
|
Nov 17 2009, 20:36
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата Автору - а чем LatticeMico8 не устраивает? И под фпга заточен, и компилер есть, и исходники... всего не углядиш... у кажной штуки свои прибамбасы. http://electronix.ru/forum/lofiversion/index.php/t38902.html
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 18 2009, 10:47
|
Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 18-10-06
Пользователь №: 21 418

|
Цитата(SM @ Nov 17 2009, 23:06)  И не путайте LOAD-STORE архитектуру и RISC - это две не пересекающиеся вещи. RISC не обязан быть LOAD-STORE, и наоборот, LOAD-STORE не обязан быть RISC. Я вправе иметь своё мнение. И моё мнение таково, что RISC я не понимаю как дословную аббревиатуру. И знакомство с некоторым кол-вом процессоров заставляет думать, что риск - это не кол-во команд, а прежде всего их простота. и в том числе load-store. И почему-то так считают некоторые умные люди, которые пишут книги. Цитата Что касается переменной длины инструкций у MSP - это кажущаяся с первого поверхностного взгляда вещь. Обман зрения. На самом деле длина инструкции у него всегда 16 бит, а все эти якобы удлинения - это автоинкрементная адресация с регистром R7 - просто выборка операнда из памяти. Автоинкрементация она, когда проц не конвееризированный, как 430ый в оригинале или как топиковый. Посмотрите, как извращаются в современных x86-процах на этапе "fetch opcode". Цитата И только он вправе корректно определять архитектуру своего детища, если ее не открывает в виде схем и/или исходных текстов. Да ради бога. А я вправе определять архитектуру его детища, как мне удобно
|
|
|
|
|
Nov 18 2009, 12:12
|
Гуру
     
Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640

|
Цитата(SM @ Nov 17 2009, 23:06)  Еще раз вопрос. Где в аббревиатуре "Reduced Instruction Set" говорится о количестве доступов в память, о том, сколько действий выполняет инструкция, и не придирайтесь к словам  в этом случае редьюсед подразумевает, что редуцированы операции работающие с операндами из/в памяти например РРС - общепризнано, что RISC - но инструкций там побольше чем у х86 -------------- чего-то примера хорошего не придумал - но например, в доке на ОМАР-L138 всюду упоминается, что это супер-лоу-павер девайс, а цифирька то - пол ватта
|
|
|
|
|
Nov 18 2009, 12:28
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(yes @ Nov 18 2009, 15:12)  не придирайтесь к словам  в этом случае редьюсед подразумевает, что редуцированы операции работающие с операндами из/в памяти например РРС - общепризнано, что RISC - но инструкций там побольше чем у х86 А я как раз к словам не придираюсь. Я придираюсь к лицам, узко и ограниченно интерпретирующим это понятие. Не важно, что именно и относительно чего редуцировали, главное - что редуцировали, и все. Поэтому и риск. И от того, что отдельно взятый "LordVader" не признает MSP риском, MSP им не перестает быть. И система команд у него - Reduced Instruction Set от PDP-11.
|
|
|
|
|
Nov 18 2009, 17:39
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата Автору - а чем LatticeMico8 не устраивает? И под фпга заточен, и компилер есть, и исходники... Откуда бы достать? На сайте зарегаться не могу. Тут лежит где-нибудь. Желательно ссылку и на компилятор и на утилиты.
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 18 2009, 18:56
|
Частый гость
 
Группа: Участник
Сообщений: 127
Регистрация: 18-10-06
Пользователь №: 21 418

|
Цитата(SM @ Nov 18 2009, 15:28)  Я придираюсь к лицам, Переход на личности. Цитата И система команд у него - Reduced Instruction Set от PDP-11. Это вам тоже TI сказала?
|
|
|
|
|
Nov 19 2009, 16:38
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата Спасибо. Скачал. Ссылочку на с-компилятор (или иде) дадите. Какие рекомендации по применению? Ломать там что-нибудь надо? Кстати пароль требует если попытаться войти в каталог http://www.latticesemi.com/documents/На прямые ссылки из этого каталога не ругается
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Nov 19 2009, 17:00
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(Yra @ Nov 19 2009, 19:38)  Какие рекомендации по применению? Ломать там что-нибудь надо? Ломать там ничего не надо, оно же в исходниках все. Рекомендаций не дам, я сам ни разу не применял FPGA-ориентированные ядра, лишь анализировал их по занимаемым ресурсам и производительности. А до дела так и не дошло, все мое ПЛИСовое пока что решалось без ядер, я лишь был на грани применения ядра. Вам его присоветовал лишь из-за того, что оно мне показалось наиболее элегантным из доступных, поддерживаемым серьезным производителем и легко портируемым на разные архитектуры ПЛИС. Про С - на сколько я знаю, сам Lattice поддерживает только Mico32 компилятор (http://www.latticesemi.com/forums/forum/messageview.cfm?catid=164&threadid=10282&enterthread=y), считая такую мелкоту не достойным С. Ну а компилятор ассемблера - по ссылке должен был быть.
|
|
|
|
|
Dec 3 2009, 19:06
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Цитата у самого руки не доходят (нету задачи), но вроде активный проект с С/С++ http://opensource.zylin.com/zpu.htmВроде в симуляторе фунциклит (zpu4_small) - программа вроде работает по шагам... правда недолго... (красное просачивается в RAM непонятно по какой причине...) Я в VHDL не силён: модель памяти программ/данных в виде: Код entity dualport_ram is port (clk : in std_logic; memAWriteEnable : in std_logic; memAAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit); memAWrite : in std_logic_vector(wordSize-1 downto 0); memARead : out std_logic_vector(wordSize-1 downto 0); memBWriteEnable : in std_logic; memBAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit); memBWrite : in std_logic_vector(wordSize-1 downto 0); memBRead : out std_logic_vector(wordSize-1 downto 0)); end dualport_ram;
architecture dualport_ram_arch of dualport_ram is
type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
shared variable ram : ram_type := ( 0 => x"0b0b0b0b", 1 => x"82700b0b", 2 => x"80d5f40c", 3 => x"3a0b0b80", 4 => x"c4fb0400",
others => x"00000000" );
begin
process (clk) begin if (clk'event and clk = '1') then if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then report "write collision" severity failure; end if; if (memAWriteEnable = '1') then ram(to_integer(unsigned(memAAddr))) := memAWrite; memARead <= memAWrite; else memARead <= ram(to_integer(unsigned(memAAddr))); end if; end if; end process;
process (clk) begin if (clk'event and clk = '1') then if (memBWriteEnable = '1') then ram(to_integer(unsigned(memBAddr))) := memBWrite; memBRead <= memBWrite; else memBRead <= ram(to_integer(unsigned(memBAddr))); end if; end if; end process;
end dualport_ram_arch; синтезабельна в плане начального заполнения кодом ячеек памяти? При попытке синтеза пишет что : Код Device Utilization Summary:
Number of BUFGMUXs 1 out of 8 12% Number of External IOBs 91 out of 141 64% Number of LOCed IOBs 0 out of 91 0%
Number of RAMB16s 8 out of 16 50% - типа всё таки используется блочное ОЗУ для памяти Number of Slices 312 out of 3584 8% Number of SLICEMs 0 out of 1792 0% НО нигде в отчёте не видно чем он заполнил это блочное ОЗУ: Код 0 => x"0b0b0b0b", 1 => x"82700b0b", 2 => x"80d5f40c", 3 => x"3a0b0b80", 4 => x"c4fb0400", - этой информации я не вижу в логах синтезатора. Тоесть нужно - ли искать/создавать транслятор который заполняет блочное ОЗУ явно? Код RAMB16_S1_S1_inst : RAMB16_S1_S1 generic map ( INIT_A => "0", -- Value of output RAM registers on Port A at startup INIT_B => "0", -- Value of output RAM registers on Port B at startup SRVAL_A => "0", -- Port A ouput value upon SSR assertion SRVAL_B => "0", -- Port B ouput value upon SSR assertion WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" -- The following INIT_xx declarations specify the initial contents of the RAM -- Address 0 to 4095 INIT_00 => X"1122330000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_02 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_03 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_04 => X"0000000000....
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Dec 5 2009, 15:11
|

Местный
  
Группа: Свой
Сообщений: 396
Регистрация: 22-10-04
Из: Воронеж
Пользователь №: 962

|
Кстати, вот наиболее интересные фрагменты кода для ZPU: Код если volatile unsigned char *p = (unsigned short *)(0xF000); и volatile unsigned char k;
то
00000541 <.LM7>: k = *p; 541: 91 im 17 542: d8 im -40 543: 08 load 544: 51 storesp 4 545: 70 loadsp 0 546: 33 loadb 547: 99 im 25 548: 8c im 12 549: 34 storeb
0000054a <.LM8>: p++; 54a: 81 im 1 54b: 11 addsp 4 54c: 91 im 17 54d: d8 im -40 54e: 0c store сказывается отсутствие банка регистров... зато мальнькое
--------------------
всё можно наладить, если достаточно долго вертеть в руках /Законы Мерфи/
|
|
|
|
|
Apr 9 2018, 07:32
|
Группа: Новичок
Сообщений: 4
Регистрация: 6-04-18
Пользователь №: 103 001

|
Цитата(des00 @ Nov 16 2009, 08:24)  если вам без разницы ядро почему бы не взять xsoc16 http://www.fpgacpu.org/ проект давно вылизан, есть си компилятор. При этом проц затачивался под фпга Здесь на форуме https://www.embeddedrelated.com/showthread/...-cpu/1381-1.php автор пишет что данный проц затачивался под Xilinx семейство XC4000E, и не рекомендует использовать его в альтерах. Пробовал кто-нибудь запускать их в циклонах например?
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|