SystemC против HDL


9

В настоящее время я участвую в университетском проекте по внедрению процессора существующего набора инструкций. Идея состоит в том, что к концу проекта я смогу синтезировать этот проект и запустить его в FPGA. Пока все идет хорошо, я начал реализовывать дизайн в Verilog HDL несколько дней назад и получил очень простую рабочую версию. Теперь проблема: я связался с некоторыми людьми, которые годами занимались разработкой оборудования, и они предложили, прежде чем я продолжу, я должен перейти к использованию SystemC для реализации. Я очень растерялся, потому что это была моя мысль:

Verilog -> Поскольку язык HDL специально предназначен для аппаратного дизайна. Имеет некоторые уровни абстракции, такие как структурный и поведенческий Verilog, но это очень аккуратная форма задания RTL проекта. Вы можете определенно синтезировать его, используя набор инструментов, в зависимости от выбранной вами ПЛИС (в моем случае я использую платы Xilinx Vivado 2014 и Zynq). С другой стороны, обычный Verilog не предлагает достаточно абстракций для проверки, и поэтому у вас есть такие вещи, как System Verilog.

SystemC -> Это библиотека классов C ++, которая эффективно вводит понятие времени в C ++ и позволяет вам выполнять моделирование на основе событий. Очевидно, что он намного более высокоуровневый, чем любой HDL, и здесь все может быть реализовано намного быстрее. Это делает его очень хорошим инструментом для таких вещей, как проверка и даже внедрение симуляторов, так что люди могут начать разрабатывать драйверы и вещи для микросхемы еще до того, как она будет изготовлена. Очевидно, есть также подмножество SystemC, которое можно синтезировать (я думаю, что даже Xilinx Vivado может сделать это), и в некоторых случаях это позволяет использовать SystemC для проектирования очень больших систем, где удобен более высокий уровень абстракции.

Итак, мои вопросы:

  1. Правильны ли эти представления о том, какие systemC и Verilog (или языки HDL, если хотите)?
  2. Когда я должен использовать SystemC и когда Verilog?
  3. Мне говорят, что даже в Verilog использование большого количества поведенческого кода может быть немного проблематичным в критических разделах реализации, потому что вы в основном даете инструменту синтеза гораздо меньше ограничений на то, как его синтезировать. С более высоким уровнем абстракции это не будет проблемой? то есть, если я использую systemC, у меня может получиться очень медленный, энергоемкий, большой дизайн ...
  4. Человек, предложивший SystemC, упомянул, что, похоже, я занимаюсь «архитектурным исследованием», и поэтому он предпочел бы Verilog. Что именно это означает? У меня сложилось впечатление, что архитектура обычно относится к набору команд, а микроархитектура - к реализации набора инструкций (поэтому микроархитектура - это реальный RTL, который выполняет инструкции). Значит, архитектурное исследование означает, что он думает, что я внедряю процессор, чтобы увидеть, насколько выполним набор команд?
  5. Он сказал, что аргумент в пользу использования SystemC заключается в том, что это намного проще, потому что это более высокий уровень абстракции, чем HDL. Он также утверждал, что было легче определить правильные сроки проектирования. Насколько это правда?

Помощь будет принята с благодарностью, я немного запутался и затрудняюсь получить четкую информацию об этом в Интернете. Спасибо!


Привет, могу я спросить, какой это был академический курс?
Отражение

Привет, я изучал информатику. Строго говоря, это не является частью стандартного курса, я решил с нуля построить процессор на основе транспьютера для своей магистерской работы.
Andrés AG

Ответы:


3

Ваш друг либо неправильно понял, что вы делаете, либо считал SystemC предварительным шагом. В любом случае, HDL - единственный выбор, и я бы посоветовал вам использовать синтезируемый SystemVerilog, который достаточно силен, чтобы выполнять большую часть исследования, по сути то же самое, что Verilog для всего остального.

  1. Частично. Вы различали Verilog как HDL, SystemVerilog как язык верификации и говорили, что SystemC имеет более высокую абстракцию, но также и синтезируемое подмножество. Здесь есть две ошибки. Во-первых, SystemVerilog - это также HDL с полностью синтезируемым подмножеством, которое может быть возобновлено как Verilog с очевидными исправлениями (например, один logicтип для проводов) и многими синтезируемыми механизмами абстракции (например, Интерфейсы). Он поддерживается многими инструментами, включая Vivado. SystemC, с другой стороны, неСинтезируемый напрямую (даже не любое подмножество), он предназначен для моделирования более высокого уровня и архитектурного исследования, хотя некоторые его подмножества можно подавать в инструменте синтеза высокого уровня, таком как Vivado HLS, который затем переводит его в синтезируемый (хотя и нечитаемый человеком) Verilog ,

  2. Verilog и синтезируемое подмножество SystemVerilog - это языки для проектирования HW, обычно используемые для описания HW на уровне передачи регистров, то есть в виде набора блоков, таких как регистры, комбинационные функции, машины конечного состояния и т. Д. Verilog-2001 также может соответствующим образом описывать hw в качестве списка соединений уровня шлюза, в то время как SV также может использоваться для гораздо более высокого уровня абстракции, следовательно, его возможностей проверки. С другой стороны, SystemC подходит для моделирования высокого уровня систем, в которых целые блоки описываются только поведенческим способом высокого уровня. Он также очень эффективен для архитектурного исследования, то есть для изменения параметров и характеристик архитектуры и оценки изменений в общей производительности.

  3. Это верно только в том случае, если вы пытаетесь описать вещи не в стиле RTL при разработке модели RTL. Например, правильным способом описания блока, выполняющего повторяющееся многократное накопление, является конечный автомат, приводящий в действие комбинационный множитель, комбинационный сумматор и регистр - если под поведенческим поведением вы подразумевали описание этого как в программном обеспечении (цикл for), то да, поведенческий код не будет работать. Если вы хотите описать каждый из описанных мной блоков (mult, add, reg и FSM) черезalwaysблоков, это прекрасно и будет работать в сетевом списке, реализуя в точности то, что вы указали, с отличными результатами (часто лучше, чем чрезвычайно структурный подход, который ограничивает способность инструмента синтеза оптимизировать логику). На самом деле, синтез высокого уровня SystemC часто приводит к хорошим результатам, только если вы придерживаетесь очень похожих шаблонов, эффективно уничтожая любые преимущества в использовании языка более высокого уровня. В любом случае, SystemC - плохой выбор для реализации процессора.

  4. Архитектура - это очень широкий термин, который не ограничивается ISA, на самом деле, в современных процессорах дизайн ISA является лишь небольшой частью головоломки. В контексте проектирования системы архитектура обычно означает набор вариантов выбора на уровне системы (например, может ли DMA управляться любым ядром или только одним специальным? Кэш-память L1 полностью или установлена ​​ассоциативно? У вас есть кэш-память? или вообще управлять памятью в SW?), включая ISA, а также микроархитектуру процессора. Я думаю, что имел в виду ваш друг, вы исследуете различные конфигурации вашего процессора, что на самом деле является архитектурным исследованием (или микро-архитектурным исследованием, если вы предпочитаете). Однако он мог упустить тот факт, что вы собираетесь реализовать это на FPGA, что делает опцию SystemC бессмысленной.

  5. Это не верно. Если вы разрабатываете очень простой ускоритель, такой как потоковый фильтр, это может быть правдой, потому что инструменты HLS позволяют легко вставлять этапы конвейера, в то время как вам придется делать это вручную в RTL (или использовать преобразование пути к данным, но я думаю, что это не так возможно в Вивадо). Во всех других случаях, и особенно в очень сложных и структурированных объектах, таких как процессор, HLS приведет к раздутому, ненадежному и часто просто неверному Verilog, который затем должен быть синтезирован - инструменты просто не предназначены для этой работы.


Спасибо вам за помощь. Я уже начал проект с использованием Verilog, но я все же многому научился из вашего ответа!
Andrés AG

3

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

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

Если вы все равно решите его использовать, то сначала поговорите со своим лектором. Когда я выполнял аналогичную задачу в университете, нам было явно сказано не использовать SystemC по той причине, о которой я говорил выше.


0

Давайте будем честными, это все программирование. То, что вы можете делать в SystemC, вы также можете программировать на VHDL или Verilog. Это просто вопрос поддержки инструмента. Это не берет SystemC или SystemVerilog.

Если поставщики представляют собой очевидное решение для преобразования разработчиков RTL в системное программирование, им просто необходимо обеспечить поддержку соответствующего языка для проектирования ПЛИС. Согласно опросу Mentor 2012 Wilson, язык для FPGA - VHDL. См. Http://blogs.mentor.com/verificationhorizons/blog/2013/08/05/part-8-the-2012-wilson-research-group-functional-verification-study/


0

SystemC используется для сложных конструкций. Например, указать что-то на архитектурном уровне. Преимущество в том, что меньше строк кода, чем в проектах Verilog, более быстрое время моделирования, точные циклические модели. Не верьте человеку, который говорит, что SystemC "не" синтезируем. Конечно, это. Чтобы дать вам представление, в Verilog у нас есть уровень абстракции, вы можете моделировать с переключателем уровня / уровня поведения. Выбор сделан исходя из сложности дизайна.

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

Обычно для более крупных проектов модели SystemC и испытательный стенд разрабатываются разработчиком архитектуры. Эти модели затем передаются конструктору электроники для преобразования их в RTL с использованием Verilog / VHDL.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.