Pull to refresh
59
7

Инженер

Send message

Попробовал SEW=8 и адрес выровненый по байту (адрес 0x80001A01). VSTU действительно сделал все записи по AXI однобайтовыми.

5 тактов на 21 элемент

Выглядит как баг симуляции. Должно быть 6 записей по AXI. Первые 5 полноценные по 128 бит. Сигнал WSTRB в каждом своем бите показывает какой из байтов валидный. При этих 5-и записях строб 0xFFFF, т.е. все 16 байт валидны. При последней записи WSTRB 0x000F, т.е. только поледние 4 байта валидны. Так как раз 21 элемента по 4 байта. На временной диаграмме одна запись 128-битная потеряна.

Да, Вы правы. Если выровнять адрес записи по 16-байт, то записи по AXI из VSTU будут по 128 байт.

VLDU из памяти вычитывает 128-битное значение, затем оно разбивает его и побайтово распределяет в сигналы очереди результатов result_queue_d, из которых они уже попадут в лейны через ldu_result_wdata. В исходниках на VLDU - vldu.sv - это выглядит так:

// Copy data from the R channel into the result queue
for (int unsigned axi_byte = 0; axi_byte < AxiDataWidth/8; axi_byte++) begin : axi_r_to_result_queue
...
// And then shuffle it
automatic int unsigned vrf_byte = shuffle_index(vrf_seq_byte, NrLanes, vinsn_issue_q.vtype.vsew);
...
// Copy data and byte strobe
result_queue_d[result_queue_write_pnt_q][vrf_lane].wdata[8*vrf_offset +: 8] = axi_r_i.data[8*axi_byte +: 8];

Функция shuffle_index из ara_pkg.sv и выполняет основную работу по распределению данных по лейнам. Она выдает номер лейна и номер байта в 64-битном числе куда положить пришедший из памяти байт. В комментариях перед функцией схема как распределяются байты в зависимости от размера элемента вектора SEW.
В примере сначала из памяти по AXI приходит 128-битное число 0x01010101_00000000_00000000_00000000 из которого валидны только 8 первых байт 0x01010101_00000000. Т.к. SEW 32-бита, то первые 4 байта 0x00000000 попадают в результат для лейна 0, 0x01010101 в результат для лейна 1. Затем приходит число 0x05050505_04040404_03030303_02020202. В нем уже все 16 байт валидны и по 4 байта 0x02020202 и 0x03030303 попадают соответственно в лейны 2 и 3. 0x04040404 попадет опять в лейн 0, но не в следующий элемент очереди, а верхние 4 байта 64-битного числа 0-го элемента очереди данных для лейна. Далее подобным образом обрабатываются остальные значения.

К сожалению цикл плохо трейсится, поэтому временные диаграммы не очень наглядны.

При сохранении в VSTU аналогично есть копирование данных из интерфейса с лейнами в интерфейс AXI. Только теперь данные собираются по индексам из stu_operand, чтобы был правильный порядок в памяти. vstu.sv

// Copy data
axi_w_o.data[8*axi_byte +: 8] = stu_operand[vrf_lane][8*vrf_offset +: 8];

Поскольку от лейнов приходят 64-битные значения, то и записи AXI 64-битные.

Да, можно.

В scr1 среди модулей для отладки есть Trigger Debug Unit. Его можно настроить на вызов исключения, если ядро попытается прочитать из заданного адреса.
Для этого в начале программы надо добавить:

    set_csr(mcontrol, MCONTROL_M | MCONTROL_EXECUTE |
                          MCONTROL_STORE |
                          MCONTROL_LOAD);

Теперь если процессор попытается обратиться к 0-му адресу TDU вызовет исключение. Эта команда включит триггер на запись, чтение и исполнение, и разрешает триггериться. Тип действия при триггере (0 - Raise a breakpoint exception) и адрес для сравнения (TDATA2 - 0x00000000) нас устраивают значения по умолчанию после сброса.

На временной диаграмме видно, что когда адрес чтения становится 0, вызывается исключение.

Если подключен JTAG отладчик, то можно настроить TDU на переход в режим Debug Mode.

Спецификация на RISC-V предлагает реализовывать модуль физической защиты памяти (Physical Memory Protection), чтобы ограничивать доступ к памяти в зависимости от типа доступа (чтение, запись или исполнение) и в зависимости от уровня привилегии исполняемого кода (User, Supervisor, Machine).

Но в scr1 PMP не реализован. И режим привилегий на scr1 в железе зашит на самый высокий M-mode. Всё таки процессор небольшой, код на нем простой bare metal, нет смысла делать несколько уровней привилегий.

Поэтому нет, в scr1 нет возможности, не добавляя чего-то, ограничить доступ к памяти. И физически всё адресное пространство от 0x00000000 до 0xFFFFFFFF на scr1 доступно для чтения и записи

Эх, было бы так же просто баги процессора в кремнии исправлять.

Чтобы std::array ловил выход за пределы, надо пользоваться методом at(). operator[] не делает никаких проверок.
Сам для себя я понял, что UB компиляторами понимается как то, что никогда не происходит. А значит компилятор может вырезать любой код, который вызывает UB или зависит от вызова UB. Т.е. это именно фича для оптимизации. Раз выход за пределы массива это UB, то этот выход никогда не происходит, а значит никаких проверок добавлять не надо и программа не будет терять на них время.

У std::array размер известен во время компиляции (что помогает в оптимизации) и он не аллоцирует динамически память, в отличии от std::vector.

Я конечно дилетант в C++, надеюсь меня поправят, если я не прав. На ум приходит ситуация, когда std::array эффективнее С-style массивов. Из-за pointer aliasing компилятор не может в некоторых ситуациях хорошо векторизовать С-style массивы из-за того, что они по сути сырые указатели и потенциально могут указывать на перекрывающиеся участки памяти. А ключевого слова restrict в С++ нет.

Например: https://godbolt.org/z/h5xnWWT3f

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

На практике начинаются инженерные нюансы, в частности общее нежелание рентгеновского излучения взаимодействовать с веществом и очень малый уровень сигнала от одного фотона - всего 2000 зарядов электрона, отсутствие удобной оптики.

Сцинтилляторы как правило вещества с большим атомным номером, а значит лучше поглощают рентгеновское излучение, по сравнению с кремнием. И в обычных КТ и рентгеновских системах детекторы работают в интегрирующем режиме, т.е. они на протяжении некоторого времени собирают энергию от множества фотонов. А для работы в режиме счетчика фотонов с сцинтилляторами используют фотоумножительные трубки, а не полупроводниковые фотоматрицы.

Гибридные пиксельные детекторы же позволяют задетектировать и измерить энергию отдельно взятого рентгеновского фотона, и чтобы это было возможно, инженеры работают над ними уже порядка 30 лет.

Да, такие рентгеновские аппараты цифровые, но они монохромные. В них стоят сцинтилляционные детекторы. Они регистрируют излучение в два этапа, сначала рентген в видимый свет, а потом видимый свет регистрируется практически обычной ПЗС или КМОП фотоматрицей. Поэтому такие детекторы не измеряют спектр, а только интенсивность.

В принципе с ними тоже можно что-то придумать, если использовать два источника рентгеновских лучей - две трубки с разным спектром излучения.

Вопрос использования гибридных пиксельных детекторов не столько финансовый, сколько зрелости технологий. Siemens вот уже готов в клиниках ставить свою КТ систему с гибридными пиксельными детекторами https://www.siemens-healthineers.com/computed-tomography/photon-counting-ct-scanner/naeotom-alpha.

Участь лабораторных мышек конечно незавидная и их вклад в науку сложно переоценить.

Хорошее понимание числа Рейнольдса помогло мне сдать экзамен по MEMS и микрофлюидике на отлично. Интересная область. Запомнился совет профессора использовать знание эффекта Марангони, чтобы впечатлять девушек на свидании за бокалом вина.

This reminds me of the MRI, where atoms have two states of magnetic moment orientation and radio frequency pulses can flip magnetization vectors by 90 or 180 degrees. Now I'm curios if MRI can be used as macroscopic analogous to quantum computer.

УЗИ и МРТ визуализируют структурную информацию о теле, и не отражают информацию об активности нейронов. И у них недостаточная разрешающая способность, чтобы увидеть отдельный нейрон, который размером около 10 мкм.

УЗИ использует ультразвуковые волны. Визуализирует то, что хорошо отражает звуковые волны. Как правило это границы между веществами с разными звуковыми импедансами. Типичная разрешающая способность в УЗИ это 1 мм при частоте ультразвука 5 МГц. А увидеть что-то внутри мозга практически невозможно, т.к. вся энергия ультразвуковой волны отразится от черепа и внутрь к мозгу не попадет.

МРТ визуализирует распределение атомов водорода и разницу в свойствах тканей, которые влияют на поведение атомов водорода при магнитном резонансе. Разрешающая способность МРТ составляет около 2 мм.
Функциональное МРТ визуализирует насыщенность тканей крови с кислородом. Нейроны очень активно потребляют топливо и кислород, поэтому активность нейроноd коррелирует с уровнем кровообращения. Размер пикселя в фМРТ около 2-3 мм. Но мозг активируется регионами, поэтому отдельный нейрон фМРТ различить не может.
У позитрон-эмиссионных томографов (ПЭТ) похожая ситуация с фМРТ. Разрешающая способность несколько миллиметров. Визуализирует концентрацию маркера в теле. А маркер избирательно концентрируется там, где выше кровоток из-за активности. Маркер - вода с радиоактивным кислородом-15, распадающийся бета+ распадом с периодом полураспада 2 минуты.

Электроэнцефалография (ЭЭГ) - измеряет электрическую активность мозга, регистрируя её электродами на поверхности кожи головы. ЭЭГ - сумма электрических полей от активностей всех нейронов, дошедших до поверхности головы. Пространственное разрешение - десятки сантиметров, показывает активность отделов мозга. В настоящее время - золотой стандарт в диагностике эпилепсии.

Секрет раскрывается в английском названии: сomputed tomography, т.е. вычисленная томография

Детектор примерно такой же, как в БАК (это объясняет, для чего практически нужны фундаментальные научные исследования)

"Приземление" результатов фундаментальных исследований в CERN это появление датчиков - счетчиков фотонов серии Medipix, благодаря работе коллаборации https://medipix.web.cern.ch/.
Передний край развития "железа" в КТ это как раз использование датчиков - счетчиков фотонов. Это позволяет значительно уменьшить дозу при таком же качестве изображения, и еще открывает возможности спектральной КТ. Siemens такой сканер выпустили буквально год назад https://www.siemens-healthineers.com/computed-tomography/photon-counting-ct-scanner/naeotom-alpha

Интересно, можно ли на основе производства ЭЛТ открыть производство рентгеновских трубок для КТ и анализаторов? Насколько я знаю их делают всего пара компаний по миру. Есть ли смысл начинать этим заниматься?

А, так у вас претензии к субъективности понятия «довольно эффективны»!

Если критерий "эффективности вакцины" это CFR(unvaccinated) > CFR(vaccinated), то по приведенным Вами данным вакцина эффективна, а не

Чё-т так себе эффективность для предотвращения смертей.

Ну и да, я вообще не понимаю, зачем мне частное охранное предприятие.

  1. Охранять, когда я сплю и когда я занят другой работой.

  2. Охранять от внешних угроз.

  3. - Купи у меня охрану. - От чего? - От того, что я сделаю, если не купишь

Абсолютно верно. Но в компаниях, являющихся моно- или олигополистами в определённых (и, главное, некритичных) областях, на самом деле нет ничего самого по себе плохого.

Критичные области по какому критерию выбираются? Охранные предприятия к ним относятся? Какие механизмы предотвратят появление монополий в критичных областях, и не помешают появлению в не критичных?

Пока получается, по мнению анкапа:

  1. В монополиях нет ничего плохого.

  2. Государство - монополия.

  3. В государстве нет ничего плохого.

И еще по мнению анкапа получается:

  1. "монополистические тенденции — это не плохо само по себе, тем более, что это позволяет им финансировать ресёрч-лабы." Монополии это не плохо.

  2. "Пытаться будет. Только он вполне при этом может помереть, особенно если ему государство помогать не будет." Cуществование государства влияет положительно на формирование и существование монополий.

  3. Государства это не плохо, ведь оно помогает тому, что не плохо.

То, что у AT&T была монополии на телефон — это тоже не особо плохо.

Плохо то, что конечным потребителям было затруднено подключение оборудования сторонних производителей к сети. Это ухудшение качества услуги.

А после раздела AT&T появилась конкуренция и развитие в сфере производства телефонного оборудования.

ранее они субсидировались самой AT&T за счёт более дорогих long-distance-звонков (которые были нужны меньшему числу людей)

Почему AT&T решило субсидировать цены на локальные звонки? Повлияло ли на решение руководства компании сам факт существования государства и антимонопольных законов?

Так то понятно, что из-за экономика масштаба в естественных монополиях себестоимость товара меньше, чем в компаниях меньшего масштаба.

В отсутствии государства, такая крупная компания будет иметь крупные силовые структуры для защиты себя. Монополия будет использовать свои силовые структуры для дальнейшего своего расширения через насилие.

Для отдельного человека рациональным решением будет присоединиться к такой монополии. На чаше весов риск потерять жизнь, но сохранить свободу против риска потерять свободу, но получить защиту и блага. Поэтому мнение о появлении единомышленников чересчур оптимистичны.

Information

Rating
1,005-th
Registered
Activity

Specialization

Embedded Software Engineer
Middle
Linux
C
C++
Embedded Linux
Embedded system
Real-time operating system
Python
English
Assembler
Programming microcontrollers